Problem
Planning a trip often means switching between notes, maps, spreadsheets, weather forecasts, and group chats. Travelers need one place to organize a realistic schedule, understand routes and costs, and coordinate changes without losing context.
Solution
Built Waypt, a responsive travel-planning PWA that turns destinations, dates, accommodation, and traveler preferences into structured itineraries with Gemini. Trips combine collaborative editing, Google Maps routes, budget tracking, weather and currency context, reusable templates, and polished PDF exports.
Impact
- 15.6KLines of TypeScript, written solo
- 4Server-side API routes
- 14 daysLongest itinerary generated
Tech Stack
Approach
- 1
Used Supabase for authenticated trip data, collaborator roles, activity history, and real-time collaboration updates
- 2
Built the Gemini generation pipeline as a server-side Next.js API route so the API key never reaches the browser, with exponential-backoff retries on transient 503s (and deliberately none on 429 quota errors), strict JSON parsing, and field whitelisting
- 3
Integrated Google Maps geocoding and route calculation for walking, transit, and driving between itinerary activities
- 4
Combined itinerary scheduling with budgets, destination-aware currency conversion, live weather context, reusable templates, and PDF export
- 5
Delivered the experience as a responsive installable PWA with a dedicated administration and trip-moderation workspace
- 6
Source is private, but I am glad to walk through the code or share access on request
Challenges & Solutions
Turning unpredictable AI output into itinerary data that could be saved safely
Added retry handling for temporary Gemini outages, rejected invalid response shapes, filtered unusable activities, and whitelisted every field before inserting generated items into Supabase.
Keeping route options accurate when mapping APIs return misleading transit results
Validated transit responses for real transit legs, discarded walking-only fallbacks labeled as transit, and cached valid routes between consecutive activities.
Supporting collaborative planning without allowing edits to bypass trip ownership
Implemented collaborator roles, real-time membership updates, owner approval states, activity logs, and notifications for proposed itinerary changes.