Tendlo is een local-first, privacy-first gezins-/huishoudassistent voor iOS en Android (Flutter). Alles wat een huishouden draaiende houdt — agenda, taken, boodschappen, maaltijden, schoolvakanties, sport, co-ouderschap, geldzaken, gezondheid — komt samen in één rustige app.
Data staat standaard op het eigen toestel; cloud-sync en gezinsdelen zijn opt-in (Supabase + PowerSync, EU). AI (documentscan, capture-herkenning, gegronde assistent) is een optionele versneller, nooit een vereiste. De historie van een gezin wordt nooit "gegijzeld".
Kerncijfers stand 2026-07-12
28
registry-modules (5 Free, 23 Plus), alle 28 ✅ Live en deep-linkbaar
6
domeinen (eten · gezin · huis · geld · gezondheid · bewaren); geld en gezondheid zijn sensitive (standaard privé) — herzien 2026-08-06; de domeinpagina's onder Product tonen nog de oude negen-indeling
Tendlo bestaat uit een altijd-gratis kern van 8 vaste surfaces (de vier tabs plus de schermen eromheen) en 28 registry-modules verdeeld over 6 domeinen (herzien 2026-08-06; de kaarten en domeinpagina's hieronder tonen nog de oude negen — zie de notitie daar). Alle 28 registry-modules zijn gebouwd en bereikbaar (✅ Live, stand 2026-07-12). Tier: 5 Free, 23 Plus — maar Plus-handhaving staat nog uit. Sinds rechten fase 3 (live 2026-07-12) zijn nieuwe items standaard privé-tenzij-gezinsinfra en zijn module-activatie + meldingen persoonlijk per lid.
Status: ✅ Live (gebouwd, bereikbaar op genoemde route) · 🟡 Gedeeltelijk (werkt, met benoemd gat) · 🔧 In uitvoering · 📋 Gepland (met fase) · 💤 Bewust uitgesteld / non-goal
Hoe modules samenhangen
Modules registreren zichzelf in een registry en krijgen daardoor "gratis": een route (deep-linkbaar), een tegel in Mijn leven, agenda-injectie, Vandaag-secties, reminders, AI-extractors, capture-landingen en module-instellingen. De domeinen geld (tot 6 augustus 2026 financieel geheten) en gezondheid zijn gemarkeerd als sensitive: items zijn daar standaard privé per gebruiker en AI vereist een aparte per-domein-opt-in.
De 8 kern-surfaces gratis kern
De vier tabs plus de vaste schermen eromheen vormen de altijd-gratis kern.
De app kent sinds merge 0ea70a81 nog zes domeinen: Eten · Gezin · Huis · Geld · Gezondheid · Bewaren (lib/features/app_domains.dart:81-120). Planning, Bewaarlijsten, Vastgoed, Voorraad en Welzijn bestaan niet meer als domein en Financieel heet nu Geld; hun modules zijn onder de zes verdeeld (per module te zien aan domainId: in de *_module.dart-descriptors). De negen domeinkaarten en -pagina's hieronder zijn nog niet herschreven — lees ze als de stand van 2026-07-12, niet als de huidige indeling. De modules zelf en hun beschrijvingen kloppen wél; alleen de groepering eromheen is verouderd.
Taken, Agenda en Boodschappen staan als echte screenshots op de homepagina. Voor Vandaag en de Assistent is er nog geen screenshot; hieronder een impressie in huisstijl (CSS-mockup, geen echte schermafbeelding).
Impressie
Vandaag · dagbriefing
Goedemorgen
Wat vraagt je aandacht diner niet geplandtaak zonder eigenaar
Nu
Urgent item 1
Urgent item 2
Dagstroom
Ochtend · afspraak
Middag · klusje
Avond · maaltijd
Familiestrook · wie doet wat vandaag
Lid A · Lid B · Lid C
Vandaag (tab 1) — impressie
Impressie
Assistent · tab 4
Vraag het je gezin-data
"Wanneer is oma jarig?"
Antwoord, gegrond op eigen appdata (7 modules)
"Zet melk op de lijst"
Bevestigingskaart — pas na bevestigen wordt geschreven BevestigenAnnuleren
géén open chatbot · dicteerknop on-device
Assistent — impressie
Bron:docs/product/README.md · docs/archive/superseded/product/status-overzicht.md · de moduledocs in docs/product/modules/
Kern-surfaces gratis kern
De 8 vaste schermen die samen de altijd-gratis kern vormen — geen registry-modules, maar de ruggengraat waar alle modules op aanhaken.
Status: ✅ Live (gebouwd, bereikbaar op genoemde route) · 🟡 Gedeeltelijk (werkt, met benoemd gat) · 🔧 In uitvoering · 📋 Gepland (met fase) · 💤 Bewust uitgesteld / non-goal
Doel. De dagbriefing van Tendlo: één scherm dat 's ochtends in één blik de dag samenvat en zegt wat aandacht vraagt. Zelfverbergende secties, gevoed door de andere modules — een lege sectie verdwijnt gewoon, zodat het scherm rustig blijft.
Zo werkt het nu
✅ Header met begroeting + weer (Open-Meteo + geolocatie) en de dagbriefing-zin (deterministisch, optioneel door AI herschreven)
✅ Nu-blok (max 3 urgente items), dagstroom per dagdeel en "Nog te doen"
🟡 Gaps-band "Wat vraagt je aandacht" (diner niet gepland, taken zonder eigenaar, inbox-achterstand) — per-gap-instellingen zijn expliciete follow-up
🟡 Discovery-sectie (max 3 setup-nudges) — dismiss is bewust alleen in-memory per sessie (v1)
✅ Regelgebaseerde suggesties (opzegdeadlines, vervallend onderhoud), familiestrook, Klaar-bak, quote van de dag en invite-prompt
Waar het naartoe moet
📋 Briefing + gaps samenvoegen tot één kaart (akkoord 2026-07-06, Golf 2)
📋 "Wie doet wat vandaag"-groepering per lid (Golf 1-infra)
📋 Tech-debt: van module-fan-out naar base-primitive-queries (M3+)
Bron: docs/product/modules/vandaag.md
Taken
✅ Live/taken (tab 2) · lib/features/tasks/
Doel. De gezamenlijke takenlijst van het huishouden: taken per categorie, met deadline, toewijzing aan een gezinslid en herhaling. Een van de drie kern-primitives (naast Agenda en Lijstjes) waar andere modules op bouwen.
Zo werkt het nu
✅ Takenlijst met categorieën, afvinken en een aparte Afgerond-sectie
✅ Quick add (1-tap-invoer met default-categorie) en huishoud-sjablonen
✅ Live/agenda (agenda-knop in de AppBar + drawer) · lib/features/agenda/
Doel. Eén samengevoegde tijdlijn voor het hele huishouden: eigen afspraken, alles wat modules bijdragen (verjaardagen, sport, schoolvakanties, …) en — na expliciete koppeling — de agenda van het toestel, in één per dag gegroepeerde lijst over het komende jaar.
Zo werkt het nu
✅ Geünificeerde lijst-agenda (12 maanden) met module-accent-iconen, avatars en herhaal-marker
✅ Eigen afspraken met herhaling (calendar_events-primitive), quick-chips en lid-picker
✅ Module-injecties van 10 modules met eigen icoon/accent/detailroute
✅ Device-agenda read-only (permissie pas bij koppelen); conflictdetectie bij overlap
✅ AI-scan in de afspraak-sheet en een dagelijkse digest-melding (afspraken + taken + verjaardagen)
Waar het naartoe moet
📋 AI vrije-tekst-invoer ("dinsdag 14u tandarts") — Golf 1
📋 Twee-weg Google/Apple-agenda-sync — M3+
💤 Week-/maandweergave en reistijd-herinnering — bewust later
Doel. Gedeelde checklists voor het huishouden op de lijst-primitive. De boodschappenlijst is de ingebouwde standaardlijst (altijd gepind); daarnaast vrije, gekleurde lijsten. De registry-module Bewaarlijsten is hetzelfde scherm onder een andere route — er is bewust maar één lijstsysteem.
Zo werkt het nu
✅ Lijstenoverzicht + lijst-detail met afvinken
✅ Slimme invoer-parser: "2x melk" wordt hoeveelheid + product — zonder AI
✅ AI-splitsing van een dump (heel boodschappenbriefje → losse regels) en AI-scan (foto/PDF)
✅ Inflow uit Maaltijden (ingrediënten met dedupe) en Voorraad (lage voorraad → één tik naar de lijst)
Waar het naartoe moet
📋 Favorieten / vaste producten — Golf 2
📋 AI schap-classificatie (Plus) en afvinken → voorraad ophogen
💤 Schapsortering en real-time presence — geparkeerd
✅ Live/inbox + capture-FAB midden op de tabbalk · lib/features/inbox/
Doel. Het vangnet van Tendlo: alles wat je snel wilt vastleggen (getypt, gedicteerd of van buiten de app gedeeld) landt hier en wordt later getriageerd naar de juiste module. Handmatige invoer is de #1 klacht in deze markt; capture is daarom een van de drie doorsnijdende pijlers.
Zo werkt het nu
✅ Bel-knop met ongelezen-badge op elke tab; capture-FAB met typen of dicteren (on-device spraak)
Doel. Een gegronde vraag-en-antwoord-laag over je eigen appdata — nadrukkelijk géén open chatbot. Een router-stap classificeert elke vraag naar een ondersteunde module + actie en weigert alles daarbuiten; de assistent muteert nooit zelfstandig data. AI-antwoorden zelf zijn Plus-gated.
Doel. De beheerlaag van Tendlo: profiel en gezinsleden, modules aan/uit, meldingen, beveiliging, back-up, privacy en sync. Het instellingen-scherm is zelf declaratief/injectable: modules dragen hun eigen instellingen-secties bij via de registry.
✅ Thema + taal (nl/en/de) — taal wisselen verandert nooit data/AI-gedrag
✅ Modules beheren: per-module aan/uit is sinds rechten fase 3 persoonlijk per lid (gezinsset als startpunt voor nieuwe/keuzeloze leden; beheerder-blokkade alleen voor kind/extern), gepresenteerd als inklapbare lijst per domein met per rij toggle + instellingen-icoon. Per-module notificatie-schema's (meerdere tijden per dag) blijven een "planned extension"
✅ Meldingen: globale switch, stille-uren-venster, per module toggle + voorlooptijd — sinds fase 3 persoonlijk per lid (gezinswaarde als default); alle notificaties lokaal
Doel. De eerste-startervaring: in vier korte stappen van installatie naar een werkende, gepersonaliseerde app — zonder dat een account nodig is. Cloud-sync en gezin-delen zijn opt-in en komen pas later (via login).
Zo werkt het nu
✅ 4-stappen-flow: Welkom (brand-hero) → naam → gezin → modulekeuze
✅ Gezin is opt-in, solo is de default (owner-besluit 2026-06-16)
✅ Modulekeuze per module, met "Populair"-voorselectie
✅ Invite-accept tijdens onboarding; bij eerste cloud-login worden lokale data geadopteerd
📋 14-daagse Plus-trial in onboarding — spec 2026-06-17, wacht op RevenueCat-wiring (M1)
Waar het naartoe moet
📋 Paywall/trial-stap (B5/RevenueCat) — M1
📋 Consent-stap (analytics/AI-disclosure) — M2
Paywall hoort pas ná het "family moment" (tweede lid erbij), niet vóór de eerste waarde-ervaring
Sport, school, verjaardagen, co-ouderschap en gezinsafspraken — de NL/EU-gezinsdiepte die Tendlo onderscheidt van internationale gezinsapps.
Status: ✅ Live (gebouwd, bereikbaar op genoemde route) · 🟡 Gedeeltelijk (werkt, met benoemd gat) · 🔧 In uitvoering · 📋 Gepland (met fase) · 💤 Bewust uitgesteld / non-goal
Sportkalender
✅ LivePlus/module/sportkalender
Doel. Alle trainingen en wedstrijden van de (sportende) gezinsleden op één plek, per team of individuele sport, zodat niemand meer hoeft te zoeken in clubapps of groepsapps. De owner-spec (2026-06-18) is de bron-van-waarheid voor deze module.
Zo werkt het nu
✅ Teams & individuele sport; trainingen/wedstrijden met thuis/uit, locatie en herhaling (wekelijks/tweewekelijks)
✅ Afgelasting (doorgestreept, te heractiveren) en AI-scan van een wedstrijdschema (foto/PDF → voorgevulde events)
🟡 iCal-import per team — handmatige actie per keer; automatische periodieke sync ontbreekt nog (📋 Golf 3)
✅ Reminders, agenda-injectie en gegronde assistent-vragen (één van de 7 modules)
Waar het naartoe moet
📋 Golf 3: automatische periodieke iCal-sync, vervoer/carpool-afspraak per wedstrijd, kortere invoer, AI teampagina/foto → team + wedstrijden in één keer
Bron: docs/product/modules/sportkalender.md
Schoolvakanties
✅ LiveFree/module/schoolvakanties
Doel. Schoolvakanties, feestdagen en studiedagen per schooljaar in beeld, zonder handmatig overtypen: de officiële rijksoverheid-vakantiedata per regio (noord/midden/zuid) zit gebundeld in de app.
Zo werkt het nu
✅ Periodes per schooljaar, handmatig aan te vullen/bewerken
✅ Rijksoverheid-dataset-import: schooljaren 2024-2025 t/m 2029-2030, per regio
✅ NL-feestdagen (berekend), AI-scan van een schoolbrief en agenda-spiegel (blauwe hele-dag-band)
Waar het naartoe moet
📋 Golf 3: automatisch aanbod van het nieuwe schooljaar, regio per kind, koppeling met co-ouderschap (ná het herhaalschema daar), AI schoolbrief → studiedag, leden-picker "wie is vrij"
Bron: docs/product/modules/schoolvakanties.md
Verjaardagen
✅ LiveFree/module/verjaardagen
Doel. Nooit meer een verjaardag, trouwdag of jubileum vergeten: jaarlijks terugkerende gebeurtenissen met automatische leeftijdsberekening en een melding op de dag zelf (nooit vooraf, conform de owner-spec van 2026-06-18).
✅ Reminders op de dag zelf, taart-icoon in de agenda en vermelding in de dagelijkse digest
✅ Delen per item — Verjaardagen was de pilot-module van rechten-fase 2.1 ("gedeeld met specifieke leden", afgedwongen in DAO + RLS + sync-stream)
✅ Gegronde assistent-vragen ("Wanneer is oma jarig?")
Waar het naartoe moet
📋 Golf 3: koppelen aan een gezinslid, cadeau-idee/wishlist per persoon, automatische taak "cadeau kopen" X dagen vooraf, AI kalenderfoto → meerdere verjaardagen. 💤 Mijlpaal-highlight bewust doorgeschoven.
Bron: docs/product/modules/verjaardagen.md
Co-ouderschap
✅ LivePlus/module/coouderschap
Doel. Voor gezinnen met gescheiden ouders: in één oogopslag zien waar de kinderen wanneer zijn ("even weken bij mij, oneven bij papa"). Concurrerende gezinsapps missen dit vrijwel allemaal.
Zo werkt het nu
🟡 Periodes "wie is wanneer waar" — benoemd gat: geen herhaalschema; een vast twee-wekelijks patroon moet nu periode voor periode handmatig worden ingevoerd (📋 Golf 3)
📋 Golf 3, éérst: het herhalend schema — het grootste gemis én de hardste afhankelijkheid: het blokkeert drie andere items (schoolvakantie-koppeling, wissel-melding, AI-schema-invoer). Daarnaast: gezinslid-picker en overdracht-checklist per wissel.
Doel. "Duidelijke gezinsafspraken en klusjes op één plek. Kinderen pakken zelf op, ouders houden overzicht." Ouders leggen vast wat er geldt (zakgeld, kleedgeld, huisregels, vakantie/rapport) en zetten klusjes uit met een beloning; kinderen nemen klusjes aan op hun eigen toestel, ouders keuren goed en betalen handmatig uit. 🔧 OpenSpec-change op 66/67 taken (de enige open taak is bewust uitgesteld).
Zo werkt het nu
✅ Hub met rubriek-tegels; klusjes-taakbord met statussen Open → Aangenomen → Klaar → Goedgekeurd → Uitbetaald
✅ Eerlijke rotatie (24 uur voorrang voor wie vorige keer niet deed), samen-doen met beloning-verdeling en corvee-roulatie (onbetaald)
✅ Zakgeld-ledger & saldo per kind (handmatig uitbetalen), kleedgeld-bonnen met AI-herkenning en wenslijst per kind
✅ Geld-guard server-side: beloning, goedkeuren en uitbetalen zijn admin-only (Postgres-migratie 0040/0041)
🟡 Bord-privacy voor siblings — masking is in v1 client-side; server-side afdwingen is bewust v1.1
Afval, vakanties, beweging en eten: de plannende modules, met de directe lijn recept → maaltijd → boodschappenlijst als spil.
Status: ✅ Live (gebouwd, bereikbaar op genoemde route) · 🟡 Gedeeltelijk (werkt, met benoemd gat) · 🔧 In uitvoering · 📋 Gepland (met fase) · 💤 Bewust uitgesteld / non-goal
Afvalkalender
✅ LiveFree/module/afvalkalender
Doel. "Nooit een container missen, met minimale invoer": ophaalregels per afvalsoort met de volgende ophaaldag bovenaan, een herinnering vooraf en een "buitenzetten"-rij op Vandaag. Typisch NL-gemak (gemeentelijke .ics-kalenders).
Zo werkt het nu
✅ Ophaalregels per afvalsoort (GFT, papier, rest, …) met herhaling en berekende volgende beurt
✅ .ics-import vanaf bestand én URL (eenmalige fetch); vakantiepauze + skip van één beurt
✅ Reminders + agenda-spiegel; pauze/demping op één toestel werkt door in de reminders van andere toestellen
✅ "Buitenzetten" op Vandaag (ophaalbeurt van vandaag/morgen in de dagstroom)
Waar het naartoe moet
📋 Golf 4: gemeente-URL koppelen met automatische updates, notificatie de avond ervoor, AI postcode → kalender-suggestie en AI foto van de papieren kalender → hele reeks
Bron: docs/product/modules/afvalkalender.md
Vakantieplanning
✅ LivePlus/module/vakantieplanning
Doel. Geboekte reizen én vakantie-ideeën op één plek, met per vakantie een dagplanning, ideeënlijst en voorbereidingstaken — zodat de aanloop naar een reis niet in losse notities en groepsapps versnippert.
Zo werkt het nu
✅ Vakanties in tabs (gepland / ideeën / …); detail met dagplanning, ideeën en voorbereidingstaken
✅ Reminders + agenda-spiegel; vakantieperiode als band met vliegtuig-icoon in de agenda
Waar het naartoe moet
📋 Golf 4: checklist-sjablonen per reistype, voorbereidings-badge, idee → boeking in één tap, budget/kosten per vakantie, AI vrije tekst → vakantie + checklist
Bron: docs/product/modules/vakantieplanning.md
Beweging
✅ LivePlus/module/beweging
Doel. Eigen sport- en beweegafspraken plannen en wekelijkse consistentie zichtbaar maken: weeksessies met voortgang en een streak die motiveert om het ritme vast te houden. (Voor sportende kinderen met teams is er de aparte Sportkalender.)
Zo werkt het nu
✅ Weeksessies met zichtbare voortgang van de lopende week en een streak (aaneengesloten weken)
✅ Herhaling, reminders + agenda-spiegel en agenda-injectie (via die weg ook op Vandaag)
Waar het naartoe moet
📋 Golf 4: vast wekelijks sessie-sjabloon, weekdoel (X sessies per week), gemiste sessie herplannen, AI vrije tekst → sessie
Bron: docs/product/modules/beweging.md
Maaltijden
✅ LiveFree/module/maaltijden
Doel. Het eetschema van het gezin plannen: wie eet wat en wanneer, met een directe lijn van recept naar planning naar boodschappenlijst. "Wat eten we vanavond?" is één van de meest gestelde gezinsvragen — de diner-gap op Vandaag signaleert het actief.
✅ Maaltijd-slot = agenda-event (op de calendar_events-primitive), met conflictdetectie bij dubbele boeking
✅ Recept-kiezer in de add-sheet; ingrediënten gaan gededupliceerd naar de boodschappenlijst
✅ Diner-gap op Vandaag en gegronde assistent-vragen
Waar het naartoe moet
📋 Golf 4: slots slepen/kopiëren + "herhaal vorige week", AI meerdere slots in één keer + weekmenu genereren (Plus). 💤 Portie-schaling bewust doorgeschoven.
Bron: docs/product/modules/maaltijden.md
Recepten
✅ LivePlus/module/recepten
Doel. Een herbruikbare receptenbibliotheek die honderden recepten aankan en doorschakelt naar plannen en boodschappen: zoeken en verzamelingen doen het werk, met alleen de naam als verplicht veld. Recepten-v2 is geland op 2026-07-10 (25/25 taken).
Zo werkt het nu
✅ Zoeken op naam + ingrediënten + tags; vaste verzamelingen (Alles · Familierecepten · Favorieten · Recent toegevoegd)
✅ Tag-groepen (keuken, gerecht, moment, dieet), familierecept-markering en cover-foto's
✅ Kookmodus (fullscreen stap-voor-stap, scherm-aan) en "Inplannen" vanaf detail met dubbel-plan-detectie
✅ AI foto-import én AI URL-import (webpagina → recept); deelmodel per recept
🟡 Favoriet-hart per lid — werkt, maar device-lokaal: favorieten roamen niet tussen toestellen (post-testfase: join-tabel)
Waar het naartoe moet
📋 Golf 4: AI social-media-screenshot → recept. 📋 Post-testfase: favorieten server-side. 💤 RecipeCategory-enum vs gerecht-tags: data-remap is een aparte owner-beslissing.
Negen geldmodules rond de Vaste kosten-hub. Het domein is gemarkeerd als gevoelig: records zijn standaard privé per gebruiker, en AI werkt hier alleen na een aparte sensitive-domein-opt-in bovenop de AI-masterswitch. Plus-handhaving staat in de testfase uit; AI is wél al Plus-gated.
Status: ✅ Live (gebouwd, bereikbaar op genoemde route) · 🟡 Gedeeltelijk (werkt, met benoemd gat) · 🔧 In uitvoering · 📋 Gepland (met fase) · 💤 Bewust uitgesteld / non-goal
Vaste kosten (hub)
✅ LivePlus/module/vaste-kosten
Doel. Eén hub die alle vaste lasten van het huishouden bij elkaar brengt: handmatige posten plus wat er al in de andere geldmodules staat (abonnementen, verzekeringen, leningen, spaardoelen, rekeningkosten). De hub toont maand- en jaartotalen, grafieken en wat er van het inkomen overblijft ("besteedbaar").
Zo werkt het nu
✅ Hub-aggregatie met koppel-rijen (live uit de module-repos; niet gematerialiseerd, niet puur virtueel — besluit 2026-07-07)
✅ Handmatige posten met vrije categorie en frequentie (maand/kwartaal/jaar); twee-weg aanmaken vanuit de hub met fuzzy-check tegen dubbelen
✅ Afwijking-signalering bij bedragswijziging (chip met accepteer-actie)
✅ Grafieken (F5): categorie-verdeling, cashflow binnen de maand en 12-maands piekkalender
✅ Besteedbaar-kaart (inkomsten − gereserveerde vaste kosten) en spaardoel-maandinleg als reservering
Waar het naartoe moet
📋 Golf 6: ontversnippering — Verzekeringen en Abonnementen als filterbare sub-secties ín de hub (⚠️ data-remap vergt apart owner-akkoord); jaarlijkse-lastenkalender, opzeg-alert en prijsstijging-tracker
Bron: docs/product/modules/vaste-kosten.md
Inkomsten
✅ LivePlus/module/inkomsten
Doel. Terugkerende inkomsten (salaris, toeslagen, verhuur, …) vastleggen per maand en per jaar, zodat de Vaste kosten-hub kan laten zien wat er na de vaste lasten overblijft ("besteedbaar"). Gebouwd in wave F3 van het financieel-herontwerp.
Zo werkt het nu
✅ Terugkerende inkomsten met maand-/jaarbedragen en vrije categorieën (geen vaste enum)
✅ Besteedbaar-berekening, weergegeven als kaart in de Vaste kosten-hub
💤 AI-scan / reminders — bewust niet aanwezig; de module is smal gehouden
Waar het naartoe moet
📋 Promotie van Besteedbaar tot eigen volwaardige weergave/module kan later (F3-notitie)
Bron: docs/product/modules/inkomsten.md
Spaardoelen
✅ LivePlus/module/spaardoelen
Doel. Sparen naar concrete doelen (vakantie, buffer, aankoop) met zichtbare voortgang. Het saldo is nooit een los ingetypt getal maar wordt afgeleid uit een ledger van bijdragen. Gebouwd en afgerond als wave F6 (2026-07-09).
Zo werkt het nu
✅ Doelen met doelbedrag, optionele streefdatum, startbedrag, kleur en gekoppelde bankrekening
✅ Ledger-model: saldo = som van bijdragen (+ startbedrag); opname = negatieve bijdrage
✅ Projectie "op schema" (verwachte einddatum uit maandinleg) en maandinleg als hub-reservering
✅ Delen per doel (default privé, deelbaar via deelmodel fase 2)
Doel. Alle polissen van het huishouden op één plek: premie, dekking en vooral de opzegdeadline — zodat je nooit stilzwijgend een jaar vastzit. Een polis-pdf of -brief kan met AI worden gescand in plaats van overgetypt.
Zo werkt het nu
✅ Polissenlijst met maandpremie en afgeleide "opzeggen voor"-datum; premie-frequentie maand/kwartaal/jaar
✅ AI-polis-scan met fuzzy match tegen bestaande polissen en premievergelijking bij een gewijzigde premie
✅ Opzegtermijn-reminders en Vandaag-suggesties (opzegdeadline binnen de horizon, standaard 35 dagen)
✅ Bijlagen (polis-pdf) en capture-landing vanuit quick-capture/share-sheet
Waar het naartoe moet
📋 Golf 6: sub-sectie in de Vaste kosten-hub (⚠️ data-remap vergt apart owner-akkoord); jaarlijkse-lastenkalender en prijsstijging-tracker op hub-niveau
Bron: docs/product/modules/verzekeringen.md
Garanties
✅ LivePlus/module/garanties
Doel. Aankopen met garantieperiode bijhouden, zodat je bij een defect meteen weet of er nog garantie op zit en waar de bon is. De bon of het garantiebewijs kan met AI worden gescand.
Zo werkt het nu
✅ Garantielijst gesorteerd op verloop met statusbadge (geldig / verloopt bijna / verlopen)
✅ AI-bon-scan (product, aankoopdatum, termijn voorgevuld), verloop-reminders en bijlagen
🟡 Assistent kent garanties niet: de voorbeeldprompt over de wasmachine-garantie eindigt in een weigering (benoemd gat)
Waar het naartoe moet
📋 Golf 6: bon-foto als éérste stap van de invoerflow en een AI-voorstel voor de garantietermijn; assistent-dekking voor garanties is nog niet ingepland
Bron: docs/product/modules/garanties.md
Abonnementen
✅ LivePlus/module/abonnementen
Doel. Overzicht van alle lopende abonnementen (streaming, sport, software, …) met wat ze per maand kosten, wanneer de incasso loopt en vóór wanneer je moet opzeggen. Totalen worden altijd afgeleid en nooit opgeslagen.
Zo werkt het nu
✅ Abonnementen per categorie met subtotalen en maandtotaal (afgeleid)
✅ Fuzzy-koppeling met de Vaste kosten-hub (geen stille dubbelen), opzeg-reminders en Vandaag-opzegsuggesties
✅ Vrije categorie + bankrekening per abonnement; bijlagen (contract/bevestigingsmail)
Waar het naartoe moet
📋 Golf 6: sub-sectie in de Vaste kosten-hub (⚠️ data-remap vergt apart owner-akkoord); opzeg-alert-verdieping en prijsstijging-tracker
Bron: docs/product/modules/abonnementen.md
Wagenpark
✅ LivePlus/module/wagenpark
Doel. De voertuigen van het huishouden met alles wat eraan hangt: APK, banden, servicebeurten en documenten — met een urgentiebadge per item zodat je ziet wat eerst moet. Daarnaast een indicatieve afschrijvingsschatting per voertuig. Verdiept in wave F4.
Zo werkt het nu
✅ Voertuigen met onderhouds-/documentitems en urgentiebadge (afgeleid uit de vervaldatum)
✅ APK- en servicedatum op het voertuig, afschrijvingsschatting en notities
✅ Reminders voor vervallende voertuig-items en bijlagen (kentekenbewijs, factuur)
💤 AI-scan — geen eigen extractor; kenteken→specs is een later idee
Waar het naartoe moet
📋 Golf 6: koppeling voertuig ↔ verzekering/onderhoud voor kosten per auto per jaar; quick-add-chips en AI kenteken→specs
Bron: docs/product/modules/wagenpark.md
Leningen & hypotheek
✅ LivePlus/module/leningen
Doel. Leningen en de hypotheek op één plek: openstaand saldo, rente en maandlast, met bovenaan het totaal aan schuld en totale maandlast. Een jaaroverzicht of leningblad kan met AI worden gescand in plaats van overgetypt.
Zo werkt het nu
✅ Leninglijst met saldo/rente/maandlast per type; totaaloverzicht in de header (afgeleid)
✅ Reminders, vrije categorie + bankrekening, bijlagen en capture-landing
Waar het naartoe moet
📋 Golf 6: aflossingsschema met grafiek (aflos-simulator later), renteherziening-alert en verdieping van de hub-koppeling
Bron: docs/product/modules/leningen.md
Bankrekeningen
✅ LivePlus/module/bankrekeningen
Doel. Een bewust smalle naslagmodule: welke rekeningen en passen heeft het huishouden, zonder saldi en zonder volledige rekeningnummers. Andere geldmodules verwijzen ernaar ("wordt betaald van rekening …"). Er wordt nooit meer dan de laatste 4 cijfers opgeslagen of getoond.
Zo werkt het nu
✅ Rekeningenlijst met gemaskeerd IBAN (NL•• •••• •••• <laatste 4>) en passen per rekening
✅ Maandelijkse rekeningkosten verschijnen automatisch als post in de Vaste kosten-hub
💤 AI-scan, reminders, agenda/Vandaag — bewust afwezig: naslagkaart, geen actiemodule
💤 Foto-scan van bankpas/IBAN — permanente non-goal (anti-fraude, besluit 2026-07-06)
Waar het naartoe moet
📋 Golf 6: "+ pas" direct op de rekening-kaart, vervaldatum-alert voor passen, eigenaar ↔ gezinslid-koppeling. Open: veilige identificatie van een gezamenlijke rekening (laatste 4 cijfers + persoon).
Routines, gewicht, medicatie en cyclus. Het gezondheidsdomein is sensitive én kent bewust géén deelmodel: alles is strikt privé per gebruiker (owner-besluit 2026-07-08). Pillen & vitamines en Cyclus zitten als enige twee achter een optionele gezondheids-toegangscode.
Status: ✅ Live (gebouwd, bereikbaar op genoemde route) · 🟡 Gedeeltelijk (werkt, met benoemd gat) · 🔧 In uitvoering · 📋 Gepland (met fase) · 💤 Bewust uitgesteld / non-goal
Routines
✅ LivePlus/module/routines
Doel. Ochtend- en avondroutines vastleggen en dagelijks afvinken, met zicht op de dagvoortgang. Voor wie vaste gewoontes wil volhouden zonder een aparte habit-tracker-app. Routines zijn van de gebruiker zelf, niet van het gezin.
Zo werkt het nu
✅ Routinelijst met ochtend-/avondsecties, afvinken per dag en dagvoortgang
✅ Cadans/herhaling, reminders en per-module notificatie-toggle + voorlooptijd
✅ Privacy: bewust geen deelmodel; geen agenda-injectie en geen Vandaag-sectie
Waar het naartoe moet
📋 Golf 5: streaks over routines heen. 💤 Delen met gezinsleden: non-goal zolang het gezondheidsdomein strikt privé is.
Bron: docs/product/modules/routines.md
Gewicht
✅ LivePlus/module/gewicht
Doel. Gewichtsmetingen bijhouden en het verloop richting een doelgewicht zichtbaar maken — handmatig loggen in twee tikken, of automatisch via een opt-in koppeling met Apple Health. Strikt persoonlijk: gewicht is nooit zichtbaar voor andere gezinsleden.
Zo werkt het nu
✅ Metingen met delta en verloopgrafiek; doelgewicht; quick action "+1 meting" in de shell-balk
✅ Apple Health-import: opt-in, default uit, alleen lezen — schrijven naar Health expliciet niet
✅ Privacy: bewust geen deelmodel
Waar het naartoe moet
📋 Golf 5: streaks, notificatie-actie "weeg vandaag", trendlijn bij het doel, AI weegschaalfoto → invoer (Plus + sensitive-opt-in)
Doel. Medicijnen, vitamines en de anticonceptiepil op tijd innemen: "op het juiste moment een zacht seintje", zonder medisch dossier-gevoel. Geland vanuit de OpenSpec-wachtrij van 2026-07-10. Inname-data is nooit zichtbaar voor andere gezinsleden.
Zo werkt het nu
✅ Dagoverzicht (wat moet vandaag nog ingenomen) en ritmes incl. pil-patronen 21+7, 28 en continu
✅ Innameledger: elke inname of overslaan wordt gelogd
✅ Reminders met notificatie-acties (Ingenomen / Uitstellen / Overslaan) direct vanaf de melding, ook na koude start
✅ Rijen op Vandaag; optionele toegangscode (gedeeld met Cyclus)
Waar het naartoe moet
💤 v1.1: samengevoegde meldingen + snooze-duurkeuze, reisstand/tijdzones, doktersbezoek-export, dagelijkse log-herinnering. 📋 Golf 5: mee in het gezondheidscluster.
Doel. Cyclus, klachten en stemming bijhouden en patronen herkennen — óók zonder menstruatie als houvast (spiraal, tiener), met een uitlegmodus op tienerniveau. De meest privacygevoelige module van de app en bewust een eiland: geen meldingen, geen Vandaag-integratie, nooit deelbaar.
Zo werkt het nu
✅ Maandkalender met bloedings-/klacht-markers en pil-stopweek-weergave (gekoppeld aan Pillen & vitamines)
✅ Dag-logsheet met chips (bloeding, klachten, stemming) en setup met 4 modi + uitlegmodus
✅ Patroonherkenning: client-side, niet-diagnostisch, deterministisch — er gaat niets naar een AI-model
✅ Bewust géén reminders en géén Vandaag: cyclusdata verschijnt nergens buiten het eigen, afgeschermde scherm
Status: ✅ Live (gebouwd, bereikbaar op genoemde route) · 🟡 Gedeeltelijk (werkt, met benoemd gat) · 🔧 In uitvoering · 📋 Gepland (met fase) · 💤 Bewust uitgesteld / non-goal
Onderhoud
✅ LivePlus/module/onderhoud
Doel. Periodiek onderhoud van huis, boot, auto en tuin niet vergeten: elk item heeft een interval (bv. "cv-ketel elke 24 maanden") en de app leidt daaruit af wat binnenkort of te laat is. Sinds rechten fase 3 is de deel-default privé (niet gevoelig, maar besluit H rekent huis & bezit tot privé); configureerbaar per gezin/lid via de SharePicker, met deelmodus "alleen bekijken".
Zo werkt het nu
✅ Categorie-tabs (huis, boot, auto, tuin, anders) en intervallen met afgeleide status per item
✅ Reminders vóór de vervaldatum; agenda-spiegel + agenda-injectie
✅ Vandaag-integratie: vervallend/achterstallig onderhoud in "Nog te doen" (horizon standaard 14 dagen) en als bevestigbare suggestie
✅ Bijlagen (handleiding/factuur bij het item)
Waar het naartoe moet
📋 Golf 5: swipe-om-af-te-ronden, onderhoudslogboek met kosten (doorgekoppeld naar financieel), AI-scan van bon of typeplaatje → velden + intervalvoorstel
Bron: docs/product/modules/onderhoud.md
Bron:docs/product/modules/onderhoud.md
Domein Bewaarlijsten
✅ 1/1 module live
Status: ✅ Live (gebouwd, bereikbaar op genoemde route) · 🟡 Gedeeltelijk (werkt, met benoemd gat) · 🔧 In uitvoering · 📋 Gepland (met fase) · 💤 Bewust uitgesteld / non-goal
Bewaarlijsten
✅ LiveFree/module/bewaarlijsten
Doel. Vrije, gekleurde lijsten voor alles wat je wilt bewaren: cadeau-ideeën, boeken, plekken om heen te gaan, klusjes-voor-later. Eén van de vijf gratis registry-modules. Technisch geen eigen systeem maar een gezicht op de gedeelde lijst-primitive — dezelfde lijsten die ook Boodschappen aandrijft.
Zo werkt het nu
✅ Gekleurde bewaarlijsten — de route wijst naar hetzelfde scherm als /lijstjes
✅ Slimme invoer-parser en AI-splitsing van een tekst-dump (AI valt altijd onder Plus, ook in deze gratis module)
✅ Triagedoel vanuit de inbox ("Bewaren"-captures landen zo in een lijst)
✅ Deel-default sinds rechten fase 3 privé (eigen lijstjes/bewaarlijsten; configureerbaar per gezin/lid, met SharePicker en deelmodus "alleen bekijken") — de ingebouwde Boodschappen-lijst blijft heel-gezin
Waar het naartoe moet
📋 Golf 5: secties/tags + slepen binnen een lijst, inflow uit andere modules, deadline/herinnering per item + archiveren, AI tekst/foto → items
Bron: docs/product/modules/bewaarlijsten.md
Bron:docs/product/modules/bewaarlijsten.md
Domein Vastgoed
✅ 1/1 module live
Status: ✅ Live (gebouwd, bereikbaar op genoemde route) · 🟡 Gedeeltelijk (werkt, met benoemd gat) · 🔧 In uitvoering · 📋 Gepland (met fase) · 💤 Bewust uitgesteld / non-goal
Vastgoed
✅ LivePlus/module/vastgoed
Doel. Voor huishoudens met een tweede woning of verhuurobject: objecten en hun boekingen (gast + periode) bijhouden, dubbele boekingen voorkomen en check-in/check-out niet missen. Het langetermijndoel is een mini-PMS (property-management-light): geen channel-manager, wel overzicht. Deel-default sinds rechten fase 3 privé (besluit H; configureerbaar per gezin/lid, met deelmodus "alleen bekijken").
Zo werkt het nu
✅ Objectenlijst → detail met boekingen per gast/datum; boekingsstatussen
✅ Overlap-detectie (waarschuwt bij dubbele boekingen op hetzelfde object)
✅ Check-in/check-out-reminders (default 1 dag vooraf), agenda-spiegel + injectie en bijlagen per object
Waar het naartoe moet
📋 Golf 5: schoonmaak-/wisseltaak na check-out, omzet en kosten per pand + jaaroverzicht, statusfilter, AI boekingsmail → voorgevulde boeking
Bron: docs/product/modules/vastgoed.md
Bron:docs/product/modules/vastgoed.md
Domein Voorraad
✅ 1/1 module live
Status: ✅ Live (gebouwd, bereikbaar op genoemde route) · 🟡 Gedeeltelijk (werkt, met benoemd gat) · 🔧 In uitvoering · 📋 Gepland (met fase) · 💤 Bewust uitgesteld / non-goal
Voorraad
✅ LivePlus/module/voorraad
Doel. Weten wat er in huis ligt — vriezer, koelkast, voorraadkast — met houdbaarheidsbewaking (THT) en een directe brug naar de boodschappenlijst zodra iets bijna op is. Een kassabon kan met AI worden gescand om items in bulk toe te voegen. Deel-default sinds rechten fase 3 privé (besluit H; configureerbaar per gezin/lid, met deelmodus "alleen bekijken").
Zo werkt het nu
✅ Items per bewaarlocatie (vriezer, koelkast, voorraadkast, overig) met THT-versheidsbadge en THT-reminders
✅ Aantal-steppers + swipe-verwijderen met undo; lage voorraad → één tik naar de boodschappenlijst
✅ AI-kassabon-scan (productnaam, aantal, THT voorgevuld), capture-landing en inbox-triagedoel
✅ Gegronde assistent-dekking (één van de 7 modules)
Waar het naartoe moet
📋 Doelmodel: 1:1-extensie op list_items (herplatforming richting launch/M3+). 📋 Golf 5: boodschap afvinken → voorraad ophogen; AI kastfoto → producten.
Bron: docs/product/modules/voorraad.md
Bron:docs/product/modules/voorraad.md
Domein Welzijn
✅ 1/1 module live
Status: ✅ Live (gebouwd, bereikbaar op genoemde route) · 🟡 Gedeeltelijk (werkt, met benoemd gat) · 🔧 In uitvoering · 📋 Gepland (met fase) · 💤 Bewust uitgesteld / non-goal
Quote van de dag
✅ LivePlus/module/quote
Doel. Een kalme dagelijkse quote die past bij zelfgekozen thema's, op een zelfgekozen moment — een klein welzijnsmoment in de dagbriefing, geen social feed. Eerste (en vooralsnog enige) module in het nieuwe welzijn-domein; geland vanuit de OpenSpec-wachtrij van 2026-07-10.
Zo werkt het nu
✅ Dagquote uit een gecureerde dataset van publiek-domein/parafrase-teksten — bewust géén beschermde citaten
✅ Variatie-engine met anti-herhaling: "nooit twee keer dezelfde quote, nooit vijf dagen hetzelfde soort"
✅ Thema's, gewichten en taal per lid; Vandaag-kaart; dagelijkse reminder; "Nog één" per dag; delen en rapporteren
✅ Historie device-lokaal (bewust): getoond-historie en voorkeuren blijven op het toestel, geen sync
Waar het naartoe moet
💤 v1.1: weekend-afwijkend moment, pauzeperiode, AI-poolaanvulling, sync van historie/favorieten, widget/lockscreen-weergave, voorlezen (TTS). Favorieten/archief uit het proposal-doelbeeld is nog niet in de code terug te vinden.
Voor wie Tendlo is, tegen wie het concurreert en hoe het geld gaat verdienen. Alles hier is een consolidatie van intern onderzoek en owner-besluiten — met de gaten er eerlijk bij.
Doelgroep & markt
Gezinnen/huishoudens, NL/EU-eerst, met meertalig-internationaal als expliciete ambitie. Talen in de app nu: NL (default), EN, DE. De volgorde — "privacy-first NL/EU eerst" versus "breed internationaal meteen" — is een open beslissing sinds 2026-06-14. Er bestaat geen apart doelgroep-/persona-document; de doelgroep is impliciet vastgelegd in het marktonderzoek (2026-06-14).
Kansrijke segmenten (marktonderzoek 2026-06-14)
De "mental load"-dragende ouder ("chief household officer") — 75% van gebruikers zegt dat zo'n app frictie vermindert (studie onder 393 gezinnen, geciteerd in het onderzoek).
Gemengde-platform-gezinnen (één ouder Android, één iPhone) — volgens het onderzoek "de grootste onderbediende groep".
Privacy-bewuste consumenten in NL/DE — 94% van App Store-gebruikers weegt privacy-labels mee; 50% kiest een transparant merk zelfs bij hogere prijs (Usercentrics 2025, geciteerd).
Co-ouderschaps-gezinnen en gezinnen met schoolgaande kinderen — NL-schoolvakantieregio's als moat.
"Cozi-refugees" — gebruikers die na Cozi's paywall van mei 2024 actief alternatieven zoeken.
Eerste expansiemarkt: Duitsland (DE/AT/CH) — grootste aangrenzende markt (~97M Duitstaligen), hoogste privacy-gevoeligheid, zelfde AVG-kader. Betaalbereidheid: Nederland betaalt ~62% méér dan de VS voor app-abonnementen (Adapty 2025); het EU-VS-gat is slechts ~6% (RevenueCat 2025) → prijzen op/boven Cozi Gold zijn verantwoord. Beta-doelgroep: 5–15 testgezinnen via TestFlight / Play closed track.
Concurrentie in het kort
Prijzen en aantallen zijn de stand van de onderzoeksdatums 2026-06-14/17 en zijn daarna niet herverifieerd.
Concurrent
Prijs (intern gedocumenteerd)
Interne conclusie (kern)
Cozi (incumbent, 20M+ geregistreerde users)
Free (ads, 30-dagen-cap) / Gold $39/jr
Vertrouwensgat na de mei-2024-paywall (Trustpilot 2,1); géén data-export ("historie gegijzeld"). Les: nooit retroactief paywallen.
FamilyWall (FR/EU, 13,5M+ gezinnen geclaimd)
Premium $44,99/jr per huishouden
Breedste cloud-concurrent, dichtste analoog; gratis tier "berucht te dun"; koppelt data aan advertising.
Maple (212K+ users)
Maple+ ~$40/jr
AI-native exemplar (e-mail-triage, routines, share-sheet-capture); cloud-verplicht, AI op familie-e-mail = privacyzorg.
TimeTree (60M users)
Premium $44,99/jr, per-user
Per-user-prijs wordt gehaat → Tendlo per-huishouden; geen taken/recepten/huishouden.
OurHome
100% gratis
Beste kids-gamification — de #1 kid-engagement-hook die Tendlo miste (intussen geadresseerd in Gezinsafspraken); breekt zonder internet.
Skylight Calendar (hardware, 1,3M gezinnen)
$160–599 + Plus $79/jr
Kernwaarde achter dubbele paywall. Ons antwoord: kiosk-/keukenmodus op een oude tablet.
Qudoo genoemd als "directe concurrent"; Klender "zet een gratis-anker in NL".
Overkoepelende marktconclusie: local-first/offline is onbezet wit gebied — élke onderzochte concurrent vereist internet; niemand combineert local-first + AI-native + NL/EU-lokalisatie. Tendlo is functioneel al breder dan vrijwel elke concurrent (~25 modules vs. 6–12); de gaps zitten in UX-legibiliteit, engagement-hooks en GTM/trust — niet in feature-breedte.
Local-first by default — geen internet of account nodig; "AI op je gezinsdata, zónder je inbox naar een Amerikaanse cloud te sturen."
Volledige historie, nooit gegijzeld + één-tap-export — het omgekeerde van Cozi's paywall.
Geen ads, geen tracking — analytics is opt-in en anoniem.
NL/EU-diepte als verdedigbare moat: schoolvakanties per regio (t/m 2029-2030), NL-feestdagen, co-ouderschap, afvalkalender, sportkalender.
AI-native capture: foto/PDF/URL/dictaat → gestructureerde items; handmatige invoer is de #1 marktklacht.
Family-plan per huishouden, niet per gebruiker; paywall pas ná het "family moment".
"Eén app in plaats van vijf" — de unificatie-story tegenover Apple/Google-versnippering.
Twee originele differentiators zijn sindsdien bijgesteld: de "genuinely complete gratis tier" is afgezwakt door het freemium-besluit, en de BYO-AI-key is afgeschaft ten gunste van managed AI via de eigen proxy.
Verdienmodel & pricing
Geldend model: Tendlo is freemium, abonnement-only (geen lifetime, geen ads, ooit). Gratis = de dagelijkse kern + een handvol modules, volledig lokaal en met handmatige invoer; Plus = de overige modules, cloud-/gezin-sync én alle AI — ook AI binnen gratis modules. Plus wordt per huishouden verkocht (Family), met een Solo-variant. Prijzen zijn definitief bevestigd (2026-08-05) maar staan nog niet in de stores; enforcement staat in de app inmiddels wél aan.
Product
Jaar
Maand
Plus Family (hero; per huishouden, tot 6 leden, ~€10 p.p./jr)
€59,99
€7,99
Plus Solo
€39,99
€5,99
Prijzen incl. 21% BTW; maandprijzen bewust hoog om naar jaarlijks te sturen (jaar default geselecteerd). Trial (definitief 2026-08-05, te bouwen bij B5/RevenueCat): 14 dagen gratis op alle vier de producten, aangeboden bij onboarding én zodra een gebruiker een Plus-module/feature selecteert; bij niet accepteren blijven Plus-modules zichtbaar als disabled mét upsell. Bij Plus Family krijgt élk lid van het huishouden Plus, óók tijdens de trial. Aanmaken in App Store Connect: store-setup-handleiding. Marge-model (2026-06-17): reken op ~70% van de stickerprijs — €59,99 → ~€42 netto per Family-jaar; freemium-conversie behoudend inschatten op ~2–3% (RevenueCat 2026-benchmark).
Freemium-grens (geldend besluit 2026-06-17)
Scenario B "compleet gratis-gevoel" met 2 owner-correcties (Recepten en Sportkalender blijven Plus):
ALLE modules gratis on-device; Plus = alléén managed AI + cloud/sync
❌ Niet gekozen
"Maximaal afschermen" (≈ Scenario A)
2026-06-16 (owner-keuze)
Alleen de 4 kern-surfaces gratis; alle registry-modules + AI + sync = Plus
❌ Een dag later herzien; leeft nog door in enkele latere docs (drift)
Scenario B met correcties
2026-06-17 (owner-besluit)
9 gratis (4 kern-surfaces + 5 modules); Recepten + Sportkalender expliciet Plus; overige registry-modules + AI + sync = Plus (code-telling 2026-07-12: 5 Free / 23 Plus van 28)
✅ Geldend, in code geverifieerd
⚠️ Bekende formulerings-drift: enkele recentere plandocumenten hanteren nog de strengere lezing van 2026-06-16. De code op main en het tiering-beslisstuk van 2026-06-17 zijn leidend: 9 gratis. Formele herbevestiging van de modulelijn staat nog open.
AI-verdienmodel
Geldend (owner 2026-06-19, verfijnd 2026-07-06): unlimited + fair use — Plus = alle AI inbegrepen, géén credit-teller/packs/consumable-SKU; FUP per persoon gemeten én geblokkeerd bij overmatig gebruik. Dit verving het credit-pack-model van 2026-06-18. Onderbouwing: alle AI is gebonden per-actie (geen open chat) — lichte actie ~$0,002–0,005, document ~$0,003–0,01; zelfs 1000 acties/mnd ≈ $3–10, ruim binnen €59,99/jr. Huidige technische rem: FUP 2.000.000 tokens/gebruiker/maand in de ai-proxy + globale OpenRouter-spend-cap $30/mnd.
Implementatiestatus (2026-07-12)
🟡 Plus-enforcement staat UIT (plusEnforcementProvider => false) — de tier is nu puur een badge; alle 23 Plus-modules zijn feitelijk open. Uitzondering: AI is de facto wél Plus-gated via de AiGate.
📋 RevenueCat (blokker B5): project klaar (entitlement plus, apps op com.aquait.tendlo), maar purchases_flutter/paywall/enforcement zijn NIET gewired; store-producten zijn owner-geblokkeerd.
🟡 Upsell-sheet bestaat (Instellingen → Tendlo Plus) met placeholder-prijzen en verborgen trial-CTA.
Merk & juridisch
Merknaam Tendlo: het interne naam-onderzoek gaf verdict AVOID (botsingen o.a. Tendio®, Tendo, Tendly-cluster; registry-clearance niet uitgevoerd) — de owner gaat er bewust mee door en wint juridisch advies in; clearance is een verplichte owner-actie vóór publieke launch. Domein tendlo.app is in gebruik (e-mail live via Resend sinds 2026-06-16).
Juridisch/AVG: privacyverklaring en voorwaarden bestaan nog niet; grondslag kinderdata alleen als concept; DPA's nog niet formeel geaccepteerd. Server-side accountverwijdering ontbreekt nog (release-milestone M1).
Verwerkingsverantwoordelijke: Aqua-IT B.V.
Eerlijke gaten-lijst — wat is níét gedocumenteerd
Marktomvang (TAM/SAM/SOM) en formele persona's — nergens gekwantificeerd.
Financiële projecties (omzet, break-even, LTV/CAC, MRR-doelen) — alleen categorie-benchmarks.
Go-to-market-plan (launchplan, kanalen, marketingbudget) — alleen losse ASO-tactieken en het GTM-wedge-principe.
Operationele kosten (maandlasten Supabase/PowerSync/Resend/Sentry/PostHog/RevenueCat) — geen bedragen.
AI-chatbots/algemene assistenten als substituut — niet als concurrent-cluster onderzocht.
Tendlo is een mobiele gezins-/persoonlijke-assistent-app voor uitsluitend Android en iOS, gebouwd met Flutter (versie gepind op 3.44.1 in CI) en Riverpod, met Drift op SQLite als lokale database en PowerSync voor offline-first sync. De app is local-first met een runtime cloud-switch: zonder cloud-configuratie draait alles volledig lokaal; mét configuratie én login schakelt de app om naar Supabase-auth + PowerSync-sync, en worden bestaande lokale data eenmalig geadopteerd.
1. Architectuur-lagen
Architectuur-lagen. Het local-first pad (links) werkt zonder enige cloud; de rechterkant is opt-in (cloud-modus). Bron: docs/architecture/README.md · sync-en-offline.md.
2. Modulesamenhang
Drie kern-primitives (agenda, taken, lijstjes) waar modules op injecteren; Vandaag is een pure consument — het integratiehart dat door de andere modules wordt gevoed.
Modulesamenhang: capture → inbox → triage, module-injecties op de drie primitives, geldmodules rond de hub, en Vandaag als integratiehart. Bron: docs/product/README.md · gebruikersflows.md · moduledocs.
3. Datamodel-clusters
Datamodel-clusters met tellingen. Bron: docs/architecture/datamodel.md.
4. Kern-gebruikersflow
Kern-gebruikersflow van onboarding tot module. Bron: docs/product/gebruikersflows.md.
Sync & offline in het kort
De 4-weg-lockstep
Elke schema-wijziging aan een gesyncte tabel raakt vier plekken die exact gelijk moeten blijven: de Drift-tabel (bron) → het gegenereerde PowerSync-schema → de Postgres-migratie → de sync-config. Pariteitstests bewaken dit; een mismatch is een runtime-fout, geen compile-fout. Uitrolvolgorde: migratie eerst, dan sync-config, dan pas de app-build.
RLS vs. sync-streams
RLS is de schrijf-beveiliging, sync-streams zijn de download-scope — twee helften van één slot die dezelfde regels moeten uitdrukken en in lockstep blijven. Rollen: 0=owner, 1=partner, 2=kind, 3=extern + een is_admin-vlag; beide trigger-vergrendeld. Uploads: fatale fouten worden gedropt (en gerapporteerd) in plaats van de queue te blokkeren.
Privacy & AVG
Kernprincipe: local-first — standaard staat alle data lokaal op het toestel; zonder cloud-configuratie verlaat niets het toestel. Cloud-sync is gepositioneerd als onderdeel van de betaalde Plus-tier. Verwerkingsverantwoordelijke: Aqua-IT B.V. Analytics is opt-in en default uit (PostHog EU, uitsluitend anonieme events); crash reporting via Sentry zonder PII. Export: gescopede JSON-export via /backup (bevat alleen wat het aanvragende lid mag zien). Lokale verwijdering: "alle lokale gegevens verwijderen" op het privacy-scherm.
Twee eerlijke AVG-gaten (stand 2026-07-12):
Geen server-side accountverwijdering. Er bestaat geen delete-account Edge Function; een cloud-gebruiker kan zijn serverdata en auth-account niet zelf verwijderen. Ingepland in fase M1; moet vóór externe gebruikers gedicht zijn.
Geen retentiejobs. Geen automatische opschoning voor ai_usage_logs, merge_audit of soft-deletes; de bewaartermijn is de facto onbeperkt. Hoort in een retentiebeleid vóór launch.
bij invites en auth-mails — ontbrak in de oude sub-processor-lijst
PostHog
productanalytics — anonieme events, geen PII
EU
alleen na opt-in
Sentry
crash-/foutrapportage — stacktraces, geen PII
EU (Duitsland)
bij een crash/fout
Apple / Google
betaalrails (IAP)
VS/EU
pas bij abonnementen
RevenueCat
abonnement-entitlements
VS
gepland, nog niet aangesloten
Overige integraties blijven on-device: Apple Health en de device-agenda worden alleen gelezen; spraak loopt via on-device OS-spraakherkenning; weer (Open-Meteo) krijgt alleen coördinaten. Notificaties zijn uitsluitend lokaal — geen push/FCM/APNs.
AI-fundament
De enige AI-transportroute is de Supabase Edge Function ai-proxy → OpenRouter; de key staat uitsluitend server-side en BYO-keys worden niet meer ondersteund. De AiGate combineert vier voorwaarden: Plus-entitlement → hoofdschakelaar → per-capability-toggle → per-domein-opt-in voor geld/gezondheid (het domein financieel heet sinds 6 augustus 2026 geld). Zolang de instellingen laden weigert de gate alles.
Modelrouting per capability
Capability
Model (OpenRouter-slug)
max_tokens
temperature
categorize
google/gemini-3-flash-preview
512
0.1
summarizePreview
google/gemini-3-flash-preview
512
0.4
suggest
google/gemini-3-flash-preview
1024
0.4
extractDocument — vision/OCR (foto/PDF)
qwen/qwen3-vl-235b-a22b-instruct
2048
0
extractDocument — tekstvariant
google/gemini-3-flash-preview
2048
0
chat
anthropic/claude-sonnet-4.5
2048
0.7
Kostenremmen & metering
max_tokens-clamp: elke request gekapt op 4096 tokens
Fair-use-maandlimiet: 2.000.000 tokens per auth-user per maand; overschreden → HTTP 429 (fair_use_exceeded), zonder upstream-call
Globale OpenRouter-spend-cap: $30/maand
Metering in de server-only tabel ai_usage_logs: tokentellingen en statuscode — géén promptinhoud
Modellen per omgeving te tunen zonder app-release via env-vars (AI_MODEL_<INTENT>, allowlist)
Autonomie-grenzen van de assistent
De assistent muteert nooit zelfstandig: elke create wordt een bevestigingskaart (AssistantProposal)
Out-of-scope-vragen → weigering of deterministische redirect; bewust géén open chatbot
Sensitive-domeinen (geld/gezondheid) zijn default uitgesloten van elke AI-verwerking
Security in het kort
Auth: passwordless magic-link via Supabase (PKCE-deeplink io.supabase.tendlo://login-callback); de Supabase-JWT is tevens het PowerSync-token.
App-lock: PIN in flutter_secure_storage + biometrie; cold-start-lock en herlock na een instelbare achtergrond-timeout. Pillen en Cyclus kennen daarbovenop een optionele eigen toegangscode-guard.
Secrets: geen secrets in de repo; client-config via --dart-defines, server-secrets via supabase secrets set. De anon key is een publishable key; alle echte autoriteit ligt bij RLS.
Infra: twee omgevingen — prod (de enige cloud-omgeving) en volledig lokaal; geen aparte staging. CI = analyze + test (Flutter 3.44.1 gepind), geen build/deploy-stappen.
Deze presentatie heeft peildatum 12 juli en loopt achter.
Voor de actuele stand — waar we staan, wat er nog moet voor TestFlight, en wie aan zet is —
zie Status en route naar TestFlight.
Voor het doorlopen van de app met de demo-accounts, zie Testinformatie.
De markdown-documenten en die twee pagina's zijn leidend; deze presentatie is een afgeleide weergave.
Peildatum: 2026-07-12. Waar staat Tendlo: alles hieronder is op de peildatum tegen de code geverifieerd. Het product is klaar genoeg voor beta; de weg naar release loopt via commercie, juridisch en operationeel (RevenueCat, AVG, store), niet via meer features.
Status: ✅ Live (gebouwd, bereikbaar op genoemde route) · 🟡 Gedeeltelijk (werkt, met benoemd gat) · 🔧 In uitvoering · 📋 Gepland (met fase) · 💤 Bewust uitgesteld / non-goal
Kerncijfers (stand 2026-07-12)
28 registry-modules (5 Free, 23 Plus) in 6 domeinen — eten · gezin · huis · geld · gezondheid · bewaren (lib/features/app_domains.dart:81-120); alle 28 ✅ Live en deep-linkbaar. Herzien 2026-08-06: hier stond "9 domeinen".
17 kern-surface-routes, alle ✅ Live (lib/core/router/app_router.dart:137-261; /splash niet meegeteld, /lijstjes/:id onder Lijstjes). Zie de herzieningsnotitie.
Plus-handhaving staat UIT: geen RevenueCat/aankoopflow — alle Plus-modules zijn nu feitelijk voor iedereen open; alléén AI is de facto Plus-gated via AiGate.
Tests: 397 testbestanden / ~2.110 tests (stand 2026-07-12); 6 integration-tests + screenshot-harnas; CI = analyze + test (geen build/deploy).
Herzien 2026-08-06 — de 18e rij "Domein-overzicht" (/domein/:id, 🟡 slapend) is vervallen.
Die route en lib/features/shell/screens/domain_screen.dart zijn met F1-9 (E-MOD-06) verwijderd — merge 20f1b910, 6 augustus 2026. lib/features/shell/screens/ bevat nu alleen nog mijn_leven_screen.dart, de router-doc benoemt de uitfasering zelf (lib/core/router/app_router.dart:7-9) en test/core/router/domein_route_verwijderd_test.dart bewaakt dat de route niet terugkomt. Waar deze pagina eerder "17 live, 1 slapend" zei: er is geen slapende surface meer.
Domeinen zelf zijn niet verdwenen. Ze blijven de vaste categorieën van de modulecatalogus — onboarding, modulebeheer, meldingeninstellingen en AI-instellingen ordenen er nog steeds op, en domain.sensitive stuurt nog altijd de AI-poort. Alleen dít ene scherm is weg.
🟡 De gedeeltelijk-lijst (benoemde gaten, stand 2026-07-12)
Plus/monetisatie is een lege huls (bewust): enforcement uit, geen RevenueCat/aankoopflow, trial-CTA verborgen, upsell-sheet toont placeholder-prijzen (📋 milestone M1/"B5").
Assistent-voorbeeldprompt belooft te veel: de garantie-vraag in de voorbeelden valt buiten de 7 ondersteunde modules en eindigt in een weigering.
Vandaag-gaps: per-gap-instellingen/persistentie zijn expliciete follow-up; dismiss-van-de-dag werkt wél.
Per-module notificatie-schema's (meerdere tijden per dag) zijn "planned extension".
Discovery-dismiss niet persistent (bewust v1, alleen in-memory per sessie).
ModuleDescriptor preview-summary/badge-hooks nog niet gebouwd.
Cyclus is een eiland: als enige registry-module geen reminder-resyncer en geen Vandaag-aansluiting — vermoedelijk bewust (privacy), maar nergens vastgelegd.
Server-side accountverwijdering ontbreekt (AVG-gat; lokale wipe + gescopede export bestaan wél; 📋 M1).
Milestones M0–M3
Milestone
Doel
Stand 2026-07-12
M0
releasebasis
🔧 deels: custom SMTP ✅ (2026-06-16), open beslissingen vastgelegd ✅ (2026-07-06); Android release-signing, cloud-rondrit-e2e-verificatie, bundle-id↔RevenueCat-verzoening en CI-migratie-check niet als afgerond gedocumenteerd
M1 → gesloten beta
commercie + AVG
🔧 deels: AI-FUP-handhaving per persoon ✅ (in ai-proxy gebouwd); RevenueCat/paywall/trial, gehoste privacy/terms, server-side accountverwijdering, store-producten, beta-gezinnen 📋 open
Golf 0 ✅ compleet · Golf 1 + 2 grotendeels ✅ · Golf 3–6 open — met het co-ouderschap-herhaalschema als eerstvolgende blokkerende bouwsteen in Golf 3, en Golf 6 (financiële ontversnippering) migratie-gated achter een apart owner-besluit.
Financieel F1–F6
F1 fundament ✅ · F2 hub-herbouw ✅ · F3 Inkomsten + Besteedbaar ✅ · F4 AI & wagenpark ✅ · F5 visualisatie ✅ · F6 Spaardoelen ✅ (2026-07-09) — de wave-reeks is afgerond; de ontversnippering is doorgeschoven naar Golf 6.
Rechten/rollen fase 0–3
fase 0 ✅ · fase 1 (per-lid module-toegang) ✅ · fase 2.0 fundament ✅ · 2.1 pilot verjaardagen ✅ · 2.2/2.3 grotendeels uitgevoerd, formele afsluiting + finale E2E-bevestigingsrun open · fase 3 (deel-defaults, deelmodus, module-activatie per lid) ✅ live (gedeployed 2026-07-12) — zie de bouwronde hieronder.
Naar aanleiding van testerfeedback is een gebundelde bouwronde gebouwd, getest en op prod gedeployed die drie eerdere owner-besluiten (deels) omdraait. Owner-besluiten H–X + M–O + ADR-0001..0005 zijn allemaal akkoord; de kern:
Privé-tenzij-gezinsinfra. Nieuwe items zijn standaard alleen van jezelf; per module (en soms per entiteitstype) geldt een deel-default uit een code-registry — resolutie: persoonlijke voorkeur → gezinsdefault → fallback-matrix. Alleen gezins-infrastructuur (boodschappen, maaltijden, afvalkalender, verjaardagen, gezinsafspraken, co-ouderschap, sportkalender) blijft standaard heel-gezin. Vervangt het "gezinslogistiek blijft gezinsbreed"-besluit van 2026-07-07.
Deelmodus "alleen bekijken" (kolom share_read_only): een gedeeld item kan beschermd worden; afvinken/voltooien blijft altijd kunnen.
Verwijderen alleen-eigenaar: ook een beheerder verwijdert nooit andermans items (met soft-delete-guard op deleted_at).
Module-activatie + meldingen persoonlijk per lid; de gezinsset blijft het startpunt voor nieuwe leden, beheerder-blokkade alleen voor kind/extern.
Modules-overzicht als inklapbare lijst per domein en een persoonlijke, gesyncte favorietenbalk (via member_module_prefs) met doe-acties én scherm-shortcuts.
In-app aankondigingen (ADR-0005): server-only announcements-tabel die de app onder RLS leest (actieve rijen, segment all/free/plus); schrijven kan alleen via de admin-api.
Drie migraties, live op prod (2026-07-12):0043 (member_module_prefs + module_states-prefs-guard), 0044 (deelmodus share_read_only + verwijderen-alleen-eigenaar) en 0045 (announcements). Drift schemaVersion staat op 35.
Uitrol (2026-07-12): de volledige bouwronde (share-policy-registry + resolver, gezinsbrede + persoonlijke deel-voorkeur, containers-cascade, member_module_prefs, activatie/meldingen per lid, modules-lijst-UX, deel-hint, deelmodus, bulk-remap en favorietenbalk F1–F3) is gemerged, getest en gedeployed. Detailbron: docs/archive/implemented/design/rechten-fase3-deel-defaults-plan.md (besluiten H–L, P–X), docs/archive/implemented/design/favorietenbalk-sneltoetsen-plan.md (M–O) en de ADR's docs/architecture/adr/0001–0005. De deel-defaults per module zijn conform de code-registry (lib/core/modules/share_policy.dart) verwerkt in de moduledocs onder docs/product/modules/.
Open owner-punten (owner-geblokkeerd)
Uit de in totaal 27 open vragen (stand 2026-07-12) zijn dit de extern/commercieel geblokkeerde punten:
B5/RevenueCat: subscription-producten + prijzen in App Store Connect/Play Console, store-credentials, bundle-id-bevestiging ná eerste upload.
Share Extension: eenmalig Xcode-target aanmaken — ✅ ingehaald door de code (target geregistreerd, geverifieerd 2026-07-11).
Notificatiegeluid-assets: eigen geluiden of defaults.
Vandaag fase 1/2: tester-oordeel over afvinken/Klaar-bak.
De prijskeuzes (Solo naast Family, trial-variant, maand-abonnement bij launch, exacte storefront-punten) zijn op 2026-08-05 gesloten; wat overblijft zijn o.a. de formele herbevestiging van de freemium-grens en beleids-/techniekvragen — het volledige overzicht staat in docs/product/roadmap.md.
Belangrijkste technische restpunten
module_states-server-PK-fix / deploy-bevestiging migratie 0031 + finale E2E-bevestigingsrun van het deelmodel (stand op prod niet opnieuw geverifieerd op de peildatum).
P0 uit de implementatie-audit: multi-device-convergentie van geïnjecteerde agenda-mirrors — in code inmiddels geadresseerd; de audit-status is nog niet bijgewerkt.
iOS-notificatiebudget (64-pending-cap): bedraad als decorator om de scheduler; ook hier de audit-status nog bijwerken.
Retentie-/opschoonjobs voor serverdata ontbreken (privacy-hoofdstuk).