Build log

How it was made

I write up what got built, what broke and how it was fixed. Not a tutorial blog — notes on what actually happened, including what went wrong.

01 / 2026-04

A camera off the cloud — custom firmware for the Conecto Bullet 6S

A cheap security camera with 8 MB of flash, an ARMv5 core and a hard dependency on the Tuya cloud. I dumped the firmware over UART and wrote my own RTSP server in C.

firmware · C · ARMv5 · RTSP · reverse engineering
02 / 2026-04

Reading an Aidon meter — P1/HAN and DLMS/COSEM

Finnish smart meters speak DLMS/COSEM out of the HAN port. A custom ESP32 circuit reads consumption every ten seconds straight into Home Assistant.

ESP32 · ESPHome · DLMS/COSEM · KiCad
03 / 2025-08

A plant sensor that lasts years on one battery

The ESP32-C3 datasheet promises 5 µA in deep sleep. Reality is 600 µA, and 90 % of that is a single indicator LED. A soldering iron quadrupled the battery life.

ESP32-C3 · ESPHome · deep sleep · power
04 / 2025-06

Ira — an artist site with a shop that runs itself

A Nuxt 4 site for the artist Ira. The merch shop runs unattended: orders to Printful, checkout through Snipcart, emails sent automatically.

Nuxt · automation · e-commerce
05 / 2025-03

Palttala — historic lakeside cabin

A bilingual website for Palttala, a historic 1805 log cabin on Lake Näsijärvi near Tampere — 6+6 guests, hot tub, private beach.

nuxt · client work
06 / 2024-09

kortit.io — a real-time card game on Durable Objects

A browser card game running on Cloudflare Durable Objects. One object per table holds the game state, with no separate database during play.

Durable Objects · TypeScript · WebSocket
07 / 2024-08

A laser engraver made from an old 3D printer

The Geeetech i3 had reached the end of its life as a printer. The frame, motors and motion axes were fine, so it became a laser engraver instead.

laser · 3D printing · electronics · reuse
08 / 2023-10

Hillala — educational games for kids, built in Godot

A collection of games built in Godot for my own child. Every game has an educational angle, and a parent sets the age and sees the time played.

Godot · GDScript · mobile

The archive fills up as it goes. An entry appears when the work is done, not before.