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.
Wachtwoord voor alle zes: TendloDemo2026! — bruikbaar in de app
alleen in een build via scripts/flutter-with-defines.sh, zie
Inloggen hieronder.
| Account | Naam | Huishouden | Rol | Tier | Modules |
|---|---|---|---|---|---|
vrij@demo.tendlo.test | Vera | Demo Vrij | eigenaar | gratis | 5 |
solo@demo.tendlo.test | Sam | Demo Solo | eigenaar | Plus | 29 — alles |
gezin-ouder@demo.tendlo.test | Gijs | Demo Gezin | eigenaar | Plus | 11 |
gezin-partner@demo.tendlo.test | Puck | Demo Gezin | partner | Plus | 11 |
gezin-kind@demo.tendlo.test | Kim | Demo Gezin | kind | Plus | 11 |
minimaal@demo.tendlo.test | Mees | Demo Minimaal | eigenaar | Plus | 1 |
Vandaag, Taken, Agenda en Boodschappen zijn geen registry-modules en staan altijd aan — ook bij Mees.
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!.
flutter runtest/features/auth/login_screen_test.dart
(groep DEMO_LOGIN).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.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.
| Huishouden | Modules gevuld | Rijen |
|---|---|---|
| Demo Solo | 32 — alle registry-modules plus de kern | 165 |
| Demo Gezin | 14 | 71 |
| Demo Vrij | 8 | 37 |
| Demo Minimaal | 4 | 17 |
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.
Een paar dingen in de data zien er fout uit maar zijn het niet. Handig om te weten voordat je erover valt.
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.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.
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.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.
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.
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.
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.
xcodebuild -downloadPlatform iOS.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
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.