Files
ProdDash/modules/band-lineup/README.md
T
christian 684f06abed Band Lineup module, as it runs in North Attleboro
The backstage stage board as a ProdDash tile: everyone scheduled on the
band, vocal and production teams for the upcoming Planning Center plan,
placed into their mic slot with photo, name and mic/pack label. Birthdays
in the service week get confetti. The display half of the standalone Band
Lineup Electron app, ported to a module — imported here exactly as
installed on NA-Ingest (v1.10.1), so the repo is where it lives from now on.
2026-09-22 09:15:22 -04:00

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

  1. 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.
  2. 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 2 takes whoever is on Vox 2). A numbered role only matches the same number, and the MIX n part is ignored, so Vox 2 and Vox 3 never swap.
  3. 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 modules/band-lineup/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.