Inspiration

Adult children can call on Sundays, but loneliness and scam pressure don't keep to a schedule. Aging parents are among the most isolated and most targeted people we have, and the tools meant to help usually assume a comfort with apps and screens that leaves them behind. And even when they do connect, a feed or a group chat is a flat substitute for the thing that actually reaches people: a real voice to talk it out. I wanted something the older adult doesn't have to learn at all, something that meets them on the phone they already own. A warm voice that remembers them, gently keeps them connected to family and friends, and gives the people who worry about them a way to stay close and coordinated.

What it does

Iris is run by an operator (an admin, usually a lead caregiver) who can manage several people. Each person has their own “care-circle” of trusted contacts: the family and friends around them. A trusted contact can belong to more than one person's circle. The operator sets up each person and invites their contacts. After enrollment, the operator or any of that person's trusted contacts can start a call from a web dashboard. The older adult never touches a screen; they simply answer, with Iris on the other end ready to hold a natural, warm conversation. Two features work around that voice:

  1. Bridge is about connection. Iris recalls something from a past call: "you mentioned your daughter's flight lands Thursday" and reopens it as an open topic to talk about.
  2. Shield is the calm second opinion. When Iris picks up on scam pressure in the conversation (e.g. urgency, secrecy, gift cards, "don't tell anyone") Iris offers a calm safety pause, steers them away, and, with their spoken consent, texts a trusted contact to check in.

Everything the care-circle sees lives in a shared dashboard: recaps of recent calls, a timeline of what Iris has done, and shared notes so a scattered family stays coordinated.

Privacy is built in. Raw audio and transcripts never reach the dashboard, and the raw call itself is never stored. The operator controls what Iris keeps and shares for each person, through two separate, revocable switches. The first is private memory (continuity): with it on, Iris writes a short, structured recap after each call: what was discussed, the people they mentioned, what Iris suggested, and any open follow-ups; with it off, nothing is kept. The second is sharing care recaps: only when the operator turns it on does that recap become visible to the person's care-circle. And Iris only ever texts a contact who has completed a formal SMS opt-in. Each person's settings stay their own.

How I built it with Codex & GPT 5.6

The heart of Iris is a Node and TypeScript server. The live voice runs on OpenAI's Realtime, bridged to an ordinary phone line through Twilio. A single call handler owns each call from start to finish: the connection, the in-memory conversation, interruptions, and a clean shutdown. That way, the call features like Bridge and Shield don’t have to deal with the messy plumbing underneath. Iris's personality and safety boundaries are captured in versioned code to make them reviewable and testable.

When a call ends and private memory (continuity) consent is on for that person, the conversation is passed once to GPT-5.6 to produce a short, structured recap. Afterwards, the transcript is discarded; only the recap is kept. Shield uses GPT-5.6 too, to weigh how risky a described situation looks before Iris acts. I use the Terra tier here by default. But, I found its balance of quality fits this kind of everyday reasoning.

Codex and GPT-5.6 were my pair for the whole build. The riskiest question wasn't the plumbing, it was whether the voice would feel conversational enough to design a whole product around. So before touching any phone infrastructure, I used Codex to quickly spin up Realtime in the browser and hear it for myself. Once I confirmed the voice had the potential I was hoping for, I started thinking through how to represent it to caregivers, and brought a plan to Codex. Its Plan Mode helped me shape loose user stories into something concrete, and I asked for the work to come incrementally: Codex implemented each change while I reviewed the code and shaped the end product, step by step.

That rhythm kept me shaping the architecture instead of chasing it. Codex checked OpenAI's own documentation to get the setup right (keeping secret keys on the server, not the client) then swapped the early browser test for the Twilio phone bridge that powers the product today, and drove the tight write-test-build loops that carried me to 90-plus passing tests. For security, I baked CodeRabbit into my GitHub workflow to review changes as they landed.

On the stack, I steered the choices toward ship-speed (what I know best and can move fastest in): Express, SQLite, and React with Vite and Tailwind. The product itself dictated the rest: Realtime for the voice, Twilio for the phone line.

Challenges I ran into

The hardest problems were about judgment, not code. Deciding what Iris should remember, and what she must never store, took real iteration. My first version was too cautious. When a caller mentioned feeling tired and planning to drink some water, the summarizer threw away the entire caregiver recap just because the exchange touched on health. That's exactly backwards for a caregiver who needs visibility. I reworked the boundary so plainly stated feelings, what the person is planning to do, and clearly attributed guidance from Iris all make it into the recap, while diagnoses, financial details, and credentials stay out.

Consent was the other deep one. I landed on separate, revocable layers: a private continuity memory and a shared caregiver recap, plus a fresh approval for every outbound text, which only reaches contacts who have opted in. Making texting genuinely consent-aware end to end, so that anyone who hasn't opted in simply disappears from Iris's reach, took careful work across the whole flow.

The rest of the hard parts lived in the phone network itself. Getting the voice model, the phone line, and the summary step to agree on timing, call lifecycle, and a clean hangup, all without ever saving a transcript, took a lot of careful, well-tested wiring. And some of it I couldn't code my way through at all: Iris's outbound texts depend on Twilio's A2P 10DLC registration, the carrier approval process for business messaging in the US, and mine is still pending at submission time. So while the whole consent-and-send path is built and tested, live delivery is gated behind telephony red tape outside my control. Shipping into the real phone network means living with its rules, not just your own code.

Accomplishments that I'm proud of

I'm proud that a real phone call to a real number reaches a warm, responsive Iris, with no app or screen for the older adult to learn. I got Bridge and Shield working end to end, from a remembered detail or a described worry, through the person's spoken consent, to a recap card on the dashboard. And I have a privacy stance I can defend plainly: no recordings, no raw transcripts, only consented structured recaps.

What I learned

Meeting people on the technology they already trust beats introducing something new almost every time. I learned how much of a caring product lives in its boundaries: what it refuses to store, what it won't guess at, and when it asks before sharing. Those boundaries are engineering decisions, not disclaimers. On the tooling side, I learned to let Codex move fast inside an architecture I'd deliberately shaped, using its review checkpoints to stay in control, and to pick the right-sized model for the job rather than reaching for the biggest one by reflex.

What's next for Iris

The biggest next feature is Translator: a caregiver can share a confusing letter or bill through the dashboard, and Iris turns it into clear, plain-language next steps, either for the caregiver to talk through or for Iris to raise gently on the next call. I'd also like to support other languages, so Iris can meet families in whatever tongue they're most comfortable with, which matters especially for older adults who never fully switched to English. Beyond that, I want to add proactive, scheduled check-ins tuned to each person's rhythm, and to finish multi-person support for family caregivers so one family member can look after several people as smoothly as an operator can today. I also want a more rigorous approach to measuring recap quality. And further out, Iris could gently flag to caregivers when a loved one seems to be having a hard time, always with the person's knowledge, never behind their back.

Built With

Share this project:

Updates