Toddler Calling

VOIP telephone on desk

I built a 1960s-style home telephone system. No more shouting “dinner is ready!” or “mommy, come to my room” across two floors. We wanted an intercom system for a while, but we didn’t want robotic text-to-speech (TTS) announcements blaring out of smart speakers unprompted, and we discarded the otherwise tempting idea of analog two-way radios with a total lack of privacy.

Thanks to Gemini, I landed on GPO retro phones connected to Asterisk. Setting up a new home lab server, configuring Asterisk SIP trunks, implementing voice ID speaker recognition and bilingual speech input and output, and piping audio into my personal AI agent harness were all doable within a few days with AI help. I don’t think I would have had the patience and knowledge required to do any of the parts otherwise.

Both kids absolutely love it. We placed phones across key rooms and even installed one out in the garden play house. Who would have guessed that a Gen Alpha child and a Gen Beta child in 2026 would get so much joy out of picking up a tactile phone handset? They constantly make calls between rooms or ring “the AI lady” in English or German to play music on the living room speakers. I especially love it when they pick up the phone to call and tell us they’re ready for bedtime.

Now that our home AI agent setup is getting even more complex with different users, permissions, and locations to call from, I had to learn how to protect and improve the overall system quality with evals. Gemini suggested I use promptfoo. Test cases like “find the address of our building management company” or “play ‘Let’s Get Together’” with location set to “living room” were a great start. They helped me find a number of bugs in the agent codebase, prompts that needed to be clarified, and I realized that the scripts the agent uses needed clearer help screens and more helpful error messages. It’s a great setup, and I can add new scenarios whenever we find ways to improve the agent’s quality.

The Goldilocks Watch: Just Smart Enough

Casio ABL-100WE with custom companion app

I wanted a wristwatch with the effortless charm of a classic Casio F-91W, but with just enough intelligence to handle modern family life.

Inspired by David Singleton’s post on the Sensor Watch board, I swapped a custom PCB and display into an F-91W shortly after our daughter was born. Having multiple alarms for baby schedules, distinct weekday wake-up times, and custom meal timers was fantastic. After using it for one year, I got frustrated with the fast battery drain. I accidentally cracked the custom display during the second battery change, which ruined the experience for me. I want technology that simplifies my life, not another thing that requires maintenance.

That led me to the Casio ABL-100WE. It is a stock, durable Casio watch that implements the standard G-Shock Bluetooth interface. It handles timezone adjustments during travel, and its Bluetooth protocol lets an external companion app manage the watch directly.

Because the official Casio app doesn’t support flexible day-of-week alarm schedules, I added a watch management module to my existing personal Android helper app. I retain the automatic timezone adjustments, and I can sleep in a little longer during weekends thanks to automatic flexible schedules.

I’m beginning to see a pattern where each of my projects is easier to execute than the previous project. It’s because I’m accumulating foundational building blocks, such as the personal helper app on my Android phone or this web server, and it’s easy for an AI agent to build what I need on top of those building blocks.

WhenPlay: Hassle-Free Playdate Coordination

WhenPlay screenshot

We love playdates for our kids, but after a long work week, organizing them in crowded messaging groups is exhausting. Parents end up scrolling through endless chat logs or asking the same “Who is free this Saturday afternoon?” question every week.

To solve that problem for our community, I built an ephemeral noticeboard for parents to coordinate playdates without group-chat noise.

  • You see what you share: you must list your availability on a board to see matching playdates
  • No children’s data: absolute ban on collecting kids’ names, birthdays, or locations
  • Zero maintenance overhead: ephemeral noticeboards that automatically self-clean

The profile is stored in the browser locally, and the online copy for finding matches gets deleted after 30 days of inactivity to protect privacy and keep boards up to date. Locations and interests are simple tags, requiring neither location tracking nor third-party services.

Try it out at whenplay.app.

The Zero-Data Toddler Terminal

Zero-Data Toddler Terminal screencast

I built the 2026 version of a typewriter or Commodore BASIC for kids.

Our 4-year-old got a real kick out of typing his name into my laptop’s password field. It reminded me of the joy my friends and I got out of our grandparents’ typewriters and text-based computer user interfaces.

Something needed to be done! Any modern interpretation of those systems needs three things:

  • The classic typewriter “ding!” sound
  • Clear goals – “if I enter the right combination of letters, something fun happens”
  • A near-zero barrier to entry

The sound effects were simple. For goals, I landed on colors and animals: type “red”, and the screen turns red; type “dog”, and the computer barks. The app also lets you save family names using localStorage to trigger a loud “ding!” when typed.

As with all my side projects, I embraced zero data: no accounts, no user data getting stored on any servers, no cookies. You can build delightful products that respect user privacy without a long privacy policy.

Try it out at qhf.me/tt.