Просмотр исходного кода

TASKS: livegang-checklist aangevuld (taken 60-73: icoon, splash, registratie-link, Play Console, release-smoketest, Crashlytics, App Links)

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
bob 5 часов назад
Родитель
Сommit
f72772615b
1 измененных файлов с 167 добавлено и 0 удалено
  1. 167 0
      TASKS.md

+ 167 - 0
TASKS.md

@@ -28,6 +28,173 @@ FlutterFlow-commit op `main`**, de commit-knop in het Version Control-paneel
 reageerde niet op Claude's klik. `dart analyze` op de verse export: 0 errors.
 Emulator-5556 heeft nu de profile-APK van die export + per-app-locale `nl-NL`.*
 
+
+### 🚦 Livegang-checklist — aanvulling 2026-09-16 laat (Claude: code-audit op de export van 23:22 + website + toestel, géén builder-werk)
+
+*Bob's vraag: "kijk naar de open taken, de app en de website, en vul de lijst aan
+met wat er nog moet vóór we live gaan." Hieronder alleen wat **nog nergens** in
+dit bestand stond. Wat al stond (Bob's 7, "Bij livegang", P1-17, P2-7, P2-25,
+P1-30, taak 56, AdMob test-ads) blijft daar leidend. Chat-nummering loopt door
+vanaf 60. `dart analyze` op de working tree van 23:22: **0 errors**.*
+
+**Nagemeten en in orde — niet opnieuw checken:** share-knop op `EventCurrent`
+deelt `https://uitgk.com/<nid>` en dat redirect naar de juiste eventpagina op de
+site (2 nids getest); AdMob app-id in het manifest en beide ad-unit-id's op
+`pUitgaanPage` zijn echte id's (geen `3940256099942544`); `applicationId`
+`com.uitgaanskrant.app`, `version 1.0.0+1`, `targetSdk 36`, Crashlytics
+gekoppeld in `main.dart`; geen credentials of `http://` in `lib/`; Home-tabs
+(Uitgaan/Activiteiten/Cultuur & Info/Films/Jeugd) dekken exact de vijf tabs van
+de website-homepage; `/nl/user/register` is anoniem bereikbaar (200).
+
+**🔴 Blokkeert de store-review of de eerste indruk**
+
+- **60 · P1-55 · App-icoon is nog het Flutter-standaardlogo — op Android én iOS.
+  Eigenaar: Bob.** `android/app/src/main/res/mipmap-*/ic_launcher.png` (1443
+  bytes = Flutter-default) en
+  `ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png` tonen
+  allebei het blauwe Flutter-vogeltje; de profile-APK op emulator-5556 heeft dus
+  ook dat icoon in de launcher. App Settings → App Details → **App Icon**: een
+  vierkant 1024×1024-logo uploaden (het `logo800px.png` uit `assets/images/` is
+  te breed voor een icoon — liever alleen het rode beeldmerk op wit). Verifiëren:
+  na een verse export moet `md5sum android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png`
+  ≠ `57838d52c318faff743130c3fcfae0c6`. Dezelfde 512×512 heb je ook voor de
+  Play-listing nodig (taak 63).
+- **61 · P1-56 · Splashscreen is een kaal wit vlak. Eigenaar: Bob.**
+  `launch_background.xml` bevat alleen `?android:colorBackground`, geen logo.
+  App Settings → **Splash Screen**: logo + achtergrondkleur `#F2F2F2` of wit.
+  Twee minuten werk, maar het is het allereerste wat een gebruiker ziet.
+- **62 · P1-57 · Geen "account aanmaken"-route in de app. Eigenaar: Claude
+  (builder, klein).** `Login` heeft alleen *Inloggen* en *Wachtwoord vergeten?*;
+  de helppagina belooft een "gratis account", maar in de app kun je er geen
+  maken. Toevoegen onder *Wachtwoord vergeten?*: een `Text` "Nog geen account?
+  Registreren" (dupliceer de bestaande link-`Text`, zelfde stijl `secondary` +
+  onderstreept) met `Launch URL` → `https://uitgaanskrant.com/nl/user/register`
+  (anoniem 200). Engelse vertaling meteen meegeven ("No account yet? Register").
+- **63 · Play Console — aanvulling op Bob's taak 2. Eigenaar: Bob.** Naast
+  (a) t/m (e) daar:
+  - **(f) App access / testaccount:** de app heeft een login, dus Google wil
+    inloggegevens van een testaccount (Play Console → App content → *App
+    access*). Maak een apart Drupal-account met wat favorieten en één gevolgde
+    gemeente, zodat de reviewer Favorieten kan zien.
+  - **(g) Listing-assets:** 512×512 icoon, feature graphic 1024×500, minimaal
+    2 telefoon-screenshots én 7"/10"-tablet-screenshots (de app ondersteunt
+    tablets, dan vraagt Google erom), korte (80) + lange (4000) omschrijving.
+    De helptekst van taak 59 is een prima basis voor de lange omschrijving.
+    Screenshots: profile-build op beide AVD's, `adb exec-out screencap -p`.
+  - **(h) Verklaringen:** Content rating (IARC-vragenlijst), *Contains ads*
+    → ja, **Advertising ID** → ja (AdMob), Target audience → 18+ of "alle
+    leeftijden" (er staat uitgaanscontent met 18+ in, kies bewust), en in
+    Data safety naast Crashlytics/AdMob/login ook **foto's** (camera + galerij
+    voor de aanmaakpagina's, `CAMERA`-permissie staat in het manifest).
+  - **(i) versionCode:** elke upload moet hoger zijn; `1.0.0+1` staat nu in
+    `pubspec.yaml`/`local.properties`. Bij een lokale upload-route: ophogen in
+    App Settings → App Details vóór elke build.
+- **64 · P1-58 · "Account verwijderen" in de app opent een 403. Eigenaar: Bob
+  (Drupal) of Claude (builder).** Favorieten tab 4 → knop *Account verwijderen*
+  → `launchURL('https://uitgaanskrant.com/nl/account-verwijderen')`
+  (`favorieten_widget.dart:957`). De browser opent zonder Drupal-sessie, dus de
+  gebruiker krijgt anoniem een **403** (gemeten) — precies het probleem dat ook
+  de store-review raakt (Bob's taak 2b). Kies één: (a) Drupal: die pagina
+  anoniem laten redirecten naar het loginformulier met `?destination=` i.p.v.
+  een 403; of (b) builder: de knop naar
+  `https://uitgaanskrant.com/nl/support/mobieleapp` laten wijzen (sectie "Je
+  account verwijderen"). (a) is netter, (b) is 1 minuut.
+
+**🟠 Vóór livegang, één ronde**
+
+- **65 · P1-59 · Release-build smoke-test op beide AVD's + Bob's Xiaomi.
+  Eigenaar: Claude (browserloos).** Tot nu toe is alles op *profile*-builds
+  getest; een echte `--release`/AAB nog nooit. Eén keer bouwen
+  (`fvm flutter build apk --release` uit een verse export mét
+  `--include-assets`, of de AAB uit FlutterFlow's deploy), installeren en
+  deze lijst doorlopen: verse start (`pm clear`) → header toont
+  "Amsterdam (gemeente)" → 5 Home-tabs + zoekveld + datumchips → kaart →
+  `EventCurrent` incl. share en *Website* → menu → Gemeente/Horeca (6 tabs +
+  zoeken) → zaakpagina + hartje (login-guard) → Thuis bezorgen → Provincie-blok
+  → Zoek stad → Toepassen → Login/uitloggen/wachtwoord vergeten →
+  Favorieten 4 tabs → evenement aanmaken (foto kiezen) → vliegtuigmodus
+  (verbindingsbanner) → toestel op Engels. Elke afwijking als eigen regel
+  hier noteren. In release verdwijnen debug-asserts én verandert
+  tree-shaking (icons!) — `FontAwesomeIcons`-glyphs die het in profile doen
+  kunnen in release wegvallen als `--no-tree-shake-icons` niet is meegegeven.
+- **66 · P1-60 · Crashlytics écht bewezen. Eigenaar: Bob (Firebase console) +
+  Claude (test-crash).** `main.dart` hangt `FlutterError.onError` aan
+  Crashlytics, maar er is nog nooit een crash in het dashboard gezien. Eén
+  bewuste testcrash (custom action `FirebaseCrashlytics.instance.crash()`
+  achter een tijdelijke knop, of `adb shell am crash` volstaat niet — moet
+  door Flutter heen) in een profile-build, app herstarten, en binnen ~5 min
+  moet 'ie in Firebase → Crashlytics staan. Zonder deze check weet je na
+  livegang niet of je blind bent.
+- **67 · P1-61 · Versielabel "v0001" onderin het menu. Eigenaar: Bob (keuze),
+  Claude bouwt.** `drawerComponent` toont een hardcoded `Text` "v0001"
+  (sleutel `7qpu1l01`). Of weghalen, of binden aan de echte versie: FlutterFlow
+  heeft onder *Global Properties* geen versie, dus dan een 3-regelige custom
+  function met `package_info_plus` (`PackageInfo.fromPlatform()`), of gewoon
+  handmatig "1.0.0" typen en bij elke release bijwerken. Advies: "1.0.0",
+  handmatig — het is één veld.
+- **68 · P1-17 · nameting Deel B op de export van 23:22 (levende code, zonder
+  `kanweg`/`copy`): 184 sleutels in gebruik, 18 met lege EN, 49 met EN == NL.**
+  De 18 lege: `Waar`, `WebsiteURL` (2×), `TicketsURL`, `Organisatie` (2×),
+  `Contact`, `Postcode`, `Categorie evenement`, `Of kies zelf een plaats`,
+  `Mijn gemeenten`, en **6× `Select...` + 1× `Search...`** — die laatste zeven
+  zijn FlutterFlow-defaults op de dropdowns van de aanmaakpagina's en staan
+  dus in het **Nederlands** ook nog op Engels; hoort bij P2-29 (NL: "Kies..." /
+  "Zoeken..."). Werkblad `TAAK-P1-17-vertalingen.md` bijwerken met deze telling.
+- **69 · API Calls `Entreeopties` en `Categorieen` lopen over `/en/`, de
+  overige 15 over `/nl/`. Eigenaar: Bob (API Calls-paneel, 2× URL).**
+  `api_calls.dart:77` en `:102`. Anoniem geven beide "Access denied", dus
+  Drupal serveert ze in de taal van het pad — met `/en/` krijg je Engelse
+  termlabels en foutmeldingen in de Nederlandse aanmaakpagina's. Omzetten
+  naar `/nl/` en export-verifiëren (`grep -n "/en/flutterdrup" api_calls.dart`
+  hoort 0 te geven).
+- **70 · P2-7 · de opruimlijst is verouderd — dit genereert de export van
+  23:22 nog aan dode eenheden in `lib/`:** `uitgaanspaginas/home_copy`,
+  `uitgaanspaginas/home_copy2` (nieuw vandaag), `kanweg/kanweg_home_copy`
+  (nieuw vandaag), `favorieten_copy`, `shared/drawer_component_copy`,
+  `components/header_buttons_component_copymethartje`,
+  `kanweg/kanweg_header_buttons_component_copy`,
+  `kanweg/kanweg_horecagelegenheden_overzicht`,
+  `kanweg/kanweghorecagelegenheid_current_copy`,
+  `uitgaanspaginas/home_uitgaan_slider_component_copy`,
+  `uitgaanspaginas/home_uitgaantabel_kaart_component_copy`,
+  `horecagelegenhedenoverzicht/horecagelegenheid_event_tabel_component_copy`.
+  Twaalf stuks; `homeCopy2` staat zelfs in `nav.dart` als route. Bob's taak 4
+  blijft de plek, dit is alleen de actuele lijst. Claude gooit niets weg.
+
+**🟡 Na de store-goedkeuring (P2, niet blokkerend)**
+
+- **71 · P2-37 · Android App Links + website-koppeling.** Het manifest heeft
+  alleen het custom scheme `uitgaanskrant://uitgaanskrant.com`; een `https`-
+  intent-filter ontbreekt en `https://uitgaanskrant.com/.well-known/assetlinks.json`
+  geeft **404**. Gevolg: een gedeelde `uitgk.com/<nid>`-link of een sitelink
+  opent nooit de app. Pas zinvol als de app in de store staat: App Settings →
+  *Deep Linking* → `https`-domein toevoegen, `assetlinks.json` met de
+  SHA-256 van de **upload-/signing-key** op de site zetten, en in `nav.dart`
+  een route die `/nl/.../<slug>` of `/node/<nid>` naar `EventCurrent` mapt
+  (de site kent alleen slugs; `flutterflow_events.json?nid=` wil een nid —
+  dus óf de share-link naar `uitgaanskrant.com/app/<nid>` laten wijzen, óf
+  een Drupal-redirect `/app/<nid>` → node).
+- **72 · P2-38 · Website ↔ app: wat de site heeft en de app niet.** Gezien op
+  uitgaanskrant.com: Contact, Vragen/Over ons, Algemene voorwaarden,
+  Nieuwsbrief (wekelijkse agenda), Adverteren, Merchandise, Ondernemers, en een
+  taalwissel. In de app alleen "Support pagina" (die Contact en Privacy al
+  dekt). Voorstel, Bob beslist: (a) na goedkeuring een **Play-Store-badge +
+  `<meta name="google-play-app" content="app-id=com.uitgaanskrant.app">`** op
+  de site (Chrome toont dan een app-banner); (b) optioneel één menu-item
+  "Nieuwsbrief" → `/nl/nieuwsbrief` (de site's wekelijkse agenda is precies
+  wat een app-gebruiker ook wil). De rest bewust niet — het menu is al lang
+  (taak 57.2).
+- **73 · P2-39 · Firebase Analytics staat uit.** `pubspec.yaml` heeft
+  `firebase_core` en `firebase_crashlytics`, geen `firebase_analytics`. Na
+  livegang weet je dus niet of iemand de app gebruikt, welke tab, welke
+  gemeente. Eén toggle in FlutterFlow (App Settings → Firebase → Analytics),
+  gratis, geen builder-werk verder. Wel meenemen in Data safety (taak 63h).
+
+*Terzijde, geen taak: emulator-5554 stond om 23:50 op een zwart scherm in
+`com.android.settings/.FallbackHome` (boot/lock-staat) terwijl er nog een
+`ff-run-fvm.sh`-sessie aan hangt; emulator-5556 draait de profile-build op
+`EventCurrent` (nid 5) en zag er goed uit — header, share-knop en adresblok.*
+
 ### ✅ Sessie 2026-09-16 (Bob klikt, Claude verifieert) — vertalingen, caching, helppagina
 
 *Werkwijze: Claude gaf taken per nummer, Bob voerde ze uit in zijn eigen browser,