Lyrics, versioning, and the song page's fact line.
- Lyrics are suggested at submission and never imposed: the worker makes one
LRCLIB lookup, and Hae sanoitukset re-queries with whatever title and artist
are typed. Neither overwrites what the submitter wrote. They live on the
submission, travel to the song at publish, and stay editable after the song
locks — the lock freezes what a song claims to be, and nobody reviewed the
lyrics
- The review strip reads and writes side by side: lyrics left, review right.
Synced LRC highlights the playing line and seeks on click; plain text scrolls
continuously with a nudge knob. Following can be turned off
- CalVer YYYY.MM.DD-N, injected from the git tag with -ldflags, shown in the
footer, the startup log and /healthz
- The song page's metadata became four labelled cells instead of one flat run
of five different kinds of fact
Fixes: publishing wiped lyrics the worker had just fetched (a request that
omitted a field cleared it), lyric auto-scroll landed in the wrong place, and
the fader shifted the deck sideways at score 100.
Step 1 of the build order in docs/decisions.md. Boots, applies migrations
before serving, and serves a health check and an empty admin page.
- 001_init.sql is the full schema from docs/spec.md, including the check
constraints and indexes the old app lacked
- The startup sweep fails submissions left mid-conversion by a restart; an
in-process goroutine dies with the process and those rows would otherwise
say converting forever
- Admin is Basic Auth from env on its own listener, fatal at startup when
ADMIN_PASSWORD is unset