One trip, not twenty browser tabs

Inspiration

Planning a holiday is a research problem wearing a booking costume.

You open flight search engines, hotel websites, travel blogs, maps, and notes. Then one date changes, and suddenly half your research is outdated. Worse, AI can generate beautiful itineraries containing invented hotels, unrealistic connections, or recommendations without supporting evidence.

I wanted to explore whether an AI travel agent could maintain a living, adaptable trip instead of producing a one-shot itinerary. The plan should be grounded in evidence, easy to change, and safe to experiment with.

The Nebius x NVIDIA Hackathon gave me the opportunity to turn that idea into OnHolidai, an AI travel-planning workspace built around one simple philosophy.

Less tab-hopping. More holiday.

What it does

OnHolidai brings destination research, travel options, an interactive globe, a day-by-day itinerary, and conversational planning into one workspace. You can start without signing up, choose destinations and travel preferences, and keep your own route order or let AI arrange it.

Three principles guide the experience.

The trip is the source of truth. AI-generated changes become validated operations against a known version of the plan, with change summaries and checkpoints that let you restore earlier versions.

Evidence is separate from advice. Sourced information and supplier offers remain distinct from model-generated recommendations. The agent cannot simply invent flights, prices, accommodation availability, or itinerary components.

Planning is not purchasing. Booking has its own review process, live-term revalidation, and explicit authorization. Asking a question or exploring an offer never counts as consent to a transaction.

The result is more than an itinerary generator. It is a workspace where travellers can explore, refine, and maintain a trip as their plans evolve.

How we built it

OnHolidai uses NVIDIA Nemotron 3.5 Lightning through Nebius Token Factory for reasoning and conversational planning.

The agent service is built with Python, FastAPI, and LangGraph. The frontend uses Next.js, React, TypeScript, Tailwind CSS, and MapLibre. PostgreSQL with PostGIS stores trip state, versioned snapshots, and offer evidence. Temporal orchestrates the separate booking workflow, while OpenTelemetry, Jaeger, and redacted LangSmith traces support observability.

The agent connects to Google Maps Grounding Lite for place discovery, Tavily for web research, Duffel for flights, Nuitee for accommodation, and Viator for activities.

A key architectural decision was making the system contract-first. Pydantic generates the backend schemas, while TypeScript types and Zod validators are generated from the same contracts. Automated checks catch inconsistencies before they break the application.

The model operates through three narrowly defined tasks, producing structured trip changes, answering traveller questions, and arranging routes. Each has a closed output contract, and the server validates the result before applying changes.

Challenges we ran into

Managing reasoning budgets

Reasoning tokens and answer tokens share one budget, so a thoughtful model can think itself out of room to reply. We built a completion supervisor that recognises a truncated reply, continues it seamlessly, and widens the budget when only the thinking fit. Travellers get answers that arrive whole instead of stopping mid sentence.

Keeping the model honest about travel supply

A model asked to plan will happily name a hotel it cannot source. Prompting alone was never a guarantee, so we made the boundary structural instead. The agent proposes scheduling changes only, supplier evidence stays separate from model advice, and any draft that touches prices, offers or day plans is rejected before a traveller ever sees it.

Plans that survive a change of mind

One destination change ripples through dates, nights, stays and transport, and two open tabs should never silently rewrite each other. Every edit carries an expected version, so a stale change becomes a visible conflict rather than a quiet overwrite. Checkpoints let travellers restore an earlier plan without losing history or cancelling reservations.

Accomplishments that we're proud of

I am proud that OnHolidai became a connected, full-stack application rather than just an AI chatbot. It combines persistent trip planning, external travel discovery, interactive mapping, structured changes, and version history in one experience.

I am especially proud of the trust boundaries. Model outputs are validated, stale edits are detected, and planning is separated from transaction authorization. The deterministic demo, automated tests, generated contracts, and observability also make the project easier to review and develop further.

Most importantly, the project turns a familiar frustration into a practical experience. Travellers can spend less time coordinating information and more time deciding what kind of holiday they want.

What we learned

The biggest lesson was that agent reliability is a contracts problem before it is a model problem.

A capable model can still misunderstand requests, return incomplete data, or confidently suggest unsupported options. Closed schemas, server-side validation, and graceful degradation improved reliability more than prompt refinement alone.

I also learned that the model should interpret intent and propose changes, while the application remains responsible for state, permissions, and side effects. Deterministic tests and provider doubles made those boundaries easier to verify.

Building a useful agent means engineering the entire experience around the model, not just choosing a strong model.

What's next for OnHolidai

Next, I want to introduce prompt caching per trip version, stream user-facing answers separately from internal reasoning, and expand evaluation with an LLM-as-judge approach for live planning quality.

Ultimately, I want OnHolidai to help people move from a vague travel idea to a well-researched, adaptable trip without managing twenty browser tabs.

Less time coordinating the holiday. More time looking forward to it.

Built With

Share this project:

Updates

Submission history