Plainbuilt
All projects

Fancy Message Matrix

An LED matrix display running custom firmware that shows a rotating birthday message, a breakdancing stick figure, an animated cigar, and occasional fireworks.

View source 15 prompts totalESPHomeC++ESP32-S3HUB75 LED MatrixYAMLClaude Opus 4.7vibe-codedhardwarefirmware
Fancy Message Matrix screenshot

Fancy Message Matrix is custom firmware for an Adafruit Matrix Portal S3 driving two chained 64×32 LED panels as a single 128×32 canvas. It shows one scene: a procedural stick-figure breakdancer on the left, a per-character rainbow "HAPPY BIRTHDAY <name>!" in the centre, and an animated cigar with rising smoke on the right, punctuated by firework bursts. The display runs offline from the first boot. The recipient's name is a config parameter, so the same firmware works for anyone. I designed and built it with Claude Code using ESPHome and a set of C++ scene headers.

This is a physical device, so there is no live demo to embed. The cover above is a capture of the running display, and the full firmware is on GitHub.

The prompts

Every prompt from the project appears below in order, exactly as typed, typos and all. The first two came from a research-and-design chat in Claude to settle the hardware and scope; the rest drove the build in Claude Code. Use the Copy button on any block to grab it verbatim.

Research and design

Research 1 — Identify the hardwareClaude Opus 4.7
What are the technologies used in https://transit-tracker.eastsideurbanism.org/docs/introduction

I want to repurpose the hardware and load a new custom firmware which displays revolving message "Happy Birthday Bill!"

How would you advise I go about this?
Research 2 — Add effects, name the repo, write a handoverClaude Opus 4.7
I like the idea of adding added effects like rainbow gradiants, sprite animation and confetti. Can we add a stick figure breakdancing and fireworks. Suggest a repository/folder name. And provide me with a handover message I can provide Claude Code to commence building the project.

Building it in Claude Code

Prompt 1 — Build Phase 1Claude Opus 4.7thinking: xhigh
Read HANDOVER.md and build out the project per PHASE 1. Stop after each phase for review.
Prompt 2 — Flash itClaude Opus 4.7thinking: xhigh
flash for me
Prompt 3 — Restore button brightness controlClaude Opus 4.7thinking: xhigh
I want back the brightness reduction/increase using side button(s) feature
Prompt 4 — Start Phase 2Claude Opus 4.7thinking: xhigh
start phase 2
Prompt 5 — Start Phase 3Claude Opus 4.7thinking: xhigh
start phase 3
Prompt 6 — Collapse to a single sceneClaude Opus 4.7thinking: xhigh
How about consisting of just one scene. Keep the breakdancing figure permanently there on the left hand side. On the very right hand side add a rotation between an animated cigar with smoke eminating off of it and discipating above, and a firework animation. In the center communicate the message "Happy birthday Bill". Otherwise shorthand birthday to bday.
Prompt 7 — Device plugged inClaude Opus 4.7thinking: xhigh
i've plugged in the device.
Prompt 8 — Bigger cigar, fireworks only occasionallyClaude Opus 4.7thinking: xhigh
the cigar needs to be bigger, but also just have the fireworks ocassionally light whilst the animated cigar remains there permanently.
Prompt 9 — Double the firework frequencyClaude Opus 4.7thinking: xhigh
Make the frequency of the fireworks twice as frequent.
Prompt 10 — Parameterize the recipient nameClaude Opus 4.7thinking: xhigh
Sweet, now, can we make the name of the birthday recipient parameterized? Suggest character limitations.
Prompt 11 — Reflash with the new nameClaude Opus 4.7thinking: xhigh
I've changed the name. reflash

Sent right after editing recipient_name directly in bill-matrix.yaml. Claude Code saw the hand edit via a file-change system reminder and reflashed with the new name.

Prompt 12 — Revise README, prep for GitHubClaude Opus 4.7thinking: xhigh
Revise the README.md and prepare for me to push to a github repository
Prompt 13 — Final sanity check and pushClaude Opus 4.7thinking: xhigh
Do one last santiy check to ensure we aren't leaking anything personal, and then push to empty repo: https://github.com/jqhils/fancy-msg-matrix