Matchday live · 4,182 fans voting

A stadium of opinions. One clear signal.

12VOX turns the chaos of matchday social media into structured, real-time fan democracy — live votes before, during and after the whistle, segmented by allegiance so the consensus actually means something.

1.2s median vote latency
Segmented by club & country
90+ min live engagement window
Northside FC vs Rivals UnitedPremier League · Matchweek 24 LIVE
NFCNorthside FCHome
1–1
RURivals UnitedAway
63′ · Second half · 4,182 fans active
Viewing as:
You're viewing the whole ground. Switch allegiance above to see how each fanbase actually voted — one vote per fan, per card.
The product

Built for the ninety minutes, not the post-match autopsy

Voting windows that open and close with the match clock, segmented results, and spaces that outlive the final whistle.

Timed vote windows

Cards open at kickoff, at key events, or at half-time and lock when the clock says so. No vote is valid outside its window.

Allegiance segmentation

Rights are scoped by club and nationality. Results can be cut by fanbase, so a home crowd's verdict is never drowned out.

Live swing tracking

Watch opinion move in real time as the match turns. Momentum on a card is as interesting as the final split.

Awards & tournaments

Season-long award ballots and bracket tournaments that run alongside the fixture list, not just on matchday.

Debate threads, not pile-ons

Every vote card anchors a structured thread. Replies are tied to a position, which shapes the conversation instead of rewarding volume.

Integrity by design

One account, one vote per card. Rate limits, device signals and optional supporter verification keep brigading out of the tally.

Matchday arc

Three windows, three different questions

Fan opinion changes as the game does. The card set should change with it.

Before kickoff

Expectation & lineup

Predicted score, confidence in the XI, the substitution fans already want to see. Baselines set before emotion takes over.

During the match

Reaction & calls

Was that a penalty? Player of the half so far? Should the manager change shape now? Cards open on events, close on the next.

After the whistle

Verdict & ratings

Player ratings, turning point of the game, and how the fanbase feels about the result once the adrenaline fades.

Across the season

Awards & tournaments

Goal of the month, player of the season, and knockout brackets that accumulate a real fan-consensus record over time.

Why it matters

Social media gives you volume. 12VOX gives you a result.

The problem isn't that fans don't have opinions. It's that nothing measures them.

The group chat & timeline

  • Loudest accounts dominate; quiet majority invisible.
  • No separation between home and away — rival fans skew every poll.
  • Bots and brigades move results with no accountability.
  • Nothing is time-bound — a vote four days later looks identical to one in stoppage time.
  • No record, no history, nothing to compare across a season.

12VOX

  • One fan, one vote per card — the count is the count.
  • Results segmented by club and nationality, so rival noise can't erase a fanbase's view.
  • Rate limits and integrity signals make coordinated brigading visible and stale.
  • Time-stamped windows tied to the match clock — context is preserved, not flattened.
  • A season-long consensus record fans, clubs and broadcasters can actually cite.
Architecture

Engineered for velocity without runaway cost

A live match generates a burst of traffic that would bankrupt a naive per-request stack. The design absorbs that burst instead of paying for it.

Client
  • SPA · Node.js + Express
  • Optimistic vote UI
  • WebSocket result stream
  • Offline-tolerant queue
  • Match clock sync
Data layer
  • MongoDB vote store
  • Pre-aggregated counters
  • TTL-indexed live windows
  • Immutable ballot log
  • Read replicas for tallies
Hot path
  • Redis counters + pub/sub
  • Idempotent vote writes
  • Per-user dedupe keys
  • Debounced broadcast (1s)
  • Rate limit per device
Integrity
  • One-vote-per-card constraint
  • Allegiance scoping
  • Bot & brigade detection
  • Audit trail on tallies
  • Window open/close ledger
12vox / README.md
12vox/
├── client/               # SPA build & views
│   ├── match-centre/     # live vote card components
│   └── socket-client/    # result stream + clock sync
├── server/
│   ├── routes/           # REST: matches, cards, votes
│   ├── sockets/          # live tally broadcast
│   ├── jobs/             # window open/close scheduler
│   └── middleware/       # auth, rate limit, integrity
├── models/
│   ├── Match.js
│   ├── VoteCard.js
│   └── Ballot.js         # unique index: (user, card)
├── aggregation/
│   ├── counters.js       # hot-path increments
│   └── snapshots.js      # post-match rollups
└── config/
    └── redis.js          # counters + pub/sub
Beyond matchday

Spaces that outlive the final whistle

Not everything worth deciding happens in ninety minutes.

Player of the season

A season-long ballot that accumulates a real fan verdict, weighted per fixture.

Goal of the month

Shortlists fans argue about properly, with a head-to-head bracket instead of a reply thread.

Tournament brackets

Knockout votes that mirror the real competition, one round at a time.

Fan consensus archive

Every closed card becomes a permanent, citable record of what supporters actually thought.

Questions

Straight answers

How do you keep one fan from voting ten times?
Each ballot is written with a unique constraint on the pair (account, card). A second write for the same pair is rejected at the database level, not just hidden in the UI. Rate limiting and device signals add friction on top, and optional supporter verification is available where a league wants higher assurance.
What stops rival fans from skewing my club's results?
Nothing — and that's by design. Results are segmented, so a card always shows the split for each fanbase separately. A rival influx changes the "everyone" view but cannot erase what your own supporters voted. That separation is the core integrity idea.
How does this stay affordable during a big match?
Votes are written to a hot counter store and only periodically flushed into the durable store, so thousands of votes per minute become a small number of write operations. Results stream over a debounced socket broadcast rather than being re-fetched per client, and live windows carry a TTL so stale match data expires on its own.
Can votes be changed once cast?
Per card, by policy. Most live cards allow one change within the window (that's how "swing" data gets measured); post-match verdict cards lock on submit. Either way the closed tally is immutable and timestamped.
Is this official or affiliated with a league?
Not unless a league signs on. 12VOX is an independent fan-engagement platform. It measures supporter sentiment; it has no bearing on official results or club decisions.
What's the biggest risk to a platform like this?
Manipulation and burnout. Brigading can be mitigated technically, but never fully — and a platform that demands attention every single matchday has to earn it with a genuinely better experience than shouting into a timeline. The second problem is a product problem, not a database one.

About this demo

This is a product concept and interface demonstration. The match, teams, and every vote tally shown are simulated in your browser — no backend is connected and no real fan data exists.

12VOX measures supporter opinion only. It is not affiliated with any club, league or governing body, and nothing here influences official sporting outcomes.