Web companion dashboard for Project Phoenix — the community rescue project keeping Vitruvian Trainer workout machines alive after company bankruptcy. View workouts, build routines and training cycles, analyze biomechanics, and replay 50Hz session telemetry synced from the Kotlin Multiplatform mobile app.
- Real-time Dashboard — Workout stats, streak tracking, recovery score, goal progress rings
- Workout History — Searchable/filterable workout log synced from mobile app
- Session Detail — Deep dive into individual workouts with exercise breakdown
- Performance Analytics — Volume trends, PR tracking, muscle group distribution
- Biomechanics Analysis — Velocity zones, ROM trends, asymmetry detection
- Training Load Gauge — Acute:chronic workload ratio monitoring
- Muscle Heatmap — Visual muscle group coverage
- Force Curves — Concentric/eccentric power output visualization
- 50Hz Telemetry Playback — Rep-by-rep motion replay canvas
- Timeline Navigation — Scrub through workout timeline
- Fatigue Summary — Per-set fatigue analysis
- Quality Badges — Rep quality indicators
- Visual Routine Editor — Drag-and-drop exercise ordering
- Superset Support — Group exercises with rest period configuration
- AMRAP & PR-scaling — Advanced workout modifiers
- Community Sharing — Publish to routine library
- Multi-week Periodization — Build structured training blocks
- Day-by-Day Planning — Assign routines to specific days
- Cycle Activation — Single active cycle enforcement
- Routine Library — Browse and clone community routines
- Vote System — Upvote/downvote community content
- Leaderboards — Compete on volume, PRs, streaks
- Challenges — Time-limited competitions
- Strava — Bidirectional activity sync
- Fitbit — Wearable data import
- Garmin — Webhook-based activity import
- Hevy — Workout history migration
- Liftosaur — Program and log migration
| Tier | Monthly | Annual | Access |
|---|---|---|---|
| FREE | $0 | $0 | Landing, pricing |
| EMBER | $5 | $49/yr | Cloud sync, history, dashboard, goals |
| FLAME | $15 | $149/yr | Analytics, community, routines, cycles, integrations |
| INFERNO | $25 | $249/yr | Session replay, advanced biomechanics (coming soon) |
| Layer | Technology |
|---|---|
| Build | Vite 7 |
| Framework | React 19, TypeScript 5.7 |
| Styling | Tailwind CSS v4 |
| Components | shadcn/ui (50+ Radix primitives) |
| State | Zustand 5 (client), TanStack Query 5 (server) |
| Visualization | Recharts 3, @visx, ECharts 6 |
| Animation | Motion (formerly Framer Motion, reduced-motion) |
| Validation | Zod 4 |
| Backend | Supabase (PostgreSQL, Auth, Realtime, Storage) |
| Edge Functions | 22 Deno functions |
| Payments | Paddle (Merchant of Record) |
| Monitoring | Sentry (cookie-consent-gated) |
| Testing | Vitest 4, Playwright 1.58 |
| Linting | Biome 2.4 |
# Install dependencies
npm install
# Start dev server (localhost:5173)
npm run dev
# Production build
npm run build
# Run tests
npm test
# Type checking
npm run typecheck
# E2E tests
npm run test:e2e
# Regenerate Supabase types
npm run gen:typesThis repo includes WORKFLOW.md for OpenAI Symphony,
which can poll Linear and launch isolated Codex implementation runs for active
issues. Before running it, set LINEAR_API_KEY and fill in
tracker.project_slug in WORKFLOW.md. See
docs/runbooks/symphony.md for the full setup and
operating checklist.
Copy .env.example to .env.local:
VITE_SUPABASE_URL=https://your-project.supabase.co
VITE_SUPABASE_ANON_KEY=your-anon-key
VITE_PADDLE_CLIENT_TOKEN=your-paddle-token
VITE_PADDLE_ENVIRONMENT=sandbox
# ... Paddle price IDs for each tierBidirectional sync with Project Phoenix mobile app (Kotlin Multiplatform):
Mobile (SQLite) → POST mobile-sync-push → Supabase DB
↓
Broadcast sync_complete
↓
Portal ← useRealtimeSync hook ← Channel sync:{userId}
- Push: Workouts → Supabase (realtime broadcast triggers portal cache invalidation)
- Pull: Routines, cycles → Mobile SQLite
- Conflict Resolution: Domain-aware (mobile authoritative for BLE-captured data)
- Pagination: Cursor-based, 100 entities/page
Dark theme with ember color palette:
| Color | Hex | Usage |
|---|---|---|
| Background | #0D0D0D |
App background |
| Ember | #FF6B35 |
Primary accent |
| Flame Red | #DC2626 |
Alerts, emphasis |
| Gold | #F59E0B |
Achievements, highlights |
| Forge Green | #10B981 |
Success states |
Custom animations: flame-flicker, ember-rise, phoenix-glow
Build outputs to dist/. Deploy to any static host:
- Vercel
- Netlify
- Cloudflare Pages
- GitHub Pages
- Project Phoenix Mobile — Kotlin Multiplatform app (iOS/Android)
MIT
This project exists because of the Vitruvian Trainer community's refusal to let great hardware die.