← All work

Coach

A progressive web app that acts as an AI personal trainer — programming, tracking and adapting workouts session by session.

Status
prototype
Period
TODO (James) — confirm start date
Role
Sole developer
Placeholder hero image for Coach — TODO: replace with a real screenshot of a workout session or the weekly review

What it does

Coach programmes and tracks strength training sessions, logs nutrition against a plan, and runs a weekly review reconciling what was actually done against what was planned. It installs as a PWA — usable offline for the core app shell — rather than requiring a native app store build.

How it works

The data model runs on Prisma over SQLite for local development, with authentication and validation handled by Auth.js and Zod respectively. The second build (“v2”) was a deliberate re-assembly of the app around a “journey-first spine” — the actual sequence a user moves through in a week (plan a session, do it, log it, review the week) — rather than the original data-model-first structure, with decisions logged per build slice as they were made.

The interesting problem

TODO (James) — the section a technical reviewer reads first. What made the original (v1) structure worth rebuilding, and what did “journey-first” actually change about how the app is put together?

Stack and why

SQLite was chosen for local-first development speed; Zod validation and a documented per-slice decision log (rather than a single upfront spec) were used to keep a genuinely iterative rebuild honest about what changed and why, rather than losing the reasoning once the old version was replaced.

What I would do differently

TODO (James) — short, in your own words.

Stack

Next.js (App Router) / TypeScript
Application and UI
Prisma + SQLite
Local data layer for development
Auth.js (NextAuth)
Credentials-based authentication
Zod
Input and data validation
Tailwind CSS
Styling
PWA (manifest + service worker)
Installable app shell with offline app-shell caching
Vitest + Testing Library
Test suite
  • Repository — private repository