From d0fe0ec9dd0b628e889016cc04488d3fcee3249b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=27=C3=A9lectron=20rare?= <108685187+electron-rare@users.noreply.github.com> Date: Thu, 9 Jul 2026 12:40:26 +0200 Subject: [PATCH] docs: add music credits and descope notes Only the scroller text credited ride.mod; add CREDITS.md and a semantic-fallback line so no-JS visitors also see the "11th-hour" by TDK CC BY 4.0 attribution (The Mod Archive, unmodified). Also record the two spec items descoped during implementation: chunky-pixel retro look instead of ordered dithering, and a single MOD track instead of per-stop ambience shifts. --- CREDITS.md | 9 ++++++++ .../2026-07-09-clement-saillant-cc-design.md | 7 ++++++ src/content/music.ts | 7 ++++++ src/fallback/inject.test.ts | 8 +++++++ src/fallback/inject.ts | 23 +++++++++++++++++-- 5 files changed, 52 insertions(+), 2 deletions(-) create mode 100644 CREDITS.md diff --git a/CREDITS.md b/CREDITS.md new file mode 100644 index 0000000..cb3f70a --- /dev/null +++ b/CREDITS.md @@ -0,0 +1,9 @@ +# Credits + +## Music + +**"11th-hour"** by TDK + +- Source: [The Mod Archive, module id 67104](https://modarchive.org/index.php?request=view_by_moduleid&query=67104) +- License: [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/) +- Used unmodified. diff --git a/docs/superpowers/specs/2026-07-09-clement-saillant-cc-design.md b/docs/superpowers/specs/2026-07-09-clement-saillant-cc-design.md index 27b6af0..e47cf06 100644 --- a/docs/superpowers/specs/2026-07-09-clement-saillant-cc-design.md +++ b/docs/superpowers/specs/2026-07-09-clement-saillant-cc-design.md @@ -141,3 +141,10 @@ board and alight at stops like passengers. - Final bio text + pixel-art avatar. - Greetings list content. - MOD module choice (original Électron Fou chiptune vs licensed module). + +## Descoped (2026-07-09) + +- Ordered-dithering post-process was replaced by low-dpr chunky pixels — + an equivalent retro effect with zero added dependencies. +- Per-stop audio ambience shift at the Électron Fou stop was deferred; + a single MOD track ships for the whole ride instead. diff --git a/src/content/music.ts b/src/content/music.ts index fc95a8d..2d30300 100644 --- a/src/content/music.ts +++ b/src/content/music.ts @@ -4,3 +4,10 @@ export const MUSIC = { listenLabel: 'Écouter sur Bandcamp', listenUrl: 'https://lelectron-fou.bandcamp.com', } + +// Attribution for the background MOD track (public/music/ride.mod), +// "11th-hour" by TDK, CC BY 4.0, from The Mod Archive. Kept HTML-free +// here so it stays a pure string; src/fallback/inject.ts wraps it with +// the license/source links for the semantic fallback markup. +export const MUSIC_CREDIT = + 'Musique : « 11th-hour » par TDK — CC BY 4.0, The Mod Archive.' diff --git a/src/fallback/inject.test.ts b/src/fallback/inject.test.ts index 4135ad9..10e5d4d 100644 --- a/src/fallback/inject.test.ts +++ b/src/fallback/inject.test.ts @@ -20,4 +20,12 @@ describe('renderFallbackHtml', () => { const out = renderFallbackHtml(template) expect(out).not.toMatch(//) }) + it('credits the ride.mod track with a CC BY 4.0 link', () => { + const out = renderFallbackHtml(template) + expect(out).toContain( + '

Musique : « 11th-hour » par TDK — ' + + 'CC BY 4.0, ' + + 'The Mod Archive.

', + ) + }) }) diff --git a/src/fallback/inject.ts b/src/fallback/inject.ts index a8a2948..d06753d 100644 --- a/src/fallback/inject.ts +++ b/src/fallback/inject.ts @@ -1,7 +1,25 @@ import { BIO_LINES, NAME, TAGLINE } from '../content/bio' import { GREETINGS } from '../content/greetings' import { LINKS } from '../content/links' -import { MUSIC } from '../content/music' +import { MUSIC, MUSIC_CREDIT } from '../content/music' + +// MUSIC_CREDIT is a plain, HTML-free sentence (see content/music.ts); wrap +// its two attribution terms with the license and source links here so the +// content module stays free of markup. +const MUSIC_CREDIT_LICENSE_URL = 'https://creativecommons.org/licenses/by/4.0/' +const MUSIC_CREDIT_SOURCE_URL = + 'https://modarchive.org/index.php?request=view_by_moduleid&query=67104' + +function renderMusicCredit(): string { + const html = MUSIC_CREDIT.replace( + 'CC BY 4.0', + `CC BY 4.0`, + ).replace( + 'The Mod Archive', + `The Mod Archive`, + ) + return `

${html}

` +} export function renderFallbackHtml(html: string): string { const nav = LINKS.map( @@ -11,7 +29,8 @@ export function renderFallbackHtml(html: string): string { const bio = BIO_LINES.map((line) => `

${line}

`).join('\n ') const music = `

${MUSIC.title}

${MUSIC.blurb}

` + - `

${MUSIC.listenLabel}

` + `

${MUSIC.listenLabel}

` + + renderMusicCredit() const greetings = `

Greetings to ${GREETINGS.join(', ')}.

` return html .replace('', NAME)