Projects / Embedded
Automated firework launcher
An air-gapped system for designing and firing firework shows, using custom 16-channel PCBs.
I'm the only author of all four repositories in the current rebuild.

Case study
Launcher nodes
ESP32-S3 boards on custom PCBs, with C firmware on ESP-IDF.
- 16 PWM-driven ignition channels, continuity sensing through a PCA9535, and an LED display board
- Firing is gated by an arm state that also drives a hardware arm pin
- Over-the-air updates for firmware, filesystem and partition table
Controller
A Python FastAPI service that finds nodes through UDP broadcast beacons and runs firing sequences.
Web UI and show builder
- A Nuxt 3 control interface, which can also be served directly from a node's flash
- A Nuxt 3 timeline editor, similar to a video editor, for designing shows
Distributed firing
Nodes hold the schedule and fire from their own synchronized clocks, so timing stays tight and a show survives a WiFi drop.
Deployment
Everything runs as one Docker Compose stack behind Caddy.