GymVision
Changelog

Every shipped change.

Updated weekly. No marketing fluff — just what we shipped, when, and why. Built in public because operators deserve to see the velocity before they sign.

Admin · Portal

Sentence-case overhaul + gym-driven accent system

Stripped the platform-amber accent that was bleeding onto every surface, replaced with a 4-tier cascade derived from each gym's own accent_color. Sentence case headlines everywhere. Avatar dropdown reduced to profile + account + settings + sign out. Codemod touched 204 files (1,293 uppercase removed, 1,037 trackings loosened).

  • ·Gym accent flows through admin, desk, coach, and portal — not just member surfaces
  • ·CSS color-mix() derives accent / hot / deep / muted from a single gym setting
  • ·Onboarding checklist collapsed from a 50%-viewport panel to a 40px banner with click-to-expand
  • ·Public marketing site (this one) intentionally stays in its bold-allcaps register
Platform

Pilot-#2 unblocker — content.ts retired

Every Gas-House-specific string used to be reachable via a fallback in content.ts. Today: deleted. Site-wide content now reads from gym_settings DB exclusively. New tenants land on a generic blank-gym shape, never Gas House defaults.

  • ·Site routes moved to a properly-named module (was misleadingly called `pushpress`)
  • ·getGymSettings fallback rewritten to safe blank-gym defaults
  • ·Ready to onboard pilot #2 with no codebase changes
Desk

/desk counter portal — 12 shipped items

Front-desk staff get a purpose-built counter portal (not a stripped-down admin). Multi-modal check-in, walk-in capture, photo-grid attendance, counter payments — all the verbs a front desk actually uses, none of the admin clutter.

  • ·Multi-modal check-in dispatcher (search · phone · QR · photo-grid tap)
  • ·3-step walk-in lead capture (under 30s for Step 1)
  • ·Counter payments: drop-in via Stripe, cash collection, saved-card retry
  • ·Tablet waiver hand-off with single-use signing tokens
  • ·Async escalation to owner (silent badge) + opt-in urgent SMS (Twilio)
Admin

Schedule + Comms + Billing arch rewrite

Three admin surfaces shipped in their final shape. Schedule gets a 7-day Calendar grid + List bulk-ops. Comms consolidates Inbound + Outbound + Templates into one tabbed surface. Billing pivots from analytics-first to operator-first.

  • ·/admin/schedule — Calendar week view + List bulk-cancel/bulk-uncancel
  • ·/admin/comms — Inbound default tab + Outbound + Templates
  • ·/admin/billing — Today queue (failed payments + refunds + manual) as the default tab; analytics moved to History
Build

Deploy loop hardened

Three real build failures in one day prompted three guardrails: pre-push hook runs pnpm build locally, @sentry/cli postinstall approval, Enhanced Build Machines (16GB / 8 vCPU). Net effect: the deploy loop is no longer the bottleneck.

  • ·Husky pre-push hook: 15s local build vs 5–15 min Vercel cycle
  • ·Vercel Enhanced Build Machines: permanent OOM ceiling fix
  • ·Sentry config migrated from deprecated `disableLogger` to `webpack.treeshake.removeDebugLogging`
Platform

Notification severity tiers

Three-tier severity model (critical / important / informational) per the admin brief. Bell badge counts only critical + important. Informational rows live in history but never drive a badge.

  • ·Migration 0072: notification_severity ENUM + indexed bell-badge query
  • ·Bell renders red bg for critical, accent for important, no badge for informational
  • ·Failed payment + coach no-show flagged critical; new lead + churn ≥75 flagged important
Platform

Multi-tenant RLS isolation (21 tables)

Tenant data isolation enforced at the database layer. RESTRICTIVE policies on every tenant-scoped table. JWT carries gym_id via Supabase Auth Hook for per-query authorization without round-trips.

  • ·21 tables wrapped in tenant_isolation RESTRICTIVE policies
  • ·custom_access_token_hook live — JWT-fast-path RLS
  • ·effective_gym_id() Postgres helper with hook-first / lookup-fallback semantics

Want changelog updates by email? Join the waitlist and you'll get every weekly digest until launch.

Join the waitlist