The module arrived in the previous commit exactly as it runs in North Attleboro. This brings it to the interface rules every module follows and puts it where the admin page can offer it. The three hide-toggles — names, mic labels, parallax — sat in a folded "Show / hide" group. Rule 8 puts four or fewer at the top of the gear with no group at all, so they are ungrouped and first; the Birthday group keeps its switch. The test-mode select loses its help line (rule 5). Everything else in the gear was already within the rules, and every title-bar control was already an icon with a tooltip. The Planning Center mock moves out of the module folder to tools/, beside the other upstream mocks, so an install does not download a development tool with the module; README and CLAUDE.md say how to run it. The version goes to 1.11.0 so the copy already installed on NA is offered the update from the repo, and the module joins the README's list. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2.5 KiB
Band Lineup module
The backstage stage board as a ProdDash tile: everyone scheduled on the band / vocal / production teams for the upcoming Planning Center plan, placed into their mic slot with photo, name and mic/pack label. People whose birthday falls in the current service week (Wednesday→Tuesday) get raining confetti and a gold glow.
This is the display half of the standalone Band Lineup Electron app, ported
to ProdDash. (The ProPresenter Now/Next half of that app is the separate
propresenter-now-next module.)
How it fills the board
- Slots are the mic/pack labels you write in admin, one per line, in the
order they sit on stage — e.g.
[VOX 2] MIX 2,[DRUMS],[MC] MC1. A blank line is an empty spot. - Each refresh the server reads the upcoming plan's team members (any team
whose name matches a line in Teams to include), and matches each person to
a slot by their Planning Center position — the same loose matching the
Electron app uses (
matching.js;[VOX 2] MIX 2takes whoever is on Vox 2). A numbered role only matches the same number, and theMIX npart is ignored, so Vox 2 and Vox 3 never swap. - Photos and birthdays come from Planning Center (birthdays via the People API; only month + day is kept). Photos are cached on disk and served by the module; birthdays drive the confetti.
Manual photos (people not on the plan)
Guest speakers, MCs, stage managers — anyone not scheduled in Planning Center —
are pinned per slot from the tile's Edit button (title bar): set a name,
optionally upload a photo, optionally a MM-DD birthday. A manual pin overrides
the PCO match for that slot and is kept until you Clear it. Uploaded photos live
in the ProdDash data directory, never in the repo.
Settings
- Admin (server-wide): Planning Center credentials, service type, plan, the teams to include, the stage slots, columns, refresh interval.
- Per tile (gear): birthday confetti on/off + intensity, a force-birthday test picker, parallax, and show/hide for names and mic labels.
Testing without Planning Center
node tools/pco-band-mock.js 24710 # mock PCO
BAND_LINEUP_API_BASE=http://127.0.0.1:24710 node server.js # point the module at it
node modules/band-lineup/matching.test.js # slot-matching unit tests
Then in /admin under Band Lineup enter any Client ID + Secret, pick "Sunday
Service", and the board fills — one person (on Drums) has a birthday this week,
so their tile rains confetti.