Inspiration

Every group chat has a trip that never happens. Someone says "we should go to Japan," everyone hearts it, and then the chat moves on. Nobody stops wanting to go. Someone just has to compare flights, hotels, dates and six different budgets, and that job is exhausting. So the plan dies, and friends who meant to see each other don't.

We built Huddle to take the plans out of the group chat. It's an AI agent that notices when friends start talking about a trip and does the planning, so the reason friends drift apart is never "nobody organized it."

What it does

Huddle listens for the moment a chat turns into a plan, even a wishful one like "I'm so burnt out, I need a vacation." Then it offers to plan it.

  • It asks in the chat, like a friend would. If dates or a budget are missing, Huddle asks the group. If someone floated "~$1500 each?", it asks everyone to lock it in.
  • It counts everyone. Every person in the chat is part of the plan, not just whoever spoke up.
  • Nobody gets priced out. If someone's budget is tighter, Huddle builds them their own version of the trip (same hotel, cheaper way to get there).
  • It does the work no one wants to do. It searches real flights, hotels, food, things to do, and trains or buses for shorter trips, then builds a day-by-day itinerary with a per-person cost.
  • The group stays in charge. Huddle proposes, people decide. Nothing is booked or paid without a tap. Booking is simulated in our demo, and each item links to real sellers.

How we built it

Huddle is agentic, not a fixed pipeline. Meta's Muse Spark runs a tool-calling loop: it reads the chat, decides what it needs, calls a tool, reads the result, and decides again until the plan is done or it needs the group.

  1. Detector: one cheap Muse Spark call per batch of messages decides whether this is a plan.
  2. Planner agent: chooses from typed tools: extract_trip, search_flights, search_hotels, search_places, search_ground_transport, pin_on_map, ask_user, and book (simulated). A trip across an ocean gets flights only; Austin to Dallas also gets a bus, a train and driving.
  3. Verifier: a second Muse Spark pass checks every price and link against the actual search results, plus the dates, people and budget. If something's wrong, the planner fixes it once, or the question goes back to the group.

Every search comes from SerpAPI (Google Flights, Hotels, Maps, Directions). The functions run on Supabase Edge Functions, and each agent step is written to Postgres and streamed to the phone with Supabase Realtime, so the group watches Huddle work live. The app is Expo / React Native, running on a real iPhone.

Costs are split across the whole group: rooms are sized to the number of people, the hotel is split evenly, and each person's own travel is added on top. The agent picks the cheapest options that keep as many people as possible within their budget, and anyone still over gets their own cheaper version of the trip.

Challenges we faced

  • Making the agent trustworthy, not just smart. Early runs repeated searches, ran past budgets and made up links. We added the verifier, budget warnings, caps (at most 10 tool calls and 14 model calls per run), cached repeat searches, a timeout on every tool, and a circuit breaker for each API.
  • Groups are messy. People float budgets, change dates mid-conversation and can afford different things. Teaching the agent to tell a floated budget from an agreed one took most of our time.
  • iPhones can't read other apps' messages. We tried reading iMessage through a Mac relay, posting Huddle's questions into a real group chat, and keeping the app awake for notifications. iOS limits every one of these, so our demo chat runs inside Huddle.
  • Shipping to a real iPhone overnight, with a free developer account, code signing, and a build folder in OneDrive.

What we learned

  • The hard part of seeing your friends isn't wanting to; it's the planning. Taking that friction away is what gets people together.
  • People trust an agent they can watch. The live timeline of every step mattered more than any single feature.
  • Good agents ask good questions. One message in the chat beats a five-screen form.
  • Most of building an agent is the guardrails: verification, limits, caching and fallbacks.
Share this project:

Updates

Submission history