Our son was three days old, deeply yellow, and we were back in the emergency room. We’d had four tracking apps between us during his first days home. Every one of them could log a feed. Not one of them looked at the pattern. The colostrum he wasn’t getting enough of, the diaper count dropping off, the drowsiness that wasn’t just “newborn sleepy.” None of them put that together and said “this adds up to something, go get him checked.” At 3am, with no one to ask, I opened ChatGPT and typed a rambling paragraph about the last 24 hours. It read the pattern and used the word jaundice before I did.
That worked, but it worked by luck. I had to remember to open a general-purpose chat tool, paste in enough context from memory, and ask the right follow-up. It had no idea who my son was five minutes earlier, let alone five days earlier. The tools built for exactly this moment, the tracking apps, had all the data and none of the judgment. The general tool had judgment and none of the data. Nobody had built the thing that combines them and keeps the data between conversations.
That gap is the product.
Why “just add AI to the tracker” doesn’t work
Almost every baby-tracker app now has some kind of chat box bolted on. Ask it a question about your data, get a paragraph back. I don’t think that’s the same product, and I think the difference matters enough to explain.
A chat box bolted onto a tracker is stateless per session, at best summarizing a database of taps. It doesn’t remember that you told it three weeks ago your baby is allergic to a specific formula brand unless that’s a field in a schema someone thought to build. It doesn’t notice, on its own, that four days without a fever in your data plus a change in nap pattern is worth mentioning back to you. It waits for you to open the app and ask.
I wanted the assistant to do the opposite: hold context across the whole relationship, notice things unprompted, and speak with a tone that fits the moment. Nothing chirpy at 3am. So instead of one big system prompt trying to do everything at once (“be a tracker, be a memory, be proactive, be safe, be warm,” pick your failure mode), we split the problem into nine distinct faculties, each with a narrow job:
- Notices what’s off. Learns your baby’s normal, flags the moment something deviates (a late feed, a skipped nap).
- A picture that keeps building. What she learns is saved between conversations and refreshed against your latest logs every time you talk to her, not re-derived from scratch each session.
- Knows who your baby is. Turns scattered logs into an actual model of who this specific kid is and how they’re doing, not just a table of rows.
- What matters stays in view. Surfaces what’s relevant now instead of burying it under yesterday’s entries.
- Tone that fits the moment. Gentle when it’s a worry, light for the everyday. The same fact delivered two different ways depending on context.
- She learns you too. Adapts to how you like to be talked to, not just what the baby is doing.
- She stays on it. When something serious happens, she doesn’t log it and move on. She follows up and helps track what happened next.
- A protective instinct. For the rare things that actually matter, she keeps the single most important next step in front of you until it’s handled.
- One purpose behind it all. Every one of the above exists to carry load, not to be a feature for its own sake.
None of these are separate products bolted together. They’re the decomposition of “an assistant who actually knows your baby” into pieces small enough to build, test, and get wrong safely, one at a time, instead of hoping a single giant prompt gets all nine properties simultaneously. Most of my early prototype bugs were exactly the failure mode you’d expect from collapsing these into one prompt: a good memory recall would break the tone, or a strong proactive nudge would fire on stale data because the “picture that keeps building” faculty hadn’t actually refreshed. Separating the faculties let me unit-test each property instead of vibes-testing the whole assistant every time I touched the prompt.
The one thing I refused to let an LLM decide
Crisis detection is not a faculty. It’s not a prompt at all. A small set of hard-coded, pre-LLM triggers (specific words and patterns describing things like breathing trouble, unresponsiveness, or a fever under a threshold at a very young age) route straight to an emergency response before any model ever sees the message. No amount of clever prompting reaches that path, because the model isn’t in the loop for it. I did not want a probabilistic system anywhere near the one decision where being wrong is unacceptable. I don’t think any LLM-based product should route that decision through the model, no matter how good the eval scores look.
Everywhere else, Susan is explicit that she’s an AI assistant, not a companion, not a nanny, and not a diagnostic tool. Every clinical-adjacent message reminds you she’s not a doctor and defers back to your pediatrician. That’s not legal boilerplate I added reluctantly. It’s the actual design stance. The product’s job is to close the gap between “something feels off” and “call someone,” not to replace someone.
Picking the model layer, and why I won’t tell you which one
I ran a blind evaluation across several LLM providers on the exact failure modes that matter here: medical over- and under-referral, tone under stress, refusal behavior, and cost at scale. Then I picked a primary model and fallbacks. I’m deliberately not naming which ones in public writing anymore. An earlier draft of this story did, and I got talked out of it, correctly, because model choice is one of the few genuine moats a small team has, and because the choice changes as new models ship. What I’ll say directionally: the cheapest available option on paper was not the one that passed the safety evals, and being willing to eat a real cost delta on the model layer was the least fun and most important decision of the build.
Where it is now
Hey Susan (heysusan.app) is live, and it has grown well past the tracking core it started as. Susan can now take the daily rhythm she has already learned from your own logs and lay the coming week out as clearly-branded blocks on your calendar, showing you the whole proposal and waiting for a yes before a single block exists. And there is a feature called HeyBeNice!, a private drafting pad for the other hard relationship in a new-parent house: you say the thing however it comes out, Susan hands you back a kinder version, and you send it yourself from your own messages.
We use it for our son every day. Joanna is the harder audience for “does this feel warm or just automated,” and she’s the one who kept the tone honest through a dozen rewrites. If you’re building anything where an AI system needs to hold long-term context, act proactively, and know when to shut itself out of a decision entirely, I’d genuinely like to compare notes. That combination turned out to be a much harder engineering problem than either “chatbot” or “tracker” alone.
Warren