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:
684f06a — authored by Christian (christian@waterschurch.org). The module exactly as it runs on NA, so the history says who wrote it.
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.
## 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 main2026-09-22 09:44:21 -04:00
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
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-lineupso 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:
684f06a— authored by Christian (christian@waterschurch.org). The module exactly as it runs on NA, so the history says who wrote it.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.jscarries a test, and it passes. Every title-bar control was already an icon with a tooltip.Brought to the guide's rules
showNames,showLabels,parallaxsat in a folded "Show / hide" groupbirthdayTestcarried ahelplinetools/pco-band-mock.jsshipped inside the moduletools/, beside the other upstream mocks; README and CLAUDE.md say how to run itEverything 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):<img>s, all loaded;matching.test.jspasses in place.Two things worth knowing, neither changed here
appId(the Planning Center client ID) is typedstring, so it appears on the public/api/modules. The secret and access token arepasswordand 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.reachablestarts 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