← All projects
Web · Mobile · API

Phuket Tourist.

Travel Discovery & Planner

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.

My role

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.

Explore the project
Selected contributions

Engineering
highlights.

Technologies

React NativeExpoExpo RouterTypeScriptReact 19ZustandReact Hook FormZodBetter AuthMapboxSocket.IOExpo NotificationsFastifyTypeBoxDrizzle ORMKyselyPostgreSQLBunAnthropic ClaudePlaywrightCheerioSharpCloudflare R2Supabase
01

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.

02

Discovery around a location

Connected events and businesses on a clustered Mapbox map, with category filters and place details so visitors can explore what is nearby.

03

From saved places to a trip plan

Connected account-synced favourites to a daily itinerary, letting visitors organise discoveries into a plan they can return to across sessions.

04

A richer place directory

Combined Google Places and OpenStreetMap information with photos, opening hours and locations to give travellers useful context before visiting a place.

05

One API for web and mobile

Built a shared Fastify API with validated request contracts and a PostgreSQL data model, keeping event, place and itinerary data consistent across clients.

06

Editorial Design System

A cream/teal editorial theme with custom typography (Newsreader / Hanken Grotesk) and a polished, content-first UI.

07

Authentication

Email + password and Google sign-in via Better Auth, shared across the Expo client and Fastify server.

08

Push Notifications

Expo Notifications for new events and itinerary reminders.

09

Server-side Image Pipeline

Uploads optimized with Sharp and delivered via Cloudflare R2 and Supabase storage.

10

Type-safe API

Fastify with TypeBox schemas validating every request/response over Drizzle + Kysely on PostgreSQL.