DEV Community

Cover image for I Built My Own Open Source Gym Tracker Because Every Other App Was Lying to Me
Sarthak Goyal
Sarthak Goyal

Posted on

I Built My Own Open Source Gym Tracker Because Every Other App Was Lying to Me

I Built My Own Open Source Gym Tracker Because Every Other App Was Lying to Me

You know the feeling.

You finish a solid session. You hit a new personal best on Romanian deadlifts. You ran 20% more volume than last week. You felt the progressive overload.

Then you open your gym app to log it… and it just stores the numbers somewhere, behind three paywalls and a subscription prompt, never to be seen again.

That's not tracking. That's just data hoarding with a logo.

So I did what any developer-lifter with too much free time and too many opinions would do: I built my own.


What is ASAP?

ASAP (As Strong As Possible) is a fully open source, self-hostable workout tracking web app built for people who train with intent.

Not for casual step-counters. For people who care about:

  • Progressive overload — are you actually getting stronger over time?
  • Volume — how much total work are you putting in per muscle group?
  • Consistency — are you actually showing up?
  • PRs that matter — not just "you walked 500 steps more today 🎉"

GitHub: https://github.com/asap-open/ASAP
Docs: https://asap-open.github.io/asap-docs

ASAP Docs

The Problem with Existing Apps

Most fitness apps fall into one of two traps:

Trap 1: The Walled Garden
Your data lives on their servers. You can't export it. You can't query it. If they shut down or paywall the feature you actually use — you lose everything.

Trap 2: The Feature Graveyard
They show you charts... of what, exactly? Steps? Calories burned based on a formula from 1990? The stuff serious lifters care about — weekly volume per muscle, estimated 1RM trends, hard set tracking — either doesn't exist or costs $14.99/month.

I wanted something that recorded exactly what I'd want to see after a real session. So I built it.


👉 Check out the LinkedIn post here


What ASAP Actually Does

Log Sessions in Real Time

During your workout, log sets, reps, weight, and flag hard sets as you go. No friction, no required templates — just open it and start tracking.

See the Work After the Session

This is the part I actually care about. After logging, ASAP shows you:

  • Volume trends over time (weekly, monthly)
  • Muscle group breakdown — which muscles you hit and how hard
  • Personal bests — real PRs based on your actual training data
  • Progress charts so you can see the overload happening

ASAP Session view
ASAP Home View

Build Routines Your Way

Create routines from scratch or modify them however you want. No forced templates, no "recommended splits" from an algorithm that doesn't know you.

873 Exercises Out of the Box

Strength, cardio, mobility — all categorized with proper muscle group tagging. Plus you can add your own custom exercises.

Mobile + Desktop

Works great on both. I train with my phone, I review progress on my laptop. ASAP handles both without compromise.

You Own Your Data

Self-host it with a single command:

docker compose up
Enter fullscreen mode Exit fullscreen mode

That's it. Postgres database, Node.js API, React frontend — all running in Docker. Your data never touches a third-party server unless you want it to.


The Tech Stack

Here's what's under the hood:

Layer Tech
Frontend React 19, TypeScript, Vite
Backend Node.js, Express, TypeScript
ORM Prisma
Database PostgreSQL
Auth JWT
Deployment Docker + Docker Compose
Docs VitePress

A few things I'm particularly happy with:

Prisma made the data modeling genuinely enjoyable. The schema is clean, migrations are versioned, and the generated types mean the frontend and backend speak the same language without any extra glue.

React 19 with SWR for data fetching gives the UI a snappy, optimistic feel even on slower connections. The dashboard feels fast because it mostly is.

The Docker setup was a priority from day one. There are two compose configs included — one that brings up everything including Postgres (compose.with-db.yaml), and one for people who want to point it at an external database (compose.external-db.yaml). Self-hosting should be accessible, not a DevOps PhD thesis.


What the Data Model Looks Like

The core of ASAP is built around a few key entities:

  • Users — accounts with profiles (weight tracking, goals, etc.)
  • Exercises — the 873-exercise library, each tagged with muscle groups, equipment, and category
  • Routines — user-defined workout plans composed of exercise slots
  • Sessions — individual workout instances tied to either a routine or ad-hoc
  • Sets — the actual logged data: reps, weight, RPE, hard set flag
  • Progress — derived from sets over time: volume, PRs, trends

The schema is clean enough that if you want to write your own queries against your self-hosted database — you can. It's just Postgres.


Why Open Source?

A few reasons:

1. I wanted to use it myself without worrying about the app dying.
If I build it, I control it. If I open source it, the community can keep it alive even if I get hit by a bus.

2. Fitness data is personal.
Your training history is a record of years of work. That shouldn't live on someone else's server behind a subscription. You should own it.

3. Developers lift too.
I figured there are enough developer-lifters out there who'd either want to use this directly, contribute to it, or fork it and make it their own thing. All of that is welcome.

4. Building in public keeps you honest.
Shipping something people can actually read, run, and critique is a better forcing function for code quality than any linter.


The Docs

One thing I put real effort into: the documentation.

Too many open source projects are impossible to run locally because the README is three lines and a "good luck." ASAP has a full docs site covering:

  • Installation and self-hosting
  • API reference (auth, exercises, sessions, progress, weights, profile)
  • Feature guides
  • Contributing guide

Docs: https://asap-open.github.io/asap-docs


What's Next

There's a real backlog here. Some things I'm thinking about:

  • Offline support / PWA — you shouldn't need a connection mid-set
  • Plate calculator — tell it your bar weight and available plates, it tells you the setup
  • AI-assisted volume recommendations — not vibes, actual volume landmarks based on your history
  • Improved muscle heatmap — visual body map showing weekly volume distribution
  • Webhooks / export — CSV, JSON, whatever format you want

If any of these sounds interesting to you — or if you have something completely different you'd want to see — open an issue or drop a comment here.


Try It / Contribute

If you're a developer, a lifter, or both — I'd genuinely love for you to check it out.

Run it locally in 60 seconds:

git clone https://github.com/asap-open/ASAP
cd asap/deploy
docker compose -f compose.with-db.yaml up
Enter fullscreen mode Exit fullscreen mode

Star it, fork it, open issues, submit PRs. Every kind of contribution is welcome — features, bug fixes, better docs, design feedback, all of it.

GitHub: https://github.com/asap-open/ASAP
Docs: https://asap-open.github.io/asap-docs


Built with React 19, Node.js, Prisma, PostgreSQL, and Docker by someone who got tired of their PR data disappearing into the void.


Top comments (0)