Switches that answer back
Unlock the door, turn on the lights or start the pump from the dashboard, and it reaches the device over MQTT in under a second. Press a button on the device and the dashboard follows.

One dashboard for every connected project: door locks, water tanks, room automation and whatever you build next, on ESP32, STM32, Teensy or any board that speaks MQTT.
First, create a project and name its devices in the dashboard.
Then flash your board: the IoTMQTT library on ESP32, or a few MQTT calls on any other.
Next, the board logs in and gets a key bound to its MAC address.
After that it reports in, and every switch you flip goes straight down to it.
mqtt.setTelemetry("temperature", 24.5);
mqtt.updateTelemetry();devices/room-01/telemetry
{"temperature":{"value":24.5}}One reading, three places: the line in your sketch, the message on the wire, and the row your dashboard shows. It works the same for a lock, a tank or a room: the field names you pick become the labels people see.
Or try

A door lock, a water tank, a room of lights and fans: each one is a project with its own devices, fields, settings and firmware.
Unlock the door, turn on the lights or start the pump from the dashboard, and it reaches the device over MQTT in under a second. Press a button on the device and the dashboard follows.

Each project defines its own settings: a lock’s auto-lock delay, a tank’s height, a room’s target temperature. Change one and the device is told to fetch it, even after a restart.
Every device logs in with its own token, tied to its MAC address. Copy the firmware to another board and that key stops working.

Every message is stored with its time, so yesterday’s room temperature, a door’s lock history or a tank’s level is one chart away.
Upload a build to the project. Devices set to update on their own pull it on their next check, and the rest wait for you.
Either way you land in your dashboard. A device shows up there the first time it logs in.