Files
proof-of-work/workout-planner/docs/FILE_REFERENCE.md
T
2026-02-28 09:27:26 -06:00

8.5 KiB
Raw Blame History

Workout Planner — File & Folder Reference

Last updated: February 18, 2026

Project Root (workout-planner/)

File Purpose
package.json Dependencies: Next.js 14, React 18, Prisma, Tailwind, Zod, Lucide, bcryptjs
next.config.js Next.js configuration
tailwind.config.ts Tailwind setup with zinc color palette
tsconfig.json TypeScript config with @/ path alias
middleware.ts Route protection — redirects unauthenticated requests away from /main/*
postcss.config.js PostCSS for Tailwind
.env / .env.local Database URL and secrets (not committed)
.env.example Template for env vars
Dockerfile Container build for production
docker-compose.yml Docker orchestration with volume mount for DB
.gitignore Standard Next.js + Prisma ignores

app/ — Next.js App Router Pages & API

Root Layout & Entry

File Purpose
app/layout.tsx Root HTML layout, global fonts, meta tags, PWA registration
app/globals.css Tailwind imports, CSS variables (--sidebar-width, --bottom-nav-height)
app/page.tsx Landing page — redirects to /main/dashboard if logged in

Auth (app/auth/)

File Purpose
app/auth/login/page.tsx Login form (email + password)
app/auth/login/actions.ts Server action for login — validates credentials, creates session, sets cookie

Main App (app/main/)

All pages under /main/ require authentication (enforced by middleware).

File Purpose
app/main/layout.tsx Authenticated layout with sidebar (desktop) and bottom nav (mobile)
app/main/navigation.tsx Navigation component — 5 links: Dashboard, Workouts, Exercises, Import, Settings + logout
app/main/actions.ts Server actions (logout)

Dashboard

File Purpose
app/main/dashboard/page.tsx Summary stats, recent workouts, personal bests

Workouts

File Purpose
app/main/workouts/page.tsx Workout history list with date filters, upload button linking to import
app/main/workouts/new/page.tsx Create new workout — pick exercises, log sets
app/main/workouts/[id]/page.tsx View/edit a single workout

Exercises

File Purpose
app/main/exercises/page.tsx Exercise library list with search and equipment type filter pills
app/main/exercises/[id]/page.tsx Exercise detail — edit name/type/muscles/fields, view workout history for this exercise

Import

File Purpose
app/main/import/page.tsx Server component wrapper — auth check, renders ImportCSVPage
app/main/import/page-csv.tsx Client component (~610 lines) — full CSV import flow: upload → review queue → approve/skip each workout

Settings

File Purpose
app/main/settings/page.tsx Server component wrapper for settings form

API Routes (app/api/)

Route Methods Purpose
app/api/auth/route.ts POST Login — validate credentials, create session, return token
app/api/auth/logout/route.ts POST Logout — delete session
app/api/exercises/route.ts GET, POST List exercises (with search), create new exercise
app/api/exercises/[id]/route.ts GET, PUT, DELETE Get/update/delete a single exercise
app/api/workouts/route.ts GET, POST List workouts (with date filters, pagination), create workout with sets
app/api/workouts/[id]/route.ts GET, PUT, DELETE Get/update/delete a single workout
app/api/workouts/[id]/sets/route.ts POST, PUT, DELETE Manage individual sets within a workout
app/api/workouts/import/route.ts POST Import endpoint (used by import page)
app/api/workouts/import/save/route.ts POST Save a single approved imported workout to DB
app/api/import/parse/route.ts POST Parse CSV upload — maps exercise names, groups by date, returns structured data with unmapped names
app/api/preferences/route.ts GET, POST Get/update user preferences (theme, weight unit, Claude AI settings)
app/api/health/route.ts GET Health check endpoint

components/ — Reusable UI Components

Exercises

File Purpose
components/exercises/AddExerciseForm.tsx Form for creating new exercises with type, muscle groups, and tracked fields
components/exercises/ExerciseCard.tsx Card component for exercise list items
components/exercises/ExercisesClient.tsx Client-side exercises list with search/filter state

Workouts

File Purpose
components/workouts/WorkoutForm.tsx Full workout logging form — exercise selection, set entry, notes
components/workouts/WorkoutCard.tsx Expandable workout card for history list — shows date, stats line (exercises, total sets, duration), expandable exercise details with grouped set summaries
components/workouts/ExercisePicker.tsx Modal/form for selecting an exercise from the library when logging a workout, includes inline exercise creation
components/workouts/SetRow.tsx Single set row in the workout form — inputs for reps, weight, unit dropdown, RPE, duration, distance, calories, notes. Fields shown are controlled by exercise's inputFields

Import

File Purpose
components/import/WorkoutImportClient.tsx Import-related client component

Settings

File Purpose
components/settings/SettingsForm.tsx Settings form — theme selector, weight unit, Claude AI toggle + API key field

lib/ — Shared Utilities & Data Access

File Purpose
lib/prisma.ts Singleton Prisma client instance
lib/auth.ts Auth utilities: hashPassword, verifyPassword, createSession, validateSession, getCurrentUser
lib/formatSets.ts formatSetsSummary() — groups consecutive same-weight sets into compact display (e.g., "245 x 3/3/3")
lib/exerciseSearch.ts Exercise search/filter logic
lib/utils.ts General utility functions (e.g., cn() for class merging with clsx + tailwind-merge)
lib/db/exercises.ts Database queries for exercises
lib/db/workouts.ts Database queries for workouts
lib/db/stats.ts Dashboard statistics queries

prisma/ — Database Schema & Data

File Purpose
prisma/schema.prisma Full data model — 13 models (User, Session, Exercise, Workout, SetLog, Program, ProgramWeek, ProgramDay, ProgramExercise, Equipment, ContentItem, ContentChunk, AISuggestion, UserPreferences)
prisma/seed.ts Database seeding script
prisma/data/app.db The actual SQLite database file (not prisma/dev.db)
prisma/dev.db Stale/empty — do not use

types/ — TypeScript Type Definitions

File Purpose
types/index.ts Shared types: WorkoutWithSets, SetLogWithExercise, ExerciseWithStats, DashboardStats, SearchFilters, PaginationMeta, ParsedSet, ParsedExercise, ParsedWorkout, ImportParseResponse, ReviewedWorkout

public/ — Static Assets & PWA

File Purpose
public/manifest.json PWA manifest — app name, icons, theme color
public/sw.js Service worker for offline caching
public/sw-register.js Service worker registration script
public/icons/ App icons at multiple sizes (72512px) including maskable variants, plus SVG favicon

scripts/ — Server Management

File Purpose
scripts/start.sh Start the Next.js server (production)
scripts/stop.sh Stop the server using stored PID
scripts/rebuild.sh Rebuild and restart
scripts/setup-autostart.sh Configure the app to start on boot
scripts/generate-icons.js Generate PWA icons from SVG source

import-data/ — Historical Workout Data

File Purpose
import-data/workout-log-feb2026.csv Parsed handwritten workout logs (JanFeb 2026, ~362 rows). Format: date,exercise,weight,reps,notes. More pages to be added.

docs/ — Project Documentation

File Purpose
docs/PROJECT_OVERVIEW.md High-level overview: features, tech stack, future phases, design philosophy
docs/FILE_REFERENCE.md This file — every file and folder explained

logs/ — Server Logs

File Purpose
logs/server.log Server stdout
logs/server-error.log Server stderr