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>
53 lines
2.5 KiB
Markdown
53 lines
2.5 KiB
Markdown
# 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
|
|
|
|
```bash
|
|
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.
|