# Uitgaanskrant — takenlijst Bijgewerkt: 2026-08-04. Zie `CLAUDE.md` voor werkinstructies/conventies. Elke openstaande taak hieronder is zelfstandig te begrijpen zonder de chat gelezen te hebben waarin hij ontstond. Volgorde binnen elke prioriteit = geschatte ernst/impact, hoogste eerst. Eigenaar-tag per taak: **[Claude]** (zelfstandig/via browser-automation te doen), **[Bob]** (sneller/simpeler voor hem zelf — meestal builder-UI met een bekend fragiele dialoog, zie `CLAUDE.md`), **[Bob — bezig]** (al geclaimd). **2026-08-04 documentatie-correctie:** 2 taken die hier als open stonden bleken al gefixt (git-bevestigd, commits van 2026-08-02) — verwijderd: "Hello Worlddd"-debugtekst en de Event→Horeca overflow-bug. Ook bleek er **nergens in de app een werkend `hasError`-patroon** te bestaan om te kopiëren (zie `CLAUDE.md`, Domein/architectuurcontext) — de foutafhandelings-taken hieronder gaan dus uit van een nieuw te ontwerpen patroon, niet een bestaand te repliceren patroon. ## Sessie-indeling (suggestie voor tokenefficiëntie) Groepeer bij het oppakken bij voorkeur per FlutterFlow-paginagebied: - **Nu opgepakt:** Home-slider empty-state (bleek uiteindelijk [Bob, 10 sec] — zie P0 #1) + Foutafhandeling Horeca-overzicht ([Claude], nog te onderzoeken — zie P0 #2). - **Volgende sessie, Login/favorieten-afronding:** lege-lijst empty-state favorietenpagina + hartje-op-gemeente (ná designantwoord) + favorieten-sync-verificatie. - **Volgende sessie, laatste image-crash + Flexible-wrap:** EvenementHorecagelegenheid-carousel [Bob] + sliderkaartje-datumregel [Claude] — klein, kan samen met opruimwerk in dezelfde pagina's. - **Volgende sessie, toegankelijkheid:** alle 5 punten onder "Toegankelijkheid & navigatie" samen — klein en gelijksoortig. - **Volgende sessie, opschonen:** lib/kanweg + dubbel menu + EventWidget-route. ## Status: actief bij Bob (geen Claude-actie nodig, ter info) - **FavorietenAgenda 403-fout** [Bob — bezig]: Bob troubleshoot dit zelf. FlutterFlow-requests komen bij nginx binnen met een lege Cookie-header; zijn eigen browser/curl (via dezelfde Cloudflare-edge) sturen de sessie-cookie wél mee. Cloudflare Cache Rule voor `SSESS*` staat al goed (bypass, eerste regel). Werkhypothese: Cloudflare Bot Management behandelt FlutterFlow's server-side traffic anders op basis van IP-reputatie/TLS-fingerprint. Niet opnieuw diagnosticeren zonder navraag — check eerst of Bob al verder is. ## P0 — blokkeert livegang 1. [ ] **Home-slider crasht (RangeError) bij 0 API-resultaten — fix gelokaliseerd, 1 klik voor Bob nodig.** [Bob, 10 seconden werk] Bob koos: bij 0 resultaten component overslaan (niets tonen), geen melding. `CarouselSlider.builder` met `itemCount: 0` crasht. Commit `1a22bbf` (2026-08-03, Bob) wrapte de Home-slider al in een ConditionalBuilder met een altijd-waar conditie — bleek bij onderzoek 2026-08-04 op het verkeerde niveau te zitten (buiten de FutureBuilder/data-scope, kan de resultatenlijst dus niet zien) en is dus geen echte fix. **Betere, native route gevonden:** de `Carousel`-widget zelf (child van If → Container in de tree) heeft een ingebouwde **"Empty List Widget"**-property — precies bedoeld voor dit scenario, geen ConditionalBuilder nodig. Stappen: FlutterFlow → component `HomeUitgaanSliderComponent` → Widget Tree → selecteer de `Carousel`-node (onder ConditionalBuilder → If → Container) → rechterpaneel → **"Empty List Widget"** → vink **"Show Empty List Widget"** aan → als widget een lege/onzichtbare placeholder instellen (matcht "component overslaan"). **Bij Bob i.p.v. Claude:** die checkbox rendert buiten de klikbare/screenshot-ruimte (bevestigd na 5 pogingen, zie CLAUDE.md "Rechterpaneel te breed") — ook na het vergroten van het venster. Kost Bob ~10 seconden, kostte mij te veel tool-calls voor niks. 2. [ ] **Foutafhandeling ontbreekt op HorecagelegenhedenOverzicht.** [Claude, nog te onderzoeken] Bob's antwoord: gewoon skippen zodra er iets misgaat, geen melding/retry-knop nodig — "als de app maar niet crasht, 0 inhoud zou een outage betekenen". 6 FutureBuilders checken alleen `!snapshot.hasData` — bij een mislukte call blijft het laadwieltje voor altijd draaien (geen crash, wel een dooie boel). Nog niet onderzocht of hier ook een native "empty/error state"-optie bestaat zoals bij de Carousel hierboven, of dat dit alsnog handmatige conditie-opbouw vereist (en dus mogelijk ook de rechterpaneel-klik- beperking raakt). Oppakken in de volgende sessie. `lib/horecagelegenhedenoverzicht/horecagelegenheden_overzicht/horecagelegenheden_overzicht_widget.dart` (regels 283, 467, 651, 835, 1019, 1203). **Vraag aan Bob vóór starten:** akkoord met "compacte melding + Opnieuw proberen-knop" als aanpak, of andere voorkeur voor tekst/vormgeving? 3. [ ] **Hartje-icoon op gemeente — geblokkeerd op designvraag.** [Bob] Bob koos: heart ergens anders dan de gemeente-dropdown zelf (die blijft ongewijzigd). Blocker: **geen enkele pagina toont de geselecteerde gemeente-náám als tekst** — alleen het numerieke ID (`FFAppState().gemeenteSelectId`) wordt doorgegeven als filter (bv. `plaats`/`townid` param op `PUitgaanPageWidget`). `GemeentenCall. gemeenteName()` in `lib/backend/api_requests/api_calls.dart` bestaat al maar is ongebruikt. **Vraag aan Bob:** waar moeten gemeente-naam + hartje komen (kandidaat: AppBar van `PUitgaanPageWidget`)? Niet zelf raden aan de layout. - Bekende valkuil als dit gebouwd wordt: bind de naam niet live via een `List`-typed lookup function-argument (bv. `provincieNaamById`/`gemeenteNaamById` in `lib/flutter_flow/custom_functions.dart`, al gebouwd, compileert, nog niet gekoppeld) — dat argument-bindingsdialoog loopt vast op de geneste Set Variable-bug (zie `CLAUDE.md`). Simpeler: naam vastleggen in een plain String App State-variabele op moment van selectie i.p.v. 'm live op te zoeken. 4. [ ] **Werkende login + favorieten — resterende deeltjes.** [Bob] Basis is af: login gekoppeld, wachtwoord-vergeten-flow, favorieten drawer-link + 3-tabblad-pagina, hartje op horeca-kaart + -detailpagina. Nog open: - Lege-lijst empty-state op de favorietenpagina (nu kale/lege Container als er nog geen favorieten zijn). `lib/favorieten/favorieten_widget.dart`. - Bevestigen dat favorieten écht syncen via Drupal bij inloggen — hangt af van het FavorietenAgenda-403-issue hierboven. 5. [ ] **Drupal: anonieme leestoegang onderzoeken voor browse- endpoints.** [Bob] Drupal-niveau, geen Claude-taak. ## P1 — snel na livegang - [ ] **Lege image-URL crash (CachedNetworkImage) — 1 van 10 resterend.** [Bob] Patroon in `CLAUDE.md` ("Patroon: lege/ontbrekende afbeeldings-URL"). 9 van de 10 bekende instanties zijn al gefixt en gepusht. **Laatste resterende, status gecorrigeerd 2026-08-04:** component `EvenementHorecagelegenheid`, Carousel-Image (`imageUrl: fotoosItem`, regel ~299) — er staat **nog geen** ConditionalBuilder-wrap (eerdere aanname dat de wrap al stond en alleen de conditie `Unset` was, klopt niet met de huidige export). Moet van scratch: wrap + conditie ("Is Set") + else-icon, zoals omschreven in `CLAUDE.md`. Dit is exact het patroon dat eerder al meerdere keren vastliep op de geneste Set Variable-dialoog — vandaar Bob i.p.v. Claude. - Nog niet herchecked op nieuwe pagina's sinds de laatste gerichte `grep -rl "CachedNetworkImage"` over `lib/**/*_widget.dart`. - [ ] **Loading/foutafhandeling-patroon uitrollen naar overige lijst-/detailpagina's.** [Claude, ná P0 #2] Zodra het patroon uit P0 #2 (Horeca-overzicht) staat, hetzelfde toepassen op Event, HorecagelegenheidCurrent, sliders — nu nergens een echte foutstatus, alleen "geen data nog". - [ ] **Overflow op Home-pagina.** [Claude] Live gereproduceerd tijdens testen (2026-08-03): `RenderFlex overflowed by 7338 pixels` in een `Column` zonder `Expanded`/scrollcontainer. `lib/uitgaanspaginas/home/home_widget.dart:316`. - [ ] **Sliderkaartje: datumregel mist de Flexible-wrap.** [Claude] Zelfde mechanische patroon als de twee regels eronder die al gefixt zijn (consistentie) — bevestigd nog open. `p_uitgaan_slider_kaart_component_widget.dart` (Row met `Icons.calendar_month` + Text zonder Flexible). - [ ] **EstablishmentsCall crasht zonder categoriefilter.** [Bob] `horcat ??= null!;` — bevestigd nog aanwezig, regel 1443. Nu geen probleem omdat elke aanroep toevallig altijd een filter meegeeft, wel een landmijn voor de toekomst. `lib/backend/api_requests/api_calls.dart`. Fix zit vermoedelijk in de FlutterFlow API-call-configuratie (default parameterwaarde), niet in lokale code. - [ ] **"Thuis bezorgen" koppelen aan een echt leverbaar-veld per horecagelegenheid.** [Bob] Wacht op Bob: eerst het API-endpoint aan Drupal-kant configureren. Daarna tonen/verbergen op basis van het echte veld i.p.v. de huidige dode tap. - [ ] **~25+ plekken tonen letterlijke veldnaam i.p.v. nette placeholder** (bv. "titel", "adres", "def") bij ontbrekende data. [Claude] Nog niet geïnventariseerd welke exact — audit nog te doen. - [ ] **Account/profielscherm** (wachtwoord wijzigen, uitloggen, account verwijderen). [Bob] Bovenop de login/favorieten-P0-basis. Account verwijderen heeft mogelijk AVG-implicaties aan Drupal-kant. - [ ] **Toegankelijkheid & navigatie, restpunten:** [Claude, klein batchbaar in 1 sessie] - Login-pagina: 2 icon-only knoppen zonder tooltip (veld wissen + wachtwoord tonen/verbergen) — `login_widget.dart` (suffixIcon van een `TextFormField` — standaard Tooltip-wrap werkt daar niet op, zie `CLAUDE.md`; bevestigd nog open). - Overige icon-only knoppen buiten de header van tooltip voorzien. - Bevestig-stap toevoegen aan de provincie/gemeente-kiezer (nu geen "Toepassen"-knop of bevestiging). - Vaste "terug naar hoofdlijst"-snelkoppeling op detailpagina's. - Deep-link/query-param robuustheid checken (ongeldig/verlopen `nid`). - [ ] **Visuele polish** (los, per pagina): [Bob/Claude, geen builder-risico's bekend] Uitgaan-pagina (typografie/contrast/spacing), Event-pagina, HorecagelegenhedenOverzicht, tabel-kaartje-afstemming met slider-kaartje, categorie-tag mag titel/datum niet overstemmen. - [ ] **Performance:** [onderzoek nodig, geen owner bepaald] - Dubbele/onnodige netwerkverzoeken checken (audit, nog te doen). - 6-7 tabbladen laden allemaal meteen hun eigen data bij elke tabwissel/herbouw (TabBarView bouwt alle tabs eager) — `horecagelegenheden_overzicht(_sort_page/_page_data_type)_widget.dart`. - [ ] **Responsive/screensize-audit** [onderzoek nodig] — o.a. het vaste 200×200px-tegelformaat in het venue-event-grid dat botst met de grid-berekening. ## P2 — features & concept, na livegang - [ ] **Datum-filter**: Vandaag / Dit weekend / Deze week. - [ ] **Google Maps-weergave** van horecagelegenheden — bewust niet vóór livegang (Maps API-key + billing, onduidelijk of elke locatie al lat/long heeft, marker-UI — geen quick win). - [ ] **"In de buurt"/geolocatie-browsen** — aanvulling op het provincie/gemeente-model, geen vervanging. - [ ] "Wat is er vanavond"-melding/widget. - [ ] Deel-knop op eventpagina. - [ ] "Toevoegen aan agenda" (native kalender). - [ ] "Events op deze locatie" prominenter op de horeca-detailpagina. - [ ] Reviews/waardering voor horecagelegenheden — groot, vraagt nieuw Drupal content-type + moderatie, eigen project. - [ ] Ad-banners op horeca-overzicht, horeca-detail, event-detail; vaste regel: geen ads op locatie-kiezer/login/account. - [ ] Tekstzoeken op titel op de horeca-overzichtspagina (los van de Datatype/Sort-experimenten die Bob daar zelf op test — die zijn actief werk-in-uitvoering, geen dode code). - [ ] **Opschonen:** [Bob] - Merge `kaartTabelUitgaanComp` + `kaartTabelUitgaanSComp` — Bob doet dit zelf ("ik kijk er zelf naar"). - `lib/kanweg` opnieuw leegmaken indien teruggekomen na een latere export-pull, plus eventuele nieuwe losse dode componenten in `lib/evenement/`. - Eén browse-by-category-patroon i.p.v. twee: nu Home landelijk is, bepalen hoe Home's categorieën en `PUitgaanPage`'s provincie/ gemeente-gescoopte categorieën zich tot elkaar verhouden. - Dubbele Provincie/Gemeente-blok in het menu opruimen (12 menu-items waar 6 zouden volstaan). - `EventWidget`-route: heraansluiten of definitief schrappen (losse orphan-route).