Skip to content

Overview

FitTrack is a workout tracker. A user signs in, logs a workout as a series of sets — each set is an exercise plus reps and weight — and watches their progress build up over time: personal records, total volume per week, and how each exercise trends. It’s deliberately focused: an exercise catalog, workout logging, and progress. No social feed, no training programs, no nutrition — those live in where to go next.

The point of the project isn’t the fitness domain — it’s building one product for two clients on one shared backend. You write a single FastAPI service, back it with Supabase (managed Postgres and Auth), and consume it from both a Flutter mobile app (the primary, mobile-first experience) and a Svelte web companion (a lighter dashboard). The same API, two very different front ends.

  • Auth — sign up and sign in via Supabase Auth; every API call is authenticated with the Supabase-issued JWT.
  • Exercise catalog — a shared library of exercises, plus user-created ones.
  • Workout logging — start a session, add sets (exercise, reps, weight), finish it.
  • History — browse past workouts.
  • Progress & stats — personal records, weekly volume, per-exercise trends, computed server-side.
  • Two clients — a Flutter mobile app and a Svelte web companion, both on the same FastAPI backend.

Each build module adapts a Learn Hub course to one slice of FitTrack.

ModuleWhat you buildLearn Hub course it adapts
1 · Setup & ToolingThe Python toolchain (uv), the FastAPI project, and a Supabase projectPython
2 · Supabase FoundationThe Postgres schema, migrations, and Auth, on managed SupabaseSupabase
3 · FastAPI FoundationThe async FastAPI app, config, structure, and DB accessPython / Python for TS Devs
4 · Auth (Supabase JWT)Verifying the Supabase JWT and a get_current_user dependencySupabase / Python
5 · Domain ModelExercises, workouts, and sets as Pydantic + SQLAlchemy + repositoriesPython
6 · Exercises APIThe exercise-catalog CRUD, shared and user-createdPython / REST
7 · Workouts APILogging workout sessions and their sets, and reading historyPython
8 · Progress & StatsPersonal records, volume, and per-exercise aggregationsPython / SQL
9 · Flutter — FoundationThe Flutter app: Riverpod, Supabase auth, an API clientFlutter
10 · Flutter — TrackingThe mobile tracking UI: log sets, view historyFlutter
11 · Svelte Web CompanionA SvelteKit dashboard reading the same APISvelte
12 · Testingpytest for the backend, widget tests for FlutterPython
13 · DeploymentContainerize the API, hosted Supabase, ship both clientsDocker

You’re ready to move on when you can answer these in your own words:

  • Why does FitTrack put a FastAPI backend in front of Supabase instead of having the clients talk to Supabase directly?
  • What does each of the two clients — Flutter and Svelte — do, and what do they share?
  • Which three features make up FitTrack’s core, and which ideas were deliberately left out?

Next, the architecture shows how the pieces fit together.