Tejas VinayBengaluru

Work 01 AI product MVPs

Recomp 88

A strength-training tracker you can use the second you open it. Guest mode works with no account, and signing in later syncs everything to the cloud without losing a set.

Platform
Installable web app
Year
2026
Code
Public on GitHub Open the live app
Stack
  • Next.js
  • React
  • TypeScript
  • Zustand
  • NextAuth
  • MongoDB
  • Recharts
  • Vitest

01 The problem

Most gym apps ask for an account before you can log a single set, and then lose their way the moment the basement has no signal. A tracker has to work mid-workout, one-handed, between sets.

Recomp 88 starts in guest mode: everything is stored on the phone and the full app works without signing in. An account is there for backup and for using your training data elsewhere.

02 My role

Sole developer: product, UI, the sync design, the read API and its tests.

03 Architecture

A Next.js app installed as a PWA. A Zustand store holds the workout plan, sessions, body weight, notes and settings, and writes them to local storage, so the tracker never waits on the network. After sign-in (email and password, or Google), changes push to a sync route that merges them into one MongoDB record per account.

The tracker covers a seven-day split with planned and extra sets, warm-up, drop and failure sets, RPE, supersets and circuits, a rest timer that survives reloads, personal-record detection and a plate calculator. Progress shows estimated one-rep-max charts, tonnage trends, a muscle recovery heatmap and a 12-week consistency grid.

Recomp 88: local first, then sync, then a read API for other appsYOUR PHONEYOUR APPSTrackerPWA, works offlineLocal storageguest data, no account/api/syncmerges changes since lastsyncMongoDBone record per accountAtlas or any appyour own tokenRead API v1rcp_ token, read-only, 60/minRecomp 88: local first, then sync, then a read API for other appson sign-inTrackerPWA, works offlineLocal storageguest data, noaccount/api/syncmerges changessince last syncMongoDBone record peraccountAtlas or anyappyour own tokenRead API v1rcp_ token,read-only, 60/min
the path this case study is about outside the system

04 Two hard decisions

  1. A

    Guest data merges in, but never into the wrong account

    Signing in for the first time merges this phone's guest data into the new account. The server merges item by item: if the account changed since this phone last synced, the server's version wins a conflict; otherwise the phone's does.

    If the phone last synced with a different account, Recomp does not auto-merge. On a shared phone, one person's training history can't leak into someone else's account.

  2. B

    A read API you can hand to other apps safely

    Each user can create up to ten personal tokens for their own apps. A token is shown once, only its SHA-256 hash is stored, it can only read workouts, and it is limited to 60 requests a minute.

    Responses never include account IDs, email or notes, and a token can't create or revoke other tokens. That's how Atlas reads gym sessions without being able to change anything.

05 The result

accounts needed to start
0
tokens per user, read-only
10
API routes
8
test files
6

Live and public. Open it and you're in guest mode straight away; nothing leaves your phone until you sign in.

Atlas uses the read API to count gym sessions toward weekly commitments.

Recomp 88 in guest mode with an invented ten-week history: home with consistency grid, tracker, progress charts and the guest-mode profile

Screens show seeded demo data on local or emulated devices. No real users or records.

Sources: every claim on this page traces to the recomp-88 repo (README.md, docs/FEATURES.md, src/hooks/useCloudSync.ts, src/app/api/sync/route.ts, src/lib/apiTokens.ts, src/lib/publicApi.ts).

Next case studyAURA