# 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. **Formaat van elke taak:** `**P0-1 · Eigenaar: ...**` als eerste regel — een stabiel nummer (verandert niet als andere taken worden afgerond/verwijderd) + wie 'm oppakt. Volgorde binnen elke prioriteit = geschatte ernst/impact, hoogste eerst. **Eigenaar-waarden:** - **Bob** — sneller/simpeler voor hem zelf (meestal builder-UI met een bekend fragiele dialoog, zie `CLAUDE.md`). - **Claude** — zelfstandig/via browser-automation te doen, nog onbeklaimd. - **Claude — bezig (sessie )** / **Bob — bezig** — een sessie/persoon is hier *nu* actief mee bezig. - **Onbepaald** — nog geen eigenaar gekozen. **⚠️ Voorkom dubbel werk:** Bob start elke taak in een nieuwe, aparte chat — er kunnen dus meerdere sessies tegelijk actief zijn op hetzelfde project. **Voordat je een taak oppakt: check of de Eigenaar-regel al "— bezig" zegt.** Zo ja: niet zelfstandig ook gaan zitten werken aan hetzelfde bestand/component — vraag Bob eerst wie 'm afmaakt (dit gebeurde op 2026-08-04: twee sessies pakten onafhankelijk P0-2 op; Bob moest scheidsrechteren). Zet zelf "— bezig" in de Eigenaar-regel zodra je serieus aan een taak begint, en haal het weer weg (of verwijder de taak, zie hieronder) zodra je stopt. **Afronden:** een volledig afgeronde taak wordt **verwijderd** uit deze lijst (niet gearchiveerd). Bij gedeeltelijke voortgang: taak laten staan met bijgewerkte inhoud die alleen het resterende werk beschrijft. ## Status: actief bij Bob (geen Claude-actie nodig, ter info) - **FavorietenAgenda 403-fout** — **Eigenaar: 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 **P0-1 · Eigenaar: Bob (10 sec klusje) — status onbevestigd, zie onder.** Home-slider crasht (RangeError) bij 0 API-resultaten. Bob koos: bij 0 resultaten component overslaan (niets tonen), geen melding. `CarouselSlider.builder` met `itemCount: 0` crasht. Native fix gevonden: `Carousel`-widget (component `HomeUitgaanSliderComponent` → Widget Tree → ConditionalBuilder → If → Container → **Carousel**) → rechterpaneel → **"Empty List Widget"** → vink **"Show Empty List Widget"** aan → widget op een lege/onzichtbare placeholder zetten. **2026-08-04, na een verse export + builder-check: nog geen wijziging zichtbaar** — noch in de geëxporteerde code, noch in het "Empty List Widget"-paneel zelf (geen "Show"-checkbox aangevinkt te zien). Mogelijk is de klik niet aangekomen (zelfde rechterpaneel-clipping-risico als waarom Claude 'm niet zelf kon doen, zie `CLAUDE.md`). **Bob: kun je nogmaals checken of de checkbox echt aanstaat?** **P0-3 · Eigenaar: Bob — geblokkeerd op designvraag.** Hartje-icoon op gemeente. Bob koos: heart ergens anders dan de gemeente-dropdown zelf (die blijft ongewijzigd). **2026-08-04, Bob's antwoord:** hartje naast de provincienaam én naast de gemeentenaam, in de titel. Bob wil dat **elke pagina in de header de provincie- of gemeentenaam toont**, zodat gebruikers altijd zien waar ze zitten. **Nog te doen: Claude stelt een concreet voorstel op voor hoe dit in de gedeelde header verwerkt wordt** (welke pagina's, welke plek exact, hoe de naam ophalen — zie de bekende valkuil hieronder) en legt dat voor aan Bob vóór het bouwen. - Blocker die dit voorstel moet oplossen: **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. - 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. **P0-4 · Eigenaar: Bob.** Werkende login + favorieten — resterende deeltjes. 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 FavorietenAgenda-403 hierboven. **P0-5 · Eigenaar: Bob.** Drupal: anonieme leestoegang onderzoeken voor browse-endpoints. Drupal-niveau, geen Claude-taak. ## P1 — snel na livegang **P1-1 · Eigenaar: Claude.** Loading/foutafhandeling-patroon uitrollen naar overige lijst-/detailpagina's. Referentiepatroon staat inmiddels op `HorecagelegenhedenOverzicht` (Bob, 2026-08-04, in de builder: bij lege/mislukte data toont elke tab nu een standaardplaatje i.p.v. te crashen of te blijven laden — zie `CLAUDE.md` Domein/architectuurcontext). **Exacte builder-stappen nog niet gedocumenteerd** — check bij oppakken eerst met een verse export welke widget/property Bob gebruikt heeft (vermoedelijk iets als "Empty List Widget" op de MasonryGridView, analoog aan de Carousel-fix), en pas daarna hetzelfde toe op Event, HorecagelegenheidCurrent, sliders. **P1-2 · Eigenaar: Claude.** Overflow op Home-pagina. 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`. **P1-3 · Eigenaar: Claude.** Sliderkaartje: datumregel mist de Flexible-wrap. 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). **P1-4 · Eigenaar: Bob.** EstablishmentsCall crasht zonder categoriefilter. `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. **P1-5 · Eigenaar: Bob.** "Thuis bezorgen" koppelen aan een echt leverbaar-veld per horecagelegenheid. 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. **P1-6 · Eigenaar: Bob.** Letterlijke veldnaam i.p.v. nette placeholder bij ontbrekende data — audit afgerond 2026-08-04, 13 treffers. Patroon: `valueOrDefault(, '')` waarbij de default gelijk is aan de veld-/functienaam. Fix is mechanisch (Default Value-tekst aanpassen in de builder op het Text-widget), maar raakt waarschijnlijk dezelfde "Set from Variable"-property als de Empty-URL-fix — zelfde risico-inschatting als het CachedNetworkImage-patroon. - `horecagelegenheidoverzicht_kaart_widget.dart:357/381/408` — titel/adres/plaats - `event_current_widget.dart:416` — nid - `evenement_info_widget.dart:134/156/211/236/291` — adres/plaats/entreeprijs/entreetoelichting/contact - `evenement_component_widget.dart:216/238` — title/eventDate - Grensgevallen (geen letterlijke veldnaam maar wel technische/zinloze placeholder, zelfde fix-aanpak): `p_uitgaan_slider_kaart_component_widget.dart:284` toont `'def'` als datum ontbreekt; `evenement_horecagelegenheid_widget.dart:406` toont `'establishmentnid'`. - Niet-verdachte gevallen bewust genegeerd (echte inhoudelijke fallback, geen technische naam): `'Evenement'` (`kaart_tabel_uitgaan_comp_widget.dart:214`, `kaart_tabel_uitgaan_s_comp_widget.dart:121`) en `'Uitgaan'` (`tag_categorie_component_widget.dart:111`). **P1-7 · Eigenaar: Bob.** Account/profielscherm (wachtwoord wijzigen, uitloggen, account verwijderen). Bovenop de login/favorieten-P0-basis. Account verwijderen heeft mogelijk AVG-implicaties aan Drupal-kant. **P1-8 · Eigenaar: Claude, klein batchbaar in 1 sessie.** Toegankelijkheid & navigatie, restpunten: - 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`). **P1-9 · Eigenaar: Onbepaald.** Visuele polish (los, per pagina): Uitgaan-pagina (typografie/contrast/spacing), Event-pagina, HorecagelegenhedenOverzicht, tabel-kaartje-afstemming met slider-kaartje, categorie-tag mag titel/datum niet overstemmen. **P1-10 · Eigenaar: Onbepaald, onderzoek nodig.** Performance: - 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`. **P1-11 · Eigenaar: Onbepaald, onderzoek nodig.** Responsive/screensize-audit — o.a. het vaste 200×200px-tegelformaat in het venue-event-grid dat botst met de grid-berekening. ## P2 — features & concept, na livegang **P2-1 · Eigenaar: Bob — testen in de API, komt terug.** Datum-filter: Vandaag / Dit weekend / Deze week. **P2-2 · Eigenaar: Onbepaald.** 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). **P2-3 · Eigenaar: Onbepaald.** "In de buurt"/geolocatie-browsen — aanvulling op het provincie/gemeente-model, geen vervanging. **P2-4 · Eigenaar: Onbepaald.** Overige feature-ideeën, geen van alle uitgewerkt: "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). **P2-5 · Eigenaar: Onbepaald.** Ad-banners op horeca-overzicht, horeca-detail, event-detail; vaste regel: geen ads op locatie-kiezer/login/account. **P2-6 · Eigenaar: Onbepaald.** 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). **P2-7 · Eigenaar: Bob.** Opschonen: - 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).