Files
proof-of-work/proof-of-work
Keysat 2b0abad68e
CI / proof-of-work (Next.js app) (push) Waiting to run
CI / start9/0.4 (StartOS package code) (push) Waiting to run
v1.2.0:6 — AI "generate today's workout" from a brain-dump
Add a single-session AI flow alongside program generation: describe a
workout in plain words and get a ready-to-log workout back — exercises
with suggested weights, target reps, and set counts grounded in the
user's recent history. The suggestion can be inline-edited or refined
by sending a follow-up instruction back to the model, then "Use this
workout" pre-fills the normal New Workout form (nothing persists until
the user saves through the regular path).

Why reuse, not fork: the existing program-generation spine (detached
background runner, SSE streaming, lenient-JSON preview, 5 providers,
history context, library name->id mapping) already does the hard parts.
A new AIGeneration.kind discriminant ("program" | "workout", default
"program" via boot-time guarded ALTER) selects the parser and keeps the
ephemeral workout rows out of the program-shaped AI history. Refine is a
fresh generation seeded with the prior suggestion (validated through the
same schema before it re-enters the prompt).

Hand-off is sessionStorage -> /main/workouts/new?from=ai -> AiWorkoutPrefill,
which expands each suggestion into N sets and maps effort by cardio-ness
(Gear for cardio, RPE for strength). EditWorkoutData.id is now optional so
the prefill CREATEs rather than PATCHing a nonexistent id. The AI suggests
each weight in that exercise's effective logging unit (the library JSON
carries a per-exercise unit) so the stored number and unit never diverge.

Built + sideloaded to immense-voyage.local as 1.2.0:6; on-box ALTER and
non-root launch confirmed via start-cli. tsc clean (app + packaging),
251 tests pass, next build + s9pk build succeed.
2026-06-19 10:59:12 -05:00
..

Workout Planner

A self-hosted workout planner and logger. Plan training cycles, log daily workouts, search your history, and get AI-powered suggestions over time.

Quick Start

# Install dependencies
npm install

# Set up the database
npx prisma db push

# Seed the InstanceSettings singleton
npm run db:seed

# Create the first admin (fresh installs ship with NO users — see below).
# Use a real-looking email; "admin@local" is rejected (no TLD).
npm run create-admin -- you@example.com yourpassword "Your Name"

# Start development server
npm run dev

Open http://localhost:3000 and log in with the email/password you just created.

No default account. Fresh installs ship with zero users on purpose, so there are no default credentials to forget and leak. In production (StartOS) the operator creates the first admin via the Actions → Set admin credentials action; locally, npm run create-admin is the equivalent. Once an admin exists, additional users sign up at /auth/signup (if sign-ups are enabled in Settings).

Access from Other Devices

To access from your phone or iPad on the same network:

npm run dev -- --hostname 0.0.0.0

Then open http://<your-computer-ip>:3000 on your device. You can install it as a PWA (Add to Home Screen) for an app-like experience.

Docker Deployment

docker compose up -d

Tech Stack

  • Next.js 14 (App Router) — full-stack TypeScript
  • SQLite + Prisma ORM — local database, no separate server
  • Tailwind CSS — mobile-first responsive design
  • PWA — installable on any device

Project Structure

app/
  auth/login/        — Login page
  main/
    dashboard/       — Quick stats and recent workouts
    workouts/        — Workout history, logger, detail views
    exercises/       — Exercise library
    settings/        — Preferences and AI config
  api/               — REST API routes
components/          — Reusable UI components
lib/                 — Database queries, auth, utilities
prisma/              — Schema and seed data