# Crewli Development Guide Cursor & Claude Code — Van Leeg Project naar Productie **Versie:** 1.0 | **Datum:** Maart 2026 | **Stack:** Laravel 12 + Vue 3 | **AI Tools:** Cursor + Claude Code ## 1. Strategie & Mindset Cursor vs Claude Code — wanneer gebruik je wat? Voordat je begint met ontwikkelen is het belangrijk te begrijpen hoe Cursor en Claude Code zich tot elkaar verhouden. Ze zijn complementair — niet concurrerend. | **Tool** | **Wanneer inzetten** | |----|----| | Cursor (IDE) | Dagelijks coderen. Inline autocomplete, context-aware suggesties, kleine refactors, code reviews, directe file-edits. Beste voor: een specifiek component bouwen, een bug fixen, een test schrijven. | | Claude Code (Terminal) | Grote, multi-file taken. Scaffolding van een volledig module (migrations + model + controller + tests + Vue-pagina). Autonome agent die zelfstandig werkt, tests uitvoert en fouten corrigeert. Beste voor: 'Bouw het volledige shift-module end-to-end.' | | Samen | Aanbevolen workflow: Claude Code genereert het skelet en alle bestanden. Cursor verfijnt, debugt en voegt details toe. Claude Code draait de test-suite. Cursor doet code review en stijlcorrecties. | > **KERNPRINCIPE** > > Claude Code is je senior developer die grote blokken werk autonoom uitvoert. > > Cursor is je pair programmer die naast je zit terwijl jij zelf ook werkt. > > Jij bent de architect en product owner: jij beslist, zij bouwen. ## 2. De Eerste Stappen Wat je vandaag doet voordat je één regel code schrijft ### 2.1 Repository structuur definitief maken Controleer en bevestig de folderstructuur Jouw huidige setup heeft al een goede basis. Bevestig of maak de volgende structuur: ``` crewli/ # Monorepo root ├── api/ # Laravel 12 backend │ ├── app/ │ │ ├── Http/ │ │ │ ├── Controllers/Api/V1/ │ │ │ ├── Middleware/ │ │ │ └── Requests/ # Form Requests per endpoint │ │ ├── Models/ │ │ ├── Policies/ # Laravel Policies per model │ │ ├── Services/ # Business logic buiten controllers │ │ ├── Events/ + Listeners/ │ │ └── Jobs/ # Queue jobs (briefings, PDF, notifs) │ ├── database/ │ │ ├── migrations/ │ │ ├── factories/ │ │ └── seeders/ │ └── tests/Feature/Api/V1/ # PHPUnit feature tests per controller ├── apps/ │ ├── admin/ # Super Admin SPA (Vuexy) │ ├── app/ # Organizer SPA (Vuexy) -- HOOFDAPP │ └── portal/ # Externe portals (vrijwilliger, artiest, leverancier) ├── docs/ # Design document, API docs, ERD │ ├── design-document.md │ └── dev-guide.md └── .cursorrules # Cursor workspace rules ``` ### 2.2 Dependencies installeren Backend en frontend klaarstomen **Backend (api/)** ```bash cd api # Spatie permissions (rollen/permissies) composer require spatie/laravel-permission # Audit log composer require spatie/laravel-activitylog # Media library (bestandsbeheer) composer require spatie/laravel-medialibrary # PDF generatie composer require barryvdh/laravel-dompdf # QR codes composer require endroid/qr-code # Publiceer Spatie configs php artisan vendor:publish --provider="Spatie\Permission\PermissionServiceProvider" php artisan vendor:publish --provider="Spatie\LaravelActivitylog\ActivitylogServiceProvider" ``` **Frontend — alle apps (apps/app/, apps/admin/, apps/portal/)** ```bash # TanStack Query voor API state management npm install @tanstack/vue-query # Formuliervalidatie npm install vee-validate zod @vee-validate/zod # Drag-and-drop (form builder, timetable, prioriteitsranking) npm install vuedraggable@next # In apps/app/ en apps/admin/ ook: npm install @fullcalendar/vue3 @fullcalendar/timeline @fullcalendar/resource-timeline ``` ### 2.3 CLAUDE.md aanmaken Het belangrijkste bestand in je hele repo CLAUDE.md is de instructieset voor Claude Code. Het wordt automatisch geladen bij elke sessie. Dit bestand is de meest impactvolle investering die je doet — een uur hieraan besteden bespaart honderden uren aan correcties. Maak aan: /crewli/CLAUDE.md (root niveau, zodat het voor alle sub-projecten geldt) ## 3. Helper Files — Volledige Inhoud De exacte bestanden die je aanmaakt voor de eerste prompt ### 3.1 CLAUDE.md — Root niveau Dit is de volledige, aanbevolen inhoud voor je CLAUDE.md. Kopieer dit letterlijk en pas aan waar nodig. ``` # Crewli — Claude Code Instructies ## Project Context Crewli is een multi-tenant SaaS platform voor event- en festivalbeheer. Gebouwd voor een professionele vrijwilligersorganisatie, met SaaS-uitbreidingspotentieel. Design Document: /resources/design/design-document.md ## Tech Stack - Backend: PHP 8.2+, Laravel 12, Sanctum, Spatie Permission, MySQL 8, Redis - Frontend: TypeScript, Vue 3 (Composition API), Vuexy/Vuetify, Pinia, TanStack Query - Testing: PHPUnit (backend), Vitest (frontend) ## Repository Structuur - api/ Laravel backend - apps/app/ Organizer SPA (hoofdapp) - apps/admin/ Super Admin SPA - apps/portal/ Externe portals (vrijwilliger, artiest, leverancier) ## Backend Regels (STRIKT VOLGEN) ### Multi-tenancy - ELKE query op event-data MOET scoperen op organisation_id - Gebruik OrganisationScope als Eloquent Global Scope op alle event-gerelateerde modellen - Nooit directe id-checks in controllers — gebruik altijd Policies ### Controllers - Gebruik Resource Controllers (index/show/store/update/destroy) - Namespace: App\Http\Controllers\Api\V1\ - Alle responses via API Resources (nooit model-attributen direct teruggeven) - Validatie via Form Requests (nooit inline validate()) ### Modellen - Gebruik HasUlids trait op alle business-modellen (GEEN UUID v4) - Soft deletes op: Organisation, Event, FestivalSection, Shift, ShiftAssignment, Person, Artist - GEEN soft deletes op: CheckIn, BriefingSend, MessageReply, ShiftWaitlist (audit-records) - JSON kolommen ALLEEN voor opaque configuratie — nooit voor queryable data ### Database - Primaire sleutels: ULID via HasUlids (niet UUID v4, niet auto-increment voor business tables) - Elke migratie in volgorde aanmaken: eerst foundation, dan afhankelijke tabellen - ALTIJD composite indexes toevoegen zoals gedocumenteerd in het design document sectie 3.5 ### Rollen & Permissies - Gebruik Spatie laravel-permission - Check rollen via $user->hasRole() en Policies — nooit hardcoded role strings in controllers - Drie niveaus: app (super_admin), organisatie (org_admin/org_member), event (event_manager etc.) ### Testing - Schrijf PHPUnit Feature Tests per controller - Minimaal per endpoint: happy path + unauthenticated (401) + wrong organisation (403) - Gebruik factories voor alle test-data - Draai tests NA elke module: php artisan test --filter=ModuleNaam ## Frontend Regels (STRIKT VOLGEN) ### Vue Componenten - Altijd