Ari could remind me to drink water. Ari had no idea whether I was home, asleep, or three hours deep into the couch. Every reminder landed the same way, whether I was out at the store or already doing the thing.
So this weekend I gave Ari a sense of home. It took one weekend and a floorplan that had to be redrawn four times.
The Home view. The floorplan and the Today list show example data, not my real day.
The parts
Everything runs on the homelab. The two exceptions are the Echo and one small AI model, which I get to below.
| Part | What it does |
|---|---|
| Home Assistant | The brain. A VM on the main node that holds every sensor, automation and the dashboard |
| Frigate | A self-hosted camera recorder. It finds people and objects on the cameras using the main node’s integrated GPU, and records to the NAS |
| Three cameras | A Wi-Fi camera that sees the living room and kitchen, a cheap USB webcam low by the couch, and an old Xbox Kinect pointed at my desk |
| The router | Says when my phone joins the Wi-Fi, so “home” flips the second I walk in |
| Immich | My photo library. Frigate learns faces from it, so it can tell me apart from a guest |
| An Echo | So Ari can talk out loud, not only text |
The Kinect was sitting in a drawer. It turns out a 2010 game accessory is a very good desk sensor: it sees depth and body pose, so it knows the difference between me sitting there and a jacket on the chair.
The dashboard
Home Assistant’s default dashboard is a grid of switches. I wanted one screen I could glance at and know the state of the day.
The top card greets me with the weather and a drawing of the house. Next to it is Ari’s Today list, pulled from Ari: habits, reminders and calendar events, with a ring you can tap to mark one done. Tapping it marks it done in Ari too, not only on the screen.
Below that sit the music controls for the Echo, a “where’s my stuff” card (more on that below), and the details I only look at when something seems off.
The house changes with the sky
The drawing at the top is the actual house: a duplex with a white column down the middle, wood siding, and two rooflines that don’t line up. My place is the basement suite on the right. Claude drew it from a Street View photo I sent, as shapes in code rather than a picture.
I could have drawn a dozen versions for day, night, rain and snow. Instead there is one drawing, and code paints everything around it. The sun moves across the sky with the real sun’s position and turns orange near sunrise and sunset. The house picks up that light. Clouds, rain, snow, fog and lightning come from the weather forecast. When it’s below freezing, snow sits on the roofs and the lawn. At night the porch light is on, and my basement windows glow when I’m home.

Same drawing, six skies. All of it comes from Home Assistant’s sun and weather data.
On a phone it stacks into one column.
The floorplan
The first version of the “where am I” card was five rounded boxes labelled Couch, Kitchen, Dining, Hallway and Front door. It worked, but it looked like a spreadsheet.
So I had an AI draw a real floorplan from the camera frames. It came back in a couple of minutes, clean and well labelled, and mirrored. From a camera mounted high in one corner, left and right are easy to flip. The couch ended up on the wrong wall.
Claude, the AI I build most of this with, rebuilt it from photos I sent from my phone, taken from the other end of the room: the window is on the end wall, the couch runs along the other side, and the stove sits next to the fridge. Then I sent a few more corrections. The door across from the fridge goes to the stairs, the washer and dryer are under those stairs, and the bedroom is about half the size of the living room.

Areas glow when a camera sees someone there. Small labels show what Frigate spotted in each area: a laptop on the couch, a bag by the table.
The amber areas match zones I drew in Frigate. When Frigate sees a person in a zone, that part of the floorplan lights up. The rooms with no camera are drawn in outline only, which is honest: the house does not know who is in the bedroom, and I want it that way.
Home moments for Ari
The dashboard is for me. The interesting part is what Ari gets.
Home Assistant watches for moments and sends each one to Ari as an event: what happened, plus a short summary of the state of the house. Ari decides what to do with it. Sometimes that’s a text, sometimes a line on the Echo, sometimes nothing.
Every hook is a switch, so I can turn one off without touching any code.
A few I like:
- Left something behind. When I leave and the camera still sees my bag or laptop, Ari can text me before I’m down the block.
- On the couch two hours straight. A nudge to get up, but only if I’m still sitting there when it fires, and never more than once every 90 minutes.
- Morning, first time out of the room. That’s when Ari reads the morning brief out loud. Not when an alarm goes off, when I actually walk out.
- Up past bedtime. If the cameras see me moving around after half past midnight, Ari says something. Gently.
- People arrived. When a face Frigate knows walks in, Ari can greet them by name on the Echo.
The relay exists on purpose. Ari’s backend does not accept connections from the smart-home network, so Home Assistant posts to a message queue and a small service on another container forwards the event. If the smart-home box is ever compromised, it still can’t talk to Ari’s backend directly.
Where’s my stuff
Every ten minutes, a small AI model looks at one camera frame and notes where my glasses, keys and wallet are. “Glasses: on the white papers on the low table in front of the couch, 7 hours ago.” It is the most useful thing on the dashboard, and the dumbest to explain to people.
That one does send a still frame to a hosted model (Claude Haiku, through OpenRouter), and so do the short captions Frigate writes for each event. Everything else stays on the homelab: the recordings, the faces, the presence. I’m fine with that trade for now. It’s written down so I can change my mind later.
What went wrong
A lot, in two days. The good kind of wrong, where each fix made the system more honest.
- The couch blinked 2,800 times in one day. The zone edge sat right where my legs were, so every time I shifted, it flipped between “couch” and “nothing”. Moving the edge fixed it.
- Faces got creative. A dark blur of hair was matched to someone from my old photos. Me, seen from straight above, was matched to my dad. I trimmed the face library down to people from my photos here in Canada and added size filters, so a tiny smudge can’t count as a person.
- Two cameras, one me. The wall camera and the couch webcam both see the couch, so the house thought two people were sitting there. Now each spot counts the most any single camera sees, and a named face is only counted once.
- Restarting Home Assistant at night woke me up. On paper, anyway. A restart resets the “asleep” sensor, which looks exactly like waking up, which can set off Ari’s good-morning hooks in the middle of the night. Now nothing restarts Home Assistant while I’m asleep.
What’s next
- A UPS, so a loose plug doesn’t take the whole house offline.
- Watching for missed detections now that the size filters are stricter.
- Teaching the hooks more about context, like not nudging me off the couch when I’m on a call.
The point was never the dashboard. It was making Ari’s follow-up land at the right moment, in the right room, out loud or on my phone. That part works now. You can read why Ari exists in why I built Ari, and the hardware it all runs on is on the homelab page.
