pickd.
pickd. consolidates real-time court availability from 8+ booking platforms across Davao City — filter by district, surface, price, and time, then book in one tap.
Scroll or use arrows — keyboard ← → when focused. Click image to view full size.
The Problem
Court availability is scattered across multiple fragmented booking platforms.
There's no single place to see what's free when — so players either hop between tabs or show up to full courts. Venues lose bookings, players waste time.
The Approach
Instead of building another booking platform, we built a bridge between them — a single window into every court in the city.
We started with Davao City and Mindanao, onboarded every booking platform we could find, and designed the experience to be dead simple: pick a date, see what's free, tap to proceed to the booking provider.
Technical decisions worth noting
Tiered sync by date horizon
Today through next 7 days sync every 30 minutes; days 8–14 every 3 hours; further dates only on demand. Why fetch 15,000 API calls a day when most dates are never viewed by anyone? The cost is a slightly slower experience for users who search far in advance.
- Next.js
- NestJS
- Redis
- BullMQ
- PostgreSQL
Outcome
- The system aggregates 8+ platforms plus manual venues into one database, surfaced through the same interface.
- The queue-based design (per-job retry, tiered sync by date, provider isolation) means a single provider's API breaking or a CSS class rename on an HTML scrape doesn't cascade into a total outage.
- Because every filter lives in the URL, a player can send "courts free tomorrow after 5pm in Matina, sorted by price" as a single link.