Inspiration

Trip planning rarely happens in one place. It starts across dozens of browser tabs, map pins, notes, screenshots, and saved Instagram or TikTok posts. The result is usually a collection of ideas—not a realistic plan for the actual trip.

I built One Way Guide around a simple question: what if everything a traveler already knows—their dates, budget, interests, dietary needs, accommodation, and saved travel inspiration—could become one trustworthy, day-by-day guide?

What it does

One Way Guide is an AI-powered mobile travel planner that turns scattered inspiration into a personalized guide travelers can actually use.

Travelers can:

  • Select real destinations, origins, and accommodation areas through Google Places.
  • Personalize the trip by dates, budget, interests, travel style, dietary needs, and previous visits.
  • Share or paste public Instagram and TikTok posts.
  • Review and confirm the real places discovered from those posts.
  • Generate a practical day-by-day itinerary with geographically sensible routes.
  • Explore native sections for daily plans, maps, places, local intelligence, and trip preparation.
  • Open real place details, photos, directions, and booking links.
  • Save generated guide content for offline access.
  • Use the app in nine interface languages.

Instead of producing another generic list of attractions, One Way Guide connects personal preferences and saved inspiration with verified places and usable daily routes.

How I built it

The mobile app is built with Flutter and Dart, using Riverpod for state management and go_router for navigation. A native iOS Share Extension lets travelers send Instagram and TikTok links to the app even when it is closed.

The backend runs on Firebase Functions Gen 2 and Firestore. Guide generation is divided into bounded stages rather than one long AI request. Gemini produces structured guide content, which is validated before it is enriched with real data from Google Places and walking-route geometry from Mapbox.

Firestore streams generation progress and completed content back to the app. Drift and SQLite provide local guide storage for offline reading.

RevenueCat powers the Pro subscription system. Weekly, monthly, and annual products unlock the guidePro entitlement. RevenueCat customer identity is connected to the authenticated Firebase user, while webhooks synchronize entitlement state with Firestore. Premium access is verified by the backend rather than trusted from the client, so paid guide generation remains secure.

Challenges I ran into

One major challenge was making AI-generated travel content dependable. Structured model output can be incomplete or inconsistent, so I added schema validation, bounded repair attempts, staged generation, and atomic publishing. Invalid or partially generated content never replaces a traveler’s last valid guide.

Social-post importing created a different challenge. Public metadata is not always available, and arbitrary URL fetching would introduce privacy and security risks. I implemented strict provider allowlists, bounded redirect handling, destination-aware place matching, manual search fallbacks, and explicit user confirmation. One Way Guide never silently assumes that an extracted place is correct.

Long-running background jobs also required careful retry handling. Firestore leases, idempotency keys, and fenced commits prevent duplicate workers from publishing competing versions of the same guide.

Finally, I had to keep a large amount of travel information useful on a small screen. The interface uses a summary-first structure and progressive disclosure so travelers see the next decision instead of an overwhelming wall of generated text.

Accomplishments that I’m proud of

I am proud that One Way Guide is an end-to-end mobile product rather than an AI prototype. It combines native iOS sharing, authenticated backend generation, live progress updates, real-place enrichment, route building, offline storage, localization, and production in-app subscriptions.

I am especially proud of the social inspiration flow: a traveler can save a place from a public travel post, confirm it, and see it become part of a personalized route without losing control of the result.

What I learned

I learned that useful AI products need deterministic systems around the model. Validation, verified external data, recoverable failures, and clear user confirmation matter just as much as prompt quality.

I also learned that monetization is an end-to-end architecture decision. RevenueCat is not only a paywall in the app—it connects store products, customer identity, webhooks, backend authorization, restoration, and the premium product experience.

Most importantly, I learned that a travel app should reduce decisions, not generate more of them.

What’s next

The next step is launching One Way Guide publicly during Shipaton, learning from real traveler behavior, and improving activation and retention after release. I also plan to expand the social inspiration workflow, improve route adaptation while traveling, and bring the experience to Android.

Built With

Share this project:

Updates

Submission history