Explorar o código

Taak 91 aangemaakt: uitleg op de aanmaakpagina's (teksten NL+EN)

Voorstel uitgewerkt en vastgelegd: intro-blok + een regel hulptekst onder
elke bestaande sectiekop + * achter de verplichte labels, voor zowel
uitgaansevenementAanmaken als stadsactiviteitAanmaken. Teksten staan
kant-en-klaar in de taak, Nederlands en Engels.

CLAUDE.md: publicatiegedrag van via de app ingediende content vastgelegd
(evenement direct gepubliceerd; stadsactiviteit alleen direct bij
stadseditor-rechten, anders ongepubliceerd).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
bob hai 3 horas
pai
achega
dd5e9d47dd
Modificáronse 2 ficheiros con 113 adicións e 0 borrados
  1. 12 0
      CLAUDE.md
  2. 101 0
      TASKS.md

+ 12 - 0
CLAUDE.md

@@ -4183,6 +4183,18 @@ minder calls per scherm, niet in Views.
 
 ## Domein/architectuurcontext
 
+- **Publicatiegedrag van via de app ingediende content (Bob, 2026-09-18).**
+  Een **evenement** (`evenementCreate`, hangt altijd aan een eigen
+  horecagelegenheid) wordt **direct gepubliceerd** — de indiener is per definitie
+  de eigenaar van die zaak. Een **stadsactiviteit** (`stadsactiviteitCreate`)
+  wordt **alleen direct gepubliceerd voor accounts met stadseditor-rechten**
+  (`field_town_access` op de gemeente, zie de stadsrechten-notitie hieronder);
+  voor alle andere accounts komt hij **ongepubliceerd** binnen en moet iemand hem
+  nakijken. **Praktisch gevolg:** een activiteit die "niet doorkomt" is dus niet
+  automatisch een bug — check eerst de rol van het testaccount vóór je in de
+  create-action of de view gaat zoeken. En elke tekst in de app over "je
+  activiteit staat online" moet die twee gevallen dekken.
+
 - **Geen user-specifieke elementen op overzichtspagina's — besluit Bob,
   2026-09-13.** Concreet: géén favorietenhartje op de kaarten van een
   overzicht/lijst; favoriet maken gebeurt op de **detailpagina**. De reden

+ 101 - 0
TASKS.md

@@ -43,6 +43,10 @@ klopt sinds je 'm las.*
    gemaakt en kan weg zodra hij tevreden is. Rechtsklik in de componentlijst →
    *Delete Component*. Hij wordt nergens gebruikt, dus dit raakt geen pagina.
    (Claude verwijdert zelf nooit iets — staande regel.)
+8. **91 · uitleg op de aanmaakpagina's** (evenement + activiteit) — nieuw
+   2026-09-18 op Bob's vraag. Teksten NL+EN staan kant-en-klaar in het blok
+   hieronder; alleen nog plaatsen in de builder. Pak dit samen met taak 87 op,
+   die overlapt met de regel bij "Uw Horecagelegenheid".
 
 ### ✅/🔴 65 · P1-59 · Release-build gedaan 2026-09-18 (Claude, browserloos) — app draait, MAAR het app-icoon is fout
 
@@ -241,6 +245,103 @@ Zelfde afweging geldt voor `stadsactiviteitAanmaken`: check bij het bouwen even
 of die pagina hetzelfde probleem heeft (stadsrechten i.p.v. een zaak).
 
 
+### 🆕 91 · Uitleg op de aanmaakpagina's (evenement + activiteit) · Eigenaar: Claude (builder)
+
+Bob 2026-09-18: *"we moeten uitleg op de evenementen/activiteiten aanmaken
+pagina maken."* Nu staat er nergens wat verplicht is, wat een veld betekent, of
+wat er ná indienen gebeurt — de verplichte velden zijn alléén in de custom
+action afgedwongen (`evenementCreate` / `stadsactiviteitCreate`), dus de
+gebruiker ziet pas ná indienen *"Titel is verplicht"*.
+
+**Gekozen opzet (Bob akkoord):** intro-blok bovenaan + één regel hulptekst onder
+elke bestaande sectiekop + `*` achter de verplichte labels. Géén info-icoontjes
+met tooltip (op mobiel een extra tik, en je ziet niet dát er uitleg is), en géén
+losse lap tekst bovenaan (wordt weggescrold). Per-veld-uitleg (laag 3) en echte
+veldvalidatie vóór indienen zijn bewust buiten scope gehouden.
+
+**Bouwtechnisch:** losse `Text`-widgets, **géén** herbruikbaar component met een
+`tekst`-parameter — een parameterwaarde valt buiten het vertaalsysteem, een
+`Text` krijgt een eigen sleutel en is dus via het globe-icoontje te vertalen.
+Eén `Text` opmaken (stijl `bodySmall`, kleur `secondaryText`, 12px), dan
+`Duplicate` per sectie en in de kaart-`Column` direct ónder de sectiekop zetten.
+Reken op ±16 Text-widgets over beide pagina's.
+⚠️ **Een duplicaat erft de Engelse vertaling van het origineel** (zie P1-17) —
+zet de EN dus per widget opnieuw via het globe-icoontje, en verifieer met een
+verse export, niet met het paneel ("ziet er opgeslagen uit"-patroon).
+
+**Belangrijkste zin van de hele taak — de categorie.** Bob expliciet: de
+categorie bepaalt in welke overzichten het item terechtkomt. Dat is geen
+stijlpunt maar hard gedrag: `flutterflowmobiel1` verdeelt over displays
+services_1…7 per categorie, dus een item zónder categorie komt in **geen enkele
+tab** (dat was precies de bevinding van taak 28: 6 van de 7 onzichtbare events
+hadden geen categorie).
+
+---
+
+#### A · `uitgaansevenementAanmaken`
+
+**Intro-blok, bovenaan (boven de kaart "Wat"):**
+- NL: *Meld hier een evenement aan bij een van je zaken. Velden met * zijn verplicht. Je evenement staat direct online.*
+- EN: *Submit an event for one of your venues here. Fields marked * are required. Your event goes online right away.*
+
+**Regel onder elke sectiekop:**
+
+| Sectie | NL | EN |
+|---|---|---|
+| Wat | Geef een korte, herkenbare titel. De omschrijving verschijnt op de detailpagina van het evenement. | Give it a short, recognisable title. The description appears on the event's detail page. |
+| Uw Horecagelegenheid | Kies de zaak waar het evenement plaatsvindt. Je ziet hier alleen zaken die op jouw account staan. Nog geen zaak aangemeld? Dat doe je op uitgaanskrant.com. | Choose the venue where the event takes place. You only see venues linked to your account. No venue yet? You can add one on uitgaanskrant.com. |
+| Categorie evenement | Let op: de categorie bepaalt in welke overzichten je evenement verschijnt. Kies er minstens één — zonder categorie is je evenement nergens terug te vinden. | Note: the category decides which listings your event appears in. Pick at least one — without a category your event won't show up anywhere. |
+| Wanneer | De begindatum is verplicht. Vul een einddatum alleen in bij een evenement dat meerdere dagen duurt. | The start date is required. Only fill in an end date for an event that runs several days. |
+| Organisatie | Optioneel. Een website of ticketlink tonen we als knop bij je evenement. | Optional. A website or ticket link is shown as a button on your event. |
+| Entree | Laat leeg als er geen entree wordt geheven. Vul de prijs in als bedrag, bijvoorbeeld 7,50. | Leave empty if there's no admission charge. Enter the price as an amount, for example 7.50. |
+| Media | Eén logo en meerdere foto's. Tik nogmaals op "Foto's kiezen" om er een toe te voegen; de vorige blijft staan. | One logo and several photos. Tap "Choose photos" again to add another; the previous one stays. |
+
+**Verplicht markeren met `*`** (verplicht volgens `evenementCreate`:
+horecagelegenheid, titel, datum-start):
+- `labelText` `Titel` (`vc80d3lh`) → `Titel *`
+- `labelText` `Datum` (`xceonmpt`) → `Datum *`
+- `hintText` `Kies je horecagelegenheid` (`nhnxstvm`) → `Kies je horecagelegenheid *`
+
+De regel bij "Uw Horecagelegenheid" overlapt bewust met **taak 87** — bouw die
+twee samen, dan is één van beide de link-variant (`Launch URL` naar
+`https://uitgaanskrant.com/nl/ondernemers`) en hoeft de zin er niet twee keer
+te staan.
+
+---
+
+#### B · `stadsactiviteitAanmaken`
+
+**Intro-blok, bovenaan:**
+- NL: *Meld hier een activiteit aan in jouw gemeente. Velden met * zijn verplicht. Heb je stadsredacteur-rechten voor deze plaats, dan staat je activiteit direct online; anders kijken we hem eerst na.*
+- EN: *Submit an activity in your municipality here. Fields marked * are required. If you have city editor rights for this town your activity goes online right away; otherwise we review it first.*
+
+**Regel onder elke sectiekop:**
+
+| Sectie | NL | EN |
+|---|---|---|
+| Wat | Geef een korte, herkenbare titel. De omschrijving verschijnt op de detailpagina van de activiteit. | Give it a short, recognisable title. The description appears on the activity's detail page. |
+| Categorie evenement | Let op: de categorie bepaalt in welke overzichten je activiteit verschijnt. Kies er minstens één — zonder categorie is je activiteit nergens terug te vinden. | Note: the category decides which listings your activity appears in. Pick at least one — without a category your activity won't show up anywhere. |
+| Wanneer | De begindatum is verplicht. Vul een einddatum alleen in bij een activiteit die meerdere dagen duurt. | The start date is required. Only fill in an end date for an activity that runs several days. |
+| Waar | Kies eerst de plaats waar de activiteit plaatsvindt — dat is verplicht. Adres, postcode en plaatsnaam daaronder zijn het bezoekadres en optioneel. | First choose the town where the activity takes place — that one is required. The address, postcode and town name below are the visiting address and optional. |
+| Organisatie | Optioneel. De naam van de organisator en een contactadres of website waar bezoekers terechtkunnen. | Optional. The organiser's name and a contact address or website for visitors. |
+| Entree | Laat leeg als er geen entree wordt geheven. Vul de prijs in als bedrag, bijvoorbeeld 7,50. | Leave empty if there's no admission charge. Enter the price as an amount, for example 7.50. |
+| Media | Eén logo en meerdere foto's. Tik nogmaals op "Foto's kiezen" om er een toe te voegen; de vorige blijft staan. | One logo and several photos. Tap "Choose photos" again to add another; the previous one stays. |
+
+**Verplicht markeren met `*`** (verplicht volgens `stadsactiviteitCreate`:
+titel, plaats-tid, datum-start):
+- `labelText` `Titel` (`xorq08j5`) → `Titel *`
+- `labelText` `Datum` (`dfa8vusy`) → `Datum *`
+- **Géén `*` op de vier Waar-dropdowns** — welke van de twee routes ("Mijn
+  gemeenten" óf de cascade provincie/gemeente/plaats) je gebruikt is vrij; de
+  sectieregel hierboven zegt daarom dat de plaats verplicht is.
+
+⚠️ **Verwarring die de sectieregel bij "Waar" bewust opheldert:** er staan hier
+twee dingen die "plaats" heten. De verplichte waarde is de **plaats-tid** uit de
+dropdowns (`createPlaatsID`); het tekstveld met label **Plaats** (`825wzmk4`,
+hint *Plaats activiteit*) is gewoon een regel van het bezoekadres en is
+optioneel.
+
+
 ### ✅ Sessie 2026-09-17 (Claude in de builder, Bob kijkt mee) — zoekveld onder toetsenbord + sliderkaart-overflow
 
 **1. Het zoekveld op Home was onbereikbaar op een tablet in landschap** (het