← All projects
Published personal app · End-to-end ownershipTrav (AI Travel Planner) app icon

Trav (AI Travel Planner)

Discover places and turn travel preferences into validated, reviewable day-wise itinerary drafts.

Flutter / DartFastAPIPostgreSQLGemini / GroqDio
Get it on Google PlayiOSComing soonWebsite ↗GitHub ↗
Application home screen showing destination discovery and the trip-planning entry point.
Application home screen showing destination discovery and the trip-planning entry point.

The problem

AI-generated itineraries need a reliable path from a draft to a saved trip. I built place discovery, planning and persistence with explicit validation and review before saving.

What I built

  • Designed and developed the Flutter/Dart client, Python/FastAPI services and PostgreSQL database end to end, using SQLAlchemy for persistence.
  • Built destination/place discovery, saved places, trips and day-wise itineraries.
  • Integrated AI drafts from sourced places, structured output validation and user review before saving.
  • Enforced ownership, atomic trip saves and idempotency to avoid partial or duplicate records.
  • Implemented quota-aware Gemini/Groq routing, provider cooldowns, usage records, bounded discovery caching and source attribution.
  • Added coordinated token refresh in Dio, timeouts and one retry; configured Vercel web/Render API deployment and backend/Flutter CI.

How it fits together

APPLICATION WORKFLOWTrav (AI Travel Planner)
On Google Play
  1. 01Discover places
  2. 02Travel preferences
  3. 03AI draft
  4. 04Validate + review
  5. 05Owned atomic save

An engineering decision

I treated AI output as a draft. Validation and review separate generation from persistence, and an idempotent save path protects against duplicate submissions. Provider cooldowns and usage tracking make quota failures easier to handle.

Evaluation & limitations

Focused backend and Flutter checks cover selected application flows. Broader itinerary-quality and real-user evaluation remains to be completed. Hosted demo services may need time to initialize.

Next steps

Expand device-level regression coverage and evaluate itinerary quality against a defined set of travel scenarios.