docs: design-document v1.8, dev-docs restructure, VitePress user docs scaffold, backlog update
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
26
docs/.templates/concept-page.md
Normal file
26
docs/.templates/concept-page.md
Normal file
@@ -0,0 +1,26 @@
|
||||
---
|
||||
title: [Concept naam]
|
||||
description: [Eén zin uitleg van het concept]
|
||||
tags: []
|
||||
---
|
||||
|
||||
# {{ $frontmatter.title }}
|
||||
|
||||
{{ $frontmatter.description }}
|
||||
|
||||
## In het kort
|
||||
|
||||
[2-3 zinnen die het concept uitleggen alsof je het aan iemand zonder technische kennis vertelt.]
|
||||
|
||||
## Hoe past dit in Crewli?
|
||||
|
||||
[Beschrijf de context: waar kom je dit concept tegen, en waarom is het belangrijk?]
|
||||
|
||||
## Voorbeeld
|
||||
|
||||
[Concreet voorbeeld uit de praktijk van festivalbeheer.]
|
||||
|
||||
## Gerelateerde concepten
|
||||
|
||||
- [Concept A](/guide/concepts#...)
|
||||
- [Concept B](/guide/concepts#...)
|
||||
41
docs/.templates/feature-page.md
Normal file
41
docs/.templates/feature-page.md
Normal file
@@ -0,0 +1,41 @@
|
||||
---
|
||||
title: [Feature naam]
|
||||
description: [Eén zin die beschrijft wat de feature doet]
|
||||
tags: []
|
||||
---
|
||||
|
||||
# {{ $frontmatter.title }}
|
||||
|
||||
{{ $frontmatter.description }}
|
||||
|
||||
## Wat is dit?
|
||||
|
||||
[Korte uitleg in 2-3 zinnen: wat doet deze feature en waarom is het nuttig?]
|
||||
|
||||
## Hoe werkt het?
|
||||
|
||||
### Stap 1 — [Actie]
|
||||
|
||||
[Beschrijving met eventueel een screenshot placeholder: ``]
|
||||
|
||||
### Stap 2 — [Actie]
|
||||
|
||||
[Beschrijving]
|
||||
|
||||
## Rollen en toegang
|
||||
|
||||
| Rol | Toegang |
|
||||
|-----|---------|
|
||||
| Organisatie Admin | Volledige toegang |
|
||||
| Event Manager | [Specificeer] |
|
||||
| Vrijwilliger | [Specificeer] |
|
||||
|
||||
## Veelgestelde vragen
|
||||
|
||||
### [Vraag 1]?
|
||||
|
||||
[Antwoord]
|
||||
|
||||
## Gerelateerde pagina's
|
||||
|
||||
- [Gerelateerde feature](/organizer/...)
|
||||
65
docs/.templates/style-guide.md
Normal file
65
docs/.templates/style-guide.md
Normal file
@@ -0,0 +1,65 @@
|
||||
# Crewli Documentatie Stijlgids
|
||||
|
||||
## Doelgroep
|
||||
|
||||
Crewli-documentatie is geschreven voor mensen die evenementen en festivals organiseren.
|
||||
Zij zijn praktisch ingesteld, hebben weinig tijd, en willen snel weten hoe iets werkt.
|
||||
Ga NIET uit van technische kennis.
|
||||
|
||||
## Toon en stijl
|
||||
|
||||
- Schrijf in het **Nederlands** (informeel "je/jij", niet "u")
|
||||
- Wees **direct en bondig** — geen inleidingen van drie alinea's
|
||||
- Gebruik **actieve zinnen**: "Klik op Opslaan" in plaats van "Er kan op Opslaan geklikt worden"
|
||||
- Vermijd jargon — als een term nodig is, leg hem uit of link naar de woordenlijst
|
||||
|
||||
## Vaste terminologie
|
||||
|
||||
Gebruik ALTIJD deze termen — geen synoniemen:
|
||||
|
||||
| Term in Crewli | NIET gebruiken |
|
||||
|----------------|----------------|
|
||||
| Evenement | Event (in user-facing docs) |
|
||||
| Sectie | Afdeling, area, zone (tenzij Access Zone) |
|
||||
| Dienst | Shift (in user-facing docs) |
|
||||
| Tijdslot | Tijdblok, slot |
|
||||
| Vrijwilliger | Volunteer (in user-facing docs) |
|
||||
| Persoon | Deelnemer, gast (tenzij specifieke crowd type) |
|
||||
| Crowd type | Bezoekerstype, categorie |
|
||||
| Crowd lijst | Gastenlijst (alleen als het crowd type 'guest' is) |
|
||||
| Accreditatie | Badge, pas |
|
||||
| Access zone | Toegangszone |
|
||||
| Advancing | Rider, tech spec |
|
||||
| Briefing | Instructie, info |
|
||||
| Festival serie | Festival reeks, parent event |
|
||||
|
||||
## Paginastructuur
|
||||
|
||||
1. **Titel** — wat het IS (niet wat het doet)
|
||||
2. **Eerste alinea** — wat en waarom, max 3 zinnen
|
||||
3. **Hoe werkt het** — stappen met screenshots
|
||||
4. **Rollen en toegang** — wie mag wat
|
||||
5. **FAQ** — alleen als er echte vragen zijn, geen opvulling
|
||||
6. **Gerelateerde pagina's** — links naar verwante features
|
||||
|
||||
## Screenshots
|
||||
|
||||
- Gebruik placeholders tijdens ontwikkeling: ``
|
||||
- Naamgeving: `feature-naam-stap-nummer.png` (bijv. `event-aanmaken-stap-2.png`)
|
||||
- Bewaar in een `images/` map binnen de betreffende sectie
|
||||
- Geen persoonlijke data zichtbaar in screenshots
|
||||
|
||||
## Frontmatter
|
||||
|
||||
Elke pagina MOET deze frontmatter hebben:
|
||||
|
||||
```yaml
|
||||
---
|
||||
title: Paginatitel
|
||||
description: Eén zin beschrijving
|
||||
tags: [relevante, tags, voor, zoeken]
|
||||
---
|
||||
```
|
||||
|
||||
Tags gebruiken de Crewli-terminologie (zie tabel hierboven).
|
||||
Gebruik minimaal 2 tags, maximaal 6.
|
||||
162
docs/.vitepress/config.ts
Normal file
162
docs/.vitepress/config.ts
Normal file
@@ -0,0 +1,162 @@
|
||||
import { defineConfig } from "vitepress";
|
||||
|
||||
export default defineConfig({
|
||||
title: "Crewli Docs",
|
||||
description: "Documentatie voor het Crewli event management platform",
|
||||
lang: "nl-NL",
|
||||
|
||||
head: [["link", { rel: "icon", href: "/favicon.ico" }]],
|
||||
|
||||
themeConfig: {
|
||||
logo: "/logo.svg",
|
||||
|
||||
nav: [
|
||||
{ text: "Handleiding", link: "/guide/getting-started" },
|
||||
{ text: "Organisator", link: "/organizer/" },
|
||||
{ text: "Vrijwilliger", link: "/volunteer/" },
|
||||
{ text: "Portal", link: "/portal/" },
|
||||
],
|
||||
|
||||
sidebar: {
|
||||
"/guide/": [
|
||||
{
|
||||
text: "Aan de slag",
|
||||
items: [
|
||||
{ text: "Introductie", link: "/guide/getting-started" },
|
||||
{ text: "Kernconcepten", link: "/guide/concepts" },
|
||||
{ text: "Woordenlijst", link: "/guide/glossary" },
|
||||
],
|
||||
},
|
||||
],
|
||||
"/organizer/": [
|
||||
{
|
||||
text: "Organisatie",
|
||||
items: [
|
||||
{ text: "Overzicht", link: "/organizer/" },
|
||||
{
|
||||
text: "Organisatie inrichten",
|
||||
link: "/organizer/organisation-setup",
|
||||
},
|
||||
{ text: "Teamleden beheren", link: "/organizer/team-members" },
|
||||
],
|
||||
},
|
||||
{
|
||||
text: "Evenementen",
|
||||
items: [
|
||||
{ text: "Event aanmaken", link: "/organizer/events/create-event" },
|
||||
{
|
||||
text: "Festival series",
|
||||
link: "/organizer/events/festival-series",
|
||||
},
|
||||
{
|
||||
text: "Event statussen",
|
||||
link: "/organizer/events/event-statuses",
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
text: "Secties & Diensten",
|
||||
items: [
|
||||
{ text: "Secties beheren", link: "/organizer/shifts/sections" },
|
||||
{ text: "Tijdslots", link: "/organizer/shifts/time-slots" },
|
||||
{ text: "Diensten plannen", link: "/organizer/shifts/planning" },
|
||||
{ text: "Toewijzingen", link: "/organizer/shifts/assignments" },
|
||||
],
|
||||
},
|
||||
{
|
||||
text: "Personen & Crowd",
|
||||
items: [
|
||||
{ text: "Personen beheren", link: "/organizer/persons/manage" },
|
||||
{ text: "Crowd types", link: "/organizer/persons/crowd-types" },
|
||||
{ text: "Crowd lijsten", link: "/organizer/persons/crowd-lists" },
|
||||
{ text: "Tags", link: "/organizer/persons/tags" },
|
||||
],
|
||||
},
|
||||
{
|
||||
text: "Accreditatie",
|
||||
items: [
|
||||
{
|
||||
text: "Accreditatie overzicht",
|
||||
link: "/organizer/accreditation/overview",
|
||||
},
|
||||
{
|
||||
text: "Access zones",
|
||||
link: "/organizer/accreditation/access-zones",
|
||||
},
|
||||
{ text: "Templates", link: "/organizer/accreditation/templates" },
|
||||
],
|
||||
},
|
||||
{
|
||||
text: "Artiesten",
|
||||
items: [
|
||||
{ text: "Artiesten beheren", link: "/organizer/artists/manage" },
|
||||
{
|
||||
text: "Advancing workflow",
|
||||
link: "/organizer/artists/advancing",
|
||||
},
|
||||
{ text: "Programma", link: "/organizer/artists/programme" },
|
||||
],
|
||||
},
|
||||
{
|
||||
text: "Communicatie",
|
||||
items: [
|
||||
{ text: "Briefings", link: "/organizer/communication/briefings" },
|
||||
{ text: "Berichten", link: "/organizer/communication/messages" },
|
||||
],
|
||||
},
|
||||
],
|
||||
"/volunteer/": [
|
||||
{
|
||||
text: "Vrijwilliger",
|
||||
items: [
|
||||
{ text: "Overzicht", link: "/volunteer/" },
|
||||
{ text: "Registreren", link: "/volunteer/registration" },
|
||||
{ text: "Diensten kiezen", link: "/volunteer/shift-signup" },
|
||||
{ text: "Mijn paspoort", link: "/volunteer/passport" },
|
||||
{ text: "Check-in", link: "/volunteer/check-in" },
|
||||
],
|
||||
},
|
||||
],
|
||||
"/portal/": [
|
||||
{
|
||||
text: "Artiestenportaal",
|
||||
items: [
|
||||
{ text: "Overzicht", link: "/portal/" },
|
||||
{ text: "Advancing invullen", link: "/portal/artist-advancing" },
|
||||
],
|
||||
},
|
||||
{
|
||||
text: "Leveranciersportaal",
|
||||
items: [{ text: "Toegang", link: "/portal/supplier-access" }],
|
||||
},
|
||||
{
|
||||
text: "Persportaal",
|
||||
items: [
|
||||
{
|
||||
text: "Accreditatie aanvragen",
|
||||
link: "/portal/press-accreditation",
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
|
||||
search: {
|
||||
provider: "local",
|
||||
},
|
||||
|
||||
socialLinks: [
|
||||
// { icon: 'github', link: 'https://github.com/...' },
|
||||
],
|
||||
|
||||
footer: {
|
||||
message: "Crewli — Event Management Platform",
|
||||
},
|
||||
|
||||
editLink: {
|
||||
pattern:
|
||||
"https://gitea.hausmans.cloud/bert.hausmans/crewli/_edit/main/docs/:path",
|
||||
text: "Bewerk deze pagina",
|
||||
},
|
||||
},
|
||||
});
|
||||
92
docs/API.md
92
docs/API.md
@@ -1,92 +0,0 @@
|
||||
# Crewli API Contract
|
||||
|
||||
Base path: `/api/v1/`
|
||||
|
||||
Auth: Bearer token (Sanctum)
|
||||
|
||||
## Auth
|
||||
|
||||
- `POST /auth/login`
|
||||
- `POST /auth/logout`
|
||||
- `GET /auth/me`
|
||||
|
||||
## Organisations
|
||||
|
||||
- `GET /organisations` — list (super admin)
|
||||
- `POST /organisations` — create
|
||||
- `GET /organisations/{org}` — show
|
||||
- `PUT /organisations/{org}` — update
|
||||
- `GET /organisations/{org}/members` — members
|
||||
- `POST /organisations/{org}/invite` — invite user
|
||||
|
||||
## Events
|
||||
|
||||
- `GET /organisations/{org}/events`
|
||||
- `POST /organisations/{org}/events`
|
||||
- `GET /organisations/{org}/events/{event}`
|
||||
- `PUT /organisations/{org}/events/{event}`
|
||||
|
||||
## Crowd Types
|
||||
|
||||
- `GET /organisations/{org}/crowd-types`
|
||||
- `POST /organisations/{org}/crowd-types`
|
||||
- `PUT /organisations/{org}/crowd-types/{type}`
|
||||
- `DELETE /organisations/{org}/crowd-types/{type}`
|
||||
|
||||
## Companies
|
||||
|
||||
- `GET /organisations/{org}/companies`
|
||||
- `POST /organisations/{org}/companies`
|
||||
- `PUT /organisations/{org}/companies/{company}`
|
||||
- `DELETE /organisations/{org}/companies/{company}`
|
||||
|
||||
## Festival Sections
|
||||
|
||||
- `GET /events/{event}/sections`
|
||||
- `POST /events/{event}/sections`
|
||||
- `PUT /events/{event}/sections/{section}`
|
||||
- `DELETE /events/{event}/sections/{section}`
|
||||
- `POST /events/{event}/sections/reorder`
|
||||
|
||||
## Time Slots
|
||||
|
||||
- `GET /events/{event}/time-slots`
|
||||
- `POST /events/{event}/time-slots`
|
||||
- `PUT /events/{event}/time-slots/{timeSlot}`
|
||||
- `DELETE /events/{event}/time-slots/{timeSlot}`
|
||||
|
||||
## Shifts
|
||||
|
||||
- `GET /events/{event}/sections/{section}/shifts`
|
||||
- `POST /events/{event}/sections/{section}/shifts`
|
||||
- `PUT /events/{event}/sections/{section}/shifts/{shift}`
|
||||
- `DELETE /events/{event}/sections/{section}/shifts/{shift}`
|
||||
- `POST /events/{event}/sections/{section}/shifts/{shift}/assign`
|
||||
- `POST /events/{event}/sections/{section}/shifts/{shift}/claim`
|
||||
|
||||
## Persons
|
||||
|
||||
- `GET /events/{event}/persons`
|
||||
- `POST /events/{event}/persons`
|
||||
- `GET /events/{event}/persons/{person}`
|
||||
- `PUT /events/{event}/persons/{person}`
|
||||
- `POST /events/{event}/persons/{person}/approve`
|
||||
- `DELETE /events/{event}/persons/{person}`
|
||||
|
||||
## Crowd Lists
|
||||
|
||||
- `GET /events/{event}/crowd-lists`
|
||||
- `POST /events/{event}/crowd-lists`
|
||||
- `PUT /events/{event}/crowd-lists/{list}`
|
||||
- `DELETE /events/{event}/crowd-lists/{list}`
|
||||
- `POST /events/{event}/crowd-lists/{list}/persons`
|
||||
- `DELETE /events/{event}/crowd-lists/{list}/persons/{person}`
|
||||
|
||||
## Locations
|
||||
|
||||
- `GET /events/{event}/locations`
|
||||
- `POST /events/{event}/locations`
|
||||
- `PUT /events/{event}/locations/{location}`
|
||||
- `DELETE /events/{event}/locations/{location}`
|
||||
|
||||
_(Extend this contract per module as endpoints are implemented.)_
|
||||
384
docs/BACKLOG.md
384
docs/BACKLOG.md
@@ -1,384 +0,0 @@
|
||||
# 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-_
|
||||
1381
docs/SCHEMA.md
1381
docs/SCHEMA.md
File diff suppressed because it is too large
Load Diff
286
docs/SETUP.md
286
docs/SETUP.md
@@ -1,286 +0,0 @@
|
||||
# Crewli - Setup Guide
|
||||
|
||||
This guide walks you through setting up the Crewli project from scratch.
|
||||
|
||||
## Cursor AI Configuration
|
||||
|
||||
The project includes comprehensive AI instructions:
|
||||
|
||||
```
|
||||
.cursor/
|
||||
├── instructions.md # Quick start and common prompts
|
||||
├── ARCHITECTURE.md # System design and database schema
|
||||
└── rules/
|
||||
├── 001_workspace.mdc # Project structure and conventions
|
||||
├── 100_laravel.mdc # Laravel API patterns
|
||||
├── 101_vue.mdc # Vue + Vuexy patterns
|
||||
└── 200_testing.mdc # Testing strategies
|
||||
```
|
||||
|
||||
**Read these files first!** They contain everything Cursor needs to generate code correctly.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
Install these before starting:
|
||||
|
||||
### macOS (Homebrew)
|
||||
|
||||
```bash
|
||||
# PHP 8.3
|
||||
brew install php@8.3
|
||||
brew link php@8.3
|
||||
|
||||
# Composer
|
||||
brew install composer
|
||||
|
||||
# Node.js (via fnm)
|
||||
brew install fnm
|
||||
fnm install 20
|
||||
fnm use 20
|
||||
|
||||
# pnpm
|
||||
npm install -g pnpm
|
||||
|
||||
# Docker Desktop
|
||||
# Download from: https://www.docker.com/products/docker-desktop/
|
||||
```
|
||||
|
||||
### Verify Installation
|
||||
|
||||
```bash
|
||||
php -v # Should show 8.3.x
|
||||
composer -V # Should show 2.x
|
||||
node -v # Should show v20.x
|
||||
pnpm -v # Should show 8.x or 9.x
|
||||
docker -v # Should show Docker version
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Step 1: Start Docker Services
|
||||
|
||||
```bash
|
||||
cd crewli
|
||||
make services
|
||||
```
|
||||
|
||||
This starts:
|
||||
- **MySQL 8.0** on port 3306
|
||||
- **Redis** on port 6379
|
||||
- **Mailpit** on port 8025 (email testing UI)
|
||||
|
||||
---
|
||||
|
||||
## Step 2: Create Laravel API
|
||||
|
||||
Open the project in Cursor and use this prompt:
|
||||
|
||||
```
|
||||
Create a new Laravel 12 project in the api/ folder.
|
||||
|
||||
Requirements:
|
||||
- Use the command: composer create-project laravel/laravel api
|
||||
- After creation, install Sanctum: composer require laravel/sanctum
|
||||
- Configure for API-only (we don't need web routes)
|
||||
- Set up CORS for localhost:5173, localhost:5174, localhost:5175
|
||||
- Use MySQL with these credentials:
|
||||
- Host: 127.0.0.1
|
||||
- Database: crewli
|
||||
- Username: crewli
|
||||
- Password: secret
|
||||
|
||||
Follow the conventions in .cursor/rules for code style.
|
||||
```
|
||||
|
||||
### Manual Alternative
|
||||
|
||||
```bash
|
||||
cd crewli
|
||||
composer create-project laravel/laravel api
|
||||
cd api
|
||||
composer require laravel/sanctum
|
||||
php artisan install:api
|
||||
```
|
||||
|
||||
Then configure `api/.env`:
|
||||
```env
|
||||
DB_CONNECTION=mysql
|
||||
DB_HOST=127.0.0.1
|
||||
DB_PORT=3306
|
||||
DB_DATABASE=crewli
|
||||
DB_USERNAME=crewli
|
||||
DB_PASSWORD=secret
|
||||
|
||||
FRONTEND_ADMIN_URL=http://localhost:5173
|
||||
FRONTEND_APP_URL=http://localhost:5174
|
||||
FRONTEND_PORTAL_URL=http://localhost:5175
|
||||
SANCTUM_STATEFUL_DOMAINS=localhost:5173,localhost:5174,localhost:5175
|
||||
SESSION_DOMAIN=localhost
|
||||
```
|
||||
|
||||
**Production (domain `crewli.app`):** set `APP_URL=https://api.crewli.app`, point `FRONTEND_ADMIN_URL` / `FRONTEND_APP_URL` / `FRONTEND_PORTAL_URL` to `https://admin.crewli.app`, `https://app.crewli.app`, and `https://portal.crewli.app`, and `SANCTUM_STATEFUL_DOMAINS=admin.crewli.app,app.crewli.app,portal.crewli.app` (hostnames only). Each SPA build should use `VITE_API_URL=https://api.crewli.app/api/v1`. Full template: `api/.env.example`. The product uses **`crewli.app`** only; **`crewli.nl`** is for a future public marketing site, not this API or SPAs.
|
||||
|
||||
---
|
||||
|
||||
## Step 3: Vuexy frontends (this repo)
|
||||
|
||||
This monorepo already contains three SPAs under `apps/`:
|
||||
|
||||
| Directory | Role | Typical Vuexy source |
|
||||
|-----------|------|----------------------|
|
||||
| `apps/admin/` | Super Admin | full-version (TypeScript) |
|
||||
| `apps/app/` | Organizer (main product) | full-version or customized starter |
|
||||
| `apps/portal/` | External portal (volunteers, token links) | stripped starter / custom layout |
|
||||
|
||||
If you ever need to re-copy from a Vuexy ZIP, use the paths above — not legacy `apps/band` or `apps/customers`.
|
||||
|
||||
```bash
|
||||
# Example only — adjust to your Vuexy download path
|
||||
cp -r ~/Downloads/vuexy/typescript-version/full-version/* apps/admin/
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Step 4: Configure SPAs
|
||||
|
||||
### Install Dependencies
|
||||
|
||||
```bash
|
||||
cd apps/admin && pnpm install
|
||||
cd ../app && pnpm install
|
||||
cd ../portal && pnpm install
|
||||
```
|
||||
|
||||
### Create Environment Files
|
||||
|
||||
**apps/admin/.env.local**
|
||||
```env
|
||||
VITE_API_URL=http://localhost:8000/api/v1
|
||||
VITE_APP_NAME="Crewli Admin"
|
||||
```
|
||||
|
||||
**apps/app/.env.local**
|
||||
```env
|
||||
VITE_API_URL=http://localhost:8000/api/v1
|
||||
VITE_APP_NAME="Crewli Organizer"
|
||||
```
|
||||
|
||||
**apps/portal/.env.local**
|
||||
```env
|
||||
VITE_API_URL=http://localhost:8000/api/v1
|
||||
VITE_APP_NAME="Crewli Portal"
|
||||
```
|
||||
|
||||
### Dev server ports
|
||||
|
||||
From the repo root, `make admin`, `make app`, and `make portal` start Vite on **5173**, **5174**, and **5175** respectively. If you run `pnpm dev` manually, configure the same ports in each app’s `vite.config.ts` under `server.port`.
|
||||
|
||||
---
|
||||
|
||||
## Step 5: API client in SPAs
|
||||
|
||||
`apps/admin/src/lib/api-client.ts`, `apps/app/src/lib/api-client.ts`, and `apps/portal/src/lib/api-client.ts` share the same pattern: `VITE_API_URL` base, Bearer token from the `accessToken` cookie, 401 → clear cookies and redirect to `/login`. Build new composables on `apiClient`; keep Vuexy `useApi` for template demos only.
|
||||
|
||||
---
|
||||
|
||||
## Step 6: Create database schema
|
||||
|
||||
Implement migrations from the canonical schema, not a legacy intranet model:
|
||||
|
||||
- **`docs/SCHEMA.md`** — table list, columns, indexes
|
||||
- **`.cursor/ARCHITECTURE.md`** — overview and relationships
|
||||
- **`.cursor/rules/103_database.mdc`** — ULIDs, soft deletes, index rules
|
||||
|
||||
**Checked-in foundation (this repo):** Laravel defaults (`users`, `cache`, `jobs`) then `2026_04_07_*` migrations: Sanctum tokens → Spatie permission → activity log → `organisations` → `organisation_user` → `events` → `user_invitations` → `event_user_roles`. New modules should append migrations with a later timestamp in dependency order.
|
||||
|
||||
Typical next expansion order from `103_database.mdc`: festival sections, time slots, persons, shifts, …
|
||||
|
||||
Then run:
|
||||
|
||||
```bash
|
||||
cd api && php artisan migrate
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Step 7: Start development
|
||||
|
||||
Open separate terminals (or use the Makefile from the repo root):
|
||||
|
||||
```bash
|
||||
# Tab 1: Services (Docker)
|
||||
make services
|
||||
|
||||
# Tab 2: Laravel API
|
||||
make api
|
||||
|
||||
# Tab 3: Admin SPA (optional)
|
||||
make admin
|
||||
|
||||
# Tab 4: Organizer SPA (optional)
|
||||
make app
|
||||
|
||||
# Tab 5: Portal SPA (optional)
|
||||
make portal
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Building features
|
||||
|
||||
Use Cursor with **`CLAUDE.md`** and **`.cursor/instructions.md`**. Example directions:
|
||||
|
||||
### Authentication
|
||||
|
||||
```
|
||||
Wire Sanctum API auth: login, logout, me; form requests; API resources; Vue apps use axios + token storage (see .cursor/rules).
|
||||
```
|
||||
|
||||
### Events module (Crewli)
|
||||
|
||||
```
|
||||
Events nested under organisations: ULID PK, OrganisationScope, policies, EventResource, feature tests (200/401/403/422).
|
||||
```
|
||||
|
||||
### Portal token flow
|
||||
|
||||
```
|
||||
Portal token middleware and routes for artist/supplier contexts; document links on https://portal.crewli.app/... (see .cursor/rules/102_multi_tenancy.mdc).
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### MySQL Connection Refused
|
||||
```bash
|
||||
# Check if Docker is running
|
||||
docker ps
|
||||
|
||||
# Restart services
|
||||
make services-stop
|
||||
make services
|
||||
```
|
||||
|
||||
### CORS Errors
|
||||
Check `api/config/cors.php` allows your frontend origins.
|
||||
|
||||
### Vuexy TypeScript Errors
|
||||
```bash
|
||||
cd apps/admin
|
||||
pnpm install
|
||||
pnpm type-check
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Next steps
|
||||
|
||||
1. Services running (Docker)
|
||||
2. Laravel API configured and migrated
|
||||
3. SPAs installed (`apps/admin`, `apps/app`, `apps/portal`)
|
||||
4. Environment files for API + each SPA
|
||||
5. Authentication and organisation switching
|
||||
6. Events, sections, time slots, shifts
|
||||
7. Persons, crowd types, portal flows
|
||||
8. Accreditation, briefings, operational modules per roadmap in `.cursor/instructions.md`
|
||||
@@ -1,122 +0,0 @@
|
||||
# Crewli — End-to-End Testscenario Fase 2
|
||||
|
||||
## Scenario: "Test Festival BV organiseert Echt Feesten 2026"
|
||||
|
||||
Dit scenario valideert de complete operationele kern van Crewli.
|
||||
Voer dit uit na elke Fase 2 module om regressie te voorkomen.
|
||||
|
||||
---
|
||||
|
||||
## Stap 1 — Voorbereiding (al werkend na Fase 1)
|
||||
|
||||
- [ ] Login als orgadmin@crewli.test / password
|
||||
- [ ] Organisatie "Test Festival BV" is automatisch actief
|
||||
- [ ] Navigeer naar Evenementen
|
||||
- [ ] Maak aan: "Echt Feesten 2026" | slug: echt-feesten-2026
|
||||
start: 10-07-2026 | eind: 12-07-2026 | timezone: Europe/Amsterdam
|
||||
- [ ] Evenement verschijnt in lijst met status "draft"
|
||||
- [ ] Klik door naar detail pagina — header toont naam, datum, status
|
||||
|
||||
---
|
||||
|
||||
## Stap 2 — Festival Secties (Fase 2 Module 1)
|
||||
|
||||
- [ ] Navigeer naar evenement detail > tab "Secties"
|
||||
- [ ] Maak sectie aan: "Bar" (sort_order: 1)
|
||||
- [ ] Maak sectie aan: "Security" (sort_order: 2)
|
||||
- [ ] Maak sectie aan: "Hospitality" (sort_order: 3)
|
||||
- [ ] Drie secties zichtbaar in lijst, correct gesorteerd
|
||||
|
||||
---
|
||||
|
||||
## Stap 3 — Time Slots (Fase 2 Module 1)
|
||||
|
||||
- [ ] Navigeer naar evenement detail > tab "Time Slots"
|
||||
- [ ] Maak time slot aan:
|
||||
Naam: "Vrijdag Avond" | type: VOLUNTEER
|
||||
datum: 10-07-2026 | start: 18:00 | eind: 02:00
|
||||
- [ ] Maak time slot aan:
|
||||
Naam: "Zaterdag Dag" | type: VOLUNTEER
|
||||
datum: 11-07-2026 | start: 10:00 | eind: 18:00
|
||||
- [ ] Maak time slot aan:
|
||||
Naam: "Zaterdag Avond" | type: VOLUNTEER
|
||||
datum: 11-07-2026 | start: 18:00 | eind: 02:00
|
||||
- [ ] Maak time slot aan:
|
||||
Naam: "Zondag" | type: CREW
|
||||
datum: 12-07-2026 | start: 10:00 | eind: 20:00
|
||||
- [ ] Vier time slots zichtbaar, correct gesorteerd op datum/tijd
|
||||
|
||||
---
|
||||
|
||||
## Stap 4 — Shifts aanmaken (Fase 2 Module 2)
|
||||
|
||||
- [ ] Navigeer naar sectie "Bar"
|
||||
- [ ] Maak shift aan: Time Slot "Vrijdag Avond" | slots_total: 4
|
||||
slots_open_for_claiming: 3
|
||||
- [ ] Maak shift aan: Time Slot "Zaterdag Dag" | slots_total: 5
|
||||
slots_open_for_claiming: 4
|
||||
- [ ] Maak shift aan: Time Slot "Zaterdag Avond" | slots_total: 4
|
||||
slots_open_for_claiming: 3
|
||||
- [ ] Navigeer naar sectie "Security"
|
||||
- [ ] Maak shift aan: Time Slot "Vrijdag Avond" | slots_total: 3
|
||||
slots_open_for_claiming: 2
|
||||
- [ ] Maak shift aan: Time Slot "Zaterdag Avond" | slots_total: 3
|
||||
slots_open_for_claiming: 2
|
||||
- [ ] Shifts tonen fill_rate: 0/4, 0/5, etc.
|
||||
|
||||
---
|
||||
|
||||
## Stap 5 — Personen aanmaken (Fase 2 Module 3)
|
||||
|
||||
- [ ] Navigeer naar Personen (event-scoped)
|
||||
- [ ] Maak 5 personen aan als crowd_type "Volunteer": 1. Jan de Vries | jan@test.nl 2. Lisa Bakker | lisa@test.nl 3. Ahmed Hassan | ahmed@test.nl 4. Sara Jansen | sara@test.nl 5. Tom Visser | tom@test.nl
|
||||
- [ ] Vijf personen zichtbaar in lijst, status "pending"
|
||||
|
||||
---
|
||||
|
||||
## Stap 6 — Shift toewijzing (Fase 2 Module 2)
|
||||
|
||||
- [ ] Wijs Jan de Vries toe aan: Bar > Vrijdag Avond
|
||||
- [ ] Wijs Jan de Vries toe aan: Bar > Zaterdag Dag
|
||||
- [ ] Wijs Lisa Bakker toe aan: Bar > Vrijdag Avond
|
||||
- [ ] Wijs Ahmed Hassan toe aan: Security > Vrijdag Avond
|
||||
- [ ] Fill rate Bar > Vrijdag Avond: 2/4 ✓
|
||||
|
||||
---
|
||||
|
||||
## Stap 7 — Conflictdetectie (Fase 2 Module 2)
|
||||
|
||||
- [ ] Probeer Jan de Vries toe te wijzen aan:
|
||||
Security > Vrijdag Avond (zelfde time slot!)
|
||||
- [ ] Systeem weigert met foutmelding:
|
||||
"Jan de Vries is al ingepland voor Vrijdag Avond"
|
||||
- [ ] Conflictdetectie werkt op DB-niveau (UNIQUE constraint)
|
||||
|
||||
---
|
||||
|
||||
## Stap 8 — Overzicht validatie
|
||||
|
||||
- [ ] Event dashboard tiles tonen correcte aantallen:
|
||||
Secties: 3 | Shifts: 5 | Personen: 5
|
||||
- [ ] Sectie "Bar" toont 3 shifts, totaal 13 slots
|
||||
- [ ] Persoon "Jan de Vries" toont 2 shift-toewijzingen
|
||||
- [ ] Geen console errors in browser DevTools
|
||||
|
||||
---
|
||||
|
||||
## Regressie — controleer na elke nieuwe module
|
||||
|
||||
- [ ] Login werkt nog (admin@crewli.test en orgadmin@crewli.test)
|
||||
- [ ] Organisatie switcher werkt nog
|
||||
- [ ] Events lijst laadt zonder errors
|
||||
- [ ] php artisan test → alle tests groen
|
||||
|
||||
## Openstaande FK constraints (worden toegevoegd bij persons module)
|
||||
|
||||
- shift_assignments.person_id → persons
|
||||
- shift_check_ins.person_id → persons
|
||||
- volunteer_availabilities.person_id → persons
|
||||
person_id kolommen zonder FK constraint in:
|
||||
- shift_assignments
|
||||
- shift_check_ins
|
||||
- volunteer_availabilities
|
||||
11
docs/guide/concepts.md
Normal file
11
docs/guide/concepts.md
Normal file
@@ -0,0 +1,11 @@
|
||||
---
|
||||
title: Kernconcepten
|
||||
description: De belangrijkste begrippen en concepten binnen Crewli uitgelegd.
|
||||
tags: ['concepten', 'uitleg', 'basis']
|
||||
---
|
||||
|
||||
# {{ $frontmatter.title }}
|
||||
|
||||
{{ $frontmatter.description }}
|
||||
|
||||
Deze pagina legt de kernconcepten van Crewli uit: organisaties, evenementen, secties, diensten, personen en meer. Begin hier als je voor het eerst met Crewli werkt.
|
||||
11
docs/guide/getting-started.md
Normal file
11
docs/guide/getting-started.md
Normal file
@@ -0,0 +1,11 @@
|
||||
---
|
||||
title: Aan de slag met Crewli
|
||||
description: Leer de basis van Crewli en begin met het beheren van je evenementen.
|
||||
tags: ['introductie', 'aan de slag', 'basis']
|
||||
---
|
||||
|
||||
# {{ $frontmatter.title }}
|
||||
|
||||
{{ $frontmatter.description }}
|
||||
|
||||
Deze pagina helpt je op weg met je eerste stappen in Crewli: een organisatie aanmaken, je team uitnodigen, en je eerste evenement opzetten.
|
||||
11
docs/guide/glossary.md
Normal file
11
docs/guide/glossary.md
Normal file
@@ -0,0 +1,11 @@
|
||||
---
|
||||
title: Woordenlijst
|
||||
description: Alle Crewli-termen op een rij met uitleg.
|
||||
tags: ['woordenlijst', 'terminologie', 'begrippen']
|
||||
---
|
||||
|
||||
# {{ $frontmatter.title }}
|
||||
|
||||
{{ $frontmatter.description }}
|
||||
|
||||
Een alfabetisch overzicht van alle termen die je in Crewli tegenkomt, met een korte uitleg per begrip.
|
||||
31
docs/index.md
Normal file
31
docs/index.md
Normal file
@@ -0,0 +1,31 @@
|
||||
---
|
||||
layout: home
|
||||
title: Crewli Documentatie
|
||||
description: Leer hoe je Crewli gebruikt voor je evenementen en festivals
|
||||
|
||||
hero:
|
||||
name: Crewli Docs
|
||||
text: Documentatie voor het Crewli platform
|
||||
tagline: Alles wat je nodig hebt om je evenementen en festivals te beheren
|
||||
actions:
|
||||
- theme: brand
|
||||
text: Aan de slag
|
||||
link: /guide/getting-started
|
||||
- theme: alt
|
||||
text: Organisator handleiding
|
||||
link: /organizer/
|
||||
|
||||
features:
|
||||
- title: Evenementen beheren
|
||||
details: Maak evenementen aan, plan festival series, en beheer je volledige evenementportfolio.
|
||||
link: /organizer/events/create-event
|
||||
- title: Diensten plannen
|
||||
details: Richt secties in, maak tijdslots aan, en plan diensten voor je crew.
|
||||
link: /organizer/shifts/planning
|
||||
- title: Vrijwilligers
|
||||
details: Registratie, dienstkeuze, check-in en het vrijwilligerspaspoort.
|
||||
link: /volunteer/
|
||||
- title: Artiesten & Advancing
|
||||
details: Beheer je line-up en verzamel technische specificaties via het portaal.
|
||||
link: /organizer/artists/advancing
|
||||
---
|
||||
11
docs/organizer/accreditation/access-zones.md
Normal file
11
docs/organizer/accreditation/access-zones.md
Normal file
@@ -0,0 +1,11 @@
|
||||
---
|
||||
title: Access zones
|
||||
description: Definieer toegangszones en koppel ze aan accreditaties.
|
||||
tags: ['access zone', 'accreditatie', 'organisator']
|
||||
---
|
||||
|
||||
# {{ $frontmatter.title }}
|
||||
|
||||
{{ $frontmatter.description }}
|
||||
|
||||
Deze pagina beschrijft hoe je access zones instelt voor je evenement en hoe je ze koppelt aan accreditaties om de toegang te regelen.
|
||||
11
docs/organizer/accreditation/overview.md
Normal file
11
docs/organizer/accreditation/overview.md
Normal file
@@ -0,0 +1,11 @@
|
||||
---
|
||||
title: Accreditatie overzicht
|
||||
description: Beheer accreditaties voor je evenement met access zones en templates.
|
||||
tags: ['accreditatie', 'overzicht', 'organisator']
|
||||
---
|
||||
|
||||
# {{ $frontmatter.title }}
|
||||
|
||||
{{ $frontmatter.description }}
|
||||
|
||||
Deze pagina geeft een overzicht van het accreditatiesysteem in Crewli: hoe je accreditaties instelt, toewijst en beheert.
|
||||
11
docs/organizer/accreditation/templates.md
Normal file
11
docs/organizer/accreditation/templates.md
Normal file
@@ -0,0 +1,11 @@
|
||||
---
|
||||
title: Accreditatie templates
|
||||
description: Maak herbruikbare templates voor accreditaties met vooraf ingestelde access zones.
|
||||
tags: ['accreditatie', 'template', 'organisator']
|
||||
---
|
||||
|
||||
# {{ $frontmatter.title }}
|
||||
|
||||
{{ $frontmatter.description }}
|
||||
|
||||
Deze pagina beschrijft hoe je accreditatie templates aanmaakt en gebruikt om snel accreditaties toe te wijzen met de juiste toegangsrechten.
|
||||
11
docs/organizer/artists/advancing.md
Normal file
11
docs/organizer/artists/advancing.md
Normal file
@@ -0,0 +1,11 @@
|
||||
---
|
||||
title: Advancing workflow
|
||||
description: Verzamel technische specificaties van artiesten via het advancing-formulier.
|
||||
tags: ['advancing', 'artiest', 'organisator']
|
||||
---
|
||||
|
||||
# {{ $frontmatter.title }}
|
||||
|
||||
{{ $frontmatter.description }}
|
||||
|
||||
Deze pagina beschrijft de advancing workflow: hoe je formulieren verstuurt naar artiesten, antwoorden bijhoudt, en technische specificaties verzamelt.
|
||||
11
docs/organizer/artists/manage.md
Normal file
11
docs/organizer/artists/manage.md
Normal file
@@ -0,0 +1,11 @@
|
||||
---
|
||||
title: Artiesten beheren
|
||||
description: Voeg artiesten toe aan je evenement en beheer hun gegevens.
|
||||
tags: ['artiest', 'beheer', 'organisator']
|
||||
---
|
||||
|
||||
# {{ $frontmatter.title }}
|
||||
|
||||
{{ $frontmatter.description }}
|
||||
|
||||
Deze pagina beschrijft hoe je artiesten toevoegt, hun gegevens beheert, en ze koppelt aan je programmering.
|
||||
11
docs/organizer/artists/programme.md
Normal file
11
docs/organizer/artists/programme.md
Normal file
@@ -0,0 +1,11 @@
|
||||
---
|
||||
title: Programma
|
||||
description: Stel het programma samen met artiesten, tijden en podia.
|
||||
tags: ['programma', 'artiest', 'planning', 'organisator']
|
||||
---
|
||||
|
||||
# {{ $frontmatter.title }}
|
||||
|
||||
{{ $frontmatter.description }}
|
||||
|
||||
Deze pagina beschrijft hoe je het programma van je evenement opbouwt: artiesten toewijzen aan podia en tijden, en het programmaoverzicht beheren.
|
||||
11
docs/organizer/communication/briefings.md
Normal file
11
docs/organizer/communication/briefings.md
Normal file
@@ -0,0 +1,11 @@
|
||||
---
|
||||
title: Briefings
|
||||
description: Stuur briefings naar je crew met alle informatie die ze nodig hebben.
|
||||
tags: ['briefing', 'communicatie', 'organisator']
|
||||
---
|
||||
|
||||
# {{ $frontmatter.title }}
|
||||
|
||||
{{ $frontmatter.description }}
|
||||
|
||||
Deze pagina beschrijft hoe je briefings aanmaakt, verstuurt naar specifieke groepen, en bijhoudt wie de briefing heeft gelezen.
|
||||
11
docs/organizer/communication/messages.md
Normal file
11
docs/organizer/communication/messages.md
Normal file
@@ -0,0 +1,11 @@
|
||||
---
|
||||
title: Berichten
|
||||
description: Stuur berichten naar personen en groepen binnen je evenement.
|
||||
tags: ['berichten', 'communicatie', 'organisator']
|
||||
---
|
||||
|
||||
# {{ $frontmatter.title }}
|
||||
|
||||
{{ $frontmatter.description }}
|
||||
|
||||
Deze pagina beschrijft hoe je berichten verstuurt, ontvangt en beheert binnen Crewli.
|
||||
11
docs/organizer/events/create-event.md
Normal file
11
docs/organizer/events/create-event.md
Normal file
@@ -0,0 +1,11 @@
|
||||
---
|
||||
title: Evenement aanmaken
|
||||
description: Maak een nieuw evenement aan binnen je organisatie.
|
||||
tags: ['evenement', 'aanmaken', 'organisator']
|
||||
---
|
||||
|
||||
# {{ $frontmatter.title }}
|
||||
|
||||
{{ $frontmatter.description }}
|
||||
|
||||
Deze pagina beschrijft stap voor stap hoe je een nieuw evenement aanmaakt, het type kiest, en de basisgegevens invult.
|
||||
11
docs/organizer/events/event-statuses.md
Normal file
11
docs/organizer/events/event-statuses.md
Normal file
@@ -0,0 +1,11 @@
|
||||
---
|
||||
title: Evenement statussen
|
||||
description: Begrijp de verschillende statussen van een evenement en wat ze betekenen.
|
||||
tags: ['evenement', 'status', 'workflow', 'organisator']
|
||||
---
|
||||
|
||||
# {{ $frontmatter.title }}
|
||||
|
||||
{{ $frontmatter.description }}
|
||||
|
||||
Deze pagina beschrijft de levenscyclus van een evenement: van concept tot afgerond, en welke acties bij elke status horen.
|
||||
11
docs/organizer/events/festival-series.md
Normal file
11
docs/organizer/events/festival-series.md
Normal file
@@ -0,0 +1,11 @@
|
||||
---
|
||||
title: Festival series
|
||||
description: Beheer terugkerende festivals als een serie met gedeelde instellingen.
|
||||
tags: ['festival serie', 'evenement', 'organisator']
|
||||
---
|
||||
|
||||
# {{ $frontmatter.title }}
|
||||
|
||||
{{ $frontmatter.description }}
|
||||
|
||||
Deze pagina beschrijft hoe festival series werken: hoe je een parent-evenement aanmaakt, edities toevoegt, en instellingen deelt tussen edities.
|
||||
11
docs/organizer/index.md
Normal file
11
docs/organizer/index.md
Normal file
@@ -0,0 +1,11 @@
|
||||
---
|
||||
title: Organisator overzicht
|
||||
description: Alles wat je als organisator moet weten over het beheren van evenementen in Crewli.
|
||||
tags: ['organisator', 'overzicht', 'beheer']
|
||||
---
|
||||
|
||||
# {{ $frontmatter.title }}
|
||||
|
||||
{{ $frontmatter.description }}
|
||||
|
||||
Als organisator beheer je evenementen, secties, diensten, personen en communicatie. Dit overzicht helpt je navigeren naar de juiste handleiding.
|
||||
11
docs/organizer/organisation-setup.md
Normal file
11
docs/organizer/organisation-setup.md
Normal file
@@ -0,0 +1,11 @@
|
||||
---
|
||||
title: Organisatie inrichten
|
||||
description: Stel je organisatie in met naam, logo en basisinstellingen.
|
||||
tags: ['organisatie', 'instellingen', 'organisator']
|
||||
---
|
||||
|
||||
# {{ $frontmatter.title }}
|
||||
|
||||
{{ $frontmatter.description }}
|
||||
|
||||
Deze pagina beschrijft hoe je je organisatie inricht in Crewli: basisgegevens instellen, logo uploaden, en je organisatie klaar maken voor gebruik.
|
||||
11
docs/organizer/persons/crowd-lists.md
Normal file
11
docs/organizer/persons/crowd-lists.md
Normal file
@@ -0,0 +1,11 @@
|
||||
---
|
||||
title: Crowd lijsten
|
||||
description: Beheer lijsten van personen per crowd type voor je evenement.
|
||||
tags: ['crowd lijst', 'persoon', 'organisator']
|
||||
---
|
||||
|
||||
# {{ $frontmatter.title }}
|
||||
|
||||
{{ $frontmatter.description }}
|
||||
|
||||
Deze pagina beschrijft hoe je crowd lijsten bekijkt, filtert en exporteert, en hoe ze samenhangen met crowd types en accreditatie.
|
||||
11
docs/organizer/persons/crowd-types.md
Normal file
11
docs/organizer/persons/crowd-types.md
Normal file
@@ -0,0 +1,11 @@
|
||||
---
|
||||
title: Crowd types
|
||||
description: Definieer categorieën voor verschillende soorten bezoekers en deelnemers.
|
||||
tags: ['crowd type', 'persoon', 'organisator']
|
||||
---
|
||||
|
||||
# {{ $frontmatter.title }}
|
||||
|
||||
{{ $frontmatter.description }}
|
||||
|
||||
Deze pagina beschrijft hoe je crowd types aanmaakt en gebruikt om personen te categoriseren, zoals vrijwilligers, artiesten, pers en leveranciers.
|
||||
11
docs/organizer/persons/manage.md
Normal file
11
docs/organizer/persons/manage.md
Normal file
@@ -0,0 +1,11 @@
|
||||
---
|
||||
title: Personen beheren
|
||||
description: Voeg personen toe, bewerk gegevens en beheer je personenbestand.
|
||||
tags: ['persoon', 'beheer', 'organisator']
|
||||
---
|
||||
|
||||
# {{ $frontmatter.title }}
|
||||
|
||||
{{ $frontmatter.description }}
|
||||
|
||||
Deze pagina beschrijft hoe je personen toevoegt, bewerkt en verwijdert, en hoe het personenbestand samenhangt met crowd types en tags.
|
||||
11
docs/organizer/persons/tags.md
Normal file
11
docs/organizer/persons/tags.md
Normal file
@@ -0,0 +1,11 @@
|
||||
---
|
||||
title: Tags
|
||||
description: Gebruik tags om personen flexibel te labelen en te filteren.
|
||||
tags: ['tag', 'persoon', 'filter', 'organisator']
|
||||
---
|
||||
|
||||
# {{ $frontmatter.title }}
|
||||
|
||||
{{ $frontmatter.description }}
|
||||
|
||||
Deze pagina beschrijft hoe je tags aanmaakt, toewijst aan personen, en gebruikt om snel de juiste mensen te vinden.
|
||||
11
docs/organizer/shifts/assignments.md
Normal file
11
docs/organizer/shifts/assignments.md
Normal file
@@ -0,0 +1,11 @@
|
||||
---
|
||||
title: Toewijzingen
|
||||
description: Wijs personen toe aan diensten en beheer de dienstlijst.
|
||||
tags: ['toewijzing', 'dienst', 'organisator']
|
||||
---
|
||||
|
||||
# {{ $frontmatter.title }}
|
||||
|
||||
{{ $frontmatter.description }}
|
||||
|
||||
Deze pagina beschrijft hoe je personen toewijst aan diensten, hoe de wachtlijst werkt, en hoe je toewijzingen beheert.
|
||||
11
docs/organizer/shifts/planning.md
Normal file
11
docs/organizer/shifts/planning.md
Normal file
@@ -0,0 +1,11 @@
|
||||
---
|
||||
title: Diensten plannen
|
||||
description: Plan diensten door secties, tijdslots en personen aan elkaar te koppelen.
|
||||
tags: ['dienst', 'planning', 'organisator']
|
||||
---
|
||||
|
||||
# {{ $frontmatter.title }}
|
||||
|
||||
{{ $frontmatter.description }}
|
||||
|
||||
Deze pagina beschrijft de complete workflow voor het plannen van diensten: van het opzetten van secties tot het toewijzen van personen.
|
||||
11
docs/organizer/shifts/sections.md
Normal file
11
docs/organizer/shifts/sections.md
Normal file
@@ -0,0 +1,11 @@
|
||||
---
|
||||
title: Secties beheren
|
||||
description: Maak secties aan en organiseer je evenement in logische onderdelen.
|
||||
tags: ['sectie', 'organisator', 'beheer']
|
||||
---
|
||||
|
||||
# {{ $frontmatter.title }}
|
||||
|
||||
{{ $frontmatter.description }}
|
||||
|
||||
Deze pagina beschrijft hoe je secties aanmaakt, hernoemt, herordent en verwijdert binnen je evenement.
|
||||
11
docs/organizer/shifts/time-slots.md
Normal file
11
docs/organizer/shifts/time-slots.md
Normal file
@@ -0,0 +1,11 @@
|
||||
---
|
||||
title: Tijdslots
|
||||
description: Definieer tijdslots waarbinnen diensten gepland worden.
|
||||
tags: ['tijdslot', 'planning', 'organisator']
|
||||
---
|
||||
|
||||
# {{ $frontmatter.title }}
|
||||
|
||||
{{ $frontmatter.description }}
|
||||
|
||||
Deze pagina beschrijft hoe je tijdslots aanmaakt en beheert, en hoe ze samenhangen met secties en diensten.
|
||||
11
docs/organizer/team-members.md
Normal file
11
docs/organizer/team-members.md
Normal file
@@ -0,0 +1,11 @@
|
||||
---
|
||||
title: Teamleden beheren
|
||||
description: Nodig teamleden uit en beheer hun rollen binnen je organisatie.
|
||||
tags: ['teamleden', 'rollen', 'uitnodigen', 'organisator']
|
||||
---
|
||||
|
||||
# {{ $frontmatter.title }}
|
||||
|
||||
{{ $frontmatter.description }}
|
||||
|
||||
Deze pagina beschrijft hoe je teamleden uitnodigt, rollen toewijst, en toegang beheert binnen je organisatie.
|
||||
2514
docs/package-lock.json
generated
Normal file
2514
docs/package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load Diff
13
docs/package.json
Normal file
13
docs/package.json
Normal file
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"name": "crewli-docs",
|
||||
"private": true,
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"docs:dev": "vitepress dev",
|
||||
"docs:build": "vitepress build",
|
||||
"docs:preview": "vitepress preview"
|
||||
},
|
||||
"devDependencies": {
|
||||
"vitepress": "^1.6.4"
|
||||
}
|
||||
}
|
||||
11
docs/portal/artist-advancing.md
Normal file
11
docs/portal/artist-advancing.md
Normal file
@@ -0,0 +1,11 @@
|
||||
---
|
||||
title: Advancing invullen
|
||||
description: Vul als artiest je technische specificaties en wensen in via het portaal.
|
||||
tags: ['portal', 'advancing', 'artiest']
|
||||
---
|
||||
|
||||
# {{ $frontmatter.title }}
|
||||
|
||||
{{ $frontmatter.description }}
|
||||
|
||||
Deze pagina beschrijft hoe je als artiest het advancing-formulier invult: technische specificaties, cateringwensen, en overige informatie.
|
||||
11
docs/portal/index.md
Normal file
11
docs/portal/index.md
Normal file
@@ -0,0 +1,11 @@
|
||||
---
|
||||
title: Portal overzicht
|
||||
description: Toegang tot Crewli voor artiesten, leveranciers en pers via het externe portaal.
|
||||
tags: ['portal', 'overzicht', 'extern']
|
||||
---
|
||||
|
||||
# {{ $frontmatter.title }}
|
||||
|
||||
{{ $frontmatter.description }}
|
||||
|
||||
Het Crewli portaal biedt externe partijen — artiesten, leveranciers en pers — toegang tot de informatie en formulieren die ze nodig hebben.
|
||||
11
docs/portal/press-accreditation.md
Normal file
11
docs/portal/press-accreditation.md
Normal file
@@ -0,0 +1,11 @@
|
||||
---
|
||||
title: Persaccreditatie aanvragen
|
||||
description: Vraag als persfotograaf of journalist accreditatie aan voor een evenement.
|
||||
tags: ['portal', 'pers', 'accreditatie']
|
||||
---
|
||||
|
||||
# {{ $frontmatter.title }}
|
||||
|
||||
{{ $frontmatter.description }}
|
||||
|
||||
Deze pagina beschrijft hoe pers accreditatie aanvraagt via het portaal, welke gegevens nodig zijn, en hoe de beoordeling werkt.
|
||||
11
docs/portal/supplier-access.md
Normal file
11
docs/portal/supplier-access.md
Normal file
@@ -0,0 +1,11 @@
|
||||
---
|
||||
title: Leverancierstoegang
|
||||
description: Krijg als leverancier toegang tot relevante evenementinformatie via het portaal.
|
||||
tags: ['portal', 'leverancier', 'toegang']
|
||||
---
|
||||
|
||||
# {{ $frontmatter.title }}
|
||||
|
||||
{{ $frontmatter.description }}
|
||||
|
||||
Deze pagina beschrijft hoe leveranciers toegang krijgen tot het portaal en welke informatie er beschikbaar is.
|
||||
11
docs/volunteer/check-in.md
Normal file
11
docs/volunteer/check-in.md
Normal file
@@ -0,0 +1,11 @@
|
||||
---
|
||||
title: Check-in
|
||||
description: Check in bij je dienst met je QR-code of handmatig.
|
||||
tags: ['vrijwilliger', 'check-in', 'dienst']
|
||||
---
|
||||
|
||||
# {{ $frontmatter.title }}
|
||||
|
||||
{{ $frontmatter.description }}
|
||||
|
||||
Deze pagina beschrijft hoe de check-in werkt: je QR-code tonen, handmatig inchecken, en wat er gebeurt als je incheckt.
|
||||
11
docs/volunteer/index.md
Normal file
11
docs/volunteer/index.md
Normal file
@@ -0,0 +1,11 @@
|
||||
---
|
||||
title: Vrijwilliger overzicht
|
||||
description: Alles wat je als vrijwilliger moet weten over het gebruik van Crewli.
|
||||
tags: ['vrijwilliger', 'overzicht']
|
||||
---
|
||||
|
||||
# {{ $frontmatter.title }}
|
||||
|
||||
{{ $frontmatter.description }}
|
||||
|
||||
Als vrijwilliger gebruik je Crewli om je te registreren voor een evenement, diensten te kiezen, je paspoort te bekijken en in te checken.
|
||||
11
docs/volunteer/passport.md
Normal file
11
docs/volunteer/passport.md
Normal file
@@ -0,0 +1,11 @@
|
||||
---
|
||||
title: Mijn paspoort
|
||||
description: Bekijk je persoonlijke vrijwilligerspaspoort met je diensten en accreditatie.
|
||||
tags: ['vrijwilliger', 'paspoort', 'accreditatie']
|
||||
---
|
||||
|
||||
# {{ $frontmatter.title }}
|
||||
|
||||
{{ $frontmatter.description }}
|
||||
|
||||
Deze pagina beschrijft het vrijwilligerspaspoort: wat je er vindt, hoe je het gebruikt, en hoe het samenhangt met je diensten en accreditatie.
|
||||
11
docs/volunteer/registration.md
Normal file
11
docs/volunteer/registration.md
Normal file
@@ -0,0 +1,11 @@
|
||||
---
|
||||
title: Registreren
|
||||
description: Meld je aan als vrijwilliger voor een evenement.
|
||||
tags: ['vrijwilliger', 'registratie', 'aanmelden']
|
||||
---
|
||||
|
||||
# {{ $frontmatter.title }}
|
||||
|
||||
{{ $frontmatter.description }}
|
||||
|
||||
Deze pagina beschrijft hoe je je registreert als vrijwilliger, je profiel invult, en toegang krijgt tot het evenement.
|
||||
11
docs/volunteer/shift-signup.md
Normal file
11
docs/volunteer/shift-signup.md
Normal file
@@ -0,0 +1,11 @@
|
||||
---
|
||||
title: Diensten kiezen
|
||||
description: Bekijk beschikbare diensten en schrijf je in.
|
||||
tags: ['vrijwilliger', 'dienst', 'inschrijven']
|
||||
---
|
||||
|
||||
# {{ $frontmatter.title }}
|
||||
|
||||
{{ $frontmatter.description }}
|
||||
|
||||
Deze pagina beschrijft hoe je beschikbare diensten bekijkt, je voorkeuren aangeeft, en je inschrijft voor diensten.
|
||||
Reference in New Issue
Block a user