Case study · 07 / 11
Apps and Badge Studio for the GitHub Universe badge
Fig. 01 — BadgerHover for colour
The GitHub Universe '26 badge is a real little computer (RP2350, colour screen, MicroPython). I opened it up: new apps, an app store that runs in the browser, and a remote on my Galaxy Watch.
At GitHub Universe '26 in San Francisco, every attendee gets a Badger 2350: an RP2350 chip, a 320×240 colour screen, Bluetooth, Wi-Fi and MicroPython running MonaOS. Badger gathers what I built for it. On the badge: a Radar that finds nearby badges over Bluetooth and places them by signal strength (with a hot / cold game and an encounter history), a Badge app that shows my GitHub stats and QR codes and answers NFC scans, safer Contacts that still swap with stock badges, a pedometer, Mona Pet fed by steps, the Duck Maze game and a menu that keeps my apps apart. In the browser: Badge Studio, an app store that talks to the badge over USB (Web Serial) to install, update or remove apps, replace a built-in one, repair system files, reorder the home screen, change settings, take screenshots and open a MicroPython console, with nothing to install. On the wrist: Badger Remote, a Kotlin Wear OS app that presses the badge's buttons over Bluetooth Low Energy (2 bytes per press, merged into the badge's loop so every app sees them as real presses) and sends it my steps for the day. It is all tested in CI (simulated apps, contacts compatibility, Radar, Duck Maze levels, the watch app build), documented with one guide per app and open to contributions.
Main Features
Technical Challenges
Technologies
Year
Live captures · hover for colour
01Badge Studio: an app store in the browser that talks to the badge over USB (Web Serial), nothing to install
02Install, update, remove or replace a built-in app, with the old version backed up
03Repair system files, reorder the home screen, change settings, take screenshots and open a MicroPython console
04Radar: nearby badges found over Bluetooth and placed by signal strength, hot / cold game and history
05Badge app: GitHub stats, QR codes for my site and profiles, NFC scan response
06Badger Remote: the Galaxy Watch becomes the badge controller (Bluetooth LE, tap or hold, crown)
07Pedometer and Mona Pet fed by the watch steps, kept on the badge between syncs
08Duck Maze, dizzy Mona when you shake the badge, and a menu that separates my apps from the stock ones
09PC tools: deploy and screenshots over the serial port (RGB565 → PNG)
10GitHub Actions CI: simulated apps, contacts compatibility, Radar, Duck Maze levels and the watch app build
01Coding for 520 KB of RAM and a 320×240 screen, inside MonaOS's render loop
02Estimating distance from Bluetooth signal strength alone, with no direction
03Staying compatible with the stock badges contact swap
04Writing to the badge from the browser without ever leaving it broken: every file is read back after it is written
05Making the watch presses look like real presses, in every app, menu included
06Sharing the badge's Bluetooth between the remote and the apps that need it
07Testing in CI code made for a device CI does not have
Front-end
Back-end
Tools
Tags
#micropython #github-universe #badger2350 #web-serial #bluetooth-le #wear-os #app-store #embedded
Next project
08 / 11
Fort Mason Octodex