Version three
The site writes itself from the road.
This is the third version of the system behind this site. Its two predecessors are still here to read: 2026 How it worked and 2025 How it worked.
The goal has not changed: the site writes itself from the road, and we depend on outside providers as little as we can. What changed is nearly everything underneath.
A date to remember
On 3 November 2026, at 21:45, we stopped the old Node-RED.
For years it held the whole project together: the posts, the pages, the photos, the alerts and, in the end, even the firmware for our cars. It worked, but it had grown into one big machine that was hard to change safely. Replacing it took many hours of Claude’s work, and everything it did now lives in a small program of our own, the Hub. From the start the new system was meant to be no-code on our side: all of it was built by AI. The site did not go down for the move. Each page and each job moved on its own, compared with what was live before it took over.
The whole system in one picture
There are still three places where things happen.
In the car
- Displays
- OBD-II
- GPS
- Climate
- Gateway board
At home
- Hub
- MQTT broker
- Dawarich
- Immich
- Photon
- Home Assistant
- EVCC
- Solar and battery
- 5G
On the web
- WordPress
- Our own theme
- Trips map
- Live
- Public photos
In the car
Small computers read the engine, the position and the cabin, and show it all on screens. They talk to each other over ESP-NOW, a direct radio link between boards, so the car never needs the internet or the server to work.
At home
One Unraid server does the thinking. It runs the Hub, an MQTT broker, Dawarich for our location history, Immich for our photos, Photon for offline place names, Home Assistant and EVCC for the charger.
On the web
WordPress and our own theme show the result, and the Hub’s control panel lets us steer it all from a phone.
The server runs on solar panels and a home battery, so for most of the year it could stay completely off-grid. And all of it, this website included, is hosted at home over a 5G connection.
The Hub
The Hub is the new centre. It holds one document that describes each car: which boards it has, which devices run on them, and what the screens show. Everything else follows from that document.
It also builds the site. Statistics, the home page and the pages of the cars are rebuilt and published every night, and only when something really changed. A trip’s post is built from its Dawarich entry and its Immich photos, shown in a preview next to what is live, and written only when we press Publish. What was live is kept first, so one click on Restore puts it back. A notification reaches the phone in the morning if a post differs from what the Hub would build, and tapping it opens the Hub on the right page.


Older trips deserve a special word. Dawarich lost data at one point, and many old tracks now exist in full only on the site. So for those trips the site is the source: the Hub will not replace their maps.
Cars: hosts, devices and entities
Version 3 was designed from a clean sheet around three ideas.
Host
Anything that runs code, a board in the car or the server at home.
Device
Something with settings pinned to a host: the OBD-II adapter, a GPS receiver, the fridge, the power station.
Entity
One value or control of a device, such as the coolant temperature or the charging mode.
A screen is just a set of widgets bound to entities, so one editor designs them all, whatever the shape of the display: the round M5Dial, the M5Stack Core2, the Waveshare touch screens and others. For now the Sienna has all the displays, while the Citroën waits for its own long LilyGO. The Core2 is multi-car: it has its own battery and can be switched between the cars on the fly, which is very handy. Adding a relay board or a new value to a screen no longer needs new firmware. The boards simply get a new version of the document.

Inside a car one small gateway board holds the only connection to the outside world. It talks MQTT to the broker at home, and it keeps working when there is no signal. The screens have no WiFi of their own at all, which keeps them simple.
Signed updates over the air
All boards of all cars share one build number and are always built together. An update travels in small pieces over MQTT and then over ESP-NOW, and it continues from the last confirmed piece after an interruption. Both firmware images and the document each board receives are signed at home, and a board checks the signature before it uses either. A board that does not start properly on the new image goes back to the previous one by itself and says so.
Home Assistant and the charger
The cars show up in Home Assistant on their own, so their values can be used in automations at home. Notifications from the Hub reach the phone the same way.
EVCC runs the home charger. The page of the car in the Hub shows the state of charging, how much of the current session came from the sun, how much the grid is giving right now, and lets us set the mode, the phases and the limit before we even plug in.

Photos
Tagging a photo in Immich is still all it takes to put it on the site. Photos with people’s faces, photos tagged as private, fuel receipts and repair orders never reach a public page. Every trip also has its own album in Immich, shared with the family.
Home stays private
A site that publishes where we are has to be careful about where we live. These rules are enforced on the server, not in the browser:
- No point inside a privacy zone leaves the server on a public map, and the live map hides itself when we are near home.
- A route that starts or ends in a zone simply is not drawn there. Its end stops a random distance from the edge, different for every trip, so many trips together do not draw the circle.
- A route that passes through a zone stays one line: a straight stretch between what shows on both sides, with no point inside.
- The parking position and anything else personal exist only in the Hub, behind the login.
Small things that make it robust
Backups
Nightly backups, with a phone alert if one is late.
Restore
A copy before every write to the site, and Restore next to Publish.
No step back
A build never replaces a post with a poorer one: the Publish button refuses when the Hub’s route is shorter than what is live.
The look in one place
The look of the site is moving out of the posts and into the theme, so one change of the theme reaches every old post without touching its text or its map.
Built together with Claude
Like the previous versions, this one was written in conversation with Claude, with several conversations running side by side on the firmware, the Hub and the site. The difference this time is the size of the step: a new design for the cars, a new centre at home and the old Node-RED switched off, in about two weeks of daily sessions.
What is next
- Checking every feature and fixing what needs it.
- Preparing the whole code to be published on GitHub.
- Adding new devices and sensors from our stock.
- Searching the archives for missed or unpublished trips.
- And, as always, more trips.