docs: final review fixes — deferred backlog, doc accuracy, sample-data note
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
dd106c5d0e
commit
2ff58ace46
+12
-12
@@ -44,7 +44,7 @@ export const songs: Song[] = [
|
||||
odyssey: null, // TODO(verify)
|
||||
parts: [
|
||||
{ name: "Verse 1", singers: ["Odysseus"], lines: lyric("Odysseus", 1), motifIds: ["odysseus", "just-a-man"] }, // TODO(verify)
|
||||
{ name: "Chorus", singers: ["Odysseus"], lines: lyric("Odysseus", 2), motifIds: ["just-a-man"], startSec: 60 },
|
||||
{ name: "Chorus", singers: ["Odysseus"], lines: lyric("Odysseus", 2), motifIds: ["just-a-man"], startSec: 60 }, // TODO(verify) singers
|
||||
],
|
||||
facts: ["Shows Odysseus as a husband and father before the voyage."], // TODO(verify)
|
||||
videos: [{ title: "Just a Man — search", url: yt("EPIC The Musical Just a Man") }],
|
||||
@@ -55,7 +55,7 @@ export const songs: Song[] = [
|
||||
odyssey: { book: 9, lines: "39-61", url: BUTLER }, // TODO(verify) raid on the Cicones
|
||||
parts: [
|
||||
{ name: "Verse 1", singers: ["Eurylochus", "Odysseus"], lines: lyric("crew", 1), motifIds: ["odysseus"] }, // TODO(verify)
|
||||
{ name: "Verse 2", singers: ["Odysseus"], lines: lyric("Odysseus", 2), motifIds: ["warrior"] },
|
||||
{ name: "Verse 2", singers: ["Odysseus"], lines: lyric("Odysseus", 2), motifIds: ["warrior"] }, // TODO(verify) singers
|
||||
],
|
||||
facts: ["The crew's high spirits are about to run into trouble."], // TODO(verify)
|
||||
videos: [{ title: "Full Speed Ahead — search", url: yt("EPIC The Musical Full Speed Ahead") }],
|
||||
@@ -65,8 +65,8 @@ export const songs: Song[] = [
|
||||
storyTime: { yearsAfterTroy: 0, label: "Shortly after leaving Troy" }, // TODO(verify)
|
||||
odyssey: null, // TODO(verify)
|
||||
parts: [
|
||||
{ name: "Verse 1", singers: ["Odysseus"], lines: lyric("Odysseus", 1), motifIds: ["open-arms"] }, // TODO(verify)
|
||||
{ name: "Verse 2", singers: ["Odysseus", "Crew"], lines: lyric("crew", 2), motifIds: ["open-arms", "odysseus"] },
|
||||
{ name: "Verse 1", singers: ["Polites", "Odysseus"], lines: lyric("Odysseus", 1), motifIds: ["open-arms"] }, // TODO(verify) Polites leads, with Odysseus
|
||||
{ name: "Verse 2", singers: ["Polites", "Odysseus", "Crew"], lines: lyric("crew", 2), motifIds: ["open-arms", "odysseus"] }, // TODO(verify) singers
|
||||
],
|
||||
facts: ["Introduces a welcoming melody that returns later."], // TODO(verify)
|
||||
videos: [{ title: "Open Arms — search", url: yt("EPIC The Musical Open Arms") }],
|
||||
@@ -77,7 +77,7 @@ export const songs: Song[] = [
|
||||
odyssey: { book: 13, lines: "287-310", url: BUTLER }, // TODO(verify) Athena and Odysseus
|
||||
parts: [
|
||||
{ name: "Verse 1", singers: ["Athena"], lines: lyric("Athena", 1), motifIds: ["athena", "warrior"] }, // TODO(verify)
|
||||
{ name: "Verse 2", singers: ["Odysseus"], lines: lyric("Odysseus", 2), motifIds: ["odysseus", "warrior"], startSec: 70 },
|
||||
{ name: "Verse 2", singers: ["Odysseus"], lines: lyric("Odysseus", 2), motifIds: ["odysseus", "warrior"], startSec: 70 }, // TODO(verify) singers
|
||||
],
|
||||
facts: ["Athena teaches Odysseus to fight with wit."], // TODO(verify)
|
||||
videos: [{ title: "Warrior of the Mind — search", url: yt("EPIC The Musical Warrior of the Mind") }],
|
||||
@@ -87,8 +87,8 @@ export const songs: Song[] = [
|
||||
storyTime: { yearsAfterTroy: 1, label: "The island of the Cyclopes" }, // TODO(verify)
|
||||
odyssey: { book: 9, lines: "105-460", url: BUTLER }, // TODO(verify)
|
||||
parts: [
|
||||
{ name: "Verse 1", singers: ["Polyphemus"], lines: lyric("Polyphemus", 1), motifIds: ["polyphemus"] },
|
||||
{ name: "Verse 2", singers: ["Odysseus"], lines: lyric("Odysseus", 2), motifIds: ["odysseus", "warrior"], startSec: 50 },
|
||||
{ name: "Verse 1", singers: ["Polyphemus"], lines: lyric("Polyphemus", 1), motifIds: ["polyphemus"] }, // TODO(verify) singers
|
||||
{ name: "Verse 2", singers: ["Odysseus"], lines: lyric("Odysseus", 2), motifIds: ["odysseus", "warrior"], startSec: 50 }, // TODO(verify) singers
|
||||
],
|
||||
facts: ["Odysseus meets Polyphemus in his cave."], // TODO(verify)
|
||||
videos: [{ title: "Polyphemus — search", url: yt("EPIC The Musical Polyphemus") }],
|
||||
@@ -99,7 +99,7 @@ export const songs: Song[] = [
|
||||
odyssey: { book: 9, lines: "287-412", url: BUTLER }, // TODO(verify)
|
||||
parts: [
|
||||
{ name: "Verse 1", singers: ["Polyphemus", "Crew"], lines: lyric("Polyphemus", 1), motifIds: ["polyphemus"] }, // TODO(verify)
|
||||
{ name: "Verse 2", singers: ["Odysseus"], lines: lyric("Odysseus", 2), motifIds: ["odysseus", "just-a-man"] },
|
||||
{ name: "Verse 2", singers: ["Odysseus"], lines: lyric("Odysseus", 2), motifIds: ["odysseus", "just-a-man"] }, // TODO(verify) singers
|
||||
],
|
||||
facts: ["The crew is trapped and Odysseus must choose a plan."], // TODO(verify)
|
||||
videos: [{ title: "Survive — search", url: yt("EPIC The Musical Survive") }],
|
||||
@@ -109,8 +109,8 @@ export const songs: Song[] = [
|
||||
storyTime: { yearsAfterTroy: 1, label: "Escaping the cave" }, // TODO(verify)
|
||||
odyssey: { book: 9, lines: "431-460", url: BUTLER }, // TODO(verify)
|
||||
parts: [
|
||||
{ name: "Verse 1", singers: ["Telemachus"], lines: lyric("Telemachus", 1), motifIds: ["remember"] }, // TODO(verify)
|
||||
{ name: "Verse 2", singers: ["Odysseus"], lines: lyric("Odysseus", 2), motifIds: ["remember", "open-arms"], startSec: 40 },
|
||||
{ name: "Verse 1", singers: ["Telemachus"], lines: lyric("Telemachus", 1), motifIds: ["remember"] }, // TODO(verify) Telemachus as singer
|
||||
{ name: "Verse 2", singers: ["Odysseus"], lines: lyric("Odysseus", 2), motifIds: ["remember", "open-arms"], startSec: 40 }, // TODO(verify) singers
|
||||
],
|
||||
facts: ["A memorial theme introduced here returns later."], // TODO(verify)
|
||||
videos: [{ title: "Remember Them — search", url: yt("EPIC The Musical Remember Them") }],
|
||||
@@ -120,9 +120,9 @@ export const songs: Song[] = [
|
||||
storyTime: { yearsAfterTroy: 1, label: "Leaving the island" }, // TODO(verify)
|
||||
odyssey: { book: 9, lines: "473-542", url: BUTLER }, // TODO(verify)
|
||||
parts: [
|
||||
{ name: "Verse 1", singers: ["Odysseus", "Polyphemus"], lines: lyric("Odysseus", 1), motifIds: ["polyphemus", "odysseus"] }, // TODO(verify)
|
||||
{ name: "Verse 1", singers: ["Odysseus", "Athena"], lines: lyric("Odysseus", 1), motifIds: ["odysseus", "athena"] }, // TODO(verify) singers
|
||||
],
|
||||
facts: ["The Cyclops saga ends with Odysseus revealing his name."], // TODO(verify)
|
||||
facts: ["Closes the Cyclops saga as Odysseus leaves the island."], // TODO(verify)
|
||||
videos: [{ title: "My Goodbye — search", url: yt("EPIC The Musical My Goodbye") }],
|
||||
},
|
||||
{
|
||||
|
||||
+1
-1
@@ -10,7 +10,7 @@
|
||||
<body>
|
||||
<main>
|
||||
<h1>EPIC: The Musical Timeline</h1>
|
||||
<p class="lede">Seven design directions for an interactive timeline. Pick one, or mix several.</p>
|
||||
<p class="lede">Seven design directions for an interactive timeline. Pick one, or mix several. Sample content: placeholder lyrics and unverified details, for comparing designs only.</p>
|
||||
<ul class="cards">
|
||||
<li class="card"><a href="/mockups/01-editorial/"><span class="card__num">01</span><h2>Editorial scroll</h2><p>A clean horizontal line in a parchment-and-serif editorial style, with motifs as thin coloured threads underneath.</p><p class="card__try">Try this: Pan sideways, notice gap length tracking in-story time, and open a song.</p></a></li>
|
||||
<li class="card"><a href="/mockups/02-vertical-story/"><span class="card__num">02</span><h2>Vertical story</h2><p>The voyage scrolls downward; songs reveal one at a time beside a sticky detail panel.</p><p class="card__try">Try this: Scroll and watch the sticky detail panel update.</p></a></li>
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
import { mountCredits } from "./shared/credits";
|
||||
|
||||
// Cards are static in index.html (kept in sync with src/mockups/registry.ts by tests/server.test.ts).
|
||||
// Cards are static in index.html (tests/server.test.ts checks each registry entry's name, pitch and tryThis appear here).
|
||||
mountCredits();
|
||||
|
||||
+15
-15
@@ -12,21 +12,21 @@ export function startServer(port: number): Server<undefined> {
|
||||
return Bun.serve({
|
||||
port,
|
||||
routes: {
|
||||
"/": home,
|
||||
"/mockups/01-editorial/": m0,
|
||||
"/mockups/01-editorial": Response.redirect("/mockups/01-editorial/", 302),
|
||||
"/mockups/02-vertical-story/": m1,
|
||||
"/mockups/02-vertical-story": Response.redirect("/mockups/02-vertical-story/", 302),
|
||||
"/mockups/03-transit-map/": m2,
|
||||
"/mockups/03-transit-map": Response.redirect("/mockups/03-transit-map/", 302),
|
||||
"/mockups/04-greek-frieze/": m3,
|
||||
"/mockups/04-greek-frieze": Response.redirect("/mockups/04-greek-frieze/", 302),
|
||||
"/mockups/05-score/": m4,
|
||||
"/mockups/05-score": Response.redirect("/mockups/05-score/", 302),
|
||||
"/mockups/06-constellation/": m5,
|
||||
"/mockups/06-constellation": Response.redirect("/mockups/06-constellation/", 302),
|
||||
"/mockups/07-sea-voyage/": m6,
|
||||
"/mockups/07-sea-voyage": Response.redirect("/mockups/07-sea-voyage/", 302),
|
||||
"/": home,
|
||||
"/mockups/01-editorial/": m0,
|
||||
"/mockups/01-editorial": Response.redirect("/mockups/01-editorial/", 302),
|
||||
"/mockups/02-vertical-story/": m1,
|
||||
"/mockups/02-vertical-story": Response.redirect("/mockups/02-vertical-story/", 302),
|
||||
"/mockups/03-transit-map/": m2,
|
||||
"/mockups/03-transit-map": Response.redirect("/mockups/03-transit-map/", 302),
|
||||
"/mockups/04-greek-frieze/": m3,
|
||||
"/mockups/04-greek-frieze": Response.redirect("/mockups/04-greek-frieze/", 302),
|
||||
"/mockups/05-score/": m4,
|
||||
"/mockups/05-score": Response.redirect("/mockups/05-score/", 302),
|
||||
"/mockups/06-constellation/": m5,
|
||||
"/mockups/06-constellation": Response.redirect("/mockups/06-constellation/", 302),
|
||||
"/mockups/07-sea-voyage/": m6,
|
||||
"/mockups/07-sea-voyage": Response.redirect("/mockups/07-sea-voyage/", 302),
|
||||
},
|
||||
development: process.env.NODE_ENV !== "production",
|
||||
fetch() {
|
||||
|
||||
@@ -21,7 +21,7 @@ export function createAudioSlot(song: Song): HTMLElement {
|
||||
btn.textContent = part.name;
|
||||
btn.addEventListener("click", () => {
|
||||
audio.currentTime = part.startSec!;
|
||||
void audio.play?.();
|
||||
audio.play?.()?.catch(() => {});
|
||||
});
|
||||
root.append(btn);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user