Projects/SeasonSeats
SeasonSeats
Season ticket management for the companies that use seats to entertain clients and staff. One goal: zero empty seats.
Overview
Plenty of businesses buy season tickets — insurance brokerages, construction firms, accounting practices, dealerships. Almost none of them have a system for handing those seats out. It's a spreadsheet, a group email, and a filing cabinet of "who got the Oilers game in November?"
SeasonSeats optimises for exactly one outcome: zero empty seats. Every screen, workflow, and report is judged against that.
How it works
- Staff browse the season and request the games they want.
- Admins approve, assign, and reassign from a control tower view of the whole season.
- Tickets get delivered, attendance gets recorded, and the next allocation is informed by who actually went.
The rebuild
The original ran for about a year as a custom PHP app — root-level pages, mixed responsibilities, a legacy user model built around invite counts rather than organisations.
The current version is a ground-up rewrite on Next.js with an org-centric data model: users belong to an org, orgs own seasons, and permissions follow from that rather than from a per-user invite limit. Auth is Clerk, data is Drizzle on Neon Postgres, billing is Stripe, and transactional mail is Resend.
Stack
- Next.js
- TypeScript
- Drizzle ORM
- Neon Postgres
- Clerk
- Stripe
- Resend
- Tailwind