Inspiration
Planning group trips has always been a coordination nightmare. Between conflicting schedules, different budgets, varying preferences, and the overwhelming amount of information from dozens of travel websites, we saw friends spending weeks in group chats just to plan a simple weekend getaway. We wanted to create an AI-powered travel companion that could understand natural conversation, aggregate real-time data from multiple sources, and help groups make decisions together seamlessly.
What it does
Our AI Travel Planning Agent is an intelligent assistant that helps groups plan trips through natural conversation. It integrates with multiple real-time APIs (Booking.com, Google Maps, Ticketmaster) to search for restaurants, attractions, hotels, and flights. The agent understands context across conversations, manages group preferences and budgets, runs polls for decision-making, and tracks expenses. It provides personalized recommendations with up to 5 options per search, complete with pricing, ratings, and direct booking URLs.
How we built it
We built the backend with Python and FastAPI, using the Dedalus SDK to orchestrate our AI agent with GPT-4.1. The agent architecture includes domain-specific prompts for different travel aspects (hotels, restaurants, attractions, flights, events, transports, preferences) that ensure structured responses. We integrated multiple MCP (Model Context Protocol) servers for extended capabilities like web search (Brave Search) and event discovery (Ticketmaster). For performance, we implemented parallel API calls using ThreadPoolExecutor, reducing multi-result searches from 60 seconds to under 20 seconds. The database runs on Supabase with PostgreSQL, featuring real-time subscriptions for instant updates. We created comprehensive Pydantic schemas to ensure type-safe responses and maintain consistency across the entire system.
Challenges we ran into
One major challenge was the Dedalus SDK's requirement that all tool functions must have parameters, even if unused—this caused cryptic tool calling errors until we added dummy parameters. We struggled with sequential API calls creating a minute delays when fetching URLs for 7+ results, which we solved through parallel processing with ThreadPoolExecutor. Keeping the agent's response schemas synchronized across domain prompts and actual tool outputs was tedious and error-prone. We also faced Supabase real-time subscription issues where messages weren't updating the frontend until we properly configured database triggers and RLS policies. Group preference validation initially failed due to UUID format constraints in our test data, requiring careful database schema alignment.
Accomplishments that we're proud of
We're incredibly proud of achieving 3x performance improvements through parallel API processing—what took 60 seconds now takes 20 seconds. Our agent maintains conversation context naturally while handling complex multi-step planning tasks. The integration of 8+ different tools and 3 MCP servers working seamlessly together represents significant orchestration complexity. We built a robust preference system that aggregates individual preferences into group consensus automatically. The real-time collaboration features work smoothly, with instant updates across all group members' devices. Most importantly, our agent provides genuinely useful travel recommendations with actual booking URLs, turning conversations directly into actionable travel plans.
What we learned
We learned that AI agent architecture requires careful prompt engineering—domain-specific prompts with clear response schemas are crucial for reliable structured outputs. Performance optimization isn't just about code—parallel processing architectural decisions have massive impact. The importance of type safety became clear as our Pydantic schemas caught numerous integration bugs early. We discovered that real-time features require thinking about database triggers, RLS policies, and frontend subscriptions as a unified system. Working with multiple external APIs taught us resilience patterns for handling rate limits, timeouts, and inconsistent data formats. Most valuably, we learned that the best AI agents feel invisible—they should augment natural conversation, not replace it with rigid command structures.
What's next for Test
We're excited to build an interactive map visualization that displays all recommended locations with pins, allowing users to see spatial relationships between restaurants, hotels, and attractions at a glance. The map will show optimal routes between destinations and help groups visualize their entire trip geographically before booking.
Built With
- dedalus
- fastapi
- flask
- git
- github
- google-maps
- gpt
- mcp
- next.js
- postgresql
- python
- rapidapi
- react.js
- restapi
- supabase
- tailwind
- ticketmasterapi
- typescript

Log in or sign up for Devpost to join the conversation.