The Nuxt version is being rewritten in Go. This is the design that came out of it, split by how each part ages: - CONTEXT.md glossary, English identifiers and Finnish UI wording - docs/spec.md behaviour: rules, submission pipeline, routes, API contract, schema - docs/decisions.md why, append-only - docs/later.md deliberately not in v1 testdata/ytdlp-noose.json is a real yt-dlp dump used to test metadata prefill against a video with no track, artist or album tags.
3.2 KiB
Levyraati
A private music review club for about ten friends. Members submit songs and review each other's picks; other people's opinions of a song stay hidden until you've written your own.
Identifiers, schema, and routes are English. Rendered text is Finnish only. Each term below carries both, so the UI uses one word per concept everywhere.
Language
Member — jäsen: A person with an account. Every account is a member; there is no other kind. Avoid: user, käyttäjä, account
Admin — ylläpitäjä: The operator of the installation. Not a member and not an account — a set of credentials on a separate surface. Never submits, reviews, or appears in any list of people. Avoid: admin user, superuser, role
Invite — kutsu / invite code — kutsukoodi: A one-time code that permits one registration. Spent only by a registration that succeeds.
Song — kappale:
A published piece of music with its converted audio, submitted by a member. A row in songs is a
real song with no qualifier.
Avoid: track, biisi, levy (that's a record, the wrong unit)
Submission — (no Finnish noun; the member sees only the verb lähettää and a status): A song in flight — uploaded or downloaded, converting, not yet published. It becomes a Song at Publish and ceases to exist as a Submission.
Publish — julkaise: The submitter's explicit act of turning a converted Submission into a Song. Never automatic.
Review — arvostelu: One member's score and written verdict on one song. At most one per member per song, and never on your own song.
Reviewer — arvostelija: The member who wrote a review. Reviews are never anonymous.
Score — pisteet: An integer 1–100 given in a review. Avoid: rating, arvosana
Reveal: Gaining access to other members' opinions of a song by having written your own review of it — or by being its submitter. Covers the reviews and the song's average score, on every surface that names a song. Enforced in the query, never in the rendering.
Per-song opinion is gated; whole-history aggregate is public. A member's profile shows counts and averages over everything they have done, never how they reviewed any particular song.
Edit window: The 30 minutes after a review's last change, during which its author may edit or delete it. Then the review is on the record permanently.
Locked (of a song): Having at least one review, which freezes its title, artist, and description and prevents the submitter deleting it. A live state, not a one-way door: if the last review is deleted, the song is editable again.
Report — palaute: A member's free-text note about something broken or annoying, carrying the page they were on. Open until the admin resolves it. Deliberately has no category, priority, or severity. Avoid: ticket, issue, bug, vikailmoitus
Genre — genre: One value from a fixed list, chosen by the submitter. Avoid: tyylilaji, tag, category
Ban — estä: Ending a member's participation: login refused and live sessions dropped. Their songs and reviews remain and continue to count. Reversible.
Stats — tilastot: The always-public leaderboards. The only place aggregate opinion is visible without having reviewed.