Wild Route

A rough travel idea.
A route you can explain.

I designed and built a planner that turns travel wishes into complete journeys you can compare, save, and share.

My role
Design + engineering
Project
Independent · 2026
Experience
Live public demo
Open public demo
Wild Route homepage showing the travel brief beside three generated round-trip suggestions

The current product: a travel brief, comparable journeys, and an explicit planning-estimate boundary. Select any screen to view it full size.

Plan the journey.
See the tradeoffs.

Flights, maps, destination guides, and notes each show a fragment of a trip. I wanted to bring those fragments into one decision: which route fits the adventure?

The hard part was making the result useful without overstating what the app knows. Every journey needs a reason, a return leg, and a clear boundary between a planning estimate and a booking.

01Describe the trip

Start with a wish.

A plain-language idea becomes a brief you can edit. Origin, days, stop count, and route shape stay visible before composition.

“A 12-day round trip from Singapore with hiking, surf, and one meaningful stop.”

The example used in these captures. Deterministic interpretation and route data; no live model call.

Wild Route composer with the Singapore travel brief and editable journey constraints
02Compare the journeys

A whole route.
A reason for each stop.

The engine compares direct, one-stop, and two-stop journeys. Round trips return to the origin, and the map follows the same legs as the route details.

Wild Route ranked planner showing a round-trip route with destination imagery, route legs, and planning status

Why this route?

Ranking, wishes, and confidence explain the suggestion. Confidence belongs to the app’s scoring, not a provider guarantee.

What do we know?

Current conditions keep their source and observation time. Missing fare observations stay labeled as planning estimates.

What if it fails?

A 2D map and bundled destination artwork keep the route usable when WebGL or remote media is unavailable.

Wild Route public route preview showing the journey breakdown and external booking boundary
03Keep the decision

Take the route
with you.

Save a route for later or share a public preview. The original prompt stays private; the shared view carries the journey and its planning caveats.

Booking links continue on external provider sites. Wild Route helps choose the journey; providers confirm availability and final prices.

In the public demo, saves live in this browser and preview links reconstruct a validated public route. Cross-device account persistence remains a separate managed-service path.

The work behind
the journey.

I owned the product direction, interface, route engine, API boundaries, and verification. The key decision: let deterministic code own route shape, arithmetic, permissions, and the final validated result.

  1. Validate brief
  2. Compose + rank
  3. Enforce limits
  4. Persist snapshot
  5. Render + share

A failure worth fixing.

The first hosted save flow assumed the next request could read the same server’s memory. Serverless hosting broke that assumption. I rebuilt the demo around browser-local saves and validated stateless previews.

Designed for imperfect conditions.

Keyboard access, reduced motion, provider fallback, and image failure are part of the experience. Private data stays behind ownership checks; public shares use an explicit safe snapshot.

Explore verification and current limits

Verification

  • 104 deterministic Vitest cases pass across route generation, entitlements, validation, security, share, and handoff behavior.
  • 22 Chromium checks cover the hosted golden path, responsive collision guards, keyboard flow, axe accessibility, reduced motion, and media fallbacks.
  • Six Supabase migrations pass static verification; local and Vercel-compatible production builds pass, while dependency advisories remain tracked separately from the interface release evidence.

Current limits

  • The public demo uses a deterministic planning dataset, planning estimates, and inspectable route generation rather than live inventory or an LLM.
  • Live managed Supabase, Stripe, email, and travel-provider integrations remain intentionally off; booking completes on external provider sites.
  • Demo saves use browser-local storage and previews use schema-validated stateless recipes, not cross-device account persistence.
MoreCurrent case studies

Explore the other current projects where product thinking is carried through interface, architecture, testing, and release.