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.
78 lines
3.2 KiB
Markdown
78 lines
3.2 KiB
Markdown
# 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.
|