Testinformatie

Hoe je de app test, waarmee, en met welk account. Deze pagina gaat over de manier van testen. Wat er per ticket hertest moet worden staat op de hertestpagina — dat is de pagina voor de testers.

Bijgewerkt 29 juli 2026 · accounts beheerd met scripts/seed-demo-accounts.sh

6 demo-accounts 4 huishoudens 290 rijen demodata 2 manieren van testen

Welke pagina waarvoor — zodat je niet op de verkeerde zoekt

Hertestpagina
Voor Sandra en Laura. Per opgelost ticket: wat er gemeld was, wat we hebben gedaan, en welke stappen ze moeten doorlopen om te bevestigen. Georganiseerd per golf.
Deze pagina
Voor ons. Welke accounts er zijn, hoe je de app in de simulator draait, en welk account je pakt voor welke vraag. Bedoeld voor het beoordelen van schermen, niet voor het afvinken van tickets.
Statuspagina
Waar we staan en wat er nog moet richting TestFlight.

De demo-accounts — zes, met opzet

Wachtwoord voor alle zes: TendloDemo2026! — bruikbaar in de app alleen in een build via scripts/flutter-with-defines.sh, zie Inloggen hieronder.

AccountNaamHuishoudenRolTierModules
vrij@demo.tendlo.testVeraDemo Vrijeigenaargratis5
solo@demo.tendlo.testSamDemo SoloeigenaarPlus29 — alles
gezin-ouder@demo.tendlo.testGijsDemo GezineigenaarPlus11
gezin-partner@demo.tendlo.testPuckDemo GezinpartnerPlus11
gezin-kind@demo.tendlo.testKimDemo GezinkindPlus11
minimaal@demo.tendlo.testMeesDemo MinimaaleigenaarPlus1

Vandaag, Taken, Agenda en Boodschappen zijn geen registry-modules en staan altijd aan — ook bij Mees.

Inloggen — dit is de valkuil

lees dit eerst

De app is passwordless: het inlogscherm vraagt alleen een e-mailadres en stuurt een magic-link. Voor deze accounts kan die link nooit aankomen, want demo.tendlo.test bestaat met opzet niet. Er is daarom een test-only wachtwoordpad achter een dart-define.

scripts/flutter-with-defines.sh run -d <simulator-id>

Dat script zet --dart-define=DEMO_LOGIN=true. Alleen dán toont het inlogscherm een wachtwoordveld met de knop "Log in met wachtwoord", onder de gewone "Stuur inloglink". In de app: Instellingen → Inloggen / account aanmaken, dan het adres uit de tabel hierboven plus TendloDemo2026!.

Start de app dus niet met een kaal flutter run
Zonder dit script mis je niet alleen het wachtwoordveld maar ook de Supabase- en PowerSync-defines — de app draait dan lokaal en leeg, en geen enkele geseede rij is te zien.
Een store- of TestFlight-build verandert hier niet van
Die gaat niet door dit script, zet de define dus niet, en toont exact het gewone magic-link-scherm. Dat ligt vast in test/features/auth/login_screen_test.dart (groep DEMO_LOGIN).
Terugvalroute als de define niet werkt
Tik in de app op "Stuur inloglink" — dat moet écht, want de app bewaart de PKCE-code_verifier lokaal en een van buitenaf gemaakte link werkt niet. Lees dan de verse code en open de callback in de simulator:
scripts/prod-sql.sh "select auth_code from auth.flow_state \
  order by created_at desc limit 1"

xcrun simctl openurl booted \
  "io.supabase.tendlo://login-callback?code=<auth_code>"
Omslachtig en foutgevoelig; alleen gebruiken als de define-route niet kan.

Welk account pak je voor welke vraag?

spiekbriefje
"Ziet dit scherm er goed uit?"
Sam — alles staat aan en is gevuld, dus elk scherm is bereikbaar zonder eerst modules te moeten aanzetten.
"Klopt het delen en de rechten?"
Gijs, en controleer wat Puck en Kim van hetzelfde item zien. Dit is het enige huishouden met meerdere leden, dus de enige plek waar deel-gedrag echt te zien is.
"Wat mag een kind wel en niet?"
Kim. Zakgeld, kleedgeld en gezinsafspraken gedragen zich anders per rol; dat zie je niet met een eigenaar-account.
"Hoe voelt de gratis versie?"
Vera. Hier botsen de Plus-grenzen echt, want er is geen entitlement. Let op hoe een grens wordt uitgelegd — dat is een van de dingen die we willen beoordelen.
"Hoe ziet een lege app eruit?"
Mees. Eén module aan. Blijft de app dan nog logisch, of voelt hij kapot?

Waarom er verzonnen accounts zijn

belangrijk

Bij het testen in Claude Desktop gaan schermafbeeldingen van de simulator naar Anthropic. De documentatie zegt daar expliciet over: "don't sign in to real accounts on a device Claude uses." Ons echte huishouden staat vol met financiële en gezondheidsgegevens, dus dat is geen theoretisch bezwaar.

Deze accounts bevatten uitsluitend verzonnen data, en het domein demo.tendlo.test bestaat niet — er kan dus nooit echte post naartoe, en de teardown filtert op dat domein en kan daarom onmogelijk een echt account raken.

Wat er in de accounts zit

Gevulde modules

geseed 29 juli
HuishoudenModules gevuldRijen
Demo Solo32 — alle registry-modules plus de kern165
Demo Gezin1471
Demo Vrij837
Demo Minimaal417

Per module 4 tot 8 rijen, met bewuste variatie: iets van vandaag, iets uit het verleden, iets ver vooruit; korte én lange titels zodat afkap-gedrag zichtbaar wordt; items mét en zónder optionele velden; en bedragen in verschillende frequenties zodat de omrekening naar maandbedrag te zien is (€4,95 per maand naast €2.499 per jaar en een kwartaalpost).

Beheer: scripts/seed-demo-data.sh met --list, --check en --teardown. Los van het accountscript, zodat je de inhoud kunt verversen zonder opnieuw te moeten inloggen.

Bewuste randgevallen — geen bugs

lees dit vóór de doorloop

Een paar dingen in de data zien er fout uit maar zijn het niet. Handig om te weten voordat je erover valt.

Kim ziet één van haar eigen klusjes niet
"Tafel afruimen" is aan Kim toegewezen, maar de deelkring is Gijs en Puck. Dat is precies het override-geval uit TEN-122: toewijzen deelt standaard mee, maar de gebruiker mag dat intrekken. Van de vier taken die aan Kim hangen zijn er drie wél normaal zichtbaar, dus je kunt beide standen naast elkaar zien.
Boodschappen in Demo Gezin is gezinsbreed
Niet uit slordigheid: er mag maar één actieve boodschappenlijst per huishouden bestaan, dus daar is geen deel-variatie mogelijk.
Demo Solo staat volledig op privé
Dat is juist: er is niemand om mee te delen. Deel-gedrag beoordeel je in Demo Gezin.
"build 1" onderaan Instellingen
Onderaan Instellingen staat nu de echte build, bijvoorbeeld 1.0.0 (build 1248); tik erop en hij staat op je klembord, zodat je hem in je feedbackbericht kunt plakken. Staat er build 1, dan draai je een lokale build (simulator of flutter run) — die krijgt geen buildnummer mee. Lees dat dus niet als TestFlight-build 1. Het achtervoegsel · lokaal betekent dat die build geen cloud-sync heeft.

Wat nog leeg is

eerlijk gat
Stappenteller onder Beweging
Beweging heeft wél sessies maar géén stappen-data, dus dat ene scherm is leeg bij Sam. Het enige echte gat in een aangezette module.
Verlanglijst, betaalpassen, betaald-markeringen
Leeg. Voor de betaald-markeringen (TEN-116) is dat jammer, want daar loopt nog een her-test op.
Bijlagen en bonnetjes
Bewust overgeslagen: daar zijn echte bestanden voor nodig, geen databaserijen. Documenten hebben wél metadata-rijen, dus dat scherm is niet leeg.

Twee manieren van testen

1 · In de simulator, met Claude Desktop

voor beoordelen

Sinds 21 juli heeft Claude Code Desktop een iOS Simulator-paneel naast het gesprek. Jij en Claude sturen hetzelfde toestel aan: jij tikt door de app, Claude ziet hetzelfde scherm en kan per module meekijken en adviseren.

Nodig
Claude Desktop v1.24012.0 of nieuwer, macOS, en Xcode met de iOS-simulator geïnstalleerd. Zit in Pro, Max en Team — niet in Enterprise.
Starten
Code-tab → sessie met projectmap pa_app → vraag om de app in de simulator te draaien, expliciet via scripts/flutter-with-defines.sh run. Het paneel opent vanzelf zodra de app start. Zie Inloggen voor waarom dat script verplicht is.
Waarom dit anders is dan de CLI
Het paneel stuurt de simulator rechtstreeks aan, zonder computer use en zonder je scherm over te nemen. Vanuit de CLI kan dat alleen via computer use.
Let op
Alleen simulators, geen fysieke iPhone. Voor wat Sandra en Laura op hun eigen toestel zien blijft de gewone testronde nodig.

2 · Met het screenshot-harnas

voor vastleggen

Er staan 23 integratietests klaar die de app aansturen en schermafbeeldingen maken — onder andere Vandaag, Taken, Boodschappen, Agenda en het deelmodel, elk in licht én donker. Die leveren een artefact op dat in de documentatie kan en dat blijft kloppen.

scripts/flutter-with-defines.sh drive \
  --driver=test_driver/integration_test.dart \
  --target=integration_test/vandaag_marketing_ui_test.dart \
  -d <simulator-id>

De schermafbeeldingen landen in build/screenshots/. Gebruik dit om vast te leggen wat je besluit; gebruik de simulator hierboven om te verkennen.

Hand-off naar een Desktop-sessie — kopieer en plak

Start in Claude Desktop een sessie in de Code-tab met projectmap pa_app en plak één van deze blokken. De kern van beide: de agent tikt niet vooruit. Zonder die instructie klikt hij de app zelf door en ben jij toeschouwer bij je eigen doorloop.

A · Schermen beoordelen

begin hier
Lees eerst docs/archive/sessions/HANDOVER.md en docs/testen/index.html zodat je weet waar dit
project staat en welke testaccounts er zijn.

Start de app daarna in de iOS-simulator met
`scripts/flutter-with-defines.sh run -d `. Dat script is
verplicht: het zet de Supabase-, PowerSync- en DEMO_LOGIN-defines. Zonder die
laatste heeft het inlogscherm geen wachtwoordveld, want de app is normaal
magic-link-only.

Ga daarna naar Instellingen > "Inloggen / account aanmaken", vul
solo@demo.tendlo.test in met wachtwoord TendloDemo2026! en tik op "Log in met
wachtwoord". Blijf daarna op het Vandaag-scherm staan.

Vanaf dat moment: NIET zelf doorklikken. Ik klik zelf door de app en zeg per
scherm wat ik zie. Jij kijkt mee in hetzelfde simulatorpaneel en geeft per punt
je oordeel — wat werkt, wat wringt, en waaróm. Vraag door als mijn opmerking
meerdere kanten op kan.

Bouw deze sessie niets en repareer niets, ook niet als iets duidelijk stuk is.
Noteer bevindingen per module. Aan het eind vat je ze samen en stel je voor
welke tickets ik zou moeten aanmaken; ik beslis dat, niet jij.

Als een bevinding raakt aan iets dat al besloten of geparkeerd is — de
datumkiezer, Vermogen, de AI-assistent, de swipe-conventie — zeg dat er dan bij
in plaats van het opnieuw voor te stellen. Dat staat in docs/archive/sessions/HANDOVER.md.

B · Delen en rechten beoordelen

daarna
Lees eerst docs/archive/sessions/HANDOVER.md en docs/testen/index.html.

Start de app in de iOS-simulator met
`scripts/flutter-with-defines.sh run -d ` — dat script zet de
DEMO_LOGIN-define, en zonder die define heeft het inlogscherm geen
wachtwoordveld (de app is normaal magic-link-only).

Log daarna in via Instellingen > "Inloggen / account aanmaken" met
gezin-ouder@demo.tendlo.test en wachtwoord TendloDemo2026!, via de knop "Log in
met wachtwoord". Dat is Gijs, eigenaar van huishouden Demo Gezin.

Ik klik zelf door de app; jij kijkt mee en oordeelt per scherm. Niet vooruit
tikken, niets bouwen.

Waar het hier om gaat: is voor mij als gebruiker te zien en te begrijpen wie wat
ziet? Let op items die gedeeld, privé of gericht gedeeld zijn, en op de
verschillen per rol. Wil je hetzelfde item door de ogen van een ander lid zien,
zeg het dan — dan log ik om naar gezin-partner@ (Puck) of gezin-kind@ (Kim).

Let op: "Tafel afruimen" is bewust aan Kim toegewezen zonder haar in de
deelkring te zetten. Dat is het override-geval uit TEN-122 en geen bug; de
andere drie taken van Kim zijn wél normaal zichtbaar.

Als het paneel niet opengaat

troubleshooting
Formuleer het doel expliciet
"Draai de app in de iOS-simulator" werkt; "kijk eens naar het Vandaag-scherm" vaak niet. Het paneel opent pas als Claude de app daadwerkelijk in een simulator start.
Controleer de versie
Claude Desktop v1.24012.0 of nieuwerClaude → Check for Updates, daarna herstarten.
Geen simulators gevonden
Xcode staat er wel maar zonder iOS-runtime. Het paneel toont dan de stappen; handmatig kan met xcodebuild -downloadPlatform iOS.

Accounts beheren

scripts/seed-demo-accounts.sh              # aanmaken of bijwerken (idempotent)
scripts/seed-demo-accounts.sh --list       # tonen wat er staat
scripts/seed-demo-accounts.sh --teardown   # alles weghalen
Demodata staat apart
In een eigen script, zodat je de inhoud kunt verversen zonder de accounts opnieuw aan te maken — en zonder opnieuw te moeten inloggen op de simulator.
Valkuilen zitten erin verwerkt
Vier stuks, toegelicht in het script zelf en in testaccounts.md. De vervelendste: laat je de varchar-tokenkolommen van auth.users op NULL staan, dan faalt inloggen met een misleidende 500 Database error querying schema. Dat leest als een schema- of rechtenprobleem, maar het is dit.