Online coaching platform · Jun 2026 — now
EDV
The problem — Online fitness coaches ran their business across WhatsApp, spreadsheets and PDF plans — plans got lost in chats, training went untracked, and access was checked by hand every month.
- lines of code
- ~54k
- tables
- 47
- Drizzle migrations
- 24
- commits
- 200
What I built
- Two apps — coach back-office and client PWA — sharing one PostgreSQL schema in a single TypeScript monorepo.
- Guided workout player: per-set logging, exercise swap with coach cues, HLS video from Bunny Stream via a proxied endpoint.
- HMAC-verified WooCommerce webhooks plus a nightly reconciliation cron grant and revoke access automatically.
- 3 scheduled jobs for web push and email — reminders, check-in prompts, expiry warnings — on an installable PWA.
- Supabase Auth and Storage, both apps Dockerized, CI/CD auto-deploy to a self-hosted VPS: one flat monthly cost.
Stack
- TypeScript
- Next.js
- React
- Tailwind
- PostgreSQL
- Drizzle
- Supabase
- Web Push
- Bunny Stream
- Docker
- CI/CD