// Echt Zomer Feesten 2026 - demo data // Schema mirrors Crewli §3.5.7: stages, stage_days, artists, performances window.CrewliData = (function () { const EVENT = { id: "ezf_2026", name: "Echt Zomer Feesten", edition: "2026", sub_event_label: "dag", // configurable in Crewli — could be "dag", "deelevent", "fase", etc. days: [ { id: "d_fr", date: "2026-07-10", label: "Vrijdag", short: "Vr" }, { id: "d_sa", date: "2026-07-11", label: "Zaterdag", short: "Za" }, ], }; // Stages — physical platforms. color is the stage swatch (used as left-band on row) const STAGES = [ { id: "s_hardstyle", name: "Hardstyle District", color: "#e85d75", capacity: 4500 }, { id: "s_techno", name: "Techno × House", color: "#7a8af0", capacity: 3000 }, { id: "s_hollandse", name: "Hollandse Hoek", color: "#f0a04b", capacity: 5000 }, { id: "s_urban", name: "Echt Urban", color: "#5fc9a8", capacity: 2800 }, { id: "s_silent", name: "Silent Disco", color: "#c89af0", capacity: 800 }, { id: "s_schirm", name: "Schirmbar", color: "#e8d05f", capacity: 600 }, ]; // stage_days pivot: which stages run on which day const STAGE_DAYS = [ // Vrijdag { stage_id: "s_hardstyle", day_id: "d_fr" }, { stage_id: "s_techno", day_id: "d_fr" }, { stage_id: "s_silent", day_id: "d_fr" }, { stage_id: "s_schirm", day_id: "d_fr" }, // Zaterdag { stage_id: "s_hollandse", day_id: "d_sa" }, { stage_id: "s_urban", day_id: "d_sa" }, { stage_id: "s_silent", day_id: "d_sa" }, { stage_id: "s_schirm", day_id: "d_sa" }, ]; // Advance sections (per artist, configurable in real schema; here we use a // pragmatic standard set so the popover dots have meaning) const ADVANCE_SECTIONS = [ { key: "tour", label: "Tourmanager" }, { key: "hosp", label: "Hospitality" }, { key: "travel", label: "Travel party" }, { key: "flight", label: "Flight" }, { key: "rider", label: "Tech rider" }, ]; // Artists. `draw` = expected pull (for capacity warnings). `advance` = which // sections are completed (just demo state for the popover). // Genres (closed list — drives filters in the wachtrij and the small label on blocks) const GENRES = ["Hardstyle", "Techno", "House", "Hollands", "Pop", "Urban", "Disco", "Aprés"]; const ARTISTS = [ { id: "a_1", name: "D-Block & S-te-Fan", initials: "DS", genre: "Hardstyle", draw: 4200, advance: { tour: true, hosp: true, travel: true, flight: false, rider: true } }, { id: "a_2", name: "Sub Zero Project", initials: "SZ", genre: "Hardstyle", draw: 3800, advance: { tour: true, hosp: true, travel: false, flight: false, rider: true } }, { id: "a_3", name: "Warface", initials: "WF", genre: "Hardstyle", draw: 3000, advance: { tour: true, hosp: false, travel: false, flight: false, rider: false } }, { id: "a_4", name: "Devin Wild", initials: "DW", genre: "Hardstyle", draw: 2400, advance: { tour: true, hosp: true, travel: true, flight: true, rider: true } }, { id: "a_5", name: "Reinier Zonneveld", initials: "RZ", genre: "Techno", draw: 2800, advance: { tour: true, hosp: true, travel: true, flight: true, rider: true } }, { id: "a_6", name: "Boris Brejcha", initials: "BB", genre: "Techno", draw: 3200, advance: { tour: true, hosp: true, travel: false, flight: true, rider: true } }, { id: "a_7", name: "Mau P", initials: "MP", genre: "House", draw: 2200, advance: { tour: true, hosp: false, travel: false, flight: false, rider: true } }, { id: "a_8", name: "Snollebollekes", initials: "SB", genre: "Hollands", draw: 5200, advance: { tour: true, hosp: true, travel: true, flight: false, rider: true } }, { id: "a_9", name: "Mart Hoogkamer", initials: "MH", genre: "Hollands", draw: 3600, advance: { tour: true, hosp: true, travel: false, flight: false, rider: true } }, { id: "a_10", name: "Suzan & Freek", initials: "SF", genre: "Pop", draw: 4800, advance: { tour: false, hosp: false, travel: false, flight: false, rider: false } }, { id: "a_11", name: "Frans Duijts", initials: "FD", genre: "Hollands", draw: 2600, advance: { tour: true, hosp: true, travel: true, flight: false, rider: true } }, { id: "a_12", name: "Bizzey", initials: "BZ", genre: "Urban", draw: 2400, advance: { tour: true, hosp: true, travel: true, flight: false, rider: true } }, { id: "a_13", name: "Frenna", initials: "FN", genre: "Urban", draw: 2800, advance: { tour: true, hosp: true, travel: false, flight: false, rider: false } }, { id: "a_14", name: "Kris Kross Amsterdam", initials: "KK", genre: "Pop", draw: 2200, advance: { tour: true, hosp: false, travel: false, flight: false, rider: true } }, { id: "a_15", name: "DJ Marlon", initials: "DM", genre: "Disco", draw: 600, advance: { tour: true, hosp: true, travel: true, flight: true, rider: true } }, { id: "a_16", name: "DJ Senna", initials: "DS", genre: "Disco", draw: 500, advance: { tour: true, hosp: true, travel: true, flight: true, rider: true } }, { id: "a_17", name: "Café Catootje", initials: "CC", genre: "Aprés", draw: 400, advance: { tour: true, hosp: true, travel: true, flight: true, rider: true } }, { id: "a_18", name: "Apré Heroes", initials: "AH", genre: "Aprés", draw: 350, advance: { tour: false, hosp: true, travel: false, flight: true, rider: false } }, ]; // Performances — booking_status: concept | requested | option | confirmed | contracted | cancelled // Times are minutes since the day's anchor (14:00). End times are minute offsets too. // To keep math simple we use the same minute-grid for both days. const PERFORMANCES = [ // ─── Vrijdag · Hardstyle District (s_hardstyle, d_fr) ───────────── { id: "p_1", artist_id: "a_3", stage_id: "s_hardstyle", day_id: "d_fr", start: 240, end: 360, status: "confirmed" }, // 18:00-20:00 { id: "p_2", artist_id: "a_4", stage_id: "s_hardstyle", day_id: "d_fr", start: 360, end: 480, status: "confirmed" }, // 20:00-22:00 { id: "p_3", artist_id: "a_2", stage_id: "s_hardstyle", day_id: "d_fr", start: 480, end: 600, status: "contracted" }, // 22:00-00:00 // Concept-fase: 3 parallelle aanvragen voor de 00:00-02:00 slot — pas één wordt vastgelegd { id: "p_4", artist_id: "a_1", stage_id: "s_hardstyle", day_id: "d_fr", start: 600, end: 720, status: "option" }, // 00:00-02:00 { id: "p_4b", artist_id: "a_2", stage_id: "s_hardstyle", day_id: "d_fr", start: 600, end: 720, status: "requested" }, // 00:00-02:00 (parallel aanvraag) { id: "p_4c", artist_id: "a_4", stage_id: "s_hardstyle", day_id: "d_fr", start: 615, end: 705, status: "concept" }, // 00:15-01:45 (alternatief concept) // ─── Vrijdag · Techno × House (s_techno, d_fr) ──────────────────── { id: "p_5", artist_id: "a_7", stage_id: "s_techno", day_id: "d_fr", start: 300, end: 420, status: "confirmed" }, // 19:00-21:00 { id: "p_6", artist_id: "a_5", stage_id: "s_techno", day_id: "d_fr", start: 420, end: 555, status: "contracted" }, // 21:00-23:15 { id: "p_7", artist_id: "a_6", stage_id: "s_techno", day_id: "d_fr", start: 555, end: 690, status: "requested" }, // 23:15-01:30 // ─── Vrijdag · Silent Disco (s_silent, d_fr) ────────────────────── { id: "p_8", artist_id: "a_15", stage_id: "s_silent", day_id: "d_fr", start: 360, end: 540, status: "confirmed" }, // 20:00-23:00 { id: "p_9", artist_id: "a_16", stage_id: "s_silent", day_id: "d_fr", start: 540, end: 720, status: "confirmed" }, // 23:00-02:00 // ─── Vrijdag · Schirmbar (s_schirm, d_fr) ───────────────────────── { id: "p_10", artist_id: "a_17", stage_id: "s_schirm", day_id: "d_fr", start: 180, end: 360, status: "confirmed" }, // 17:00-20:00 { id: "p_11", artist_id: "a_18", stage_id: "s_schirm", day_id: "d_fr", start: 360, end: 540, status: "concept" }, // 20:00-23:00 // ─── Zaterdag · Hollandse Hoek (s_hollandse, d_sa) ──────────────── { id: "p_12", artist_id: "a_11", stage_id: "s_hollandse", day_id: "d_sa", start: 240, end: 345, status: "confirmed" }, // 18:00-19:45 { id: "p_13", artist_id: "a_9", stage_id: "s_hollandse", day_id: "d_sa", start: 345, end: 465, status: "confirmed" }, // 19:45-21:45 { id: "p_14", artist_id: "a_10", stage_id: "s_hollandse", day_id: "d_sa", start: 465, end: 600, status: "option" }, // 21:45-00:00 (cap warning - draw 4800 vs 5000) { id: "p_15", artist_id: "a_8", stage_id: "s_hollandse", day_id: "d_sa", start: 600, end: 720, status: "contracted" }, // 00:00-02:00 (cap warning — draw 5200 > 5000) // ─── Zaterdag · Echt Urban (s_urban, d_sa) ──────────────────────── { id: "p_16", artist_id: "a_14", stage_id: "s_urban", day_id: "d_sa", start: 300, end: 420, status: "confirmed" }, // 19:00-21:00 { id: "p_17", artist_id: "a_13", stage_id: "s_urban", day_id: "d_sa", start: 420, end: 540, status: "confirmed" }, // 21:00-23:00 { id: "p_18", artist_id: "a_12", stage_id: "s_urban", day_id: "d_sa", start: 540, end: 660, status: "requested" }, // 23:00-01:00 // Demo conflict: two performances overlapping on Echt Urban { id: "p_19", artist_id: "a_7", stage_id: "s_urban", day_id: "d_sa", start: 510, end: 600, status: "concept" }, // 22:30-00:00 overlap with Frenna // ─── Zaterdag · Silent Disco (s_silent, d_sa) ───────────────────── { id: "p_20", artist_id: "a_16", stage_id: "s_silent", day_id: "d_sa", start: 360, end: 540, status: "confirmed" }, { id: "p_21", artist_id: "a_15", stage_id: "s_silent", day_id: "d_sa", start: 540, end: 720, status: "confirmed" }, // ─── Zaterdag · Schirmbar (s_schirm, d_sa) ──────────────────────── { id: "p_22", artist_id: "a_18", stage_id: "s_schirm", day_id: "d_sa", start: 180, end: 360, status: "concept" }, { id: "p_23", artist_id: "a_17", stage_id: "s_schirm", day_id: "d_sa", start: 360, end: 540, status: "confirmed" }, ]; // ─── Parked performances (stage_id === null) ───────────────────── // Artists picked up but not yet placed on a stage. Day-id keeps day-context. const PARKED = [ { id: "pk_1", artist_id: "a_5", stage_id: null, day_id: "d_fr", start: 480, end: 600, status: "option" }, { id: "pk_2", artist_id: "a_13", stage_id: null, day_id: "d_sa", start: 540, end: 660, status: "requested" }, { id: "pk_3", artist_id: "a_7", stage_id: null, day_id: "d_fr", start: 420, end: 540, status: "concept" }, { id: "pk_4", artist_id: "a_9", stage_id: null, day_id: "d_sa", start: 360, end: 450, status: "confirmed" }, { id: "pk_5", artist_id: "a_11", stage_id: null, day_id: "d_fr", start: 600, end: 690, status: "contracted" }, ]; // ─── Pending availability requests ─────────────────────────────── // Artists waarvoor beschikbaarheid is opgevraagd maar nog geen tijdvak gekozen. const PENDING = [ { id: "pa_1", artist_id: "a_6", day_id: "d_fr", requested_on: "2026-04-12", note: "Wachten op terugkoppeling agent" }, { id: "pa_2", artist_id: "a_8", day_id: "d_sa", requested_on: "2026-04-08", note: "Beschikbaar — wacht op fee-onderhandeling" }, { id: "pa_3", artist_id: "a_12", day_id: "d_sa", requested_on: "2026-04-15", note: "Boeking via Top Notch" }, { id: "pa_4", artist_id: "a_10", day_id: "d_fr", requested_on: "2026-04-18", note: "Optie tot 30 april" }, ]; // Time grid: 14:00 -> 03:00 next day = 13 hours = 780 minutes // start=0 means 14:00, start=600 means 00:00, start=780 means 03:00 const TIME = { startHour: 14, // grid starts at 14:00 totalMinutes: 780, // 13 hours snapMinutes: 15, // drag snap cellMinutes: 30, // grid cell width }; return { EVENT, STAGES, STAGE_DAYS, ADVANCE_SECTIONS, ARTISTS, GENRES, PERFORMANCES, PARKED, PENDING, TIME }; })();