diff --git a/CLAUDE.md b/CLAUDE.md index ebd9d3a..6d45a83 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -44,6 +44,7 @@ title-bar controls). The rules that matter most: for the existing upstreams: `node tools/prodcom-mock.js` (ProdCom) and `node band-lineup-display/tmp/pp-mock.js 1599` (ProPresenter). `node tools/slack-mock.js 24716` (Slack; run ProdDash with `SLACK_API_BASE=http://127.0.0.1:24716/api`). + `node tools/pco-band-mock.js 24710` (Planning Center for Band Lineup; run ProdDash with `BAND_LINEUP_API_BASE=http://127.0.0.1:24710`). ## Reference code (read-only forks — don't develop these here) diff --git a/README.md b/README.md index c10c64e..0c23e5a 100644 --- a/README.md +++ b/README.md @@ -351,6 +351,15 @@ below. Nothing is installed without someone clicking. as `Label | Message` — add `| #channel` to bind one to a channel — and up to eight quick emojis). Tile settings: avatars, timestamps, names and channel notices. +- **Band Lineup** — the backstage stage board: 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. Guests and MCs not on the plan are pinned + per slot from the title bar's Edit button. Admin config: Planning Center + credentials, service type and plan, the teams to include, the stage slots + (one mic/pack label per line, in stage order), default columns, and a + Google Drive folder for manual photos. Tile settings: names, mic labels, + parallax, and the birthday confetti with its intensity. - **Clock** — a big booth clock; also the smallest possible module and the reference for module authors. @@ -362,8 +371,11 @@ timers + timecode on `127.0.0.1:1600`), `node tools/pco-mock.js` (Planning Center Services on `127.0.0.1:24700` — run ProdDash with `PCO_PLAN_API_BASE=http://127.0.0.1:24700`) and `node tools/slack-mock.js 24716` (the Slack Web API on `127.0.0.1:24716` — -run ProdDash with `SLACK_API_BASE=http://127.0.0.1:24716/api`). See the -testing section of the [module guide](docs/MODULE-GUIDE.md). +run ProdDash with `SLACK_API_BASE=http://127.0.0.1:24716/api`) and +`node tools/pco-band-mock.js 24710` (Planning Center for the Band Lineup +board — a plan, its team members, birthdays and photos — run ProdDash with +`BAND_LINEUP_API_BASE=http://127.0.0.1:24710`). See the testing section of +the [module guide](docs/MODULE-GUIDE.md). ## Install as a desktop web app diff --git a/modules/band-lineup/README.md b/modules/band-lineup/README.md index ba0086b..eca1f6d 100644 --- a/modules/band-lineup/README.md +++ b/modules/band-lineup/README.md @@ -42,7 +42,7 @@ in the ProdDash data directory, never in the repo. ## Testing without Planning Center ```bash -node modules/band-lineup/tools/pco-band-mock.js 24710 # mock PCO +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 ``` diff --git a/modules/band-lineup/module.json b/modules/band-lineup/module.json index 55f877c..c144f92 100644 --- a/modules/band-lineup/module.json +++ b/modules/band-lineup/module.json @@ -1,9 +1,9 @@ { "id": "band-lineup", "name": "Band Lineup", - "version": "1.10.1", + "version": "1.11.0", "proddash": ">=1.4.0", - "description": "Stage lineup photos with mic/pack labels \u2014 a drag-in photo library plus optional Planning Center auto-fill", + "description": "Stage lineup photos with mic/pack labels — a drag-in photo library plus optional Planning Center auto-fill", "client": "client.js", "server": "server.js", "style": "style.css", @@ -24,7 +24,7 @@ "help": "One mic/pack label per line, in the order they sit on stage. Scheduled people are matched into these by their Planning Center position (e.g. a line '[VOX 2] MIX 2' takes whoever is scheduled on Vox 2). Blank lines are empty spots." }, "Photo library": { - "help": "Paste a Google Drive folder share link (set the folder to 'Anyone with the link \u2192 Viewer'). Every image is imported (file name \u2192 person's name) and kept in sync \u2014 add or remove photos in Drive and the board follows. A local folder path also works. If Drive can't be read, the board falls back to Planning Center photos." + "help": "Paste a Google Drive folder share link (set the folder to 'Anyone with the link → Viewer'). Every image is imported (file name → person's name) and kept in sync — add or remove photos in Drive and the board follows. A local folder path also works. If Drive can't be read, the board falls back to Planning Center photos." } }, "configSchema": { @@ -59,7 +59,7 @@ "options": [ { "value": "", - "label": "Automatic \u2014 today's plan, else the next upcoming" + "label": "Automatic — today's plan, else the next upcoming" } ], "optionsRoute": "/plans", @@ -82,26 +82,37 @@ "label": "Columns", "default": 7, "group": "Stage", - "help": "Default slots per row (each screen can still adjust with the \u2212 / + buttons in its title bar)." + "help": "Default slots per row (each screen can still adjust with the − / + buttons in its title bar)." }, "photoFolder": { "type": "string", "label": "Google Drive folder link", "default": "", "group": "Photo library", - "help": "e.g. https://drive.google.com/drive/folders/\u2026 (a local folder path also works). Leave blank to use Planning Center photos only." + "help": "e.g. https://drive.google.com/drive/folders/… (a local folder path also works). Leave blank to use Planning Center photos only." } }, "instanceGroups": { "Birthday": { "toggle": "birthdays" - }, - "Show / hide": { - "collapsed": true, - "columns": 2 } }, "instanceSchema": { + "showNames": { + "type": "boolean", + "label": "Names", + "default": true + }, + "showLabels": { + "type": "boolean", + "label": "Mic labels", + "default": true + }, + "parallax": { + "type": "boolean", + "label": "Parallax motion", + "default": true + }, "birthdays": { "type": "switch", "label": "Birthday confetti", @@ -137,26 +148,7 @@ "label": "Off" } ], - "optionsRoute": "/people", - "help": "Force one person's tile to celebrate for testing. Clears when you set it back to Off." - }, - "parallax": { - "type": "boolean", - "label": "Parallax motion", - "default": true, - "group": "Show / hide" - }, - "showNames": { - "type": "boolean", - "label": "Names", - "default": true, - "group": "Show / hide" - }, - "showLabels": { - "type": "boolean", - "label": "Mic labels", - "default": true, - "group": "Show / hide" + "optionsRoute": "/people" } } } diff --git a/modules/band-lineup/tools/pco-band-mock.js b/tools/pco-band-mock.js similarity index 100% rename from modules/band-lineup/tools/pco-band-mock.js rename to tools/pco-band-mock.js