Turning listings into usable events
Combined source-specific scrapers with AI extraction to turn listings and posters into structured events. Deduplication and venue resolution bring overlapping sources into one catalogue.
A web and mobile app for discovering places and planning a trip to Phuket. Behind the map, a scheduled pipeline collects events from multiple sources, removes duplicates, resolves venues and uses AI to turn listings and posters into structured data. A shared Fastify API serves the event catalogue, saved places and daily itineraries.
I independently designed and built the web and mobile applications, Fastify API and PostgreSQL data model, including the event-ingestion pipeline, map discovery and trip-planning workflows.
Combined source-specific scrapers with AI extraction to turn listings and posters into structured events. Deduplication and venue resolution bring overlapping sources into one catalogue.
Connected events and businesses on a clustered Mapbox map, with category filters and place details so visitors can explore what is nearby.
Connected account-synced favourites to a daily itinerary, letting visitors organise discoveries into a plan they can return to across sessions.
Combined Google Places and OpenStreetMap information with photos, opening hours and locations to give travellers useful context before visiting a place.
Built a shared Fastify API with validated request contracts and a PostgreSQL data model, keeping event, place and itinerary data consistent across clients.
A cream/teal editorial theme with custom typography (Newsreader / Hanken Grotesk) and a polished, content-first UI.
Email + password and Google sign-in via Better Auth, shared across the Expo client and Fastify server.
Expo Notifications for new events and itinerary reminders.
Uploads optimized with Sharp and delivered via Cloudflare R2 and Supabase storage.
Fastify with TypeBox schemas validating every request/response over Drizzle + Kysely on PostgreSQL.