CODEX // oaoisme wiki

§ Forge — hypertrophy tracker

Design & tests

updated 2026-06-08

How Forge got its look, and how it's proven to work — the two box-mandatory disciplines (design.md + a real browser e2e pass).

The design direction

Researched with both the ui-ux-pro-max and awesome-design-md-reference skills, then written up in /root/apps/forge/design.md. The synthesis:

  • Dark industrial / technical instrument. Cold gunmetal surfaces, hairline borders (elevation by hairline + bevel, never drop shadow — a Linear move). This is the box's first dark-mode site, which is itself the point: every other site (rituals, wiki, onelife, blog) is light-mode on warm/cool paper, so dark makes Forge instantly un-mistakable for any sibling.
  • One cool accent: Tempered Teal (#2DE0C5). Not ember-orange (rituals), not ultramarine (wiki), not pine (onelife), not lavender (Linear), not yellow (ClickHouse). The "accent as voltage" idea (teal stat numbers, focus rings, CTAs) comes from ClickHouse; the one-accent discipline from Linear.
  • The thermal heat scale is the only warm colour, reserved entirely for fatigue + the PR stamp. Warmth = exertion, everywhere, consistently.
  • Typography: Barlow Condensed (athletic uppercase display) + Barlow (body) + IBM Plex Mono for every number (the instrument readout). The Nike anchor gave the condensed-uppercase + strict 8px-grid rhythm.

The reference anchors deliberately disagreed (Nike bold-athletic-light, Linear restrained-dark, ClickHouse one-voltage-dark) to force synthesis rather than a copy. The signature that's in none of them: the glowing thermal body map.

The test story

Per the box rule, no app ships without an exhaustive Playwright pass against the live HTTPS URL — not curl, not "it returns 200". /root/apps/forge/e2e.mjs:

  • Resets to a pristine seeded DB, then seeds deterministic history via the API (a finished Push at the rep ceiling, then cycles the rotation back to Push) so it can assert the integration of progression, not just the unit math.
  • Covers every feature: Today preview + live logging, rest timer + manual chips, warm-up sets, invalid input rejection, set deletion, the cross-session add-weight verdict (62.5kg ▲+2.5), the PR stamp, the full Program editor (edit/move/add/remove, all reversible), the Body heatmap + 16-muscle list, Progress trends + volume + sessions, Exercise detail, bottom-nav, and the 404 + empty states.
  • Runs desktop, 390px mobile, and reduced-motion; asserts no horizontal scroll and that transitions are zeroed under reduced motion.
  • The bar is zero console / pageerror / requestfailed. It caught two real issues on first run (a malformed SVG <path> wrapping the head <circle>, and a seed that logged 3 sets where the program prescribed 4 — which correctly made the engine choose "add reps" not "add weight").

Final result: 65 assertions, zero browser errors. There's also engine.test.js (Node test runner) for the pure math — 7 unit tests covering Epley 1RM, the RPE→effort mapping, all three progression branches, fatigue decay, and weekly volume banding.

Re-running

# unit math
cd /root/apps/forge && node --test
# full browser pass (reuses the shared Playwright install)
PLAYWRIGHT_BROWSERS_PATH=/root/.cache/ms-playwright node e2e.mjs

Screenshots land in /root/apps/forge/e2e-shots/.