Inspiration

Our friend group has planned about eleven trips in a group chat and taken two of them. Planning dies in the thread: nobody wants to track everyone's dates, diets, travel limits and budgets, so "we should go somewhere" never becomes a booking. We wanted the friend who actually gets it done, living in the place the conversation already happens.

What it does

Atlas is a trip and financial planner that lives in your friend group's iMessage chat. Add its phone number and it introduces itself, then reads along.

  • Reads the conversation, no forms. It pulls each person's vetoes, dates, diets and limits out of normal texting, keeps the words they came from, and resolves conflicts deterministically (explicit beats implied, newest wins).
  • Budgets from account data. Each person can connect a Capital One account (a consent page on the trip site), and Atlas computes a budget from paychecks, bills and spending with a formula it explains in three lines. Budgets are private by default: the group only sees a pooled number.
  • Turns maybes into a plan. It proposes three destinations that pass everyone's hard constraints, with live fares where available and labeled estimates otherwise, then runs a native iMessage poll. A majority locks the trip.
  • Handles the money nobody wants to handle. A shared trip fund (its own Nessie account) is filled on each person's payday and books the stay. During the trip, "I paid 64 for dinner" logs an expense. At the end, one combined settle-up uses the fewest possible transfers, and nothing moves until the payer confirms.
  • Gives every trip a page. Atlas publishes a Frutiger Aero–styled trip page with the day-by-day itinerary, sourced research and fund progress, linked in chat with a preview card.
  • Remembers and watches out. It recalls what people said weeks ago and, if the forecast changes, suggests a concrete swap ("Saturday flipped to rain, want to swap the beach day for the food market tour?").
  • Knows when to stay quiet. Most group messages aren't for a bot. A deterministic check plus a Gemini gate decide when to speak, and "atlas stay quiet" mutes it.

How we built it

  • Transport: TypeScript on Photon Spectrum with a custom platform for a Linq iMessage line. Webhooks are signature-checked and stored before we acknowledge them, sends are idempotent, and every rich action (poll, tapback, link) falls back to plain text.
  • Gemini: Flash-Lite models for the agent, the speak gate and preference extraction, and gemini-embedding-2 for memory. It runs on the free tier, rotating across models and keys as daily quotas run out.
  • Tiger Data: Postgres with pgvector and pgvectorscale (diskann) plus BM25, fused with reciprocal rank fusion in one SQL statement. Each group chat is its own memory sandbox. Hypertables and continuous aggregates track spend and forecast drift, and a Postgres job queue runs background work.
  • Capital One Nessie: customers, accounts, bills, purchases and transfers, used end to end for budgets, the trip fund, expenses and settle-up.
  • Deterministic money: the language model only does language. Exact-cents splits, a minimum-transfer settle-up solver (bitmask DP) and a money guard that drops any message containing a dollar figure no tool produced.
  • Also: SerpApi for live Google Flights and Hotels prices, Open-Meteo for forecasts, and a Next.js trip-page site on Vercel backed by Supabase.

Challenges we ran into

  • Group iMessage is gated. Shared-pool lines can't join groups, so we wrote our own Spectrum platform for Linq.
  • Nessie quirks. Balances never update, transfers can't name a payee, and amounts drop cents. We replay balances, pair transfers with deposits and keep exact cents in our own ledger.
  • Making an agent quiet by default without making it seem broken.
  • Free-tier quotas. We built model and key rotation so Atlas keeps working when one model runs out.

Accomplishments that we're proud of

  • 700+ automated tests and 20 chat scenarios that run the real pipeline with no phones.
  • Every dollar figure in the chat traces to a Nessie call or a labeled estimate.
  • A settle-up that is provably minimal.
  • It feels like a friend in the chat, not another app.

What we learned

Most of a good group-chat agent is deciding not to talk, and keeping the model away from the math.

What's next for Atlas

Receipt photos that become expenses, real bookings paid from the trip fund, shared per-trip itineraries, and live bank connections beyond the sandbox.

Acknowledgments

We utilize Claude code and Gemini to assist us in the creation of this project along with some open source projects. Weather data by Open-Meteo (CC BY 4.0).

Built With

Share this project:

Updates

Submission history