Mobile-first workout tracking for a local internal deployment.
- Supabase stores programs and workout logs.
- OpenRouter is only used when creating or modifying a workout program.
- Session logging and progression tracking do not call AI.
- No auth layer is included.
- Visual direction is loud, flat, and 90s punk/hardcore.
- React + Vite + TypeScript
- Express server for the OpenRouter boundary
- Supabase JS client
- Copy
.env.exampleto.env. - Fill in
VITE_SUPABASE_URL,VITE_SUPABASE_ANON_KEY, andOPENROUTER_API_KEY. - Apply supabase/schema.sql in your Supabase SQL editor.
- Install dependencies with
npm install. - Run
npm run dev.
This schema disables RLS on the app tables because the product intentionally has no auth layer. That is only appropriate for the internal/local deployment model you described.
src/lib/programs.tstalks to Supabase for program and log CRUD.server/index.tshandles the only AI endpoint:/api/programs/generate.server/index.tsalso exposes setup helpers at/api/setup/statusand/api/setup/bootstrap.src/components/ProgramComposer.tsxis the only UI surface allowed to trigger AI.src/components/ProgramView.tsxlogs workout results directly with no model involvement.