Inspiration

T-Mobile's challenge opened with "Phone shopping is broken. You probably have four tabs open about it right now." We recognized that from our own families, except our tabs come with a group chat full of arguments. The teenager needs the Pro Max. Dad wants to upgrade "while we're at it." Someone posts a vacuum, someone else a laptop, and nobody knows whether now is even the right time to buy. T-Mobile closed with "Everyone will build the chatbot. Bring the one that says wait." We took that literally and built a court your family can text.

What it does

Cart Court is an agent with a real phone number (via Photon 2.0) that you add to your household's group chat or text directly.

  • Close your tabs. Paste a store link, a screenshot or just "add a $90 air purifier for me", and it's filed into one shared family cart. Everyone else gets a one-line heads-up.
  • Matchmaker. "What phone should Grandma get?" or "What laptop should Maya get under $700?" It picks based on how that person actually uses things (battery, camera, gaming, budget, brand), remembers those wishes, and explains each pick.
  • The cart goes on trial. Before checkout every item gets a ruling, KEEP / SWAP / WAIT / CUT / STAY, with the math shown. It swaps storage nobody needs, catches forgotten trade-ins, cuts duplicates and unused add-ons, and says WAIT when a sale is coming or the current one is still healthy and still being paid off.
  • Any product, not just phones. Laptops, TVs, headphones, consoles, vacuums, mattresses, shoes: the court checks what the family already owns (broken means buy now, young and working means wait), category sales like Black Friday, protection for fragile things, and the family budget.
  • Waiting is part of buying. Held items stay in the cart. When the moment comes the court texts the group: "Marco, it's time. Your iPhone 17 Pro is ready at $407 instead of $1,099."
  • Evidence. Send a photo of a cracked screen or a battery-health screenshot and Gemini reads it as Exhibit A. A cracked screen on a healthy phone gets a $129 repair, not a $1,399 phone.
  • Approach the bench. Anyone can text the court privately ("money's tight this month, don't tell the kids"). It shapes the ruling, but the court never reveals who said what.
  • Life changes. When a kid leaves for college it compares the family line with a solo plan and rules STAY (saving $240/yr). Years later the roles flip and they're the one shopping for Grandma.
  • A live case file (shared link with a rich preview) shows the cart, every ruling with its stamp, the evidence, a "when to buy" timeline and the savings.

In our demo household the court takes the cart from $3,933 to $709 spent today, holds the rest for the right moments, and saves $2,348.

How we built it

  • Photon 2.0 / Spectrum SDK connects the agent to iMessage: group chats, DMs, image attachments and replies. A local simulator mirrors the same flow as a backup.
  • Google Gemini handles conversation, reads photos and chooses tools: recommend phones or products, add to cart, file a link, enter evidence, report an owned item, run the trial, and the leaving-home calculator.
  • A deterministic pricing engine (src/engine.ts, plain TypeScript, unit-tested) produces every number: fit scoring, storage headroom, trade-ins, promo timing, payoff dates, plan math and budgets. The AI never does math.
  • Taste rules keep the court quiet while the family chats. It speaks only when addressed, handed a link or photo, or when a held item is ready.
  • TypeScript + Node + Express serve a dashboard, the live case file (Server-Sent Events, legal-document design, animated verdict stamps) and a mock checkout.
  • MongoDB Atlas stores the cart, rulings, chat and household, with local JSON files as a fallback. It ships as a single Docker container.
  • Demo resilience: the verdict path skips the AI entirely, Gemini calls rotate across models with timeouts and a rules-only fallback, and the dashboard has checkpoints, a preflight panel, presenter cues and QR codes so judges can join.

Challenges we ran into

  • Making an AI trustworthy with money. A language model will confidently "estimate" a saving. We moved every number into a tested engine and gave the model only tools.
  • Group-chat manners. An agent that answers every message is unbearable. Deciding when not to speak became a feature.
  • Private context without leaks. Letting a private DM shape a public ruling without ever revealing it, or who sent it.
  • Generalizing beyond phones. Phones have batteries, payment plans and carrier promos; a vacuum or a mattress doesn't. We had to find rules (owned-item age and condition, category sales, duplicates, budget priority) that work for anything without breaking the phone rulings.
  • Live-demo reliability. Free-tier rate limits, flaky Wi-Fi and real phone numbers meant model rotation, deterministic fallbacks and saved state that survives restarts.

Accomplishments that we're proud of

  • An agent whose signature move is honest restraint: "wait 41 days, it'll be $692 cheaper."
  • One flow that covers all five of T-Mobile's directions (Matchmaker, Cart Whisperer, Next Best Moment, Timekeeper, Household Mix), and then extends to everything else a household buys.
  • It runs on real phones in a real iMessage group, and still works with no API keys at all.
  • Every ruling shows its math, and the old phone gets a "witness statement" before it's replaced.

What we learned

Trust beats conversion. A shopping assistant that will tell you not yet is the one you keep in your group chat for years. We also learned that splitting the work cleanly, with the LLM for language and judgment and plain code for numbers, made the agent both more reliable and easier to explain, and that designing for silence matters as much as designing replies.

What's next for Cart Court

  • Real catalog, pricing and account APIs in place of the synthetic data (the engine already reads any store's feed)
  • Voice: the court calls the person who lost the ruling (Photon SIP)
  • Live price-drop watching on held items
  • Splitting costs among roommates and couples
  • Learning each household's habits over time, so rulings get sharper the longer the court sits

All data is synthetic. No real customer, account, or transaction data is used.

What's next for Cart Court

Built With

Share this project:

Updates

Submission history