Behind the Build

Idea to live - accurate, fast and lovely - in an afternoon

This whole hub - ten pages, every fixture, both squads, a live calendar, a full timeline, the knockout bracket and a hall of champions - went from a blank page to live, accurate and good-looking in about five hours. It's since gone real-time - live scores stream in from a match feed, and every collection is a reusable REST API. No framework, no build step. Here's the honest how — and why it was that quick.

~5 hrsIdea to live
10Pages
5Collections
5Custom CSS blocks
184Data rows
~60sLive score lag
0Dependencies added

The brilliance is the system

Four simple parts that do all the heavy lifting

The data

Collections

Every fixture, player, champion and team lives in a collection — structured data, now backed by MongoDB. 104 fixtures, 52 players, 22 winners, 48 teams. Scores arrive from a live match feed; the site updates itself.

The look

Custom CSS blocks

A single styled template per card — squad cards, fixture cards, the winners' roll, the timeline. Write it once; the data pours through it. Change the design in one file, every card follows.

The interactivity

Components

The live bits — the month-grid calendar, the kick-off countdowns and the live-score ticker — are self-contained Domma components that fetch their own data and update in place, no page refresh.

The glue

Shortcodes

Pages are composed from plain [collection], [hero] and block tags. No build step, no framework wiring — just drop a tag and it renders.

Now it's real-time

Live scores from a real feed — and a REST API anyone can build on

The feed

Real-time data

A scraper pulls scores into MongoDB every minute while matches are live. The fixtures and schedule collections read straight from the database — nothing is typed in; the moment a goal goes in, the board catches up.

No reloads

Live on the page

A polling component watches the API and patches each card's score in place — the countdown flips to ● Live, then the full-time scoreline, with no refresh.

Build on it

Reusable REST API

Every collection is a RESTful endpoint out of the box — /api/collections/wc-schedule/public returns clean JSON. The same data the site renders is yours to reuse in any app.

Why it's that fast

One source of truth, many views

The same fixtures collection powers the fixture cards, the calendar, the timeline and the full schedule — four completely different views, zero duplicated data. Edit one row in the admin and all four update at once. That's the whole trick: build the data once, render it everywhere.

Fast

File-based, cached, one script tag, no build pipeline. New pages render instantly; edits go live on save.

💪

Powerful

Collections, blocks and components compose into anything — cards, grids, calendars, timelines — all from the same data.

Lovely

One theme, custom CSS where it counts, 55 self-hosted images. Consistent and on-brand on every page.

It updates itself now

The old confession here was "scores are typed in by hand." Not any more — a scraper pulls live results into MongoDB every minute during matches, the fixtures and schedule collections read straight from the database, and a polling component updates each card with no page refresh. A couple of knockout slots still read "to be confirmed" until FIFA pins them, and every image is self-hosted on purpose — the content policy blocks third-party images, which keeps the site fast.

Fast, powerful, lovely to look at — and entirely owned. That's why Domma exists.