Files
Keysat 4be489d6d3 v1.2.0:5 — Gear (breathing, 1-5) replaces RPE as the effort field for cardio
Cardio exercises now log a breathing "Gear" (1-5, per Brian MacKenzie)
instead of RPE (6-10) as their effort field; strength keeps RPE. An exercise
counts as cardio when its equipment type is "cardio" or it carries the
"cardio" muscle group (isCardioExercise in lib/exerciseOptions), so the
Assault Bike (type "assault bike") qualifies.

New nullable SetLog.gear column added by the boot-time guarded ALTER in
docker_entrypoint.sh (additive, idempotent); plumbed through all 5 set-write
paths, the summary/edit views, and CSV/JSON import-export. Existing rpe data
is untouched and still displays. Program/AI target-RPE is unaffected.
2026-06-16 14:49:15 -05:00
..
2026-05-09 13:40:58 -05:00

Proof of Work Logo

Proof of Work on StartOS 0.4 (migration package)

This directory packages Proof of Work (proof-of-work) for StartOS 0.4 beta. It is the cutover package that carries your 0.3.5 data across to a new x86_64 StartOS 0.4 host.

Upstream app lives at ../../proof-of-work/ in this repo. Legacy 0.3.5 package lives at ../0.3.5/ (kept intact; do not modify). Codex's WIP 0.4 scaffold lives at ../0.4/ (kept intact; superseded by this folder).

Goals

  • Keep the package id proof-of-work so StartOS recognizes it as the same service.
  • Keep the persistent data volume main mounted at /data.
  • Keep the SQLite database at /data/app.db.
  • Preserve every existing workout, set, exercise, and preference.
  • Ship x86_64 only for 0.4 beta (sideload target).

How data preservation works

  1. seed/data/app.db holds a one-time snapshot of /data from the live 0.3.5 host (currently 1 user, 348 workouts, 164 exercises, 5720 set logs).
  2. The Dockerfile bakes that snapshot into the image at /app/seed/data/.
  3. On first boot only/data/app.db missing AND /data/.seeded absent — docker_entrypoint.sh copies the seed into /data/ and writes a .seeded marker.
  4. On every subsequent boot, /data/ is the sole source of truth; the seed in the image is ignored.

See seed/README.md for the snapshot provenance and row counts.

Image runtime

Property Value
Base image node:20-alpine (multi-stage build)
App runtime Next.js standalone + Prisma + SQLite
Entrypoint /usr/local/bin/docker_entrypoint.sh (dumb-init wrapped)
Internal port 3000
Architectures x86_64 (beta)

Build and sideload

cd start9/0.4
npm ci
make clean
make x86      # outputs proof-of-work_x86_64.s9pk

Sideload via StartOS web UI or make install (requires ~/.startos/config.yaml). Step-by-step instructions are in DEPLOY_040.md.

What is unchanged from 0.3.5

  • Package id: proof-of-work
  • Volume id: main
  • Mount path: /data
  • DB path: /data/app.db
  • Health endpoint: /api/health
  • Compat ALTER TABLE block (idempotent; no-op on a current DB)

What is new in 0.4

  • TypeScript SDK manifest under startos/
  • ExVer version (0.1.0:18) replaces the 0.3.5 4-part 0.1.0.17
  • Seed-on-first-boot with a .seeded marker and stderr logging
  • alertUpdate warning users not to Uninstall to troubleshoot
  • Self-contained Dockerfile — no references to ../0.3.5/ or ../0.4/

Follow-up releases (planned, do not ship yet)

  • v0.1.0:19 — remove the COPY seed/data \u2026 line and the seed block from the entrypoint once the cutover is confirmed. Leaves seed/ on disk unreferenced.
  • v0.1.0:19 or v0.1.0:20 — add a StartOS Package Action change-admin-credentials that updates the User row in /data/app.db (bcryptjs, salt rounds 10) so you can rename/rotate the admin from the StartOS UI.