The Milk Is Eventually Consistent.
One shopping list across three apps, laundry with status reports, a voice guide for actual humans, and a few quieter improvements. Notes since October 20.
Since the last post, we have made considerable progress toward a modest household goal: remembering to buy something without having to decide which application deserves to know.
There were three apps involved. Naturally, there had also been more than one list.
This is how a smart home becomes a small administrative district.
One list was the whole idea
The regular Home Assistant Shopping list now syncs both ways with Mealie and Skylight.
Previously, a separate Mealie shopping list had made the arrangement more confusing than useful. I didn’t want a special destination for groceries. I wanted the list people already use to be the list.
We connected the existing list and hid the redundant one. Additions, edits, check-offs, reopening items, and deletions were tested across the integration. Existing entries were preserved.
Voice additions follow the same route. Ask the assistant to add milk, and it lands on the regular Home Assistant list, then reaches Mealie and Skylight. Changes generally need about a minute or two to travel between the apps.
That delay is fine. Milk rarely requires subsecond coordination.
The important part is that nobody has to remember which list is the official list, which list is the synchronized list, and which list was created during an optimistic afternoon of configuring lists.
The washing machine has a public-relations department
We added the new washer and dryer to the laundry area in Home Assistant and built graphical status cards for them.
The cards look like front-loading machines, with animated drums, cycle status, and estimated finish times. The floor-plan drawer gives them a place to live alongside the rest of the house controls.
Each appliance also has separate notifications for a cycle starting and finishing. Tapping a notification opens that laundry drawer. Duplicate suppression is included, because a washing machine reporting that it has finished once is helpful. Reporting it repeatedly begins to sound supervisory.
The mobile layout, drawer links, and Home Assistant configuration were checked, and test pushes were sent.
There is still an unfinished piece: the notification link worked on one phone, while another showed a card-loading error. Cached dashboard code was the suspected cause, and restarting the app was the proposed next check. The chat does not contain confirmation that this resolved it. A complete real-cycle test across both phones also remained outstanding.
The washer and dryer are integrated. I’m not yet awarding the notifications perfect attendance.
We wrote down how to talk to the house
The voice setup had reached the point where “just ask it” was becoming an inadequate user manual.
So we made a one-page printable guide with examples for music, speaker groups, lights, reminders, calendars, and web searches, along with the household routines.
This may be the least glamorous artifact in the project, and one of the most useful. The person who helped build a system has a terrible advantage: they remember the conversation in which each feature was invented.
Everyone else gets a small plastic speaker and an implied promise.
A page of examples makes the capabilities discoverable without requiring the rest of the household to read our development history. It also gives us a practical test: if the instructions are difficult to explain, there may be something awkward about the interaction itself.
One automation’s best update was being turned off
We disabled a motion-lighting automation that was turning a light on when someone walked past.
Manual and voice controls remain available. Walking by no longer needs to count as a request.
I like this kind of improvement. It produces no new dashboard card, no clever animation, and no additional notification. Something simply stops happening when I don’t want it to happen.
A house can be helpful without volunteering quite so often.
A little more recovery, a little maintenance
The power outage from the previous post had left another problem behind: the wall charger was offline and showing a fault.
We worked through the symptoms rather than treating “offline” as proof of a Wi-Fi problem. After a restart, Home Assistant could see it again, and I confirmed it was working. No Wi-Fi changes were needed.
That was a recovery of this incident, not a diagnosis proving why the fault happened. Still, charging again is a useful outcome.
We also updated the existing Immich photo service from 3.3.1 to 3.3.5. A database and configuration backup came first. After the update, all four containers were healthy, the server responded normally, and the recorded asset count was unchanged.
For a photo library, “everything is still there” is a much better release note than “we have introduced an exciting new abstraction.”
BookOrbit got a small usability improvement of a different kind: another reader was set up with limited book access and passkey onboarding. The invitation was sent; first sign-in was still pending. No administrator access was needed to read a book.
The useful kind of boring
There are still loose ends. The laundry card needs confirmation on the second phone. The real-cycle notifications need their full test. The latest Buzz update check could not complete, so it does not establish whether that service is current.
But the work since the last post has a satisfying direction. Fewer duplicate lists. Clearer controls. Instructions someone can actually use. Updates checked against the data they are supposed to preserve.
Codex helped with the configuration, tests, troubleshooting, and documentation. My contribution included noticing that a grocery list had become a systems-design problem and asking whether it could please go back to being a grocery list.
It can.
Give it a minute or two.
