Inspiration
There are 36.2 million small businesses in the US. More than 8 in 10 have no employees at all.
That means one person is the CEO, the front desk, the ops team, the bookkeeper, and the person who actually does the work. All at once.
When something breaks, they lose the morning to phone calls. Calling repair shops one by one. Waiting on hold. Comparing quotes. Overpaying because they sound desperate. Meanwhile the reviews pile up, the supplier emails go unanswered, and the health permit quietly expires.
Rich people have Amex Concierge. You call, say what you need, and it just happens. We asked: why doesn't the corner bakery get that?
Two facts shaped everything we built:
- Small business owners don't open dashboards. They're behind a counter with flour on their hands. They text.
- The businesses they depend on don't have APIs. The refrigeration guy doesn't have an endpoint. He has a phone.
So Concierge had to live where owners already are, and reach vendors where they already are. That's iMessage and a phone call. That's Photon and ElevenLabs.
Source: SBA Office of Advocacy, 2025
What it does
Concierge is two conversations happening at once:
- The owner's conversation, in iMessage, powered by Photon.
- The world's conversation, on the phone, powered by ElevenLabs.
Concierge sits in the middle. It understands what the owner needs, decides who should handle each part, and connects the two.
Delete Photon and the owner has no way in. Delete ElevenLabs and Concierge has no way out. There is no Concierge without either.
Example: the bakery's walk-in fridge dies at 7am.
- The owner texts one line from their iPhone: "walk-in is down, fix it"
- Concierge replies in the same thread and immediately starts calling every refrigeration shop on file at the same time, with a natural AI voice.
- On each call, the voice agent introduces itself as an AI assistant for the bakery, asks for price and availability, and negotiates using the real quotes it already collected.
- The owner's iMessage thread updates live as calls happen: "Arctic quoted $320. Pushing back with a $280 quote..." then "Arctic came down to $290. Thursday 9am."
- Concierge ranks every quote against the owner's budget, preferred vendors, and banned list, and texts its pick with a one-line reason.
- The owner replies YES. Booked. They never left the kitchen, never opened an app, never sat on hold.
The core idea is routing. Every job goes to one of two kinds of workers:
- Needs a reply from the outside world (a price, a booking, a negotiation) → a person, reached by an ElevenLabs voice call.
- Produces something the owner can review (a draft, a reply, a checklist) → an AI agent.
Every result comes back to the same place: the owner's iMessage thread. Nothing that costs money or reaches a customer goes out without a yes in that thread.
Beyond phone calls, Concierge runs software agents that report back through iMessage too:
- Reviews agent: flags angry reviews first and drafts replies in the owner's voice.
- Email agent: drafts vendor replies using real purchase history and sends only after approval.
- Deadlines agent: texts the owner first, before a permit, certification, or tax filing comes due.
How we built it
Built around one idea: Concierge is two conversations. The owner talks to it in iMessage through Photon. It talks to the real world on the phone through ElevenLabs. Everything else connects the two.
Architecture:
┌─────────────────────────────────────────────────────────────────┐
│ OWNER (iPhone, iMessage) │
│ "walk-in is down, fix it" "YES" │
└───────────────────────────────┬─────────────────────────────────┘
│ ▲
inbound text │ │ replies, live updates, approvals
▼ │ (Concierge texts FIRST when needed)
┌─────────────────────────────────────────────────────────────────┐
│ PHOTON SPECTRUM (iMessage layer) │
│ receive · reply · proactive push · 3 tiers: silent/FYI/decide │
└───────────────────────────────┬─────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────┐
│ CONCIERGE BRAIN (OpenAI) │
│ intent → split into jobs → ROUTE each job → rank → recommend │
│ structured outputs · zod validation · retry · safe fallback │
└──────┬─────────────────────────┬─────────────────────────┬──────┘
│ │ │
│ needs a person │ needs software work │ reads + writes
▼ ▼ ▼
┌──────────────────┐ ┌───────────────────────┐ ┌──────────────────┐
│ ELEVENLABS VOICE │ │ SOFTWARE AGENTS │ │ MEMORY + MONEY │
│ │ │ │ │ │
│ parallel calls │ │ Reviews agent │ │ Supabase: │
│ one agent/vendor │ │ Email agent │ │ profile, vendors│
│ discloses AI │ │ Deadlines agent │ │ decisions, jobs │
│ asks price + ETA │ │ │ │ quotes,approvals│
│ negotiates once │ │ shared tool-calling │ │ │
│ with real quotes │ │ loop, step limits │ │ Nessie: │
└────────┬─────────┘ └───────────┬───────────┘ │ balances, │
│ │ │ purchases, │
▼ │ │ payments │
┌──────────────────┐ │ └──────────────────┘
│ VENDORS (phones) │ │
│ repair shops, │ │
│ suppliers │ │
└────────┬─────────┘ │
│ transcript │ draft / result
▼ ▼
┌─────────────────────────────────────────────────────────────────┐
│ ONE WORKER INTERFACE: job in → result out │
│ transcript → structured quote · rank in code · explain w/ LLM │
└───────────────────────────────┬─────────────────────────────────┘
│
▼
back to the owner's iMessage thread via PHOTON
Stack:
| Layer | Tech |
|---|---|
| Owner interface | Photon Spectrum (iMessage) |
| Reaching humans | ElevenLabs voice agents, parallel outbound calls |
| Reasoning + routing | OpenAI (structured outputs) |
| Software agents | Custom tool-calling runner (TypeScript) |
| Memory | Supabase (Postgres) |
| Money | Capital One Nessie API |
| Validation | zod at every external boundary |
Photon: the owner's entire interface
The owner never sees a dashboard, a login, or an app. Photon Spectrum is the whole front end.
- Every text from the owner arrives through Spectrum and goes straight to the brain.
- Concierge doesn't just reply. It messages first: when quotes land minutes later, when a negotiation succeeds, when a deadline is coming. That's what makes it feel like someone on staff, not a chatbot you have to ping.
- Approvals happen in the thread. Every decision message ends with exactly what to reply, so the owner approves a $290 repair with three letters.
- Three message tiers (silent, FYI, needs-a-decision) keep Concierge from becoming the contact you mute.
ElevenLabs: how Concierge reaches the real world
Half the work a small business needs done can only happen on the phone. ElevenLabs is how Concierge does it.
- One request launches several outbound calls in parallel, one voice agent per vendor.
- Each call gets a brief built on the fly: what broke, the equipment model, what to ask, the price cap, and the competing quotes collected so far.
- The agent opens by saying it's an AI calling for the business, gets price and availability, pushes back once with real leverage, and handles "no," voicemail, and questions it can't answer.
- Every transcript becomes a structured quote (price, availability, what's included, whether it was negotiated down) that streams back to the owner through Photon.
The brain
- Turns one message into a list of jobs, each tagged with a worker type and a one-line reason the owner can see.
- The routing rule: if a job needs a reply from someone outside the business, it goes to a person. If it produces something the owner can review first, it goes to an AI agent.
- Every model output is schema-validated, retried once, and backed by a deterministic fallback, so a bad response never breaks a live demo.
One worker interface
Voice calls and software agents both take a job and return a result. The brain never cares which kind answered. Adding a new kind of worker means plugging into one doorway, not rewriting the brain.
Software agents
A shared tool-calling loop with step limits and loop detection. Each agent is just a goal, a prompt, and a set of tools: the Reviews, Email, and Deadlines agents all run on it.
Memory and money
- Supabase remembers the business: equipment, preferred and banned vendors, budgets, past decisions, plus every job, quote, and approval.
- Nessie owns the money: live balances, purchase history, payments. Supabase only stores references to Nessie records, never its own copy of a balance, so the two can't drift apart.
Safety, enforced in code
- Concierge can only dial allowlisted numbers and email approved recipients.
- Nothing that spends money or reaches a customer happens without an approval row in the database.
- Ranking is plain code, not the model. The model only writes the explanation. An LLM never decides who gets the bakery's money.
Built With
- cursor
- eleven-labs
- openai
- photon


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