This is part two of the story of building FamilyLine, an AI agent I built for my family over four weekends. Part one is here — the overview. This post is about the first weekend, and the thing I got wrong in every previous weekend hobby: I built the plumbing before I built the voice.

Weekend 1 — Giving a Family Bot a Voice Nobody Wants to Mute

The mute button is the real competitor

A family group chat has a brutal, honest metric: does anyone mute you? A bot that posts like a system log — “EVENT_CREATED: id=482” — gets muted by lunchtime, and after that it doesn’t matter how clever the backend is. Nobody reads a muted bot.

So weekend one had exactly one goal: make the bot sound like a warm, helpful member of the family, in the two languages we actually speak at home — English and 中文. Everything else could wait.

The morning briefing: information wrapped in warmth

The centrepiece is a short daily briefing. Under the hood it’s boring and deterministic — the bot reads the day’s calendar events, open to-dos, a weather line, any reminders — but the delivery is where the care goes. Instead of dumping a list, it composes a few cheerful lines with a little emoji, skips empty sections gracefully (never “you have no events today”), and greets the family like a person would.

Morning briefing chat message with weather and a joke
The real morning briefing — grounded facts, warm delivery, a bilingual family greeting (and a groan-worthy joke).

The trick that made this reliable: separate the facts from the phrasing. A deterministic step gathers the data from the database — no model involved, no hallucinated events. Then a language model turns only those facts into warm prose, with a strict instruction: compose from the given facts, never invent a time or a number. You get personality without the model making things up. That split — grounded data in, friendly voice out — is the single most useful pattern I used all four weekends.

Bilingual by default, not as a setting

My family switches between English and Chinese mid-sentence, so the bot had to as well — not as a language toggle buried in settings, but as its native way of speaking. Every user-facing string lives in one place and is localised; nothing is hardcoded English. When the bot isn’t sure, it leans bilingual. It sounds like us, which is the whole point.

The practical layer that earns trust

With the voice in place, the everyday utilities landed naturally, all in plain language:

  • Calendar: “dinner with grandma Friday 7pm” → an event. No form.
  • Expenses: “spent 12.50 on lunch”, or just photograph the receipt and reply receipt. Foreign currency auto-converts to our home currency.
  • Reminders: “remind me in 2 hours to take the soup out.”

None of this is novel on its own. What makes it used is that it costs the family nothing to learn — you talk to it the way you’d text a helpful cousin.

A hobby project, run like production

Here’s the counter-intuitive part. To build something this casual, I was unusually strict. From weekend one it had proper typing, a real test suite, database migrations, and a deployment pipeline that refused to ship broken code. That sounds like overkill for a family bot — until you remember the “production incident” was my wife not getting her morning briefing, and the bug report was delivered in person at breakfast.

Discipline is what let me move fast on the fun stuff in later weekends without breaking the boring stuff that people had already come to rely on. Reliability is a feature your family notices only when it’s missing.

The takeaway

Tone is a technical requirement, not a polish step. If the bot doesn’t sound human — and, for us, bilingual — it gets muted, and then none of the engineering matters. Ground the facts, warm up the words, speak the family’s language, and earn the right to be in the chat before you earn the right to do anything clever.

Next in the series: weekend two, where the bot stopped just answering and started noticing — memory, and the “propose, don’t act” gate that makes an agent safe to hand to your kids.

Part of a personal DIY hobby, tinkered together on weekends for my own family, built entirely with open-source, self-hosted models.


Discover more from Digital Reflections

Subscribe to get the latest posts sent to your email.

Leave a Reply

The Blog

At the intersection of data, AI, and imagination lies the path to transformation. Our greatest evolutions occur when we use technology not just to improve what is, but to reimagine what could be.

Discover more from Digital Reflections

Subscribe now to keep reading and get access to the full archive.

Continue reading

Discover more from Digital Reflections

Subscribe now to keep reading and get access to the full archive.

Continue reading