From c11c2ef079cce6309d72a99478b2815b0c1b6a9d Mon Sep 17 00:00:00 2001 From: Lucas Winther Date: Fri, 30 Oct 2026 04:50:11 +0100 Subject: [PATCH] feat(content): prefer Greek-name Homer translations; voyage app spec, design record and plan Co-Authored-By: Claude Opus 5.5 --- docs/DECISIONS.md | 6 + docs/TODO.md | 4 +- docs/design/002-direction-round-notes.md | 13 ++ docs/design/002-voyage-app.md | 65 ++++++++ docs/plans/002-voyage-app.md | 196 +++++++++++++++++++++++ docs/specs/002-voyage-app.md | 71 ++++++++ docs/specs/003-content-mount.md | 5 +- src/content/routes.ts | 11 +- tests/content.test.ts | 9 +- 9 files changed, 372 insertions(+), 8 deletions(-) create mode 100644 docs/design/002-voyage-app.md create mode 100644 docs/plans/002-voyage-app.md create mode 100644 docs/specs/002-voyage-app.md diff --git a/docs/DECISIONS.md b/docs/DECISIONS.md index 6584e90..ca6ad18 100644 --- a/docs/DECISIONS.md +++ b/docs/DECISIONS.md @@ -78,3 +78,9 @@ work; committing them would push them to Gitea and bake 1.5 GB into the image. T ## 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. + +## 2026-10-30 — Homer in translations with Greek names + +**Decision:** the Odyssey and Iliad are served from Butcher & Lang (Gutenberg #1728) and Lang, Leaf & +Myers (#3059) when present, falling back to Butler (#1727, #2199). **Why:** the user disliked Butler's +Roman names (Ulysses, Minerva, Jove); EPIC uses the Greek ones. Both are public domain. diff --git a/docs/TODO.md b/docs/TODO.md index 2fc1416..e47704b 100644 --- a/docs/TODO.md +++ b/docs/TODO.md @@ -86,5 +86,5 @@ Small, specific, independently actionable. Remove only when actually done. - Mockup 14: the cave-mouth mask may repeat as holes during the curtain drop (Chrome, oversized mask region). Fixed in 15 by shrinking the region; 14 left as is (superseded). -- Homer books: the last book (Odyssey XXIV, 250 paragraphs) also swallows the translator's notes and - index after it. Trim at the notes heading before showing whole books. +- Homer books: with Butler's fallback text, the last book (Odyssey XXIV) also swallows the translator's + notes after it. The preferred Butcher & Lang text does not have this problem. diff --git a/docs/design/002-direction-round-notes.md b/docs/design/002-direction-round-notes.md index 0e644b6..2ed8b72 100644 --- a/docs/design/002-direction-round-notes.md +++ b/docs/design/002-direction-round-notes.md @@ -364,6 +364,19 @@ and brief one agent from a copy of 16, using `/content/library.json`, `parseLrc` - **"Threads on the sea"** toggle: keep as is ("works nicely"). - When the timeline is hidden, the motif strip goes **into the Paths tab** (not pinned above the tabs). +### 21. Greek names, not Roman + +> "I dont like that Samuel Butler uses Roman names instead, is there a version with original names we +> can download on Project Gutenberg?" + +- Yes. Downloaded into the content folder (Butler's files kept as a fallback): + - `The Odyssey (Butcher and Lang).txt`: Gutenberg #1728, S. H. Butcher & Andrew Lang (1879): Odysseus, + Athene, Poseidon, Zeus. + - `The Iliad (Lang, Leaf and Myers).txt`: Gutenberg #3059, Lang, Leaf & Myers: same Greek names. + - Checked by counting names: Butcher & Lang has 718× "Odysseus", 0× "Ulysses"; Pope's and Cowper's + translations also use Roman names. +- The server now prefers these (`src/content/routes.ts`); the app drops the Roman-names note. + ## 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-voyage-app.md b/docs/design/002-voyage-app.md new file mode 100644 index 0000000..ee4afad --- /dev/null +++ b/docs/design/002-voyage-app.md @@ -0,0 +1,65 @@ +--- +status: approved +--- + +# 002 — The voyage app: design record + +Approved by the user on 2026-10-30 ("Yes. But listen wit hthe lyrics and watch should probably both be +in the listen & lyrics tab. Threads on the sea toggle works nicely. If hide timeline is off, maybe just +put it into paths or something."). Full history and verbatim quotes: `002-direction-round-notes.md`. +Reference mockups: **17 Voyage with real content** (with **16** and **12** for details). This file is +written so the app can be built without opening the mockups. + +## The chosen ideas + +1. **A 3D sea voyage is the main experience.** The ship sails Odysseus' route; every song is a stop + along it, in album order. Moving between songs moves the ship. +2. **The Greek frieze is the curtain call between scenes.** A black-figure-on-terracotta frieze band + drops like a curtain at scene changes: at the start (Troy), when entering a new saga, and before a + landing. The frieze's ground line becomes the 3D horizon when it lifts. +3. **Landings are sublevels.** At three places the voyage goes ashore through the frieze into a small 3D + scene: the **Cyclops' cave** (Cyclops Saga), **Athena's fight in God Games** (Wisdom Saga), and + **Odysseus' Ithaca homecoming** (Ithaca Saga). "Back to sea" returns to the voyage. +4. **Look 2, "two worlds".** The world is bright and naturalistic in colour (blue sea, warm sky, + green-ochre islands); the frieze keeps terracotta and black. The UI ties them together with the + frieze's meander band as the top edge of every panel/card/bar and terracotta + black accents on + parchment. "The colors pop." +5. **Stylised, not realistic, 3D.** Toon/flat shading, ink outlines, flat colour-band water with drawn + wave strokes, a small flat sun, graphic silhouettes (ship, island, the black-figure giant). +6. **Readable type.** Inter for all UI and labels, nothing under 13px, panel body ≥15px, minimal + tracking. Cormorant Garamond only for large display titles, lyric lines and frieze inscriptions. +7. **A right-side panel stays open** throughout (collapsible to a tab), following the current song. + Tabs: + - **About**: track, saga, story time, facts, parts and singers, the Odyssey reference with a + "Read the passage" reading view (Greek names: Butcher & Lang). + - **Listen & lyrics**: the player (real audio, seek bar, cover art), the line-synced lyrics with the + current line highlighted and click-to-seek, and **Watch** (YouTube link cards). The "listen with the + lyrics" entry and Watch both live here. + - **Paths**: each of the song's motifs with where it was heard before and where it returns, the + thread detail, the chart; and **the motif strip when the timeline is hidden**. + - **Fan works**: credited, linked fan works per song. + A play button in the panel header starts the song and opens Listen & lyrics. +8. **Paths are always visible.** The **bottom timeline** (the "big horizontal line") shows the songs, + saga dividers, "you are here", and motif threads underneath with knots where a motif plays. It can be + hidden; then the strip lives in the Paths tab. **"Threads on the sea"** is a toggle that draws the + current song's motifs as ink-edged ribbons on the sea (behind the ship solid, ahead dashed, with + merged labels such as "Next: Survive"). +9. **Motifs as threads** (chosen over pennants and ink-only in 12): soft coloured threads with knots, + one colour per motif, the same colour everywhere (timeline, panel, ribbons, lyric chips). +10. **Real content from the mounted folder** (spec 003): FLAC playback with seeking, `.lrc` synced + lyrics, the Odyssey passage (Butcher & Lang's translation, which keeps the Greek names). Never committed; the app works without it. +11. **Fan project, credited.** The fan notice and the thanks to Jorge Rivera-Herrans on every screen. + +## Deselected, and why + +- **02 Vertical story, 05 Score/waveform, 06 Constellation**: "too uninteresting". +- **08 Sea chart + log line, 09 Schematic sea chart**: "doesnt work too well". +- **11's metro-map lines inside plates**: "doesnt hit as well". 11's navigation survives as the idea of + places opening into sublevels; 10's vellum style survives in the chart. +- **Pennants (B) and ink-only (C)** motif treatments in 12: threads chosen "definetly". +- **Look 1 (vellum throughout)**: decent but the UI of 2 and 3 looked better. +- **Look 3 (frieze-led)**: made the site feel unified, but "im leaning a lot more towards 2. The colors + pop a lot more." Its cohesion (frieze accents on menus) was carried into look 2. +- **15's inscription-style labels** (small wide-tracked Cormorant capitals): "very hard to read". +- **Choosing one paths placement**: A/B/C "all have their strengths", so they were combined. +- **Simulated playback and placeholder lyrics**: replaced by the real content. diff --git a/docs/plans/002-voyage-app.md b/docs/plans/002-voyage-app.md new file mode 100644 index 0000000..916618b --- /dev/null +++ b/docs/plans/002-voyage-app.md @@ -0,0 +1,196 @@ +--- +status: in-progress +--- + +# The Voyage App (v1) Implementation Plan + +> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking. + +**Goal:** Ship the approved voyage design (mockup 17 + the user's last changes) as the real app at `/` for all 9 sagas / 40 songs. + +**Architecture:** A new page `src/app/` (plain TS + DOM + three.js, bundled by Bun's HTML import) with pure, unit-tested modules for state, route geometry, transitions and timeline layout, and DOM/three modules ported from `src/mockups/17-voyage-real/`. New album data lives in `src/data/album/` so the mockups' `src/data/types.ts`/`sample.ts` stay untouched. Real content comes from `/content/*` (spec 003). + +**Tech Stack:** Bun 1.3.14 (serve, bundler, test + happy-dom), TypeScript, three.js 0.186, @fontsource Inter + Cormorant Garamond. + +**Spec:** `docs/specs/002-voyage-app.md` · design record `docs/design/002-voyage-app.md` · content `docs/specs/003-content-mount.md` + +## Global Constraints + +- Every page keeps `