# Crewli — In-app copy catalogue > Single source of truth for user-facing Dutch copy. Seeded from > `/dev-docs/ARCH-FORM-BUILDER.md` §30. ## Purpose Centralises terminology and warnings so every screen, tooltip, and error message stays consistent. Without this, "Dienst" / "Shift" / "Taak" drift across pages and confuse organisers; "Privacy-gevoelig" and "Bevat persoonsgegevens" appear side-by-side for the same flag. This catalogue is the canonical reference for both backend validation messages (Form Requests) and frontend rendering (Vue components). Whenever you write Dutch copy that a user will read, look here first. ## Growth strategy Living document. Each session that adds user-facing UI: 1. **Check first.** Search for the concept (in Dutch and English) before coining a new term. If it's here, use the existing wording verbatim. 2. **Propose new terms in PR.** Add to the relevant section. Brief rationale in the commit message. 3. **Reviewer (Bert) signs off** on terminology before merge. Once a term is in the catalogue, it's binding for future sessions. The catalogue stays in `/dev-docs/` (developer-facing) rather than `/docs/` (end-user-facing). End-user docs are written *using* this catalogue, not *about* it. ## Update workflow - Adding a tooltip → update §30.2 here. - Adding a warning → update §30.3 here. - Renaming a concept → update §30.1 here AND grep for all current Dutch occurrences (frontend, validation messages, end-user docs) and update them in the same PR. - Wholesale restructure → discuss in design-document.md first; then rewrite this catalogue in one commit. ## Naming conventions | Concept | Canonical Dutch term | Never use | | -------------------- | ---------------------------- | ---------------------------------- | | `form_schema` | Formulier | Schema, template | | `form_field` | Veld | Vraag, item | | `form_template` | Formulier-sjabloon | Template (alleen in dev-docs) | | `form_field_library` | Veldenbibliotheek | Library, bibliotheek alleen | | `form_submission` | Inzending | Submission, antwoord | | `is_filterable` | Filterbaar | Queryable, zoekbaar | | `is_pii` | Bevat persoonsgegevens | Privacy-gevoelig | | `freeze_on_submit` | Bevriezen na inzending | Vergrendelen | | `consent_version` | Toestemmingsversie | Consent-versie | ## Tooltip catalogue (selection) ``` is_filterable: "Filterbaar — dit veld wordt extra geïndexeerd voor snelle filtering in overzichten. Alleen aanvinken voor velden die je daadwerkelijk als filter gebruikt (bijvoorbeeld: shirtmaat wel, motivatie niet)." is_pii: "Bevat persoonsgegevens — bij retentie-verwerking worden deze waardes geanonimiseerd volgens je privacy-instellingen. Vink aan voor velden zoals telefoon, e-mail, noodcontact, medische info." is_unique: "Uniek per formulier — waardes van dit veld moeten uniek zijn over alle inzendingen heen. Geschikt voor bijvoorbeeld BSN of werknemersnummer. Dubbele waardes worden afgewezen." freeze_on_submit: "Bevriezen na eerste inzending — zodra iemand het formulier indient kunnen de velden niet meer gewijzigd worden. Gebruik dit voor contracten, signatures, of formulieren waar de structuur vast moet staan voor audit-doeleinden." snapshot_mode: never: "Geen snapshot — wijzigingen worden alleen in het activity log bijgehouden." on_submit: "Snapshot bij inzending — bij elke indiening wordt het complete formulier gesnapshot voor audit-doeleinden." always: "Altijd snapshot — elke wijziging (ook drafts) wordt gesnapshot. Gebruikt meer opslag maar biedt het volledige audit-spoor." retention_days: "Bewaartermijn — na deze periode (vanaf inzendingsdatum) worden PII-velden automatisch geanonimiseerd. Typische waardes: 1095 dagen (3 jaar) voor vrijwilligers, 2555 dagen (7 jaar) voor contracten, null voor onbeperkt bewaren." ``` ## Warning catalogue (selection) ``` binding_change_with_submissions: "Je staat op het punt de koppeling van dit veld te wijzigen terwijl er al {count} ingediende inzendingen zijn. De historische waardes blijven bestaan, maar zijn niet meer de bron-van-waarheid. Dit kan niet ongedaan worden gemaakt." delete_schema_with_submissions: "Dit formulier heeft {count} inzendingen. Als je het verwijdert, blijven de inzendingen bewaard als archief maar zijn niet meer nieuw in te dienen. Type de naam van het formulier om te bevestigen:" field_type_change: "Je wijzigt het veldtype van {old} naar {new}. Bestaande waardes worden mogelijk niet correct omgezet — sommige kunnen onleesbaar worden. Aanbevolen: maak een nieuw veld aan in plaats van dit veld te wijzigen." public_token_rotation: "Je roteert de publieke link voor dit formulier. Bestaande gebruikers kunnen nog 7 dagen inzenden met de oude link; daarna krijgen ze een 410 Gone foutmelding." ```