Home Assistant · add-on + MQTT

A baby tracker that lives in your Home Assistant sidebar.

mybabynotes is a self-hosted baby log for one household — feeds, diapers, sleep, shared timers, shift handoffs, live on every phone. The Home Assistant add-on puts that whole app in the HA sidebar over ingress, for everyone in the house rather than just admins. Separately, an MQTT integration turns the household into HA entities your automations can read and press.

How the add-on works Read the HA guide

Ingress with websockets · amd64 + aarch64 · MQTT sensors & buttons · AGPL, no cloud account

Installable today — v1.5.3, on amd64 and aarch64

The add-on’s images (ghcr.io/straplocked/mybabynotes-ha-addon-*) are published and pull anonymously, so installing pulls a prebuilt image — nothing is built on your box. One step catches everyone: after installing you have to Start the add-on and then turn on “Show in sidebar”. Home Assistant hides the panel for every newly installed ingress add-on, and no manifest key can change that — until you flip it, the only way in is Open Web UI on the add-on’s page.

Two surfaces, independent

One gives HA the app. The other gives HA the data.

Neither replaces the other, and neither requires the other. Most households that run both end up using the panel to log and the entities to automate.

The add-on

Puts the mybabynotes UI in the HA sidebar via ingress. It can run the app on the Home Assistant box (local mode) or embed an instance you already run elsewhere (remote mode). Either way the panel is the real app — the timeline, the timers, the handoff sheet — not a dashboard card.

MQTT entities

The household shows up as HA devices through MQTT discovery: last-feeding, last-diaper and last-sleep sensors, an on-duty sensor, and buttons for quick logs and timers. Works with any mybabynotes install and any HA install that share a broker — the Mosquitto add-on is the usual one.

Same path, either way

An entry pressed from a Lovelace button writes through the same server-side path as a tap on someone’s phone — same rules, same realtime broadcast. It lands on every device in the household instantly, credited to the acting user you configured.

Inside the panel

What the add-on actually does.

Four things worth knowing before you decide whether it belongs on your box — all of them straight out of the add-on manifest.

Everyone’s sidebar, not just admins

The panel ships with panel_admin: false, so the partner who isn’t your HA administrator still sees MyBabyNotes when they open Home Assistant. A baby log the other parent can’t reach is not a shared log.

Websockets ride ingress

Ingress is set to stream, so the Reverb websocket connection works inside the panel. The realtime part survives the trip: a timer your partner starts on their phone appears in the HA panel as it happens, not on the next refresh.

Local mode or remote mode

Local runs the full all-in-one on the HA box. Remote makes the add-on a thin proxy to an instance on your NAS — set remote_url and no data touches Home Assistant. One option, two very different deployments.

Backups you already take

In local mode all state — the SQLite database and the secrets the app generates for itself on first boot — lives in the add-on’s private /data, which rides Home Assistant’s own backups. Back up HA and you’ve backed up the baby log.

Honesty note, and it’s the one people hit first: inside the panel there is no install-to-home-screen and no push notification, because the service worker is deliberately switched off under ingress. Ingress sessions and service-worker caching don’t mix, and an installable app inside an iframe isn’t a real thing. That’s what the optional direct port below is for.

Install

Add the repository, install the add-on.

It’s a third-party add-on repository — the same mechanism Home Assistant gives any outside repo — on amd64 and aarch64. Four steps, and step 2 is the one people miss.

1 · Add the repository

In Home Assistant: Settings → Apps → App store → ⋮ → Repositories, and paste:

https://github.com/straplocked/mybabynotes-hassio-addons

Home Assistant renamed this section in 2026.6 — on older releases it’s Settings → Add-ons → Add-on Store. The old /hassio URLs now 404, so go through the Settings menu rather than a bookmark. Then open MyBabyNotes and click Install — it pulls a prebuilt image.

2 · Start it, then Show in sidebar

Click Start — first boot runs the database migrations, so give it a few seconds — and then turn on the Show in sidebar toggle on the add-on’s page.

This step is not optional and not automatic. Home Assistant defaults every newly installed ingress add-on to not showing a sidebar panel, and it’s a per-user toggle rather than something an add-on manifest can set. Until you flip it, the only way in is Open Web UI on the add-on’s page.

Opening the ingress URL straight in a browser tab returns 401: Unauthorized. That’s expected — HA mints a short-lived ingress session when it opens the panel. Nothing is wrong with your install.

3 · Pick a mode

local — run the whole thing here. First visit, create the first account; it claims the instance and invites the rest of the household. State lives in the add-on’s /data.

remote — you already run mybabynotes somewhere. Set remote_url to its address and the add-on just proxies it into the sidebar, websockets included. You’ll still sign into mybabynotes once inside the panel; ingress authenticates your HA user at the door, not into the app. The remote instance must run v1.0.0 or newer — that’s the release that ships the base-path-relative build; anything older renders a blank page under the ingress URL prefix.

4 · Optional: the direct port

Off by default. Turn the port mapping on and phones can reach the instance directly on the LAN — which is what makes the installable PWA and push notifications possible, since neither works inside the ingress panel.

As with any mybabynotes deployment, install prompts and web push need HTTPS, so put a reverse proxy with websocket support in front if you want them off the LAN too. The self-host guide covers that setup.

Not affiliated with or endorsed by the Home Assistant project, and not listed in Home Assistant’s built-in add-on store — this is a third-party repository you add yourself. The add-on’s source of truth is deploy/ha-addon in the main repo; CI stamps it into the add-on repository on each tagged release.

MQTT entities

What Home Assistant actually sees.

Turn it on as a parent in Settings → Home Assistant, enter your broker details, test the connection, save. Discovery publishes immediately and the devices appear under Settings → Devices & Services → MQTT within seconds: one household device, plus one per child.

Device Entity What it gives you
HouseholdOn dutySensor — who currently has the baby
HouseholdActive timer · Timer startedWhich timer is running (nurse, pump, sleep, tummy) and when it started; stacked timers ride an attribute
HouseholdLast pumpTimestamp sensor
HouseholdStop timer · Start pump timerButtons — stop the running timer, or start a pump
Per childLast feeding · Last diaper · Last sleepTimestamp sensors, each carrying the entry’s type, detail and who logged it
Per childLast tummy time · Last bath · Last medsTimestamp sensors — present only while that tracker is enabled in the app
Per childLog wet · Log dirty · Start nurse / sleep / tummy timerButtons — a Lovelace tap or an automation logs the entry, stamped now. An automation sending the command itself can start a timer from up to a day back

Timestamps, not counters

Every last-something sensor is a real timestamp entity, so Home Assistant renders “34 minutes ago” itself and relative_time works in templates. There are deliberately no derived “hours since” sensors cluttering your entity list.

Give it its own broker user

Anyone who can publish to the command topic can press the buttons. The blast radius is limited on purpose — logging and timers, no household management — but scope the broker user to the app’s own topics anyway. The docs spell out the ACL.

Unavailable means unavailable

If the server’s MQTT listener drops, a last will marks every entity unavailable rather than leaving stale values on your dashboard — because with the listener down the buttons genuinely wouldn’t work. Discovery and full state republish on reconnect and every 15 minutes.

Full entity reference, example Lovelace card, an automation, and a troubleshooting table: docs/home-assistant.md. There’s also a versioned REST API and a built-in MCP server if you’d rather not go through a broker.

Fair questions

Is this an official Home Assistant add-on?

No. It’s a third-party add-on repository you add yourself under Settings → Apps → App store → Repositories (Settings → Add-ons on Home Assistant older than 2026.6) — the mechanism Home Assistant provides for any outside repo. It isn’t in Home Assistant’s built-in store, isn’t a Community Add-on, and isn’t affiliated with or endorsed by the Home Assistant project.

Can I use it if mybabynotes already runs on my NAS?

Yes — that’s remote mode. Point the add-on’s remote_url at the instance you already run and it becomes a thin ingress proxy: no data lives on the Home Assistant box, and websockets still work inside the panel. You do sign into mybabynotes once inside the panel, because ingress authenticates your Home Assistant user at the perimeter rather than logging you into the app — standard for proxy add-ons. The remote instance must run v1.0.0 or newer, the release that ships the base-path-relative build; anything older renders a blank page under the ingress URL prefix.

I installed it and there’s no sidebar entry. What went wrong?

Nothing. Home Assistant hides the panel for every newly installed ingress add-on, and no manifest key can change it — it’s a per-user toggle. Open the add-on’s page, click Start, then turn on Show in sidebar. Until you do, the way in is the Open Web UI button on that page. Opening the ingress URL directly in a browser tab returns 401: Unauthorized, which is also expected — Home Assistant mints a short-lived ingress session only when it opens the panel itself.

Do I need MQTT to use the add-on?

No — the two are independent. The add-on gives Home Assistant users the app in the sidebar; MQTT gives Home Assistant the data as entities. MQTT works with any mybabynotes install and any Home Assistant install that share a broker (the Mosquitto broker add-on is the usual choice — in local mode the host is core-mosquitto). Run either, or both.

Why can’t I install the app to my phone from the sidebar?

The service worker is deliberately disabled under ingress: Home Assistant’s ingress sessions don’t mix with service-worker caching, and installing an app that lives inside an iframe isn’t meaningful. For phones that want the installable, offline-capable PWA with push notifications, enable the add-on’s optional direct LAN port and point them at it — with HTTPS in front, as with any deployment. In remote mode, phones just use the instance’s own URL.

Can Home Assistant automations write to the log, or only read it?

Both, within a deliberately small blast radius. Alongside the sensors, MQTT discovery publishes button entities — log a wet or dirty diaper, start a nursing, sleep, tummy-time or pump timer, stop the running one — driven by a command topic the server listens on. Entries created that way are credited to the acting user you pick in Settings → Home Assistant and appear on every phone instantly. There are no household-management commands on MQTT: no invites, no settings, no membership.

Run it on the box you already trust.

Home Assistant is the same instinct as this app: your house, your data, no account with a stranger. Start with Docker Compose today — the sidebar panel is one release away. Curious why we care? Read the privacy case.

Self-host it Get early access Create your log