Pulling Adelaide's scattered event listings — six sources, plus paper posters — onto one map.
Stack — SvelteKit, TypeScript, Python, FastAPI, Supabase, Mapbox GL JS, OpenAI Vision API, Selenium, BeautifulSoup
Finding out what's on in Adelaide means checking Eventbrite, Ticketmaster, Experience Adelaide, SA Tourism, the Adelaide Festival Centre, and Google Events separately — and that's before you get to the flyer stapled to a pole outside a cafe, which isn't on any of them.
Mapster pulls 100+ live events from six sources onto one interactive map. The harder problem wasn't fetching the data — it was that the same event routinely showed up from more than one source with a slightly different title, time, or venue name, so a meaningful chunk of the work was the dedup logic that decides two listings are actually the same event.
The map also reads paper posters: point a photo at OpenAI's Vision API, and it returns a structured event — name, date, time, venue — that goes onto the map the same way a scraped listing would.
Built in one hackathon weekend with the HackerCodex team. My part was the interactive map, the Ticketmaster API integration, and the scraper dedup logic. It placed 2nd at the CSC × UPC Hackathon 2025.
SvelteKit and TypeScript on the frontend, a Python/FastAPI backend running the scrapers (Selenium and BeautifulSoup) and the OpenAI Vision calls, Supabase for storage, and Mapbox GL JS for the map. Deployed on Vercel and Railway.