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 — a single 128×32 canvas. It runs standalone and offline on first boot, showing one permanent scene: a procedural stick-figure breakdancer on the left, a per-character rainbow "HAPPY BIRTHDAY <name>!" in the center, and a permanent animated cigar with rising smoke on the right, punctuated by firework bursts. The recipient's name is a single parameter in the config, so the same firmware works for anyone. It was designed and built end to end with Claude Code, and runs on ESPHome with a set of C++ scene headers.

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

The prompts

Every prompt from the project, in order, exactly as typed — typos and all. The first two were a research-and-design chat on Claude to nail down the hardware and scope; the rest are the build itself, driven from 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