Lumoria
Contextual travel planning system
A travel product that starts from where the user actually stays and combines interests, time, mobility and weather context.
- Status
- Live
- Type
- Product · Travel planning
- Role
- Co-product development · Systems and technical architecture
- Platforms
- Web
Context
Generic city lists give everyone the same overview. In real trips, origin, duration, walking preference and weather directly change route quality.
Problem
Several variables had to become one route decision without exposing a complex planning dashboard to the user.
My role
- Co-product development
- Systems and technical architecture
Solution
We treat hotel/location origin as fixed context and combine interests, duration, mobility preference and weather into one route context.
What was built
- Location / hotel-based route origin
- Interest and duration context
- Walking preference and weather awareness
- Discovery memory
- Form validation and responsive planning flow
System architecture
- Hotel / Origin
- Interests
- Duration
- Mobility
- Weather
- Route Context
- Itinerary
Technical stack
Frontend
React 19 · TypeScript · TanStack Start · TanStack Router · TanStack Query · Tailwind CSS 4 · Radix UI · React Hook Form
Backend / Data
Supabase
Validation
Zod
Runtime
Vite · Nitro
Important engineering decisions
- Build route context from the real origin rather than the city center
- Expose the multivariable system as one decision flow
Code / architecture excerpts
01const routeContext = {02 origin: hotel.location,03 interests: user.interests,04 duration: trip.duration,05 mobility: user.walkingPreference,06 weather: forecast,07};08
09const itinerary = buildRoute(routeContext);Result / current state
Lumoria is live with contextual routes, discovery memory and weather awareness combined into one travel flow.
Engineering takeaways
- In planning products, good defaults are more valuable than more options.
- Location context should be the first input to recommendation, not a final filter.
OUT-LIVE / Visit product
Lumoria
Next project
PRJ-06Good Move