Tennis MTL
Tennis MTL is a faster, cleaner way to find open tennis and pickleball courts in Montreal. It queries the City of Montreal's public reservation system (loisirs.montreal.ca) live, lets you filter by day, park, and time of day, and one-click jumps to the City booking page with the right court and time pre-filled.

Problem
Booking a public tennis court in Montreal means navigating loisirs.montreal.ca — a slow, paginated municipal system that hides availability behind multiple form steps and offers no way to scan all open slots at a glance.
Approach
Built a thin, fast UI on top of the City's IC3 search API. Users pick a day, sport, park, and time of day; see every open slot in one scannable view; and click any slot to jump straight to the City booking page with the court name and time pre-loaded so checkout is one step.
Key Features
- Live availability across tennis (indoor + outdoor) and pickleball
- Filters by day, park, and time of day (morning, afternoon, evening)
- One-click deep links to the City booking page with court and time pre-filled
- Mobile-first responsive layout
- Free to use, no sign-up — auth happens once on the City's site
Outcomes
- Reduces a typical court-finding flow from roughly six clicks to one
- Surfaces all open slots in a single scannable view instead of paginated lists
- Always reflects loisirs.montreal.ca live — no caching drift or stale availability
Architecture
Next.js 16 App Router with shadcn/ui and Tailwind v4. Server-side proxy of the City of Montreal IC3 search API with timezone-aware slot bucketing in America/Toronto. Deployed on Vercel. Ships with llms.txt, robots.ts, sitemap.ts, and a dynamic OG image baked in.