{"repo":"codee-sh/payload-training-app","free":true,"listed":false,"github":"https://github.com/codee-sh/payload-training-app","clone":"git clone https://github.com/codee-sh/payload-training-app.git","description":"Open-source coaching app built with Payload CMS and Next.js. Coaches manage training plans in the admin; clients log workouts on mobile.","language":"TypeScript","stars":11,"topics":["nextjs","payload","payloadcms","typescript","opensource","postgres","postgresql","fitness-app","training-plan","workout-tracker"],"license":"MIT","category":"databases-storage","readme_excerpt":"Training App A coach-facing admin and client-facing training tracker built with Payload CMS and Next.js. Coaches build workout plans in the admin panel; clients log their sets through a mobile-friendly web interface. What it does Coach (admin panel) — creates plans, assigns them to clients, defines workout structure down to individual exercise rows with target sets and tracking parameters. Client (web app) — logs in, sees their active plan, works through workouts session by session, and logs each set (reps, weight, RIR, time, etc.). Navigation - Data model & flow - Tech stack - Getting started - Project structure - Key scripts - Development - Screenshots Data model & flow The data splits into two layers. The plan layer is the template a coach authors (read-only for clients). The log layer is what a client records while training. The two never mix: logging never writes to the plan, so the same template can be reused and audited. sections[] is not a collection — it's an array of named headings ( title / subtitle ) stored on the Workout . A WorkoutGroup attaches to one section via its sectionRowId . So the visible nesting in the app is Workout → Section → Group → Exercise row , while in the database a group points back to its section by id. How a log row points back to the plan A WorkoutLog references the Workout it belongs to and the Client who owns it. Each SetLog / ExerciseLog references its session (the WorkoutLog ) and the exerciseRow ( WorkoutExerciseRow ) it logs against ","default_branch":null,"files":null,"tree":[],"storefront":"/r/codee-sh","claimed":false,"request_supported":{"post":"https://gitbuyer.com/r/codee-sh/payload-training-app/request-supported","requests":0},"note":"indexed from public GitHub; nothing is for sale on this page. Clone it from GitHub. Paid listings live at /search."}