Band Lineup joins the repo — Christian's module, ready for every install #13

Merged
michael merged 2 commits from claude/band-lineup-module into main 2026-09-22 09:44:21 -04:00
Owner

Where it came from

Christian's Band Lineup module — the backstage stage board, ported from the standalone Electron app — existed only as the copy installed on NA-Ingest (v1.10.1, in its data directory). It was in no branch, fork, PR or repo on Gitea. This brings it into modules/band-lineup so the admin page's Available modules can offer it to every install, and so NA is offered the update from the repo rather than carrying a copy nothing else knows about.

Two commits, deliberately:

  1. 684f06a — authored by Christian (christian@waterschurch.org). The module exactly as it runs on NA, so the history says who wrote it.
  2. 5fb9019 — mine. The rules pass and the plumbing below. Version 1.11.0.

What the module is

Everyone scheduled on the band, vocal and production teams for the upcoming Planning Center plan, placed into mic slots with photo, name and mic/pack label; birthdays in the service week get confetti; guests not on the plan are pinned per slot from the title bar's Edit button. Zero dependencies. Photos, library and board are written under <dataDir>/band-lineup/ — nothing in the module folder. matching.js carries a test, and it passes. Every title-bar control was already an icon with a tooltip.

Brought to the guide's rules

Rule Change
showNames, showLabels, parallax sat in a folded "Show / hide" group 8 — four or fewer go ungrouped, at the top ungrouped and first in the gear
birthdayTest carried a help line 5 removed
tools/pco-band-mock.js shipped inside the module convention moved to tools/, beside the other upstream mocks; README and CLAUDE.md say how to run it

Everything else in the gear was already within the rules.

Verified

On a scratch ProdDash against tools/pco-band-mock.js (BAND_LINEUP_API_BASE=http://127.0.0.1:24710):

  • the picker offers Band Lineup; the tile mounts with a green dot reading "Plan: September 20, 2026";
  • a Sync fills 7 of 14 slots with people and photos — 7 <img>s, all loaded;
  • the gear reads Names · Mic labels · Parallax motion ungrouped at the top, then the Birthday group, then Tile tint — no help lines;
  • title bar: Sync, Edit board, Fewer columns, More columns, Choir — all icons, no text;
  • the rules audit over all eight modules on the board comes back clean;
  • matching.test.js passes in place.

Two things worth knowing, neither changed here

  • appId (the Planning Center client ID) is typed string, so it appears on the public /api/modules. The secret and access token are password and stripped. pco-plan types it exactly the same way, so this is a shared existing choice — one decision for both modules, not a quiet change to one.
  • After a server restart the tile's dot is red until Sync is pressed, even though the cached board still shows. reachable starts false with no error. That's the module's own status logic — it reads as "upstream unreachable" when it means "not fetched yet". One for Christian.

Once merged, NA's admin will offer 1.10.1 → 1.11.0, and AB will see it under Available modules.

🤖 Generated with Claude Code

## Where it came from Christian's **Band Lineup** module — the backstage stage board, ported from the standalone Electron app — existed only as the copy installed on NA-Ingest (v1.10.1, in its data directory). It was in no branch, fork, PR or repo on Gitea. This brings it into `modules/band-lineup` so the admin page's **Available modules** can offer it to every install, and so NA is offered the update from the repo rather than carrying a copy nothing else knows about. Two commits, deliberately: 1. **`684f06a` — authored by Christian** (`christian@waterschurch.org`). The module exactly as it runs on NA, so the history says who wrote it. 2. **`5fb9019` — mine.** The rules pass and the plumbing below. Version **1.11.0**. ## What the module is Everyone scheduled on the band, vocal and production teams for the upcoming Planning Center plan, placed into mic slots with photo, name and mic/pack label; birthdays in the service week get confetti; guests not on the plan are pinned per slot from the title bar's Edit button. Zero dependencies. Photos, library and board are written under `<dataDir>/band-lineup/` — nothing in the module folder. `matching.js` carries a test, and it passes. Every title-bar control was already an icon with a tooltip. ## Brought to the guide's rules | | Rule | Change | |---|---|---| | `showNames`, `showLabels`, `parallax` sat in a folded **"Show / hide"** group | 8 — four or fewer go ungrouped, at the top | ungrouped and first in the gear | | `birthdayTest` carried a `help` line | 5 | removed | | `tools/pco-band-mock.js` shipped *inside* the module | convention | moved to `tools/`, beside the other upstream mocks; README and CLAUDE.md say how to run it | Everything else in the gear was already within the rules. ## Verified On a scratch ProdDash against `tools/pco-band-mock.js` (`BAND_LINEUP_API_BASE=http://127.0.0.1:24710`): - the picker offers **Band Lineup**; the tile mounts with a green dot reading *"Plan: September 20, 2026"*; - a Sync fills **7 of 14 slots** with people and photos — 7 `<img>`s, all loaded; - the gear reads **Names · Mic labels · Parallax motion** ungrouped at the top, then the **Birthday** group, then Tile tint — **no help lines**; - title bar: Sync, Edit board, Fewer columns, More columns, Choir — all icons, no text; - the rules audit over all eight modules on the board comes back clean; - `matching.test.js` passes in place. ## Two things worth knowing, neither changed here - **`appId` (the Planning Center client ID) is typed `string`**, so it appears on the public `/api/modules`. The secret and access token are `password` and stripped. **pco-plan types it exactly the same way**, so this is a shared existing choice — one decision for both modules, not a quiet change to one. - **After a server restart the tile's dot is red until Sync is pressed**, even though the cached board still shows. `reachable` starts false with no error. That's the module's own status logic — it reads as "upstream unreachable" when it means "not fetched yet". One for Christian. Once merged, NA's admin will offer 1.10.1 → 1.11.0, and AB will see it under Available modules. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
michael added 2 commits 2026-09-22 09:21:11 -04:00
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.
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>
michael merged commit 5107b06f8c into main 2026-09-22 09:44:21 -04:00
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: michael/ProdDash#13