# Proof of Work Self-hosted multi-user workout planner and logger. Plan training cycles, log daily workouts, search your history, and curate a shared exercise library across everyone on the instance. Distributed as a StartOS 0.4 sideload package. ## Repo layout ``` proof-of-work/ Next.js app (TypeScript, Prisma + SQLite, Tailwind, PWA) start9/0.4/ StartOS 0.4 package wrapper (manifest, Dockerfile, entrypoint, version graph, change-credentials action) ``` Everything else is generated at build time. ## Local development ```sh cd proof-of-work npm install npx prisma generate # important after schema changes npx prisma db push # create the dev DB at prisma/data/app.db npm run db:seed # ONLY seeds the InstanceSettings singleton — no admin npm run dev # http://localhost:3000 ``` For local dev you'll need to create an admin manually since the StartOS action isn't available — easiest is `npx tsx` a one-off script, or just open Prisma Studio (`npm run db:studio`) and add a User row with `isAdmin: true` + a bcrypt hash you generate with `node -e 'require("bcrypt").hash("yourpassword", 10).then(console.log)'`. ## Multi-user **Fresh installs ship with no admin user on purpose** — the operator must run the StartOS Action `Set admin credentials` (Services → Proof of Work → Actions) before anyone can log in. This eliminates the default-credentials footgun. Once the admin exists, they can open sign-ups for additional users: - In-app: log in as admin -> **Settings -> Instance Settings -> Allow new sign-ups**. - StartOS: **Services -> Proof of Work -> Actions -> Set new signups**. Both write to the same `InstanceSettings` row; either path works. When sign-ups are open, anyone reaching the URL can create an account at `/auth/signup`. New users start with no admin privileges and are automatically seeded the full curated exercise library. ## Building the StartOS package See **[start9/0.4/DEPLOY_040.md](start9/0.4/DEPLOY_040.md)** for the full deployment / cutover guide. Short version: ```sh cd start9/0.4 npm ci make clean make x86 # produces proof-of-work_x86_64.s9pk make install # sideload to the host in ~/.startos/config.yaml ``` ## Curated exercise library `proof-of-work/prisma/exercises.seed.json` is the canonical library shipped to every install. It seeds fresh installs (via `prisma/seed.ts`) and is re-applied on every boot to existing installs (via `docker_entrypoint.sh` + `ensureExerciseLibrary.cjs`) so updates flow to all users on package upgrade. Refresh the JSON from the maintainer's live host: ```sh ./start9/0.4/refresh_seed.sh # pull a fresh /data snapshot cd proof-of-work && npm run sync-library # extract Exercise table -> JSON git diff prisma/exercises.seed.json ``` The system is additive only — removing an exercise from the JSON does not delete it from existing installs (users may have logged sets against it). Users' own custom exercises (`isCustom = true`) are never touched. ## Privacy `start9/0.4/seed/data/app.db` is your live `/data` snapshot. It contains real workout history and a bcrypt'd password hash. The top-level `.gitignore` keeps it out of git; do NOT commit it to any public repo.