2026-09-22 09:15:22 -04:00
{
"id" : "band-lineup" ,
"name" : "Band Lineup" ,
2026-10-20 13:28:49 -04:00
"version" : "1.13.0" ,
2026-09-22 09:15:22 -04:00
"proddash" : ">=1.4.0" ,
2026-09-22 09:19:34 -04:00
"description" : "Stage lineup photos with mic/pack labels — a drag-in photo library plus optional Planning Center auto-fill" ,
2026-09-22 09:15:22 -04:00
"client" : "client.js" ,
"server" : "server.js" ,
"style" : "style.css" ,
"minSize" : {
"w" : 4 ,
"h" : 3
},
"defaultSize" : {
"w" : 8 ,
"h" : 5
},
"configGroups" : {
"Planning Center credentials" : {
"collapsed" : "whenSet" ,
"help" : "Create a Personal Access Token at api.planningcenteronline.com and paste its Client ID + Secret here, or paste an OAuth 2.0 access token instead. Reading photos and birthdays needs People access on the token. Saved secrets never reach browsers."
},
"Stage" : {
"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" : {
2026-09-22 09:19:34 -04:00
"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."
2026-09-22 09:15:22 -04:00
}
},
"configSchema" : {
"appId" : {
"type" : "string" ,
"label" : "Client ID" ,
"default" : "" ,
"group" : "Planning Center credentials"
},
"secret" : {
"type" : "password" ,
"label" : "Secret" ,
"default" : "" ,
"group" : "Planning Center credentials"
},
"accessToken" : {
"type" : "password" ,
"label" : "OAuth 2.0 access token (instead of Client ID + Secret)" ,
"default" : "" ,
"group" : "Planning Center credentials"
},
"serviceTypeId" : {
"type" : "select" ,
"label" : "Service type" ,
"default" : "" ,
"optionsRoute" : "/service-types"
},
"planId" : {
"type" : "select" ,
"label" : "Plan" ,
"default" : "" ,
"options" : [
{
"value" : "" ,
2026-09-22 09:19:34 -04:00
"label" : "Automatic — today's plan, else the next upcoming"
2026-09-22 09:15:22 -04:00
}
],
"optionsRoute" : "/plans" ,
"optionsDependsOn" : "serviceTypeId"
},
"teams" : {
"type" : "text" ,
"label" : "Teams to include" ,
"default" : "Band\nWorship\nVocal\nProduction\nCommunication" ,
"help" : "One team name (or keyword) per line. A person on any matching Planning Center team is eligible for the board."
},
"slots" : {
"type" : "text" ,
"label" : "Stage slots" ,
"default" : "[LEADER, VOX 1, ACOUSTIC] MIX 1\n[VOX 2] MIX 2\n[VOX 3] MIX 3\n[VOX 4] MIX 4\n[GUITAR, LEAD] MIX 5\n[BASS] MIX 6\n[VOX 5] MIX 7\n[PIANO]\n[DRUMS]\n[KEYS 2]\n[CALL TO WORSHIP] MC2\nSTAGE MANAGER\n[MC] MC1\n[SPEAKER] HEADSET" ,
"group" : "Stage"
},
"columns" : {
"type" : "number" ,
"label" : "Columns" ,
"default" : 7 ,
"group" : "Stage" ,
2026-09-22 09:19:34 -04:00
"help" : "Default slots per row (each screen can still adjust with the − / + buttons in its title bar)."
2026-09-22 09:15:22 -04:00
},
"photoFolder" : {
"type" : "string" ,
"label" : "Google Drive folder link" ,
"default" : "" ,
"group" : "Photo library" ,
2026-09-22 09:19:34 -04:00
"help" : "e.g. https://drive.google.com/drive/folders/… (a local folder path also works). Leave blank to use Planning Center photos only."
2026-09-22 09:15:22 -04:00
}
},
"instanceGroups" : {
"Birthday" : {
"toggle" : "birthdays"
}
},
"instanceSchema" : {
2026-09-22 09:19:34 -04:00
"showNames" : {
"type" : "boolean" ,
"label" : "Names" ,
"default" : true
},
"showLabels" : {
"type" : "boolean" ,
"label" : "Mic labels" ,
"default" : true
},
"parallax" : {
"type" : "boolean" ,
"label" : "Parallax motion" ,
"default" : true
},
2026-09-22 09:15:22 -04:00
"birthdays" : {
"type" : "switch" ,
"label" : "Birthday confetti" ,
"default" : true ,
"group" : "Birthday"
},
"birthdayIntensity" : {
"type" : "select" ,
"label" : "Intensity" ,
"default" : "subtle" ,
"group" : "Birthday" ,
"showWhen" : "birthdays" ,
"options" : [
{
"value" : "subtle" ,
"label" : "Subtle"
},
{
"value" : "full" ,
"label" : "Full"
}
]
},
"birthdayTest" : {
"type" : "select" ,
"label" : "Force on (test)" ,
"default" : "" ,
"group" : "Birthday" ,
"showWhen" : "birthdays" ,
"options" : [
{
"value" : "" ,
"label" : "Off"
}
],
2026-09-22 09:19:34 -04:00
"optionsRoute" : "/people"
2026-09-22 09:15:22 -04:00
}
}
}