Files
crewli/docs/BACKLOG.md
bert.hausmans 6848bc2c49 feat: schema v1.7 + sections/shifts frontend
- Universeel festival/event model (parent_event_id, event_type)
- event_person_activations pivot tabel
- Event model: parent/children relaties + helper scopes
- DevSeeder: festival structuur met sub-events
- Sections & Shifts frontend (twee-kolom layout)
- BACKLOG.md aangemaakt met 22 gedocumenteerde wensen
2026-04-08 07:23:56 +02:00

11 KiB

Crewli — Product Backlog

Gedocumenteerde wensen en features die bewust zijn uitgesteld. Bijgewerkt: April 2026

Gebruik: Voeg nieuwe items toe als ze tijdens development ontstaan. Geef elk item een prioriteit en fase zodra je het gaat oppakken.


Fase 3 — Geplande features

ARCH-01 — Recurrence / Terugkerende events

Aanleiding: Schaatsbaan use case — 8 weken, elke za+zo openingsdagen. Wat: Organisator definieert één template sub-event met RRULE. Platform genereert automatisch alle instanties. Details:

  • RRULE formaat (RFC 5545): FREQ=WEEKLY;BYDAY=SA,SU;UNTIL=20270126
  • events.recurrence_rule (string nullable) — al gereserveerd in schema
  • events.recurrence_exceptions (JSON) — cancelled + modified dates
  • UI: "Genereer openingsdagen" wizard
  • Aanpassen van één instantie raakt template niet
  • "Alleen deze dag" / "Alle volgende dagen" / "Alle dagen" (Google Calendar patroon) Schema: Kolommen al aanwezig in v1.7. Alleen generator-logica ontbreekt.

ARCH-02 — Min/max shifts per vrijwilliger per serie

Aanleiding: Schaatsbaan — eerlijke verdeling, minimum commitment. Wat: Per festival/serie instelbaar minimum en maximum aantal shifts dat een vrijwilliger kan claimen. Details:

  • festivals.min_shifts_per_volunteer (int nullable)
  • festivals.max_shifts_per_volunteer (int nullable)
  • Portal toont voortgang: "Jij hebt 2 van minimaal 4 shifts geclaimd"
  • Bij bereiken maximum: verdere claims geblokkeerd Afhankelijk van: ARCH-01 (recurrence), Portal self-service

ARCH-03 — Sectie templates / kopiëren van vorig event

Aanleiding: Organisatoren die elk jaar dezelfde secties en shifts opzetten. Wat: "Kopieer secties van vorig festival" functie in de UI. Kopieert festival_sections + shifts structuur (zonder toewijzingen). Details:

  • UI: dropdown "Kopieer structuur van..." bij aanmaken festival
  • Optie: kopieer alleen secties / secties + shifts / alles
  • Tijden worden proportioneel aangepast aan nieuwe datums Prioriteit: Hoog — bespaart veel handmatig werk bij terugkerende festivals

ARCH-04 — Cross-festival conflictdetectie

Aanleiding: Vrijwilliger die bij twee festivals van dezelfde organisatie op dezelfde dag ingepland staat. Wat: Waarschuwing (geen blokkade) als iemand al actief is op een ander festival van dezelfde organisatie op dezelfde datum. Details:

  • Soft check — waarschuwing tonen, niet blokkeren
  • Relevant bij organisaties met meerdere festivals tegelijk
  • Query: shift_assignments cross-festival op person_id + datum

ARCH-05 — Shift fairness / prioriteitswachtrij

Aanleiding: Populaire shifts worden direct volgeboekt door snelle vrijwilligers. Wat: Optionele wachtrij-modus waarbij het systeem eerlijk verdeelt op basis van: reliability score, aantal uren al ingepland, aanmeldvolgorde. Details:

  • shifts.assignment_mode (enum: first_come | fair_queue | manual)
  • Fair queue: systeem wijst toe op basis van algoritme
  • Organisator keurt resultaat goed voor publicatie Prioriteit: Middel — nice-to-have voor grote festivals

Fase 3 — Communicatie & Notificaties

COMM-01 — Real-time WebSocket notificaties

Aanleiding: Differentiator — geen van de concurrenten heeft dit. Wat: Push notificaties via Laravel Echo + Soketi voor:

  • Nieuwe vrijwilliger aanmelding
  • Shift geclaimd
  • Uitnodiging geaccepteerd
  • Shift niet gevuld (waarschuwing)
  • No-show alert op show-dag Tech: Laravel Echo + Soketi (zelf-gehoste WebSocket server) Frontend: Notificatie bell in topbar activeren

COMM-02 — Topbar volledig activeren

Aanleiding: Vuexy topbar staat er maar is niet aangesloten op Crewli. Wat:

  • Zoekbalk (CTRL+K) aansluiten op Crewli-entiteiten (personen, events, secties zoeken)
  • Notificatie bell koppelen aan COMM-01
  • App switcher: Organizer / Admin / Portal wisselen
  • User avatar: gekoppeld aan ingelogde gebruiker (deels al gedaan) Prioriteit: Middel — werkt zonder maar verbetert UX significant

COMM-03 — Globale zoekfunctie (cmd+K)

Aanleiding: Differentiator — cross-entiteit zoeken. Wat: Modal zoekbalk die zoekt over: personen, events, artiesten, secties, shifts Tech: Meilisearch of database full-text search Prioriteit: Laag — Fase 4


COMM-04 — SMS + WhatsApp campagnes via Zender

Aanleiding: WeezCrew heeft dit als sterk punt. Wat: Bulk communicatie via Zender (zelf-gehoste SMS/WhatsApp gateway)

  • Normal urgency → email
  • Urgent → WhatsApp
  • Emergency → SMS + WhatsApp parallel Tech: ZenderService (al gedocumenteerd in dev guide) Afhankelijk van: Communicatie module backend

Fase 3 — Show Day & Operationeel

OPS-01 — Mission Control

Aanleiding: In2Event's sterkste feature. Wat: Real-time operationele hub op show-dag:

  • Live check-in overzicht per sectie
  • Artiest handling (aankomst, soundcheck, performance status)
  • No-show alerts met automatische opvolging
  • Inventaris uitgifte (portofoons, hesjes) Prioriteit: Hoog voor show-dag gebruik

OPS-02 — No-show automatisering

Aanleiding: 30-minuten alert voor niet-ingecheckte vrijwilligers. Wat: Automatische WhatsApp/SMS via Zender als vrijwilliger niet is ingecheckt 30 min na shift-starttijd. Schema: show_day_absence_alerts al aanwezig Afhankelijk van: COMM-04 (Zender), OPS-01 (Mission Control)


OPS-03 — Allocatiesheet PDF generator

Aanleiding: WeezCrew heeft branded PDF per crew. Wat: Gepersonaliseerde PDF per vrijwilliger/crew: taakbeschrijving, tijden, locatie, QR-code voor check-in. Tech: DomPDF (al geïnstalleerd) Prioriteit: Middel


OPS-04 — Scanner infrastructuur

Aanleiding: QR check-in op locatie. Wat: Scanstations configureren, koppelen aan hardware. scanners tabel al aanwezig in schema Prioriteit: Laag — Fase 4


Fase 3 — Vrijwilligers & Portal

VOL-01 — apps/portal/ vrijwilliger self-service

Aanleiding: Vrijwilligers moeten zichzelf kunnen aanmelden en shifts claimen zonder toegang tot de Organizer app. Wat:

  • Publiek registratieformulier (multi-step)
  • Login portal voor vrijwilligers
  • Beschikbaarheid opgeven (time slots kiezen)
  • My Shifts overzicht
  • Shift claimen met conflictdetectie
  • "Ik kan toch niet komen" workflow Afhankelijk van: Sections + Shifts backend (al klaar )

VOL-02 — Vrijwilliger paspoort + reliability score

Aanleiding: Platform-breed profiel dat accumuleert over jaren. Wat:

  • Festival-paspoort: visuele tijdlijn van deelgenomen festivals
  • Reliability score (0.0-5.0): berekend via scheduled job
  • Coordinator-beoordeling per festival (intern, nooit zichtbaar)
  • "Would reinvite" indicator bij heruitnodiging Schema: volunteer_profiles, volunteer_festival_history al aanwezig

VOL-03 — Post-festival evaluatie + retrospectief

Aanleiding: Automatische feedback na het festival. Wat:

  • 24u na laatste shift: evaluatiemail naar vrijwilligers
  • Max 5 vragen (beleving, shift kwaliteit, terugkomen?)
  • Gegenereerd retrospectief rapport per festival
  • Coordinator-beoordeling parallel (intern) Schema: post_festival_evaluations, festival_retrospectives al aanwezig

VOL-04 — Shift swap workflow (portal)

Aanleiding: Vrijwilliger wil shift ruilen met collega. Wat:

  • Open swap: iedereen mag reageren
  • Persoonlijke swap: specifieke collega vragen
  • Na akkoord beide: coordinator bevestigt (of auto-approve)
  • Wachtlijst: bij uitval automatisch aanschrijven Schema: shift_swap_requests, shift_absences, shift_waitlist al aanwezig

Fase 3 — Artiesten & Advancing

ART-01 — Artist advancing portal (apps/portal/)

Aanleiding: Crescat's sterkste feature. Wat:

  • Sectie-gebaseerd advance portal via gesignde URL
  • Per sectie onafhankelijk submitbaar (Guest List, Contacts, Production)
  • Milestone pipeline: Offer In → Advance Received
  • Per-artiest zichtbaarheidscontrole van advance secties
  • Submission diff tracking (created/updated/untouched/deleted) Schema: advance_sections, advance_submissions al aanwezig

ART-02 — Timetable (stage + drag-drop)

Aanleiding: FullCalendar timeline view voor podia-planning. Wat:

  • Timeline view per podium
  • Drag-and-drop performances
  • B2B detectie (twee artiesten op zelfde podium zelfde tijd) Tech: FullCalendar (al in stack )

Fase 3 — Formulieren & Leveranciers

FORM-01 — Formulierbouwer

Aanleiding: WeezCrew heeft een krachtige drag-sorteerbare builder. Wat:

  • Drag-sorteerbaar, conditionele logica
  • Live preview
  • Iframe embed voor externe websites
  • Configureerbare velden per crowd type Schema: public_forms al aanwezig

SUP-01 — Leveranciersportal + productieverzoeken

Aanleiding: Leveranciers moeten productie-informatie kunnen indienen. Wat:

  • Token-gebaseerde portal toegang (geen account nodig)
  • Productieverzoek indienen (mensen, tech, stroom, voertuigen)
  • Crowd list indienen voor hun crew Schema: production_requests, material_requests al aanwezig

Fase 4 — Differentiators

DIFF-01 — Cross-event crew pool + reliability score

Aanleiding: Vrijwilligers hergebruiken over events van dezelfde organisatie. Wat: Eén klik heruitnodiging op basis van vorig jaar. Reliability score zichtbaar naast naam in de lijst.


DIFF-02 — Crew PWA (mobiel)

Aanleiding: On-site zelfservice voor crew op hun telefoon. Wat: Progressive Web App voor: shifts bekijken, briefing lezen, clock-in, push notificaties.


DIFF-03 — Publieke REST API + webhooks

Aanleiding: Enterprise integraties. Wat: Gedocumenteerde publieke API + webhook systeem voor third-party integraties (ticketing, HR, etc.)


DIFF-04 — CO2 / Duurzaamheidsrapportage

Aanleiding: Toenemende focus op duurzame events. Wat: Emissieberekeningen op basis van transport en energieverbruik. Status: Expliciet out of scope voor v1.x


Apps & Platforms

APPS-01 — apps/admin/ volledig bouwen

Aanleiding: Super Admin panel voor platform-beheer. Wat:

  • Alle organisaties beheren
  • Billing status wijzigen
  • Platform-gebruikers beheren
  • Usage statistieken

APPS-02 — OrganisationSwitcher ingeklapte staat fix

Aanleiding: Flikkering/hover-bug bij ingeklapte sidebar. Wat: Correcte weergave en animatie in ingeklapte staat. Prioriteit: Low — cosmetisch, werkt functioneel wel


Technische schuld

TECH-01 — Bestaande tests bijwerken na festival/event refactor

Aanleiding: Na toevoegen parent_event_id worden bestaande tests mogelijk fragiel door gewijzigde factory-setup. Wat: Alle Feature tests reviewen en bijwerken waar nodig.


TECH-02 — scopeForFestival helper op Event model

Aanleiding: Queries die door parent/child heen moeten werken. Wat: Event::scopeWithChildren() en Event::scopeForFestival() helper scopes zodat queries automatisch parent + children bevatten.


TECH-03 — DevSeeder uitbreiden met festival-structuur

Aanleiding: Na festival/event refactor heeft de DevSeeder realistische testdata nodig met parent/child events. Wat: DevSeeder aanpassen met:

  • Test festival (parent)
  • 2-3 sub-events (children)
  • Personen op festival-niveau

Laatste update: April 2026 Voeg nieuwe items toe met prefix: ARCH-, COMM-, OPS-, VOL-, ART-, FORM-, SUP-, DIFF-, APPS-, TECH-