01
The challenge
A thirty-player league, run by hand.
Sombrero's Hockey plays Thursday nights at Lansdowne in Ottawa, since 2014: about thirty players, a single-elimination bracket and a $3,000 pot.
Everything ran through emails, a WhatsApp group and a spreadsheet. Who plays this week, who paid, who's winning, and every week, someone chasing parking passes.
- Emails
- WhatsApp group
- Spreadsheet
- Printed passes
02
What we built
One site that runs the league.
We replaced all of it with one site the players open on their phone. At a glance:
- 01
Odds for every game, built from career stats
Stats - 02
A file for every player, league by league
EliteProspects - 03
Team photos for 26 players, without a photo shoot
Photo and AI - 04
The score, rosters, recap and three stars of every game
Content - 05
The bracket, the season race and the schedule
Tournament - 06
The team draft, live
Real time - 07
$5 parking, fully automated
Automation - 08
Log in by text and the site on the home screen
App
The odds
Before every game the site posts the line: the favourite, both teams' odds and the most likely final score. It starts from each player's career on EliteProspects, brought to a common level according to the league he played in: NHL, AHL, NCAA, Europe or junior. Each player's chance to score comes from his goals per game.

Player files
Thirty-one players, thirty-one files: the photo, position, hometown, the season's wins and stars, then the whole career league by league, with games and points. Race points update after every game.

Game nights
After every game: the score, overtime and shootouts included, both rosters with photos, the recap of the night and the three stars. The pre-game line stays up, so you see right away whether the favourite won.

The bracket
Thirty players, one single-elimination bracket. Every week the wheel picks the matchup; the two players become captains and draft their teams one pick at a time, live on the site. Alongside, the season race splits the $3,000 pot between the top three.

Parking
The player logs in with a code sent by text, buys a $5 pass and pays by Interac e-Transfer. The site recognizes the payment and the pass lands on his phone. The site also installs on the home screen, like an app.

03
The photos
Team photos, without a photo shoot.
Nobody had to pose. From a single photo found online (a wedding, a picture with his dog, an old team photo), we used AI to create two studio photos per player, in the league's black and white jerseys, with the real sponsors.
Same light, same backdrop, same framing for everyone. And for a few of them, a funnier take.





















04
Parking
Seven steps every week. Now, three taps.
Before, someone had to ask who needed a pass, follow up, count, send the number to the parking office before the deadline, pay in person, pick up the printed passes and hand them out one by one.
Now the player handles it himself, whenever he wants. The site does the rest.
Seven steps, against the clock
- Every week
- Deadline
- In person
7steps, every week
Three taps, on his phone
- Any time
- From anywhere
- Nothing printed
3taps, whenever he wants
05
The results
What it adds up to.
- 31player files, career included
- 26players photographed, without a single shoot
- 0printed passes
- 5 minto recognize an Interac e-Transfer
- 24/7to buy a pass, from anywhere
Under the hood
The site runs on Cloudflare Workers with a D1 database. The prediction model converts each league's stats to an NHL equivalent, then works out the goals in each half from the strength of both teams and the size of the bench. Every five minutes the site reads the inbox where Interac e-Transfer notices arrive and matches them to orders, even when the player writes the invoice number his own way. Players log in with a code sent by text. The Thursday WhatsApp poll feeds the list of players for the draft.

