Files
proof-of-work/proof-of-work
Keysat f487204b73
CI / proof-of-work (Next.js app) (push) Has been cancelled
CI / start9/0.4 (StartOS package code) (push) Has been cancelled
v1.2.0:1 — upgrade to Next.js 15 / React 19
Closes the remaining P1: move off Next 14 onto the CVE-patched Next 15
line (15.5.x), eliminating the framework's RSC DoS/source-exposure
advisories and the middleware-auth-bypass class that applied to the 14.x
auth gate. App Router on Next 15 requires React 19, so react/react-dom
move to 19.x in lockstep; lucide-react and next-themes bump to their
React-19-compatible releases.

The code surface was the Next 15 async-request-API change: params and
searchParams are now Promises. All [id] route handlers (10 files) and the
four server pages that read them now await the resolved value, using a
uniform re-derive idiom that leaves handler bodies untouched. cookies()/
headers() were already awaited, so no other request-API changes were
needed; all routes stay dynamic, so the uncached-by-default change is a
no-op. next.config.js (static CSP) and the middleware matcher are
unchanged. No schema, no API contract change, no data migration.

Verified: tsc + lint clean, 209 tests pass, next build succeeds with the
standalone bundle tracing the Prisma engine.
2026-06-13 00:29:47 -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