Free text has to become destination, dates, children, pets, travel mode, and planning constraints.
Hybrid AI / live production / family travel
SproutRoute
A hybrid AI travel planner that separates what AI should generate from what must be verified, deterministic, or cached. I defined the product, designed the system architecture, and operate the web app in production.
- Stack
- Railway + Supabase
- AI
- Gemini + Places
- Quality
- 350+ tests
- Core choice
- Facts before prose
The hard parts were in the boundaries.
Users type fuzzy travel intent. The system has to extract constraints, route across external APIs, separate factual data from generative text, keep family-safety information reliable, and avoid turning every trip plan into a slow serial dependency chain.
Weather, geocoding, places, policy, AI, and persistence layers all fail differently.
Weather, safety, places, and packing must not be hallucinated by itinerary prose.
Moving from 8-12 seconds required parallelization, caching, and hot-path discipline.
The artifacts should show the shipped flow, not a decorative mockup.






Three architectural stages, each driven by a production problem.
Fast to ship, but slow, expensive, and unreliable for packing and safety.
Moved packing to rules and routed models by task to improve reliability.
Stored verified attractions with freshness scoring so one trip improves the next.
Verified data feeds the AI planner; AI writes connective tissue, not facts.
The page should make the tradeoffs inspectable.
Family travel packing is constraint-based. Reliability beats novelty.
Different steps need different cost, latency, and reasoning profiles.
Freshness scoring narrows the search space and improves repeat plans.
Weather, places, and safety data need provenance before prose.