

Silicon Bubbles — an iMessage client for the Cardputer ADV (needs a BlueBubbles server on a Mac)
My daily driver phone is an iPhone and my pocket toy is a Cardputer ADV, so the conclusion was inevitable: the 56-key keyboard now sends iMessages. Real bubbles, pixel-art emoji, tapbacks shown as little pills on the bubble corner, marimba-ish synthesized sounds instead of beeps, EN/FR interface.
Hard requirement up front: this is a client for BlueBubbles, the open-source iMessage bridge. You need their server running on a Mac (or Hackintosh/macOS VM) signed into iMessage. No Mac, no messages — there is no way around Apple on this one. Setup is ~10 minutes and their docs are good.
What the device does once it's talking to your server:
- conversation list that merges duplicate threads per person, with a calibration pass that figures out who you actually talk to
- bubble-by-bubble scrolling, group sender labels, unsend/edit handling
- 42 hand-drawn 12×12 emoji glyphs (68 codepoints), unknown ones get a clean placeholder instead of tofu
- name any conversation locally (BlueBubbles doesn't expose Mac contacts), WiFi scan + QR-based setup from a phone, settings backup to microSD
- a web portal for config, and stable error codes (E11…E50) documented in the README so "response cut short" never reads as raw JSON vomit
The part I'm proudest of is invisible: the ESP32-S3FN8 has no PSRAM, and the real budget is the ~31 KB contiguous heap block left at runtime. Responses are parsed as a stream straight off the TLS socket — no body is ever buffered. Along the way I hit a nasty core bug: NetworkClient::readBytes treats a momentarily empty TLS socket as a fatal error, silently truncating anything bigger than the decrypted buffer. If your ESP32 HTTPS code "randomly" fails on large responses, that may be your answer.
Honest status: work in progress. It runs daily against exactly one setup — ADV, BlueBubbles v1.9.9 behind Cloudflare, French numbers. That's one data point. If you flash it against a different setup (other country codes, big group chats, self-signed TLS, ngrok, the original Cardputer), please open an issue and tell me what broke or didn't. At this stage your setup report is worth more than any feature request — though those are welcome too.
Installing: it's on M5Burner under CARDPUTER (search Silicon Bubbles) if you'd rather not touch a toolchain, or grab the factory .bin from the GitHub releases. Either erases existing device settings, so back yours up first if you have some.
Everything on GitHub (MIT), including a desktop SDL simulator that renders the exact same UI code — every screenshot and the GIF above come from it, none of this is a mockup. Built with Claude Code driving the implementation; the decision journal in the repo keeps the whole dialogue, wrong turns included, and the device says so itself in its About screen.