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.
This commit is contained in:
@@ -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.
|
||||||
@@ -141,3 +141,10 @@ board and alight at stops like passengers.
|
|||||||
- Final bio text + pixel-art avatar.
|
- Final bio text + pixel-art avatar.
|
||||||
- Greetings list content.
|
- Greetings list content.
|
||||||
- MOD module choice (original Électron Fou chiptune vs licensed module).
|
- 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.
|
||||||
|
|||||||
@@ -4,3 +4,10 @@ export const MUSIC = {
|
|||||||
listenLabel: 'Écouter sur Bandcamp',
|
listenLabel: 'Écouter sur Bandcamp',
|
||||||
listenUrl: 'https://lelectron-fou.bandcamp.com',
|
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.'
|
||||||
|
|||||||
@@ -20,4 +20,12 @@ describe('renderFallbackHtml', () => {
|
|||||||
const out = renderFallbackHtml(template)
|
const out = renderFallbackHtml(template)
|
||||||
expect(out).not.toMatch(/<!--(nav|bio|music|greetings|name|tagline)-->/)
|
expect(out).not.toMatch(/<!--(nav|bio|music|greetings|name|tagline)-->/)
|
||||||
})
|
})
|
||||||
|
it('credits the ride.mod track with a CC BY 4.0 link', () => {
|
||||||
|
const out = renderFallbackHtml(template)
|
||||||
|
expect(out).toContain(
|
||||||
|
'<p class="muted">Musique : « 11th-hour » par TDK — ' +
|
||||||
|
'<a href="https://creativecommons.org/licenses/by/4.0/">CC BY 4.0</a>, ' +
|
||||||
|
'<a href="https://modarchive.org/index.php?request=view_by_moduleid&query=67104">The Mod Archive</a>.</p>',
|
||||||
|
)
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
|||||||
+21
-2
@@ -1,7 +1,25 @@
|
|||||||
import { BIO_LINES, NAME, TAGLINE } from '../content/bio'
|
import { BIO_LINES, NAME, TAGLINE } from '../content/bio'
|
||||||
import { GREETINGS } from '../content/greetings'
|
import { GREETINGS } from '../content/greetings'
|
||||||
import { LINKS } from '../content/links'
|
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',
|
||||||
|
`<a href="${MUSIC_CREDIT_LICENSE_URL}">CC BY 4.0</a>`,
|
||||||
|
).replace(
|
||||||
|
'The Mod Archive',
|
||||||
|
`<a href="${MUSIC_CREDIT_SOURCE_URL}">The Mod Archive</a>`,
|
||||||
|
)
|
||||||
|
return `<p class="muted">${html}</p>`
|
||||||
|
}
|
||||||
|
|
||||||
export function renderFallbackHtml(html: string): string {
|
export function renderFallbackHtml(html: string): string {
|
||||||
const nav = LINKS.map(
|
const nav = LINKS.map(
|
||||||
@@ -11,7 +29,8 @@ export function renderFallbackHtml(html: string): string {
|
|||||||
const bio = BIO_LINES.map((line) => `<p>${line}</p>`).join('\n ')
|
const bio = BIO_LINES.map((line) => `<p>${line}</p>`).join('\n ')
|
||||||
const music =
|
const music =
|
||||||
`<h2>${MUSIC.title}</h2><p>${MUSIC.blurb}</p>` +
|
`<h2>${MUSIC.title}</h2><p>${MUSIC.blurb}</p>` +
|
||||||
`<p><a href="${MUSIC.listenUrl}">${MUSIC.listenLabel}</a></p>`
|
`<p><a href="${MUSIC.listenUrl}">${MUSIC.listenLabel}</a></p>` +
|
||||||
|
renderMusicCredit()
|
||||||
const greetings = `<p>Greetings to ${GREETINGS.join(', ')}.</p>`
|
const greetings = `<p>Greetings to ${GREETINGS.join(', ')}.</p>`
|
||||||
return html
|
return html
|
||||||
.replace('<!--name-->', NAME)
|
.replace('<!--name-->', NAME)
|
||||||
|
|||||||
Reference in New Issue
Block a user