Introduction
Why FitTrack, how the course is structured, and what you’ll have built by the end. Open →
Introduction
Why FitTrack, how the course is structured, and what you’ll have built by the end. Open →
Setup & Tooling
Install Python (uv), the Supabase CLI, Flutter, and Node, and lay out the project. Open →
Supabase Foundation
Provision Supabase, model the Postgres schema and migrations, and turn on Auth. Open →
FastAPI Foundation
Stand up the async FastAPI app, config, structure, and a connection to Supabase Postgres. Open →
Auth (Supabase JWT)
Verify the Supabase-issued JWT in FastAPI and build a get_current_user dependency. Open →
Domain Model
Model exercises, workouts, and sets with Pydantic, SQLAlchemy, and repositories. Open →
Exercises API
Build the exercise-catalog CRUD, shared and user-created. Open →
Workouts API
Log workout sessions and their sets, and read back history. Open →
Progress & Stats
Aggregate personal records, volume over time, and per-exercise trends. Open →
Flutter — Foundation
Set up the Flutter app with Riverpod, Supabase auth, and an API client. Open →
Flutter — Tracking
Build the mobile tracking UI: start a workout, log sets, view history. Open →
Svelte Web Companion
Ship a SvelteKit dashboard that reads the same API. Open →
Testing
Cover the backend with pytest and the Flutter app with widget tests. Open →
Deployment
Containerize the API, run on hosted Supabase, and ship both clients. Open →
Wrap-up
Review what you built, the trade-offs, and where to take FitTrack next. Open →
Python 3.14, FastAPI 0.141 (fastapi[standard], PyJWT 2.x with the [crypto] extra for PyJWKClient), Pydantic v2, SQLAlchemy 2.0 async + asyncpg, Supabase CLI 2.117 (Postgres 17, asymmetric ES256 signing keys verified via the project’s JWKS endpoint, with the legacy HS256 SUPABASE_JWT_SECRET as a fallback for older sessions), pytest 9.x + pytest-asyncio 1.x, Flutter 3.44 / Dart 3.12, Node 24 + SvelteKit.