Schmidt
Flagship project In build · 2026

Benchside

A family-first hockey management platform. One schedule, one ledger, one household — even when that household spans two homes and three clubs.

The app is in build — expect rough edges and demo data.

The problem

Every tool was built for the club.

A season runs on a team app, a league portal, an e-transfer thread, a shared calendar somebody's mother maintains, and a group chat where the actual decisions happen. Each one is organised around a team. None of them knows that the two kids in the photo are siblings.

So the family does the integration by hand — every week, at 6am, in a parking lot.

The idea

Make the household the primary object.

Teams, providers, associations, merchants and grandparents all attach to it. Two commitments in the data model make that work, and neither can be retrofitted later.

Commitment one

A household spans clubs

Association membership sits on the player, not the account. A family with one child in Hockey Calgary and one in the Super League sees each child's own vocabulary, divisions and calendar — inside one view of the week.

Commitment two

An event's organiser is polymorphic

A team, a household or a third-party provider can all own an event. That is what lets conflict detection catch a privately booked dryland session colliding with a club practice — the case every team app misses, because it never sees the other one.

Scope

Five things a team app won't do.

Third-party providers

Skills coaches, power skating, dryland, goalie and physio sign up as providers, get hired by a team or a household, and schedule into the same calendar and ledger as everything else. Credentials — background check, safe sport — gate booking with minors.

Merchant fundraising

A restaurant agrees a revenue share and scannable codes attribute the spend. A team code fills the team pot; an athlete code credits that family's own fee balance. Monthly remittance settles into the ledger, so the fundraiser and the invoice are the same system.

External ice availability

Nightly ingest of open ice by rink and price, attributed to the source with a deep link out to book. Benchside surfaces the slot; the rink still takes the booking. No scraping a checkout, no sitting between a family and their money.

Guest access

Grandparents sign up against an invite pass and get a read-only schedule they can subscribe to in their own calendar. Games are on by default, practices are opt-in per team, and redaction happens server-side rather than by hiding a field in the UI.

Registration & split billing

An association invites a guardian for a named player, the guardian signs the club's agreements, and the invoice issues. Signatures freeze against a document version and its body hash. A split across two households is a proposal the other side accepts — never a setting one parent can flip.

Player development

Photo, birth year, height, team and level. Progression tracked across seasons so a fifteen-year-old can see the whole arc, with stats entered by hand rather than scraped from a league site that changes every August.

Build

Where it stands.

  • Domain model and conflict detection green against seeded data
  • Fourteen routes building clean, including the sign-in and registration flow
  • Swappable data adapter — in-memory today, Postgres behind the same interface
  • Deploying to Google Cloud Run as a standalone image

Design partner conversations are open now for the 2026–27 season. What I want from a first club is not a cheque — it is a season's worth of complaints.

Specification

Framework
Next.js 15, App Router
Language
TypeScript, strict
Styling
Tailwind v4 over Open Ice tokens
Typeface
Manrope
Data
Typed domain model, swappable repository
Platform
Mobile-first web, installable PWA
Hosting
Google Cloud Run
Ice data
CatchCorner, attributed with a link back

Design

Open Ice

A rink at 6am is a phone-in-a-glove environment. The design system answers that with generous whitespace, large calm type, soft edges and one accent used sparingly, so that when colour appears it means something.

Club colour enters through a single token. A crest upload rethemes the whole product without moving an edge, and contrast is checked first — a pale kit gets darkened rather than rejected. The same system runs this website, which is why the two look related.

Early access

Want it for your club?

Tell me which association you are in and how many kids you are juggling. I read every one of these myself.

No launch list, no drip sequence. I reply personally within two business days.

← All projects