diff --git a/resources/design/Crewli_Design_Document_v1.3.docx b/resources/design/Crewli_Design_Document_v1.3.docx deleted file mode 100644 index fdee713..0000000 Binary files a/resources/design/Crewli_Design_Document_v1.3.docx and /dev/null differ diff --git a/resources/design/Crewli_Dev_Guide_v1.0.docx b/resources/design/Crewli_Dev_Guide_v1.0.docx deleted file mode 100644 index a44ec88..0000000 Binary files a/resources/design/Crewli_Dev_Guide_v1.0.docx and /dev/null differ diff --git a/resources/design/Crewli_Start_Guide_v1.0.docx b/resources/design/Crewli_Start_Guide_v1.0.docx deleted file mode 100644 index 2f29a3e..0000000 Binary files a/resources/design/Crewli_Start_Guide_v1.0.docx and /dev/null differ diff --git a/resources/design/design-document.md b/resources/design/design-document.md new file mode 100644 index 0000000..e1c819d --- /dev/null +++ b/resources/design/design-document.md @@ -0,0 +1,1149 @@ +**Crewli** + +Product Design & Technical Specification + +Full Stack SaaS — Event & Festival Management Platform + +**Version:** 1.3 | **Datum:** Maart 2026 | **Status:** Concept | **Tech Stack:** Laravel 12 + Vue 3 + +# 1. Product Vision & Scope + +Wat is Crewli en voor wie is het gebouwd? + +## 1.1 Samenvatting + +Crewli is een multi-tenant SaaS platform voor de professionele organisatie van evenementen en festivals. Het platform ondersteunt de volledige operationele cyclus: van artiestenbooking en advancing, via personeelsplanning en vrijwilligersbeheer, tot accreditatie, briefings, en real-time show-day operaties (Mission Control). + +Het platform wordt gebouwd als een API-first Laravel 12 backend met een Vue 3 + Vuexy frontend, en is ontworpen om meerdere organisaties (klanten) te bedienen vanuit één installatie, met volledige data-isolatie per organisatie. + +| | | +|:--:|----| +| **KERNPRINCIPE** | Crewli combineert de sterkste onderdelen van drie marktleiders: de accreditatie-engine en Mission Control van In2Event, het sectie-gebaseerde advance-portal en vrijwilligersbeheer van Crescat, en de mission/task-planning, SMS-communicatie en formulierbouwer van WeezCrew — aangevuld met differentiërende functies die geen van deze platformen biedt. | + +## 1.2 Doelgroepen + +| **Rol** | **Beschrijving** | **Primaire module(s)** | +|----|----|----| +| Super Admin | Platform-eigenaar (jij/Anthropic). Beheert organisaties, billing, globale instellingen. | Admin panel | +| Organisation Admin | Klant-hoofdbeheerder. Beheert evenementen, teamleden, globale instellingen per organisatie. | Org. management, events | +| Event Manager | Operationele verantwoordelijke per evenement. Beheert alle modules binnen dat event. | Alle event-modules | +| Staff Coordinator | Beheert bemanning, diensten, accreditatie voor specifieke secties. | Staff, Shifts, Accreditation | +| Artist Manager | Beheert artiesten, advancing, timetable. | Artists, Advancing, Timetable | +| Volunteer Coordinator | Beheert vrijwilligersregistraties, toewijzingen, communicatie. | Volunteers, Time Slots, Shifts | +| Crew Member (staff) | Externe medewerker. Ontvangt briefing, ziet eigen rooster, checkt in. | Briefing portal (read-only) | +| Volunteer | Zelfregistrerende vrijwilliger. Registreert, selecteert beschikbaarheid, claimt shifts. | Volunteer self-service portal | +| Artist / Tour Manager | Externe artiest-vertegenwoordiger. Vult eigen advance-portal in. | Artist advance portal | +| Supplier / Partner | Externe leverancier. Vult productieverzoek in, beheert eigen lijsten. | Supplier portal | + +## 1.3 Kernbegrippen & Terminologie + +De volgende termen worden door het hele document en de codebase consistent gehanteerd: + +| **Term** | **Definitie** | +|----|----| +| Organisation | Een klant/organisatie die Crewli gebruikt. Heeft eigen evenementen, teamleden en instellingen. Equivalent aan 'Launchpad' in In2Event. | +| Event | Een specifiek evenement of festival binnen een organisatie. Alle operationele data is event-scoped. | +| Festival Section | Een operationele eenheid binnen een event: Bar, Hospitality, Technical, Security, etc. Heeft eigen Crew, Volunteers en Shifts. | +| Crowd Type | Classificatie van deelnemers: Crew, Volunteer, Artist, Guest, Press, Partner, Supplier. Configureerbaar per organisatie. | +| Person | Individuele deelnemer gekoppeld aan een event via een Crowd Type. | +| Time Slot | Event-niveau tijdvenster met persoonscategorie (CREW / VOLUNTEER / PRESS). Aangemaakt door de organisator als temporeel raamwerk. | +| Shift | Sectie-specifieke toewijzing binnen een Time Slot. Koppelt een Festival Section aan een tijdvenster met capaciteit. | +| Slot (capacity) | Het aantal personen dat een Shift kan bevatten. Opgesplitst in Admin-assigned en Open for Claiming. | +| Open for Claiming | Aantal shift-slots dat zichtbaar en claimbaar is in het vrijwilligersportal. (Crescat: 'For Sale') | +| Accreditation | Een recht of artikel toegekend aan een persoon: toegangszones, items te ontvangen (polsbandje, maaltijd, portofoon). | +| Advance / Advancing | Het proces waarbij artiestenvereisten worden verzameld vóór het evenement via een sectie-gebaseerd portal. | +| Mission Control | Real-time operationele hub op show-dag: inchecken, accreditatie uitreiken, artiestenstatus. | +| Briefing | Gepersonaliseerde communicatie (e-mail + PDF) naar deelnemers met e-tickets, informatie en taakbeschrijving. | +| Infosheet / Advance Section | Configureerbaar formulier-sectie dat naar artiesten of leveranciers gestuurd wordt voor het ophalen van informatie. | + +# 2. Tech Stack & Infrastructuur + +Bestaande en te installeren technologieen + +## 2.1 Backend + +| **Component** | **Keuze / Versie** | +|----|----| +| Language | PHP 8.2+ | +| Framework | Laravel 12 (laravel/framework ^12.0) | +| Authentication | Laravel Sanctum ^4.0 (SPA token auth) | +| Database | MySQL 8.x (primair), Redis (cache, queues, sessions) | +| Queue Driver | Redis via Laravel Horizon (monitoring + priority queues) | +| Real-time | Laravel Echo + Pusher / Soketi (zelf-gehoste WebSocket server) | +| File Storage | Laravel Filesystem: S3 (productie) / local (dev). Signed URLs voor beveiligde toegang. | +| Email | Laravel Mailable + SendGrid of Postmark. Queue-based batch sending. | +| PDF / Ticket | Laravel Browsershot (Puppeteer) of DomPDF voor server-side PDF generatie. | +| Barcode | picqer/php-barcode-generator. Alphanumeriek + numeriek. QR-code via endroid/qr-code. | +| Testing | PHPUnit ^11.5 + Pest. Feature tests per API route. | +| Tooling | Laravel Pint (CS), Laravel Sail (Docker dev), Laravel Pail (log viewer), Tinker. | +| Roles & Perms | Spatie laravel-permission (te installeren). Drie niveaus: App, Organisation, Event. | +| Multi-tenancy | Custom: organisation_id scoping op alle queries. Geen package-tenancy. | +| SMS + WhatsApp | Zender (zelf-gehoste instantie) via HTTP API. Zender gebruikt Android-apparaten als SMS/WhatsApp gateway. Configureerbare API endpoint + API key in .env. Fallback: Twilio voor pure SMS zonder WhatsApp. | + +## 2.2 Frontend + +| **Component** | **Keuze / Versie** | +|----|----| +| Language | TypeScript 5.9.3 | +| Framework | Vue 3.5.22 (Composition API + \