Built in the open.
Run and Lift are open source, under the AGPL. The code that records your training and talks to the coach is there to be read, questioned and improved.
- Stars
- 1
- Forks
- 0
- Open issues
- 3
- Last change
- 16 October 2026
All of it, in one repository. Both apps, what they share, and the backend.
apps/mgk_run- Run, the running tracker and training coach.
apps/mgk_lift- Lift, the strength log.
packages/mgk_ui- The design system both apps are built from.
packages/mgk_auth- The one account, shared by both.
packages/mgk_units- Distances stored in metric and shown in km or miles.
supabase/- The database, as migrations, with its tests; and the server functions: the coach, account deletion, subscriptions and the daily summary.
scripts/store- The tools that send each release to the stores.
web/- This website. It is not under the AGPL.
The same code as the stores. Every build sent to a store is tagged with its commit.
Flutter and Dart
Both apps and their shared packages, as one workspace.
Supabase
Postgres, with row-level security as the boundary between one person's data and another's; sign-in, storage, and server functions in Deno.
The coach, server-side
Every AI request goes from the app to a server function and on to the model's provider. No key is ever in the app, and a validator checks what the model says before you see it.
Codemagic
Builds, tests and sends every store build.
A build is tagged on the commit it came from, as run/build-29 or lift/build-45, so you can read exactly what you are running. Work happens on develop; main holds what went to review. This website is Next.js, on Vercel.
Read it, run it, change it, share it. And share your changes too.
AGPL-3.0
The apps and the backend are under the GNU AGPL v3. Run a changed version for other people, over the internet too, and you share your changes.
Through the stores
An added permission lets anyone ship a version through the app stores, as long as they publish its full source.
Licences of their own
This website is not open source. The exercise drawings are CC BY-SA 4.0, adapted from Everkinetic, and credited in the app. The Inter typeface is under the OFL.
An idea, a bug, a fix, a feature. Every change is read before it is merged.
- Open an issue for a bug or an idea. For anything large, open one before you start, so the work isn’t wasted.
- Fork the repository and branch from
develop. - Make the change, with its tests.
- Sign off each commit (
git commit -s): a Developer Certificate of Origin, no contributor agreement. - Open a pull request into
develop. It is read, then checked, then merged.
The rules that don’t bend
- No provider key in an app.
- Row-level security on every table, and a user on every row that belongs to one.
- Offline first: the apps work with no signal.
- Distances stored in metric.
- Health data treated as special-category data.
The apps and the whole backend, on your own machine. With Flutter, Docker and the Supabase CLI.
git clone https://github.com/MGKCodes/mgk-fitness.git
cd mgk-fitness
flutter pub get
supabase start
supabase db reset
cd apps/mgk_run
dart run build_runner build --delete-conflicting-outputs
flutter run --dart-define-from-file=config/app_config.jsonBefore the last line, copy config/app_config.example.json beside it and fill in your own Supabase project’s address and key; a local one from supabase start works. The README has every step, and the tests.
Security, privately
Found a way to see somebody else’s data? Tell us through the repository’s Security tab, not an issue, and test only on your own or a local copy. Reporters are credited if they want to be.
A code of conduct
The Contributor Covenant 2.1. Reports go to hello@mgkcodes.com, and are acted on.