English · Deutsch
Who's on which mic? MicBoard shows it live on any screen or as an OBS browser source. A volunteer assigns people to mics in the admin panel, every display updates within a second. Built for our church, used every Sunday.
👉 Try the demo: micboard.flotech.dev (password demo, resets every night)
- Live sync: assignments show up on every display in under a second, the admin panel updates instantly
- Multiple displays: speaker screen, band screen, livestream scene, each with its own slots (Preacher, Vox 1, Guitar …) and aspect ratio (16:9, 21:9, 32:9)
- Photos per person, with crop and zoom
- Quick add: create a guest right in the assignment dialog, removed automatically when unassigned
- Self-hosted: your data stays on your server. No accounts, no cloud services, no build secrets
- Runs anywhere: any PHP webspace, a Raspberry Pi or a desktop computer
Download micboard.zip from the latest release and unpack it. Then pick one:
- Upload the folder's contents via FTP/SFTP, e.g. to
micboard/ - Open the address in the browser and set the admin password
- Done. Data lives in
daten/(locked by.htaccess), photos inimages/
cd micboard
node server.mjs # → http://<this-computer>:8080
PORT=80 node server.mjs # other portOn a Raspberry Pi, run it as a service so it starts on boot (/etc/systemd/system/micboard.service):
[Unit]
Description=MicBoard
After=network-online.target
[Service]
WorkingDirectory=/home/pi/micboard
ExecStart=/usr/bin/node server.mjs
Restart=always
User=pi
[Install]
WantedBy=multi-user.targetsudo systemctl enable --now micboard
One Pi 4/5 drives two screens. Flash Raspberry Pi OS Lite, then run werkzeuge/raspi/einrichten.sh over SSH: it boots straight into full-screen displays, no cursor, no screen blanking, nightly restart.
Open https://your-address/#/display/<id> on the screen, or use it as an OBS browser source. The admin panel shows the link for each display.
- React app (Vite, Tailwind) talks to a tiny server:
api/index.phpon a webspace orserver.mjswith Node. Both offer the same API and store everything in JSON files - Displays ask once per second whether anything changed. The answer is a few bytes unless something did
- The admin password is stored hashed. A login gives the browser a key valid for 30 days
- Demo mode: a
demo/db.jsonnext to the app sets the password todemoand restores the data every night
npm install
npm run server # API on :8080 (data in .dev/)
npm run dev # app on :5173, forwards /api to :8080Moving from the old Firebase version: werkzeuge/umzug-firebase.py.
AGPL-3.0: free to use, change and share. Anyone who distributes it or offers it as a web service must publish their source code under the same license. © 2026 Florian Hogrebe. Versions up to 1.0.0 were released under MIT. · A project by FLOTECH

