From 6db056fba23d6a49aa03948c17dfe5a620b8bb97 Mon Sep 17 00:00:00 2001 From: Lucas Winther Date: Fri, 30 Oct 2026 04:34:35 +0100 Subject: [PATCH] feat(mockups): slot 17 voyage with real content Co-Authored-By: Claude Opus 5.5 --- AGENTS.md | 4 +- docs/DECISIONS.md | 4 ++ docs/PERMISSIONS.md | 2 +- docs/design/002-direction-round-notes.md | 7 ++ .../17-voyage-real-brief.md | 70 +++++++++++++++++++ src/index.html | 1 + src/mockups/17-voyage-real/index.html | 15 ++++ src/mockups/17-voyage-real/main.ts | 3 + src/mockups/17-voyage-real/style.css | 1 + src/mockups/registry.ts | 3 + src/server.ts | 3 + tests/server.test.ts | 2 +- 12 files changed, 111 insertions(+), 4 deletions(-) create mode 100644 docs/design/002-sea-chart-spikes/17-voyage-real-brief.md create mode 100644 src/mockups/17-voyage-real/index.html create mode 100644 src/mockups/17-voyage-real/main.ts create mode 100644 src/mockups/17-voyage-real/style.css diff --git a/AGENTS.md b/AGENTS.md index 0554e4b..f70bb6b 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -1,7 +1,7 @@ # EPIC: The Musical Timeline Unofficial fan site: an interactive timeline of *EPIC: The Musical* songs. Currently 7 design-direction -mockups. Bun 1.3.14 (server, bundler, test runner), TypeScript, three.js (mockups 06/07/13–16 only), Docker. +mockups. Bun 1.3.14 (server, bundler, test runner), TypeScript, three.js (mockups 06/07/13–17 only), Docker. `AGENTS.md` is the single source of truth for agents here. `CLAUDE.md` and `GEMINI.md` only point here. Deeper context on demand: `docs/ARCHITECTURE.md`, `docs/DECISIONS.md`, `docs/TODO.md`. @@ -10,7 +10,7 @@ Deeper context on demand: `docs/ARCHITECTURE.md`, `docs/DECISIONS.md`, `docs/TOD Install: `bun install --frozen-lockfile` Dev: `bun run dev` (`PORT` env, default 3000; `CONTENT_DIR=~/epic-the-musical-content` for real audio/lyrics) -Test: `bun test` | Single file: `bun test tests/data.test.ts` | Single case: `bun test -t "registry has 16"` +Test: `bun test` | Single file: `bun test tests/data.test.ts` | Single case: `bun test -t "registry has 17"` Typecheck: `bun run typecheck` Build: `bun run build` | Run the build: `bun run start` Docker: `docker build -t epic-timeline .` then `docker run --rm -p 3000:3000 -v ~/epic-the-musical-content:/content:ro -e CONTENT_DIR=/content epic-timeline` diff --git a/docs/DECISIONS.md b/docs/DECISIONS.md index 05f1881..6584e90 100644 --- a/docs/DECISIONS.md +++ b/docs/DECISIONS.md @@ -74,3 +74,7 @@ persistent side panel. No new dependency. read-only into the container. **Why:** the audio, lyrics and art are Jorge Rivera-Herrans' copyrighted work; committing them would push them to Gitea and bake 1.5 GB into the image. The user chose this ("Mount it, never commit"). Range requests are handled in `src/content/routes.ts` so audio can seek. + +## 2026-10-30 — three.js allowed in mockup 17 + +**Decision:** mockup 17 (Voyage with real content) may use three.js; it iterates on 16. No new dependency. diff --git a/docs/PERMISSIONS.md b/docs/PERMISSIONS.md index 7abae8f..50cbb2a 100644 --- a/docs/PERMISSIONS.md +++ b/docs/PERMISSIONS.md @@ -22,7 +22,7 @@ or `AGENTS.md` Commands. | `bun install --frozen-lockfile` | worked (no changes) | | `bun test` | worked — 34 pass, 0 fail, 3 files | | `bun test tests/data.test.ts` | worked — 10 pass | -| `bun test -t "registry has 16"` | worked — 1 pass | +| `bun test -t "registry has 17"` | worked — 1 pass | | `bun run typecheck` | worked (`tsc --noEmit`, exit 0) | | `bun run build` | worked — `dist/server.js` + hashed page assets | | `bun run dev` (`PORT=3113`) | worked — `/` and all mockup routes 200, no-slash form 302 | diff --git a/docs/design/002-direction-round-notes.md b/docs/design/002-direction-round-notes.md index 043b734..d2f3e13 100644 --- a/docs/design/002-direction-round-notes.md +++ b/docs/design/002-direction-round-notes.md @@ -334,6 +334,13 @@ and brief one agent from a copy of 16, using `/content/library.json`, `parseLrc` `src/shared/lrc.ts` and `/content/homer/odyssey/.json`. Its test server must run with `CONTENT_DIR=/home/user/epic-the-musical-content`. +### 19. Resumed + +> "Continue." + +- Resumed from §18. 17 (real content) is started now, as agreed; the user's reaction to 16 is asked + in parallel. + ## Open questions (in priority order) 1. ~~Which sea-chart approach (08–11) reads best, or which mix?~~ 11's navigation + 10's style (§9). diff --git a/docs/design/002-sea-chart-spikes/17-voyage-real-brief.md b/docs/design/002-sea-chart-spikes/17-voyage-real-brief.md new file mode 100644 index 0000000..95202f0 --- /dev/null +++ b/docs/design/002-sea-chart-spikes/17-voyage-real-brief.md @@ -0,0 +1,70 @@ +# 17 Voyage with real content — brief + +## Why + +The user added the real content (`~/epic-the-musical-content`, see round notes §17) and agreed: +"Yes, in 17 after 16" — 17 uses **real FLAC playback, line-synced lyrics from the `.lrc` files, and +the actual Odyssey passage**. Spec `docs/specs/003-content-mount.md` added the server side; read it. + +17 starts from a **copy of 16** (`src/mockups/16-voyage-readable/`). Keep everything from 16 (look 2, +readable Inter labels, frieze accents, the five beats, stylised 3D, panel, combined paths, fan works +placeholders). Change only the content side. + +## What the server gives you (only when `CONTENT_DIR` is set) + +- `GET /content/library.json` → `{ sagas: [{ name, year, cover, songs: [{ track, title, audio, + lyrics: { url, timed } | null }] }] }` (types in `src/content/library.ts`; import the types only). +- `GET