App: Open de app — https://bos.val.run/ Val: https://www.val.town/x/raymondv/biljartcompetitie
De homepage toont nu de tussenstand en daaronder alle partijen, nieuwste datum eerst. Nieuwe partij is voor iedereen klikbaar: kies jezelf, kies een nog beschikbare tegenstander, vul beide scores en de datum in. Vandaag is vooraf ingevuld.
Dit is bewust een frontendprototype: toevoegen past uitsluitend de tijdelijke browserweergave aan. Vernieuwen herstelt de online stand. Er worden geen openbare wijzigingen naar de database geschreven. Formulieren, login en beheer zijn uit de nieuwe voorkant gehaald; de eerdere serverfuncties zijn behouden voor later.
Vormgeving: frontend/style.css. Invoer: frontend/components/PartyForm.tsx.
Lokale voorbeeldserver: node tests/preview-server.ts (poort 4173), met een
kopie van de getranspileerde clientmodules in preview/. Testdata blijven
lokaal.
De onderstaande beschrijving documenteert de eerdere versie en backend.
React 18.2, Hono en Val Town SQLite (std/sqlite/main.ts, val-scoped). Geen
betaald extern systeem, geen persoonlijke cloudschijven.
index.ts: API, OAuth-rollencontrole, CSRF-controle, export en
frontend-routes.frontend/logic.ts: spelregels, validatie en afkortingen.frontend/components/App.tsx: navigatie en schermen.frontend/components/Forms.tsx: uitslagformulier, stand, deelnemersbeheer.frontend/components/WeekForm.tsx en frontend/print.css: A4-formulieren.frontend/root.tsx: HTML-shell en versiegebonden assets.Database:
competition: één JSON-document met spelers/uitslagen en een integer
version.history: SQLite-trigger bewaart elke wijziging atomair met oude/nieuwe
stand, actor en actie.admins: eigenaar op onveranderlijk Val Town-user-ID; spelleiders op
toegekende gebruikersnaam.access_check: lege tabel voor toegangstests.Updates gebruiken WHERE version = ? plus RETURNING; een verouderde update
geeft HTTP 409. Servervalidatie weigert ontbrekende scores,
negatieve/breuk-scores, ongeldige datums, dezelfde speler en dubbele paren in
beide richtingen.
Codex kan via de Val Town-plugin code en de val-database onderhouden. Namen en
uitslagen staan in de database, niet in de publieke broncode. Publiceer geen
lokale data/ of back-upbestanden als broncode.
Herstel door Codex: valideer een JSON-back-up, exporteer eerst de huidige stand,
voer daarna een parametergebonden update van competition uit met
versiecontrole, hogere versie en herstelactie. De trigger bewaart de eerdere
stand. Verwijder de geschiedenis niet stilzwijgend.