Public
Clubcompetitie: uitslagen, standen en weekformulieren
Val Town is a collaborative website to build and scale JavaScript apps.
Deploy APIs, crons, & store data – all from the browser, and deployed in milliseconds.

Biljartcompetitie

App: Open de apphttps://bos.val.run/ Val: https://www.val.town/x/raymondv/biljartcompetitie

Actuele richting: eenvoudig mobiel ontwerp

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.

Eerdere versie: gebruik

  • Bezoekers zien standen, uitslagen, nog mogelijke tegenstanders en weekformulieren.
  • Alle openbare namen zijn unieke afkortingen van 4 letters; bij botsingen 5 letters en zo nodig een deelnemersnummer. Volledige namen worden uitsluitend aan ingelogde beheerders geleverd.
  • Log in met Val Town. De eigenaar beheert de toegang van spelleiders via hun exacte Val Town-gebruikersnaam. Een gratis account volstaat.
  • De app start als demonstratie met 60 fictieve uitslagen uit het aangeleverde Excelbestand. De eigenaar kan via Beheer expliciet een lege echte competitie starten. Startmoyennes zijn onbekend en worden niet verzonnen.
  • De 16 deelnemers kunnen hernoemd worden en hebben bewerkbare startmoyennes. Naamscorrecties gelden ook voor eerdere uitslagen; een persoon vervangen midden in een seizoen vereist aparte migratie.
  • Elke speler heeft 20 beurten. Winst 2 punten, gelijk 1, verlies 0. Sortering: punten, actueel moyenne, bij volledige gelijkstand oorspronkelijke deelnemersvolgorde. Geen handicapberekening.
  • Download wekelijks de JSON-back-up onder Beheer. Deze bevat de volledige stand en alle wijzigingsmomenten. CSV bevat uitslagen met afkortingen. Geen automatische externe back-up ingesteld.
  • Print: Weekformulier, kies actueel of blanco. A4 staand, 100%, browserkop- en voetteksten uit. Het blanco formulier toont geen uitslagstatus of actuele punten.

Techniek en onderhoud

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.