What's new
Changelog
Every update, improvement, and new feature shipped to the GymOS platform — in one place.
Feb 2026
v2.3
GymOS SaaS Marketing Site
Launched the public-facing GymOS platform website — a fully designed SaaS marketing page replacing the gym-specific homepage.
- NewNew SaaS landing page at gymOS.com with dark athletic design system (zinc-950 + amber-400)
- NewSaasNav — sticky top nav with mobile-responsive hamburger menu
- NewSaasHero — animated headline, public beta badge, dashboard UI mockup
- NewSaasFeatures — 12-feature icon grid covering all platform modules
- NewSaasHighlight — 4 spotlight rows: QR Attendance, Payments & Invoicing, Multi-Branch Analytics, Custom Domain
- NewSaasBeforeAfter — side-by-side comparison of life before and after GymOS
- NewSaasPricing — 3-tier pricing table (Starter $29/mo · Pro $79/mo · Enterprise Custom)
- NewSaasTestimonials — 3 gym owner quotes with avatar and gym name
- NewSaasTrust — 6 tech/trust badges (Next.js · PostgreSQL · Encrypted · 99.9% Uptime · GDPR-Ready · Cloudflare)
- NewSaasCTA — full-width call-to-action section with 14-day free trial messaging
- NewSaasFooter — logo, Product/Company/Legal link columns, copyright
- NewPer-gym landing at /gym/kapan-elite preserved and unchanged
Jan 2026
v2.2
Platform Invoicing & Email Reminders
Automated invoice generation for gym subscriptions and email reminders via SMTP, with a full invoice management panel for super admins.
- NewGymPlatformInvoice model — stores per-gym invoice records with status (paid/unpaid/overdue)
- NewNodemailer SMTP integration (lib/email.ts) — transactional email infrastructure
- NewEmail templates — invoice generated, payment reminder, overdue notice
- NewCron job: /api/cron/platform-invoice-reminders — auto-sends reminders for unpaid invoices
- NewPlatformInvoicesTable — super admin panel listing all gym invoices with status filters
- NewGenerateInvoiceButton — one-click invoice generation for any active gym subscription
- ImprovedSuper admin dashboard now shows outstanding invoice count and overdue alerts
Dec 2025
v2.1
Platform Subscription System
Full SaaS billing layer for gym accounts — auto-suspend on payment failure, JWT-level gym status, and a super admin subscription control panel.
- NewGymBillingRecord model — tracks subscription plan, billing cycle, and payment history per gym
- NewAuto-suspend cron job — flags gyms with overdue bills and suspends access automatically
- NewSuspension middleware — intercepts requests from suspended gyms and redirects to /suspended
- NewgymIsActive flag in JWT claims — checked on every request without an extra DB call
- NewSuper admin subscription panel — view, activate, suspend, and manage gym billing status
- New/suspended page — informative suspension notice with contact and payment resolution steps
- ImprovedJWT now carries subscription tier and active status, reducing auth middleware DB queries
Nov 2025
v2.0
Per-Gym Landing Pages & Custom Domains
Every gym on the platform gets a fully branded public landing page accessible via slug or their own custom domain.
- Newapp/gym/[slug]/page.tsx — dynamic per-gym public landing via slug routing
- Newapp/site/[host]/page.tsx — custom domain entry point; middleware rewrites non-app-domain hosts here
- NewGymLandingPage server component — shared renderer for both slug and domain routes
- NewLanding content stored in Gym.settings JSON (settings.landing.*) — fully editable from dashboard
- NewLandingNav, LandingHero, LandingPlans, LandingFacilities, LandingContact, LandingFooter — all fully dynamic with hardcoded fallbacks
- NewLandingWhatsApp floating button — click-to-WhatsApp with gym phone number
- NewGym.customDomain field — unique nullable, maps a domain to a gym record
- NewDomainSettingsForm — settings UI tab to save/update custom domain
- NewLandingContentForm — accordion-based editor for hero text, plans, facilities, testimonials
- NewupdateLandingContentAction and updateCustomDomainAction — separate server actions for content vs domain
- NewMiddleware: NEXT_PUBLIC_APP_DOMAIN check redirects custom domain traffic to /site/[host]
- ImprovedupdateLandingSettings does deep merge (not replace) to preserve unedited sections
- NewVideo gallery section with Cloudflare R2 storage for gym promotional videos
Oct 2025
v1.9
User Management & Permissions Matrix
Fine-grained role-based access control with a full UI for managing staff permissions per branch and module.
- NewPermissions matrix stored in DB — per-user, per-module permission overrides
- New6-level RBAC hierarchy: SUPER_ADMIN > GYM_OWNER > BRANCH_MANAGER > TRAINER > STAFF > MEMBER
- NewwithPermission() HOF — wraps all Server Actions with permission enforcement
- NewPermissions UI — interactive matrix grid letting owners assign/revoke module access per staff
- NewPermission claims cached in JWT — no DB hit on each request for standard RBAC checks
- ImprovedStaff invite flow now includes role selection and module access preset
- ImprovedBranch managers can only manage their assigned branch — enforced at query level
Sep 2025
v1.8
Reports & Notifications
Data-rich reporting suite and a multi-channel notification system for member events and operational alerts.
- NewRevenue reports — monthly/yearly breakdown with charts, membership plan split
- NewAttendance trends — daily/weekly heatmaps and peak-hour analysis
- NewMember retention report — active vs lapsed, churn rate, renewal conversion
- NewExpense vs revenue P&L view — per-branch and consolidated
- NewExport to CSV — all reports exportable for external analysis
- NewNotification system — in-app alerts for membership expiry, payment due, and class changes
- NewNotification preferences — gym owners can configure which events trigger alerts
- ImprovedDashboard stats now show 30/60/90-day trend comparisons
Aug 2025
v1.7
Expenses & Inventory
Full operational expense tracking and equipment inventory management with stock-level monitoring.
- NewExpense module — log and categorize operational expenses (utilities, rent, salaries, supplies)
- NewExpense categories — custom categories per gym with budget tracking
- NewMonthly expense summary — chart view of spending by category
- NewInventory module — track gym equipment, supplements, and merchandise stock
- NewStock level alerts — low-stock warning when item quantity falls below threshold
- NewInventory audit log — full history of stock additions, removals, and adjustments
- ImprovedRevenue vs expense P&L widget added to gym owner dashboard
Jul 2025
v1.6
Trainer Management & Class Scheduling
Complete trainer profiles with specializations and a full class scheduling system with member booking.
- NewTrainer profiles — photo, bio, specializations, certifications, assigned branches
- NewTrainer assignment — link trainers to specific members for personal training
- NewClass schedule — create recurring or one-off group classes with capacity limits
- NewClass enrollment — members can book classes; owner can manage waitlists
- NewClass attendance tracking — mark present/absent per class session
- NewTrainer session logs — track personal training sessions with notes
- ImprovedMember profiles now show assigned trainer and enrolled classes
- ImprovedCalendar view for class schedule with weekly/monthly toggle
Jun 2025
v1.5
Multi-Branch Support & Settings
Full multi-location gym management with per-branch isolation and a comprehensive settings panel.
- NewBranch model — each gym can have multiple branches with independent staff, members, and data
- NewBranch selector in dashboard — switch context between branches instantly
- NewRow-level tenant isolation — all queries scoped to gymId + branchId to prevent data bleed
- NewSuper admin panel — platform-wide view of all gyms, owners, billing, and system health
- NewGym settings panel — general info, branding, contact, working hours, tax configuration
- NewMy Profile + Change Password tabs — available to all authenticated roles
- ImprovedMiddleware now validates branch access on every dashboard request
- ImprovedSuper admin /settings shows only profile/password tabs (no gym tabs since gymId=null)
May 2025
v1.4
Dashboard Widgets & Analytics
Live dashboard with real-time stats, revenue charts, and automated membership renewal cron jobs.
- NewDashboard widget grid — total members, today's check-ins, revenue MTD, active plans
- NewRevenue chart — monthly bar chart with plan-type breakdown
- NewRecent activity feed — latest check-ins, new members, and payments
- NewExpiring memberships widget — members expiring in the next 7/14/30 days
- NewServer-Sent Events (SSE) endpoint — live dashboard stat updates without polling
- NewCron job: /api/cron/membership-renewal — auto-flags expired memberships daily
- ImprovedPayment records now linked to membership subscriptions for accurate revenue attribution
Apr 2025
v1.3
Membership Plans, Subscriptions & Invoicing
Flexible membership plan builder, subscription lifecycle management, payment recording, and PDF invoice generation.
- NewMembershipPlan model — configurable name, price, duration, features, and renewal rules
- NewMember subscriptions — assign plans to members with start/end dates and status tracking
- NewPayment recording — cash, card, and bank transfer with reference numbers
- NewInvoice generation — auto-create PDF invoices on payment with gym branding
- NewPayment history per member — full ledger with running balance
- NewOverdue tracking — automatic status change to OVERDUE after plan expiry
- ImprovedMember profile now shows active plan, days remaining, and payment status badge
Mar 2025
v1.2
QR Attendance System
Contactless check-in via QR codes with a live attendance feed, manual override, and full history — all updating in real time.
- NewQR code generation per member — unique code stored in lib/crypto.ts, regeneratable on demand
- NewQR scanner UI — @zxing/browser BrowserQRCodeReader with start/stop controls
- NewInstant check-in — scan validates member, checks active subscription, logs attendance record
- NewManual check-in — staff can search and check in members without QR
- NewLive attendance feed — SSE stream pushes new check-ins to dashboard in real time
- NewAttendance history page — filterable by member, date range, and branch
- NewAttendance reports — daily/weekly/monthly totals with peak-hour heatmap
- ImprovedCheck-in blocked with clear error if member has no active membership
Feb 2025
v1.1
Member Management
Full member lifecycle management — onboarding, profiles, photos, search, and soft-delete with audit trail.
- NewMember creation form — name, phone, email, emergency contact, date of birth, gender
- NewMember profile page — full details, membership history, payment records, attendance log
- NewProfile photo upload — stored to Cloudflare R2 (10 GB free tier)
- NewMember search — real-time search by name, phone, and email
- NewMember list with filters — status (active/expired/suspended), plan, and branch
- NewSoft delete — members are archived (deletedAt) not permanently removed
- NewAudit trail — all member record changes logged with actor and timestamp
- NewMember model uses gymId direct field for efficient tenant-scoped queries
Jan 2025
v1.0
Foundation — Platform Core
Initial release of the GymOS platform. Full-stack foundation with authentication, multi-tenant architecture, and role-based access control.
- NewNext.js 14 App Router — fullstack architecture with Server Components, Server Actions, and Route Handlers
- NewPrisma ORM + PostgreSQL — UUID primary keys, soft deletes (deletedAt), full audit trail on all models
- NewNextAuth JWT strategy — session-based auth with encrypted JWT claims
- NewMulti-tenant architecture — single database, row-level isolation via gymId/branchId on all tables
- NewRBAC middleware — permission matrix cached in JWT, validated on every request
- NewDashboard shell — responsive sidebar navigation with role-aware menu items
- NewRoute groups — (auth) for login/register, (dashboard) for protected routes
- NewAPI layer — Route Handlers under /api/v1/ for external integrations, Server Actions for internal mutations
- NewTailwind CSS + ShadCN UI — dark/light mode, design tokens, accessible component library
- NewZod + React Hook Form — type-safe form validation with server-side schema enforcement
- NewDocker setup — containerized dev and production environment
- NewgetTenantContext() for Server Actions, getTenantFromHeaders() for Route Handlers