Fanta Rainbow
Live fantasy football auctions. The house keeps the books, players open a link and bid from their phone, the countdown decides. What is left afterwards is the league, the squads and the album.
The product
Fanta Rainbow is the house at a fantasy football auction. The organiser creates the auction, picks the team names and gets a personal link for each one; on auction night the board runs on a big screen and everyone else is on their phone. Whoever bids last before the countdown runs out takes the player.
No spreadsheets, no credits counted by hand, no "but I said 34 before you did": the server keeps the books and everybody sees the same countdown on the same second. Including whoever is not in the room.
What it does
- A two-stage auction - urna, the pool the auctioneer draws from at random for the star players; chiamata, everyone else, put up for auction only when someone searches them by name to fill a slot.
- Bidding from a phone - no app to install and no sign-up for the people playing: they open their own link and raise.
- Synchronised countdown - the client corrects the drift between its own clock and the server's, so playing remotely does not hand anyone an extra second.
- Squad rules enforced by the house - a full position rejects the bid; a credit reserve is computed on the remaining slots so every squad can be finished; the auctioneer can undo the last sale, refund included.
- Player list import - the official Fantacalcio.it CSV as it comes, columns matched by header rather than by position, Mantra roles folded back into the four classic ones.
- The season, not just the night - head-to-head or total-points league, lineups gameweek by gameweek, achievements, Rainbow credits and a sticker album opened in packs.
Stack
Nuxt 4 and Vue 3 with Tailwind CSS v4, PostgreSQL queried in hand-written SQL, Stripe for the league credit, S3 storage for images, Docker deploys.
There is no timer running on the server: every bid writes the lot's expiry, and the first request that finds it in the past awards the player. Writes are compare-and-swap on the row version, so two bids in the same instant never overwrite each other - the second one is replayed against the updated bid. Invariants are checked on every mutation (credits consistent with the squads, no player in two teams, ledger aligned): a write that violates them is not persisted.
Model
A one-off league credit: 10 € per league, unlimited teams, paid by the organiser only. No subscription, no per-participant cost, no features locked halfway through the season. Finished leagues stay readable and export to JSON.
Status
Live in production at fantarainbow.com.