I work with Firebase Remote Config to roll features out gradually. And lately I’ve been playing with Arduino microcontrollers for fun, small programmable boards you can wire all sorts of things to. So why not connect the two?
The result is rollout-knob, a small side project where a physical knob controls a feature’s rollout progress, shown live on a web page.
Arduino UNO R4 WiFi, KY-040 rotary encoder, SSD1306 OLED on a breadboard
How it works
How the rollout percentage value travels from the physical knob all the way to the live web page:
Dial (Arduino)
↓ turn the knob to set a value
OLED display shows the current value
↓ sent over WiFi
Node.js Backend
↓ pushes the value
Firebase Remote Config (source of truth)
↓ polled periodically
Web page reacts to the new value
Hardware
Arduino is a family of small programmable microcontrollers. The boards have pins you wire buttons, sensors and displays to. My Arduino UNO R4 supports WiFi, so it can send values to a backend.
A KY-040 rotary encoder acts as the knob, and a small SSD1306 OLED shows the current value between 0 and 100 along with the sync status:
Sketch
An Arduino sketch is the C++ program running on the board. The rollout-knob sketch does two things. It reads the rotary encoder into a value from 0 to 100 and shows it on the OLED. On a button press it POSTs that value to the backend over WiFi:
Some details are best left to Cursor and Claude. Debouncing the mechanical button. Tracking the turn direction. Syncing the rollout states: turned locally is pending, then sending, then confirmed is synced.
Backend
Cursor and Claude built all of this for me: A small local Node.js/Express server runs on my machine, on the same network as the Arduino. It takes an API-key-protected POST with the rollout percentage from the knob. Then it writes that value into Remote Config via the Firebase Admin SDK:
Firebase
Firebase is Google’s app development platform. One of its services, Remote Config, holds the parameter rollout_percentage as the single source of truth.
Here’s the twist: normally you change the rollout progress directly in Firebase, but with rollout-knob you adjust that value with a good old mechanical rotary knob instead.
Web
A plain static page on Vercel. Via the Firebase Web SDK it polls rollout_percentage every ten seconds or so and displays it. When the value changes, the display catches up on the next poll.
Here you can see the backend receive the step to 100% rollout from the Arduino and the website display it a moment later:
Repo
This is a side project I mostly made for myself to play with, but anyone can rebuild it and if you’re brave enough, even run it in production. The full pin layout, sketch, backend setup and a build-it-yourself guide are in the repo at https://github.com/sischreiber/rollout-knob