Laravel rebuild · 2026
Live
Competition Operations Platform
- Laravel 12
- PHP 8.2
- Filament 5
- MariaDB InnoDB
- Tailwind 4
- record
- projects/biljartv2
- status
- live
- type
- operational_rebuild
- role
- solo -- product + backend
- constraint
- non_developer_operator
- stack
- Laravel 12, PHP 8.2, Filament 5, MariaDB InnoDB, Tailwind 4
A typed import pipeline and purpose-built operator admin let the club secretary run the complete seasonal lifecycle without filing a request, and every data change traces back to a file upload, an approval action, and a named account.
The Problem
"Rondom het Stroomkanaal" is a regional billiards competition running a two-division league and a cup bracket annually, across 10–20 teams. The competition is run by club volunteers, and the club secretary manages the full operational calendar.
A 2022 admin rebuild made weekly operations safe to run: results moved into typed JSON files, public pages regenerated automatically, and the club secretary stopped editing HTML. But the flat-file model stayed in place. Results and standings lived in separate files with no enforced consistency, no audit trail, and no canonical record to diff against. Tracing an error still meant reading page content by hand.
Three years of running that system made the remaining gaps explicit. Structural operations such as loading a new fixture calendar, correcting a rescheduled match, or rolling over to a new season still required someone with server access. After three seasons, the limits were clear enough to justify a full rebuild.
What Was Built
The rebuild is a data operations system built for the club secretary, not the developer. The question it answers: what does it take for the club secretary to run the full seasonal lifecycle, including teams, fixtures, results, and archive management, without filing a ticket or touching a database?
Every season starts with an Excel workbook. That file goes through a five-step typed pipeline: proof, stage, review, approve, publish. Validation runs before any database write. A diff step classifies every row before publication and blocks if any existing result would be silently overwritten. Publication is transactional, so partial writes are not possible.
In-season updates go through purpose-built bulk entry forms, not re-imports. Public pages read directly from canonical tables with no manual deployment step. Season visibility is controlled independently, so next year's fixtures can be loaded and approved without affecting what the public currently sees.
The scope is deliberate. This is not a CMS or a general admin tool. It is a purpose-built system for one operational task, with hard constraints on what can be changed and a full record of everything that was.