-
-
AI that plans your group trip by texting everyone one-on-one in iMessage.
-
The problem: a 15-person group chat where every question gets buried and asked again.
-
Chained asking: Roundup asks one person at a time and stops the moment seats are covered. Two people were never bothered.
-
The live switchboard: every line is a private conversation, with 0 messages in the group chat. People shown are simulated and labeled “sim”.
-
Everyone joins with one text and gets a private chat. The first message always says it’s an AI.
-
Each person gets their own plan by text, plus a live Plan page and a PDF that always shows the latest version.
Inspiration
Every one of us has been in the 15-person group chat for a trip that never quite comes together. Someone asks who's driving; it gets buried under memes; someone asks again two hours later; nobody wants to say "I can only spend $20" in front of everyone, and one person ends up doing all the work.
So we asked: what if the planning happened somewhere else? Everyone talks to one assistant privately; it does the chasing, and the group chat gets to stay fun.
What it does
Roundup is an AI agent that plans a group trip by texting each person one-on-one in iMessage.
- One link, one text. The organiser creates a trip and shares a single link. Everyone who joins gets a private chat with Roundup, and the first message always says it's an AI.
- Chained asking, the core idea. Roundup asks one person if they can drive. If they say no, it asks the next, and the moment there are enough seats, it stops. Nobody else gets bothered. The same goes for the cooler, the speaker and the tent. Someone who says "I'd rather not, but I can if nobody else does" becomes the backup and is only asked again if it's needed.
- Private budgets. Each person shares their limit with Roundup only. The group sees just the lowest number, and only after two people have answered, so nobody can be singled out.
- Talk to it like a friend. The organiser can say "ask Sam if he can bring the tent" or "push it to Sunday 11 am" and gets one summary back.
- A real plan. Roundup asks the organiser a few setup questions and asks each person what they're hoping to do. It drafts the day, the organiser approves it by text, and everyone gets their own plan plus a live Plan page and a PDF that is always the latest version.
- When things change. If a driver drops out, Roundup reworks the plan and texts only the people it affects.
- The switchboard. A live board shows every private conversation happening at once without showing what anyone said, next to a large "0 messages in the group chat".
How we built it
- Photon Spectrum (
spectrum-ts) connects Roundup to iMessage: receiving texts, showing the typing bubble, and opening one-on-one chats. - The AI reads and writes text; the code makes the decisions. A TypeScript engine decides who gets asked next, does the seat math, and knows when a need is filled. Claude only turns a messy reply like "yeah as long as we're back by 8" into structured data, and turns "ask about driving" into a text that sounds like a person.
- Every message is checked before it's sent: no made-up times, prices or places; one question per text; the AI disclosure is always kept; and budgets never leak. If the model is slow or down, keyword parsing and fixed templates take over.
- A consistent voice. 500 example conversations set the tone for how Roundup talks and supply realistic replies for the simulated people on the demo board.
- Web side: Express and Server-Sent Events with plain HTML, CSS and SVG, installable as a phone app, deployed on Railway.
- Testing: 92 automated tests on the engine, plus a 46-case evaluation that runs real texts through the model and grades each reply in code.
Where we used AI: Claude Code was our coding assistant; we wrote the specs and product decisions, and it wrote most of the TypeScript, which the commit history credits. We also used Claude to generate the 500 example conversations from our direction and to produce the demo video. Claude runs inside Roundup to read and phrase messages.
Challenges we ran into
- Photon's shared lines can't text someone first, and only registered numbers can reach the bot. We rebuilt the join flow around that: one link, each person signs up and texts in once, and Roundup registers and routes them behind the scenes.
- Making an AI sound human without letting it make things up. We ended up with code checks on every outgoing message and an evaluation set that catches regressions.
- Group chats aren't available on shared lines, which pushed us to make the whole product one-on-one. That turned out to be the point.
- The venue Wi-Fi blocked our tunnel, so we moved the bot to Railway overnight.
Accomplishments that we're proud of
- The chained-asking moment: you can watch a question hop from person to person on the switchboard and stop the instant it's answered.
- Privacy you can see: shuffled padlocks for budgets, and no phone numbers or message text on any public page.
- It runs for real on iMessage, with real phones.
- 92 passing tests on a project built in a weekend.
What we learned
Keeping "who decides" in code and "how it sounds" in the model made the agent both trustworthy and natural. We also learned that a good group assistant is defined by the messages it doesn't send: knowing when to stop asking mattered more than any feature we added.
What's next for Roundup-imessage-agent
- Posting the final plan into the existing group chat once we have a dedicated Photon line
- Real nearby place suggestions and private votes on where to eat
- Weather-aware plans, day-of reminders, and "running late" texts that go straight to your driver
- Splitting gas and costs after the trip
- WhatsApp and other apps through the same Spectrum code
Built With
- anthropic-api
- claude
- css
- docker
- express.js
- ffmpeg
- gemini
- html
- imessage
- node.js
- pdfkit
- photon-spectrum
- playwright
- pwa
- python
- railway
- server-sent-events
- spectrum-ts
- svg
- typescript
- vitest
- zod
Log in or sign up for Devpost to join the conversation.