diff --git a/apps/server/src/api-data/db/__tests__/db.parser.test.ts b/apps/server/src/api-data/db/__tests__/db.parser.test.ts index 4f68895ed..608445935 100644 --- a/apps/server/src/api-data/db/__tests__/db.parser.test.ts +++ b/apps/server/src/api-data/db/__tests__/db.parser.test.ts @@ -42,21 +42,25 @@ describe('test parseDatabaseModel() with demo project (valid)', () => { // remove time-related fields from the comparison // these are not calculated in the parser - Object.values(filteredDemoProject.rundowns.default.entries).forEach((entry: any) => { - if (entry.type === SupportedEntry.Group) { - delete entry.timeStart; - delete entry.timeEnd; - delete entry.duration; - delete entry.isFirstLinked; - } + Object.values(filteredDemoProject.rundowns).forEach((rundown: any) => { + Object.values(rundown.entries).forEach((entry: any) => { + if (entry.type === SupportedEntry.Group) { + delete entry.timeStart; + delete entry.timeEnd; + delete entry.duration; + delete entry.isFirstLinked; + } + }); }); - Object.values(data.rundowns.default.entries).forEach((entry: any) => { - if (entry.type === SupportedEntry.Group) { - delete entry.timeStart; - delete entry.timeEnd; - delete entry.duration; - delete entry.isFirstLinked; - } + Object.values(data.rundowns).forEach((rundown: any) => { + Object.values(rundown.entries).forEach((entry: any) => { + if (entry.type === SupportedEntry.Group) { + delete entry.timeStart; + delete entry.timeEnd; + delete entry.duration; + delete entry.isFirstLinked; + } + }); }); expect(data.automation).toMatchObject(filteredDemoProject.automation); diff --git a/apps/server/src/models/demoProject.ts b/apps/server/src/models/demoProject.ts index b46d2afeb..bff7a6857 100644 --- a/apps/server/src/models/demoProject.ts +++ b/apps/server/src/models/demoProject.ts @@ -1,323 +1,11 @@ -import { DatabaseModel, Day, EndAction, OntimeView, SupportedEntry, TimeStrategy, TimerType } from 'ontime-types'; +import { DatabaseModel, OntimeView } from 'ontime-types'; +import { backstageRundown, broadcastRundown, stageRundown } from './demoRundowns.js'; export const demoDb: DatabaseModel = { rundowns: { - default: { - id: 'default', - title: 'Demo project', - order: ['e2163f', '7eaf99', 'f60403', '6b0edb'], - flatOrder: [ - 'e2163f', - '7eaf99', - '9bf60f', - 'bf71a2', - 'c2697f', - 'fa593e', - 'a8b0b3', - 'f60403', - '0aaa7d', - '6b0edb', - '02afca', - '75ce86', - 'e10ed9', - '07df89', - ], - entries: { - e2163f: { - id: 'e2163f', - type: SupportedEntry.Milestone, - cue: 'Demo', - title: 'Clear all, or Create New Project to start fresh', - note: 'Moderator - Emma Thompson\n\nSpeakers\n- Liam Carter + Sophia Patel\n- Ethan Brooks\n- Lucas Bennett', - colour: '#9d9d9d', - custom: {}, - parent: null, - revision: 0, - }, - '7eaf99': { - id: '7eaf99', - type: SupportedEntry.Group, - title: 'Morning Sessions', - note: '', - entries: ['9bf60f', 'bf71a2', 'c2697f', 'fa593e', 'a8b0b3'], - targetDuration: null, - colour: '#339E4E', - custom: {}, - revision: 0, - timeStart: 36000000, - timeEnd: 43200000, - duration: 7200000, - isFirstLinked: false, - }, - '9bf60f': { - id: '9bf60f', - type: SupportedEntry.Event, - flag: false, - title: 'Pre-show Countdown', - timeStart: 36000000, - timeEnd: 39600000, - duration: 3600000, - timeStrategy: TimeStrategy.LockEnd, - linkStart: false, - endAction: EndAction.None, - timerType: TimerType.CountDown, - countToEnd: false, - skip: false, - note: 'Music plays, holding slide on screens', - colour: '#77C785', - delay: 0, - dayOffset: 0 as Day, - gap: 0, - cue: '1', - parent: '7eaf99', - revision: 0, - timeWarning: 600000, - timeDanger: 300000, - custom: { - PowerPoint_Slide: 'https://www.getontime.no/images/aux/demo-slide1.webp', - Video_Notes: 'Camera + PowerPoint on stream\nPowerPoint on screens', - Audio_Notes: '2x Wireless Hand Helds', - PowerPoint_Name: 'HoldingSlide.pptx', - }, - triggers: [], - }, - bf71a2: { - id: 'bf71a2', - type: SupportedEntry.Milestone, - cue: 'Standby', - title: '10:45 - Presenters ready side stage', - note: '', - colour: '#A790F5', - revision: 0, - custom: {}, - parent: '7eaf99', - }, - c2697f: { - id: 'c2697f', - type: SupportedEntry.Event, - flag: false, - title: 'Welcome', - timeStart: 39600000, - timeEnd: 40200000, - duration: 600000, - timeStrategy: TimeStrategy.LockDuration, - linkStart: true, - endAction: EndAction.None, - timerType: TimerType.CountDown, - countToEnd: false, - skip: false, - note: 'Emma Thompson', - colour: '#FFCC78', - delay: 0, - dayOffset: 0 as Day, - gap: 0, - cue: '1.1', - parent: '7eaf99', - revision: 0, - timeWarning: 120000, - timeDanger: 60000, - custom: { - PowerPoint_Slide: 'https://www.getontime.no/images/aux/demo-slide1.webp', - Video_Notes: 'Cameras on stream\nPowerPoint on screens', - Audio_Notes: '1x Wireless Hand Held', - PowerPoint_Name: 'HoldingSlide.pptx', - }, - triggers: [], - }, - fa593e: { - id: 'fa593e', - type: SupportedEntry.Event, - flag: true, - title: 'Session 1', - timeStart: 40200000, - timeEnd: 43200000, - duration: 3000000, - timeStrategy: TimeStrategy.LockDuration, - linkStart: true, - endAction: EndAction.None, - timerType: TimerType.CountDown, - countToEnd: false, - skip: false, - note: 'Liam Carter, Sophia Patel + PowerPoint', - colour: '#77C785', - delay: 0, - dayOffset: 0 as Day, - gap: 0, - cue: '1.2', - parent: '7eaf99', - revision: 0, - timeWarning: 120000, - timeDanger: 60000, - custom: { - PowerPoint_Slide: 'https://www.getontime.no/images/aux/demo-slide2.webp', - Video_Notes: 'Camera + PowerPoint on stream\nPowerPoint on screens', - Audio_Notes: '2x Wireless Hand Helds', - PowerPoint_Name: 'Session1.pptx', - }, - triggers: [], - }, - a8b0b3: { - id: 'a8b0b3', - type: SupportedEntry.Milestone, - cue: 'House', - title: '11:30 - House staff setup lunch in lobby', - note: '', - colour: '#A790F5', - revision: 0, - custom: {}, - parent: '7eaf99', - }, - f60403: { - id: 'f60403', - type: SupportedEntry.Group, - title: 'Lunch', - note: '', - entries: ['0aaa7d'], - targetDuration: null, - colour: '#3E75E8', - custom: {}, - revision: 0, - timeStart: 43200000, - timeEnd: 46800000, - duration: 3600000, - isFirstLinked: true, - }, - '0aaa7d': { - id: '0aaa7d', - type: SupportedEntry.Event, - flag: false, - title: 'Lunch / Countdown to next session', - timeStart: 43200000, - timeEnd: 46800000, - duration: 3600000, - timeStrategy: TimeStrategy.LockDuration, - linkStart: true, - endAction: EndAction.None, - timerType: TimerType.CountDown, - countToEnd: false, - skip: false, - note: 'Buffet in lobby', - colour: '#779BE7', - delay: 0, - dayOffset: 0 as Day, - gap: 0, - cue: '2.1', - parent: 'f60403', - revision: 0, - timeWarning: 120000, - timeDanger: 60000, - custom: { - PowerPoint_Slide: 'https://www.getontime.no/images/aux/demo-slide1.webp', - Video_Notes: 'Holding slide on screens', - Audio_Notes: 'House music', - PowerPoint_Name: 'HoldingSlide.pptx', - }, - triggers: [], - }, - '6b0edb': { - id: '6b0edb', - type: SupportedEntry.Group, - title: 'Afternoon Sessions', - note: '', - entries: ['02afca', '75ce86', 'e10ed9', '07df89'], - targetDuration: null, - colour: '#339E4E', - custom: {}, - revision: 0, - timeStart: 46800000, - timeEnd: 50400000, - duration: 3600000, - isFirstLinked: true, - }, - '02afca': { - id: '02afca', - type: SupportedEntry.Milestone, - cue: 'Standby', - title: '12:45 - Presenters ready side stage', - note: '', - colour: '#A790F5', - revision: 0, - custom: {}, - parent: '6b0edb', - }, - '75ce86': { - id: '75ce86', - type: SupportedEntry.Event, - flag: false, - title: 'Session 2', - timeStart: 46800000, - timeEnd: 49800000, - duration: 3000000, - timeStrategy: TimeStrategy.LockDuration, - linkStart: true, - endAction: EndAction.None, - timerType: TimerType.CountDown, - countToEnd: false, - skip: false, - note: 'Ethan Brooks + PowerPoint + Video playback', - colour: '#77C785', - delay: 0, - dayOffset: 0 as Day, - gap: 0, - cue: '3.1', - parent: '6b0edb', - revision: 0, - timeWarning: 120000, - timeDanger: 60000, - custom: { - PowerPoint_Slide: 'https://www.getontime.no/images/aux/demo-slide3.webp', - Video_Notes: 'Camera + PPT + Video on stream\nPowerPoint + Video on screens\n\nVideo file: Session2.mp4', - Audio_Notes: '1x Wireless Hand Held\n1x Video with audio', - PowerPoint_Name: 'Session2.pptx', - }, - triggers: [], - }, - e10ed9: { - id: 'e10ed9', - type: SupportedEntry.Event, - flag: false, - title: 'Wrap up', - timeStart: 49800000, - timeEnd: 50400000, - duration: 600000, - timeStrategy: TimeStrategy.LockDuration, - linkStart: false, - endAction: EndAction.None, - timerType: TimerType.CountDown, - countToEnd: false, - skip: false, - note: 'Lucas Bennett', - colour: '#FFCC78', - delay: 0, - dayOffset: 0 as Day, - gap: 0, - cue: '3.2', - parent: '6b0edb', - revision: 0, - timeWarning: 120000, - timeDanger: 60000, - custom: { - PowerPoint_Slide: 'https://www.getontime.no/images/aux/demo-slide1.webp', - Video_Notes: 'Holding slide on screens', - Audio_Notes: '1x Wireless Hand Held', - PowerPoint_Name: 'HoldingSlide.pptx', - }, - triggers: [], - }, - '07df89': { - id: '07df89', - type: SupportedEntry.Milestone, - cue: 'Strike', - title: '14:00 - AV & Room strike', - note: '', - colour: '#A790F5', - revision: 0, - custom: {}, - parent: '6b0edb', - }, - }, - revision: 0, - }, + default: stageRundown, + backstage: backstageRundown, + broadcast: broadcastRundown, }, project: { title: 'Ontime Demo Project', diff --git a/apps/server/src/models/demoRundowns.ts b/apps/server/src/models/demoRundowns.ts new file mode 100644 index 000000000..3f1a77744 --- /dev/null +++ b/apps/server/src/models/demoRundowns.ts @@ -0,0 +1,1123 @@ +import { SupportedEntry, TimeStrategy, EndAction, TimerType, Day, Rundown } from 'ontime-types'; + +export const stageRundown: Rundown = { + id: 'default', + title: 'Demo project', + order: ['e2163f', '7eaf99', 'f60403', '6b0edb'], + flatOrder: [ + 'e2163f', + '7eaf99', + '9bf60f', + 'bf71a2', + 'c2697f', + 'fa593e', + 'a8b0b3', + 'f60403', + '0aaa7d', + '6b0edb', + '02afca', + '75ce86', + 'e10ed9', + '07df89', + ], + entries: { + e2163f: { + id: 'e2163f', + type: SupportedEntry.Milestone, + cue: 'Demo', + title: 'Clear all, or Create New Project to start fresh', + note: 'Moderator - Emma Thompson\n\nSpeakers\n- Liam Carter + Sophia Patel\n- Ethan Brooks\n- Lucas Bennett', + colour: '#9d9d9d', + custom: {}, + parent: null, + revision: 0, + }, + '7eaf99': { + id: '7eaf99', + type: SupportedEntry.Group, + title: 'Morning Sessions', + note: '', + entries: ['9bf60f', 'bf71a2', 'c2697f', 'fa593e', 'a8b0b3'], + targetDuration: null, + colour: '#339E4E', + custom: {}, + revision: 0, + timeStart: 36000000, + timeEnd: 43200000, + duration: 7200000, + isFirstLinked: false, + }, + '9bf60f': { + id: '9bf60f', + type: SupportedEntry.Event, + flag: false, + title: 'Pre-show Countdown', + timeStart: 36000000, + timeEnd: 39600000, + duration: 3600000, + timeStrategy: TimeStrategy.LockEnd, + linkStart: false, + endAction: EndAction.None, + timerType: TimerType.CountDown, + countToEnd: false, + skip: false, + note: 'Music plays, holding slide on screens', + colour: '#77C785', + delay: 0, + dayOffset: 0 as Day, + gap: 0, + cue: '1', + parent: '7eaf99', + revision: 0, + timeWarning: 600000, + timeDanger: 300000, + custom: { + PowerPoint_Slide: 'https://www.getontime.no/images/aux/demo-slide1.webp', + Video_Notes: 'Camera + PowerPoint on stream\nPowerPoint on screens', + Audio_Notes: '2x Wireless Hand Helds', + PowerPoint_Name: 'HoldingSlide.pptx', + }, + triggers: [], + }, + bf71a2: { + id: 'bf71a2', + type: SupportedEntry.Milestone, + cue: 'Standby', + title: '10:45 - Presenters ready side stage', + note: '', + colour: '#A790F5', + revision: 0, + custom: {}, + parent: '7eaf99', + }, + c2697f: { + id: 'c2697f', + type: SupportedEntry.Event, + flag: false, + title: 'Welcome', + timeStart: 39600000, + timeEnd: 40200000, + duration: 600000, + timeStrategy: TimeStrategy.LockDuration, + linkStart: true, + endAction: EndAction.None, + timerType: TimerType.CountDown, + countToEnd: false, + skip: false, + note: 'Emma Thompson', + colour: '#FFCC78', + delay: 0, + dayOffset: 0 as Day, + gap: 0, + cue: '1.1', + parent: '7eaf99', + revision: 0, + timeWarning: 120000, + timeDanger: 60000, + custom: { + PowerPoint_Slide: 'https://www.getontime.no/images/aux/demo-slide1.webp', + Video_Notes: 'Cameras on stream\nPowerPoint on screens', + Audio_Notes: '1x Wireless Hand Held', + PowerPoint_Name: 'HoldingSlide.pptx', + }, + triggers: [], + }, + fa593e: { + id: 'fa593e', + type: SupportedEntry.Event, + flag: true, + title: 'Session 1', + timeStart: 40200000, + timeEnd: 43200000, + duration: 3000000, + timeStrategy: TimeStrategy.LockDuration, + linkStart: true, + endAction: EndAction.None, + timerType: TimerType.CountDown, + countToEnd: false, + skip: false, + note: 'Liam Carter, Sophia Patel + PowerPoint', + colour: '#77C785', + delay: 0, + dayOffset: 0 as Day, + gap: 0, + cue: '1.2', + parent: '7eaf99', + revision: 0, + timeWarning: 120000, + timeDanger: 60000, + custom: { + PowerPoint_Slide: 'https://www.getontime.no/images/aux/demo-slide2.webp', + Video_Notes: 'Camera + PowerPoint on stream\nPowerPoint on screens', + Audio_Notes: '2x Wireless Hand Helds', + PowerPoint_Name: 'Session1.pptx', + }, + triggers: [], + }, + a8b0b3: { + id: 'a8b0b3', + type: SupportedEntry.Milestone, + cue: 'House', + title: '11:30 - House staff setup lunch in lobby', + note: '', + colour: '#A790F5', + revision: 0, + custom: {}, + parent: '7eaf99', + }, + f60403: { + id: 'f60403', + type: SupportedEntry.Group, + title: 'Lunch', + note: '', + entries: ['0aaa7d'], + targetDuration: null, + colour: '#3E75E8', + custom: {}, + revision: 0, + timeStart: 43200000, + timeEnd: 46800000, + duration: 3600000, + isFirstLinked: true, + }, + '0aaa7d': { + id: '0aaa7d', + type: SupportedEntry.Event, + flag: false, + title: 'Lunch / Countdown to next session', + timeStart: 43200000, + timeEnd: 46800000, + duration: 3600000, + timeStrategy: TimeStrategy.LockDuration, + linkStart: true, + endAction: EndAction.None, + timerType: TimerType.CountDown, + countToEnd: false, + skip: false, + note: 'Buffet in lobby', + colour: '#779BE7', + delay: 0, + dayOffset: 0 as Day, + gap: 0, + cue: '2.1', + parent: 'f60403', + revision: 0, + timeWarning: 120000, + timeDanger: 60000, + custom: { + PowerPoint_Slide: 'https://www.getontime.no/images/aux/demo-slide1.webp', + Video_Notes: 'Holding slide on screens', + Audio_Notes: 'House music', + PowerPoint_Name: 'HoldingSlide.pptx', + }, + triggers: [], + }, + '6b0edb': { + id: '6b0edb', + type: SupportedEntry.Group, + title: 'Afternoon Sessions', + note: '', + entries: ['02afca', '75ce86', 'e10ed9', '07df89'], + targetDuration: null, + colour: '#339E4E', + custom: {}, + revision: 0, + timeStart: 46800000, + timeEnd: 50400000, + duration: 3600000, + isFirstLinked: true, + }, + '02afca': { + id: '02afca', + type: SupportedEntry.Milestone, + cue: 'Standby', + title: '12:45 - Presenters ready side stage', + note: '', + colour: '#A790F5', + revision: 0, + custom: {}, + parent: '6b0edb', + }, + '75ce86': { + id: '75ce86', + type: SupportedEntry.Event, + flag: false, + title: 'Session 2', + timeStart: 46800000, + timeEnd: 49800000, + duration: 3000000, + timeStrategy: TimeStrategy.LockDuration, + linkStart: true, + endAction: EndAction.None, + timerType: TimerType.CountDown, + countToEnd: false, + skip: false, + note: 'Ethan Brooks + PowerPoint + Video playback', + colour: '#77C785', + delay: 0, + dayOffset: 0 as Day, + gap: 0, + cue: '3.1', + parent: '6b0edb', + revision: 0, + timeWarning: 120000, + timeDanger: 60000, + custom: { + PowerPoint_Slide: 'https://www.getontime.no/images/aux/demo-slide3.webp', + Video_Notes: 'Camera + PPT + Video on stream\nPowerPoint + Video on screens\n\nVideo file: Session2.mp4', + Audio_Notes: '1x Wireless Hand Held\n1x Video with audio', + PowerPoint_Name: 'Session2.pptx', + }, + triggers: [], + }, + e10ed9: { + id: 'e10ed9', + type: SupportedEntry.Event, + flag: false, + title: 'Wrap up', + timeStart: 49800000, + timeEnd: 50400000, + duration: 600000, + timeStrategy: TimeStrategy.LockDuration, + linkStart: false, + endAction: EndAction.None, + timerType: TimerType.CountDown, + countToEnd: false, + skip: false, + note: 'Lucas Bennett', + colour: '#FFCC78', + delay: 0, + dayOffset: 0 as Day, + gap: 0, + cue: '3.2', + parent: '6b0edb', + revision: 0, + timeWarning: 120000, + timeDanger: 60000, + custom: { + PowerPoint_Slide: 'https://www.getontime.no/images/aux/demo-slide1.webp', + Video_Notes: 'Holding slide on screens', + Audio_Notes: '1x Wireless Hand Held', + PowerPoint_Name: 'HoldingSlide.pptx', + }, + triggers: [], + }, + '07df89': { + id: '07df89', + type: SupportedEntry.Milestone, + cue: 'Strike', + title: '14:00 - AV & Room strike', + note: '', + colour: '#A790F5', + revision: 0, + custom: {}, + parent: '6b0edb', + }, + }, + revision: 0, +}; + +export const backstageRundown: Rundown = { + id: 'backstage', + title: 'Backstage Track', + order: ['bs0100', 'bs0001', 'bs0002', 'bs0003', 'bs0004'], + flatOrder: [ + 'bs0100', + 'bs0001', + 'bs0101', + 'bs0102', + 'bs0103', + 'bs0104', + 'bs0002', + 'bs0201', + 'bs0202', + 'bs0203', + 'bs0204', + 'bs0003', + 'bs0301', + 'bs0004', + 'bs0401', + 'bs0402', + 'bs0403', + 'bs0404', + ], + entries: { + bs0100: { + id: 'bs0100', + type: SupportedEntry.Milestone, + cue: 'Info', + title: 'Backstage operational track for crew, talent, and support teams', + note: 'Use this rundown to coordinate arrivals, readiness, catering, and backstage support tasks.', + colour: '#9d9d9d', + custom: {}, + parent: null, + revision: 0, + }, + bs0001: { + id: 'bs0001', + type: SupportedEntry.Group, + title: 'Pre-show Setup', + note: '', + entries: ['bs0101', 'bs0102', 'bs0103', 'bs0104'], + targetDuration: null, + colour: '#A790F5', + custom: {}, + revision: 0, + timeStart: 32400000, + timeEnd: 38400000, + duration: 6000000, + isFirstLinked: false, + }, + bs0101: { + id: 'bs0101', + type: SupportedEntry.Event, + flag: false, + title: 'Production team arrives / backstage opens', + timeStart: 32400000, + timeEnd: 34200000, + duration: 1800000, + timeStrategy: TimeStrategy.LockEnd, + linkStart: false, + endAction: EndAction.None, + timerType: TimerType.CountDown, + countToEnd: false, + skip: false, + note: 'Stage management, AV leads, and floor team check in', + colour: '#779BE7', + delay: 0, + dayOffset: 0 as Day, + gap: 0, + cue: 'B1', + parent: 'bs0001', + revision: 0, + timeWarning: 300000, + timeDanger: 120000, + custom: { + Video_Notes: 'Backstage comms check\nConfirm monitor feeds', + Audio_Notes: 'Check comms headsets', + }, + triggers: [], + }, + bs0102: { + id: 'bs0102', + type: SupportedEntry.Event, + flag: false, + title: 'Green room setup complete', + timeStart: 34200000, + timeEnd: 36000000, + duration: 1800000, + timeStrategy: TimeStrategy.LockDuration, + linkStart: true, + endAction: EndAction.None, + timerType: TimerType.CountDown, + countToEnd: false, + skip: false, + note: 'Water, signage, seating, and presenter packs ready', + colour: '#77C785', + delay: 0, + dayOffset: 0 as Day, + gap: 0, + cue: 'B1.1', + parent: 'bs0001', + revision: 0, + timeWarning: 300000, + timeDanger: 120000, + custom: { + Video_Notes: 'Confidence monitor on in green room', + Audio_Notes: 'Background music off unless requested', + }, + triggers: [], + }, + bs0103: { + id: 'bs0103', + type: SupportedEntry.Event, + flag: false, + title: 'Talent arrivals / check-in', + timeStart: 36000000, + timeEnd: 38400000, + duration: 2400000, + timeStrategy: TimeStrategy.LockDuration, + linkStart: true, + endAction: EndAction.None, + timerType: TimerType.CountDown, + countToEnd: false, + skip: false, + note: 'Liam Carter, Sophia Patel, Ethan Brooks, Lucas Bennett', + colour: '#FFCC78', + delay: 0, + dayOffset: 0 as Day, + gap: 0, + cue: 'B1.2', + parent: 'bs0001', + revision: 0, + timeWarning: 300000, + timeDanger: 120000, + custom: { + Audio_Notes: 'Mic fitting schedule coordinated with audio', + }, + triggers: [], + }, + bs0104: { + id: 'bs0104', + type: SupportedEntry.Milestone, + cue: 'Standby', + title: '10:45 - Session 1 presenters ready backstage', + note: '', + colour: '#A790F5', + revision: 0, + custom: {}, + parent: 'bs0001', + }, + + bs0002: { + id: 'bs0002', + type: SupportedEntry.Group, + title: 'Morning Support', + note: '', + entries: ['bs0201', 'bs0202', 'bs0203', 'bs0204'], + targetDuration: null, + colour: '#339E4E', + custom: {}, + revision: 0, + timeStart: 39600000, + timeEnd: 43200000, + duration: 3600000, + isFirstLinked: true, + }, + bs0201: { + id: 'bs0201', + type: SupportedEntry.Event, + flag: false, + title: 'Speaker handoff / mic support', + timeStart: 39600000, + timeEnd: 40800000, + duration: 1200000, + timeStrategy: TimeStrategy.LockDuration, + linkStart: true, + endAction: EndAction.None, + timerType: TimerType.CountDown, + countToEnd: false, + skip: false, + note: 'Backstage team rotates speakers in and out for Session 1', + colour: '#77C785', + delay: 0, + dayOffset: 0 as Day, + gap: 0, + cue: 'B2.1', + parent: 'bs0002', + revision: 0, + timeWarning: 180000, + timeDanger: 60000, + custom: { + Audio_Notes: 'Mic handoff and battery check', + }, + triggers: [], + }, + bs0202: { + id: 'bs0202', + type: SupportedEntry.Event, + flag: false, + title: 'Catering ready in lobby', + timeStart: 40800000, + timeEnd: 41400000, + duration: 600000, + timeStrategy: TimeStrategy.LockDuration, + linkStart: true, + endAction: EndAction.None, + timerType: TimerType.CountDown, + countToEnd: false, + skip: false, + note: 'Lunch stations confirmed and service team briefed', + colour: '#3E75E8', + delay: 0, + dayOffset: 0 as Day, + gap: 0, + cue: 'B2.2', + parent: 'bs0002', + revision: 0, + timeWarning: 120000, + timeDanger: 60000, + custom: {}, + triggers: [], + }, + bs0203: { + id: 'bs0203', + type: SupportedEntry.Milestone, + cue: 'House', + title: '11:30 - Backstage reset for lunch transition', + note: '', + colour: '#A790F5', + revision: 0, + custom: {}, + parent: 'bs0002', + }, + bs0204: { + id: 'bs0204', + type: SupportedEntry.Event, + flag: false, + title: 'Session 2 speaker briefing', + timeStart: 42000000, + timeEnd: 43200000, + duration: 1200000, + timeStrategy: TimeStrategy.LockDuration, + linkStart: false, + endAction: EndAction.None, + timerType: TimerType.CountDown, + countToEnd: false, + skip: false, + note: 'Ethan Brooks briefed on walk-on, confidence monitor, and video playback', + colour: '#FFCC78', + delay: 0, + dayOffset: 0 as Day, + gap: 0, + cue: 'B2.3', + parent: 'bs0002', + revision: 0, + timeWarning: 180000, + timeDanger: 60000, + custom: { + Video_Notes: 'Confirm video playback timing with stage manager', + }, + triggers: [], + }, + + bs0003: { + id: 'bs0003', + type: SupportedEntry.Group, + title: 'Lunch Turnaround', + note: '', + entries: ['bs0301'], + targetDuration: null, + colour: '#3E75E8', + custom: {}, + revision: 0, + timeStart: 43200000, + timeEnd: 46800000, + duration: 3600000, + isFirstLinked: true, + }, + bs0301: { + id: 'bs0301', + type: SupportedEntry.Event, + flag: false, + title: 'Crew lunch / talent hold / afternoon prep', + timeStart: 43200000, + timeEnd: 46800000, + duration: 3600000, + timeStrategy: TimeStrategy.LockDuration, + linkStart: true, + endAction: EndAction.None, + timerType: TimerType.CountDown, + countToEnd: false, + skip: false, + note: 'Stagger crew breaks, maintain backstage coverage, prep Session 2 assets', + colour: '#779BE7', + delay: 0, + dayOffset: 0 as Day, + gap: 0, + cue: 'B3.1', + parent: 'bs0003', + revision: 0, + timeWarning: 300000, + timeDanger: 120000, + custom: { + Video_Notes: 'Reload Session2.mp4 and verify routing', + Audio_Notes: 'Reset handhelds for afternoon session', + }, + triggers: [], + }, + + bs0004: { + id: 'bs0004', + type: SupportedEntry.Group, + title: 'Afternoon Support', + note: '', + entries: ['bs0401', 'bs0402', 'bs0403', 'bs0404'], + targetDuration: null, + colour: '#339E4E', + custom: {}, + revision: 0, + timeStart: 46800000, + timeEnd: 50400000, + duration: 3600000, + isFirstLinked: true, + }, + bs0401: { + id: 'bs0401', + type: SupportedEntry.Milestone, + cue: 'Standby', + title: '12:45 - Session 2 presenter ready backstage', + note: '', + colour: '#A790F5', + revision: 0, + custom: {}, + parent: 'bs0004', + }, + bs0402: { + id: 'bs0402', + type: SupportedEntry.Event, + flag: false, + title: 'Backstage support for Session 2', + timeStart: 46800000, + timeEnd: 49800000, + duration: 3000000, + timeStrategy: TimeStrategy.LockDuration, + linkStart: true, + endAction: EndAction.None, + timerType: TimerType.CountDown, + countToEnd: false, + skip: false, + note: 'Speaker support, video cue checks, and presenter rotation', + colour: '#77C785', + delay: 0, + dayOffset: 0 as Day, + gap: 0, + cue: 'B4.1', + parent: 'bs0004', + revision: 0, + timeWarning: 180000, + timeDanger: 60000, + custom: { + Video_Notes: 'Monitor playback progress and standby next asset', + Audio_Notes: 'Support speaker mic swap if needed', + }, + triggers: [], + }, + bs0403: { + id: 'bs0403', + type: SupportedEntry.Event, + flag: false, + title: 'Wrap-up talent support', + timeStart: 49800000, + timeEnd: 50400000, + duration: 600000, + timeStrategy: TimeStrategy.LockDuration, + linkStart: true, + endAction: EndAction.None, + timerType: TimerType.CountDown, + countToEnd: false, + skip: false, + note: 'Lucas Bennett to standby, transport and post-show support confirmed', + colour: '#FFCC78', + delay: 0, + dayOffset: 0 as Day, + gap: 0, + cue: 'B4.2', + parent: 'bs0004', + revision: 0, + timeWarning: 120000, + timeDanger: 60000, + custom: {}, + triggers: [], + }, + bs0404: { + id: 'bs0404', + type: SupportedEntry.Milestone, + cue: 'Strike', + title: '14:00 - Green room clear / catering wrap / talent release', + note: '', + colour: '#A790F5', + revision: 0, + custom: {}, + parent: 'bs0004', + }, + }, + revision: 0, +}; + +export const broadcastRundown: Rundown = { + id: 'broadcast', + title: 'Broadcast', + order: ['br0100', 'br0001', 'br0002', 'br0003', 'br0004'], + flatOrder: [ + 'br0100', + 'br0001', + 'br0101', + 'br0102', + 'br0103', + 'br0002', + 'br0201', + 'br0202', + 'br0203', + 'br0204', + 'br0003', + 'br0301', + 'br0302', + 'br0004', + 'br0401', + 'br0402', + 'br0403', + ], + entries: { + br0100: { + id: 'br0100', + type: SupportedEntry.Milestone, + cue: 'Info', + title: 'Broadcast / stream control track', + note: 'Controls program output, graphics, and playback during the show', + colour: '#9d9d9d', + custom: {}, + parent: null, + revision: 0, + }, + + br0001: { + id: 'br0001', + type: SupportedEntry.Group, + title: 'Pre-show', + note: '', + entries: ['br0101', 'br0102', 'br0103'], + targetDuration: null, + colour: '#ED3333', + custom: {}, + revision: 0, + timeStart: 36000000, + timeEnd: 39600000, + duration: 3600000, + isFirstLinked: false, + }, + br0101: { + id: 'br0101', + type: SupportedEntry.Event, + flag: false, + title: 'Stream standby / test signal', + timeStart: 36000000, + timeEnd: 37200000, + duration: 1200000, + timeStrategy: TimeStrategy.LockEnd, + linkStart: false, + endAction: EndAction.None, + timerType: TimerType.CountDown, + countToEnd: false, + skip: false, + note: 'Check encoder, audio levels, and stream health', + colour: '#779BE7', + delay: 0, + dayOffset: 0 as Day, + gap: 0, + cue: 'S1', + parent: 'br0001', + revision: 0, + timeWarning: 300000, + timeDanger: 120000, + custom: {}, + triggers: [], + }, + br0102: { + id: 'br0102', + type: SupportedEntry.Event, + flag: false, + title: 'Holding slide live', + timeStart: 37200000, + timeEnd: 39600000, + duration: 2400000, + timeStrategy: TimeStrategy.LockDuration, + linkStart: true, + endAction: EndAction.None, + timerType: TimerType.CountDown, + countToEnd: false, + skip: false, + note: 'Countdown visible on stream', + colour: '#77C785', + delay: 0, + dayOffset: 0 as Day, + gap: 0, + cue: 'S1.1', + parent: 'br0001', + revision: 0, + timeWarning: 300000, + timeDanger: 120000, + custom: { + PowerPoint_Name: 'HoldingSlide.pptx', + }, + triggers: [], + }, + br0103: { + id: 'br0103', + type: SupportedEntry.Milestone, + cue: 'Standby', + title: '10:55 - Ready to go live', + note: '', + colour: '#A790F5', + revision: 0, + custom: {}, + parent: 'br0001', + }, + + br0002: { + id: 'br0002', + type: SupportedEntry.Group, + title: 'Morning Sessions', + note: '', + entries: ['br0201', 'br0202', 'br0203', 'br0204'], + targetDuration: null, + colour: '#339E4E', + custom: {}, + revision: 0, + timeStart: 39600000, + timeEnd: 43200000, + duration: 3600000, + isFirstLinked: true, + }, + br0201: { + id: 'br0201', + type: SupportedEntry.Event, + flag: false, + title: 'Go live / intro slate', + timeStart: 39600000, + timeEnd: 40200000, + duration: 600000, + timeStrategy: TimeStrategy.LockDuration, + linkStart: true, + endAction: EndAction.None, + timerType: TimerType.CountDown, + countToEnd: false, + skip: false, + note: 'Fade from holding slide to program', + colour: '#FFCC78', + delay: 0, + dayOffset: 0 as Day, + gap: 0, + cue: 'S2.1', + parent: 'br0002', + revision: 0, + timeWarning: 120000, + timeDanger: 60000, + custom: {}, + triggers: [], + }, + br0202: { + id: 'br0202', + type: SupportedEntry.Event, + flag: false, + title: 'Lower thirds / speaker intro', + timeStart: 40200000, + timeEnd: 40800000, + duration: 600000, + timeStrategy: TimeStrategy.LockDuration, + linkStart: true, + endAction: EndAction.None, + timerType: TimerType.CountDown, + countToEnd: false, + skip: false, + note: 'Emma Thompson lower third', + colour: '#77C785', + delay: 0, + dayOffset: 0 as Day, + gap: 0, + cue: 'S2.2', + parent: 'br0002', + revision: 0, + timeWarning: 120000, + timeDanger: 60000, + custom: {}, + triggers: [], + }, + br0203: { + id: 'br0203', + type: SupportedEntry.Event, + flag: false, + title: 'Switch to presentation feed', + timeStart: 40800000, + timeEnd: 43200000, + duration: 2400000, + timeStrategy: TimeStrategy.LockDuration, + linkStart: true, + endAction: EndAction.None, + timerType: TimerType.CountDown, + countToEnd: false, + skip: false, + note: 'Camera + PPT mix', + colour: '#779BE7', + delay: 0, + dayOffset: 0 as Day, + gap: 0, + cue: 'S2.3', + parent: 'br0002', + revision: 0, + timeWarning: 180000, + timeDanger: 60000, + custom: {}, + triggers: [], + }, + br0204: { + id: 'br0204', + type: SupportedEntry.Milestone, + cue: 'Standby', + title: 'Prepare lunch holding content', + note: '', + colour: '#A790F5', + revision: 0, + custom: {}, + parent: 'br0002', + }, + + br0003: { + id: 'br0003', + type: SupportedEntry.Group, + title: 'Lunch', + note: '', + entries: ['br0301', 'br0302'], + targetDuration: null, + colour: '#3E75E8', + custom: {}, + revision: 0, + timeStart: 43200000, + timeEnd: 46800000, + duration: 3600000, + isFirstLinked: true, + }, + br0301: { + id: 'br0301', + type: SupportedEntry.Event, + flag: false, + title: 'Holding slide / music', + timeStart: 43200000, + timeEnd: 45000000, + duration: 1800000, + timeStrategy: TimeStrategy.LockDuration, + linkStart: true, + endAction: EndAction.None, + timerType: TimerType.CountDown, + countToEnd: false, + skip: false, + note: 'Loop holding slide + background music', + colour: '#779BE7', + delay: 0, + dayOffset: 0 as Day, + gap: 0, + cue: 'S3.1', + parent: 'br0003', + revision: 0, + timeWarning: 300000, + timeDanger: 120000, + custom: {}, + triggers: [], + }, + br0302: { + id: 'br0302', + type: SupportedEntry.Event, + flag: false, + title: 'Sponsor reel playback', + timeStart: 45000000, + timeEnd: 46800000, + duration: 1800000, + timeStrategy: TimeStrategy.LockDuration, + linkStart: true, + endAction: EndAction.None, + timerType: TimerType.CountDown, + countToEnd: false, + skip: false, + note: 'Loop sponsor content', + colour: '#77C785', + delay: 0, + dayOffset: 0 as Day, + gap: 0, + cue: 'S3.2', + parent: 'br0003', + revision: 0, + timeWarning: 300000, + timeDanger: 120000, + custom: {}, + triggers: [], + }, + + br0004: { + id: 'br0004', + type: SupportedEntry.Group, + title: 'Afternoon Sessions', + note: '', + entries: ['br0401', 'br0402', 'br0403'], + targetDuration: null, + colour: '#339E4E', + custom: {}, + revision: 0, + timeStart: 46800000, + timeEnd: 50400000, + duration: 3600000, + isFirstLinked: true, + }, + br0401: { + id: 'br0401', + type: SupportedEntry.Event, + flag: false, + title: 'Return from lunch / go live', + timeStart: 46800000, + timeEnd: 47400000, + duration: 600000, + timeStrategy: TimeStrategy.LockDuration, + linkStart: true, + endAction: EndAction.None, + timerType: TimerType.CountDown, + countToEnd: false, + skip: false, + note: 'Fade from holding to program', + colour: '#FFCC78', + delay: 0, + dayOffset: 0 as Day, + gap: 0, + cue: 'S4.1', + parent: 'br0004', + revision: 0, + timeWarning: 120000, + timeDanger: 60000, + custom: {}, + triggers: [], + }, + br0402: { + id: 'br0402', + type: SupportedEntry.Event, + flag: false, + title: 'Video playback (Session 2)', + timeStart: 47400000, + timeEnd: 49800000, + duration: 2400000, + timeStrategy: TimeStrategy.LockDuration, + linkStart: true, + endAction: EndAction.None, + timerType: TimerType.CountDown, + countToEnd: false, + skip: false, + note: 'Play Session2.mp4', + colour: '#77C785', + delay: 0, + dayOffset: 0 as Day, + gap: 0, + cue: 'S4.2', + parent: 'br0004', + revision: 0, + timeWarning: 180000, + timeDanger: 60000, + custom: {}, + triggers: [], + }, + br0403: { + id: 'br0403', + type: SupportedEntry.Event, + flag: false, + title: 'End slate / stream end', + timeStart: 49800000, + timeEnd: 50400000, + duration: 600000, + timeStrategy: TimeStrategy.LockDuration, + linkStart: true, + endAction: EndAction.None, + timerType: TimerType.CountDown, + countToEnd: false, + skip: false, + note: 'Fade out and end stream', + colour: '#779BE7', + delay: 0, + dayOffset: 0 as Day, + gap: 0, + cue: 'S4.3', + parent: 'br0004', + revision: 0, + timeWarning: 120000, + timeDanger: 60000, + custom: {}, + triggers: [], + }, + }, + revision: 0, +};