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)