{ "id": "service-times", "name": "Service Times", "version": "1.0.0", "proddash": ">=1.4.0", "description": "Sunday service times for every campus, marked up for replays and services production cannot use", "client": "client.js", "server": "server.js", "style": "style.css", "minSize": { "w": 3, "h": 3 }, "defaultSize": { "w": 6, "h": 5 }, "configGroups": { "Website": { "help": "Service times are read from the campus pages at /locations// and refreshed on their own, so the board follows the website whenever the times change. Campuses are discovered from the site's sitemap — tick the ones production is responsible for." }, "Broadcast": { "help": "Which campuses originate the Sunday broadcast, and which campus each of the others takes its resi from. This is what lets the board show, when a service is marked unusable, every campus affected by it." }, "Manual campuses": { "collapsed": "whenSet", "help": "A stopgap for a campus the website has not published yet. The website stays the source of truth: as soon as it carries a campus by this name, its times take over and the health line above says the line here can be removed." }, "Marks": { "collapsed": true, "help": "Marks are shared by every tile and every browser, and survive a restart of ProdDash." } }, "configSchema": { "siteUrl": { "type": "string", "label": "Website", "default": "https://waterschurch.org", "group": "Website", "help": "The church website's address. Campus pages are read from /locations/ underneath it." }, "campuses": { "type": "multiselect", "label": "Campuses", "default": ["north-attleboro", "woonsocket", "southcoast", "apollo-beach"], "group": "Website", "optionsRoute": "/discovered", "help": "Leave every campus unticked to follow all of them." }, "refreshMinutes": { "type": "number", "label": "Refresh (min)", "default": 360, "group": "Website", "help": "How often the website is re-read. Times change a few times a year, so this can be slow; a failed read retries every minute and the last good times stay on screen." }, "broadcast": { "type": "multiselect", "label": "Broadcast campuses", "default": ["north-attleboro", "apollo-beach"], "group": "Broadcast", "optionsRoute": "/campuses", "help": "The campuses the broadcast originates from." }, "feeds": { "type": "text", "label": "Resi sources", "default": "woonsocket = north-attleboro\nsouthcoast = north-attleboro", "group": "Broadcast", "help": "One campus per line: campus = the broadcast campus it takes resi from. Names or slugs both work." }, "manual": { "type": "text", "label": "Campuses and times", "default": "", "group": "Manual campuses", "help": "One campus per line: Name | Day | 9:00a, 11:00a. The day is optional and defaults to Sunday. Lines starting with # are ignored." }, "retentionHours": { "type": "number", "label": "Marks clear after (h)", "default": 36, "group": "Marks", "help": "A mark disappears this long after it was made, so Saturday's and Sunday's notes are gone before the next week. Set 0 to keep marks until they are cleared by hand." } }, "instanceGroups": { "Show": { "collapsed": true, "columns": 2 } }, "instanceSchema": { "campuses": { "type": "multiselect", "label": "Campuses", "optionsRoute": "/campuses", "columns": 2, "allByDefault": true }, "layout": { "type": "select", "label": "Layout", "default": "cards", "options": [ { "value": "cards", "label": "Cards" }, { "value": "list", "label": "List" } ] }, "showDay": { "type": "boolean", "label": "Day", "default": true, "group": "Show" }, "showRole": { "type": "boolean", "label": "Role", "default": true, "group": "Show" }, "showSource": { "type": "boolean", "label": "Resi source", "default": true, "group": "Show" }, "showDependents": { "type": "boolean", "label": "Campuses fed", "default": true, "group": "Show" }, "showNotes": { "type": "boolean", "label": "Notes", "default": true, "group": "Show" }, "showUpdated": { "type": "boolean", "label": "Updated line", "default": false, "group": "Show" } } }