An industrial stack light with five lamps, driven by an ESP32-S3 in a 3D-printed base – dimmable, blinking and pulsing, via an HTTP API and a web interface on the local network. In everyday use it shows what the running Claude Code sessions are doing right now – directly on the local network, or through a relay server from anywhere.
| Folder | Contents |
|---|---|
enclosure/ |
Parametric base in OpenSCAD: carries the stack light and houses all the electronics. Print-ready STL files, print recommendations, assembly order. |
firmware/ |
PlatformIO firmware for the ESP32-S3: PWM drive with effects, WiFi setup via captive portal, web interface, HTTP API. |
claude-code/ |
PowerShell script that brings the state of Claude Code sessions to the stack light via hooks. |
relay/ |
Optional ASP.NET Core server between hooks and stack light: combines the sessions of several computers, the stack light polls it – no shared network needed. Admin interface for API keys, event rules and appearance. |
The parts build on each other but can also be used on their own: the firmware does not need the base, the API is open to any client, not just the hook script, and the relay is only needed when computer and stack light are not on the same network.
| Component | |
|---|---|
| Stack light | 5 lamps (white, blue, green, orange, red), 12 V LED modules, flange with 4 × M4 on a 55 mm bolt circle |
| Microcontroller | ESP32-S3 DevKitC-1 N16R8 (16 MB flash, 8 MB octal PSRAM) |
| Driver | 8-channel MOSFET module, active LOW; 5 channels used |
| Power | USB-C PD trigger board (requests 12 V) → Mini560 buck → 3.3 V into the ESP32's 3V3 pin |
| Base | 138.8 × 120.8 × 35.8 mm, PETG or PLA+, heat-set inserts 4 × M3 and 4 × M4 |
Everything sits on the base plate, held by printed clips – no screws. The five lamp
cables come through the feed-through in the lid.
Pin assignment, dimensions and details are in the READMEs of
enclosure/ and firmware/.
- Print:
enclosure/OpenSCAD/body.stlandbase.stl, support-free, see the print recommendations. - Assemble and wire following the assembly order.
- Flash: in
firmware/with PlatformIOpio run -t upload, see Building and flashing. - Set up WiFi: on first start the device opens the access point
StatusStackLight-XXXX; the setup page appears by itself, see WiFi setup. - Try it out:
http://statusstacklight.local/in the browser – every lamp can be switched there individually with all its parameters. - Optional: set up the Claude Code display, see
claude-code/. - Optional: run the relay on a server, see
relay/, and switch the stack light and the hook script to relay mode.
MIT – for firmware, scripts, relay, enclosure model and documentation.
