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.

Next.jsTypeScriptshadcn/uiTailwindVercel
StatusLive
Year2026
RoleSolo Engineer
Tennis MTL homepage showing day, sport and park selectors above a See available slots button

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.

Visit Tennis MTL