The problem
Connect the discovery of real filming locations with a usable travel-planning experience, bringing the interface, relational data, AI-generated itineraries and subscriptions into one personal product.
Architecture & flow
Application components and their responsibilities; infrastructure details are intentionally omitted.
Next.js / React
Map-first discovery, filtering and the user-facing planning experience.
NestJS API
Backend supporting the product experience and its data.
PostgreSQL / Prisma
Relational data linking titles, filming locations and user journeys.
Feature-level flow using stored locations as context, with normalization and fallback behavior.
Selected locations
Use locations selected from the database as planning context.
Gemini
Generate an itinerary using that location context.
Normalize & handle fallbacks
Prepare generated output for the planning experience, with fallback behavior.
Travel suggestions
Present an itinerary and generated suggestions, not live inventory.
Decisions & trade-offs
- Location data supplies the context
- The itinerary feature uses locations selected from the database. The relational model and the generated itinerary have different responsibilities: stored places provide context; Gemini generates a plan.
- Treat generation as a product boundary
- Normalization and fallback behavior are part of the implementation. Generated flights and hotels are suggestions, not verified availability or a booking service.
- Include the paid-product surface
- Stripe checkout and subscription integration sit alongside discovery and planning. Building the product end to end also meant implementing the frontend, backend and database.
The result
An end-to-end personal product combining map-based discovery, AI itinerary generation and Stripe subscriptions, with frontend, backend and data modeling built together.
Simplified view based on the documented implementation. Generated travel suggestions are not verified live inventory.