Onderzoek 1 — genui-concept "Mijn Zilch" (genui.vleugje.nl)

Samenvatting

"Mijn Zilch" is een Next.js-chatassistent voor Zilch-webhosting: de klant typt vrije taal, een klein Claude-model kiest één van ~20 acties, en daarbij hoort altijd een vast React-paneel naast de chat. De lay-out is een twee-koloms grid (chat 512px, paneel de rest) op desktop, een sleepbare bottomsheet op mobiel. Het "brein" (app/api/brain/route.ts) is Claude Haiku met tool-use, gedwongen tot exact één tool-call; zonder API-key of bij een fout valt de app terug op een deterministische keyword-router, dus de demo werkt altijd. Elke actie schrijft een append-only event in een "beslislog"; afgeronde episodes worden fire-and-forget gereflecteerd tot een korte, herbruikbare "les" (LLM of heuristiek), die relevant (woord-overlap, geen embeddings) de volgende systeemprompt injecteert. Een parallelle "geleerd recept"-laag onthoudt DNS-recordsets die samen werkten. Alles wordt op /admin door mensen gecureerd (vastzetten/archiveren/twijfel). Toon is kort (max 2 zinnen), warm, jargonvrij, doel-eerst, geen em-dashes. Voor Mi casa is vooral het patroon "action-id + args in message-metadata → paneel-dispatch", de stub/keyword-terugval en de beslislog-als-bewijslaag herbruikbaar; de SQLite-leerlus zelf is te zwaar voor een pitch-demo.

Bevindingen

1. Interactiemodel en lay-out

2. Het brein (app/api/brain/route.ts)

3. De leerlus

4. Toon en microcopy

5. Herbruikbaar voor Mi casa (vs. niet)

6. Valkuilen (uit docs/commits/sessielogs)

Wat dit betekent voor Mi casa

Het sterkste overdraagbare idee is niet de leerlus maar het kleine, robuuste kerncontract: "brein kiest exact één actie met typed args uit een vaste, korte enum, met altijd een deterministische, gratis terugval die nooit zichtbaar faalt." Voor een huis dat praat vertaalt dit naar: een vaste lijst huis-acties ("toon huisprofiel", "open onderhoudsplan", "laat fans zien", "start droomprofiel"), een korte, hard begrensde systeemprompt met doel-vóór-techniek-instructie, en een keyword-router als vangnet zodat de pitch op 1 november nooit "Ik snap het niet" toont. De beslislog-als-bewijslaag past bij de harde grens dat elk cijfer een bron moet hebben: elke paneelactie logt zijn eigen mensenzin + episode, en dat is meteen bewijs dat "wat de demo toont, werkt echt". De leerlus zelf (SQLite, reflectie-LLM-calls, curatie-admin) hoort niet in de MVP thuis: te veel bouwtijd voor iets dat bij twee vaste persona's en een eenmalige pitch geen zichtbaar effect heeft.

Aanbevelingen

  1. Neem "action-id + typed args in message-metadata → paneel-dispatch" letterlijk over als contract tussen Hono-server en Svelte-client, met een vaste, korte actie-enum voor Mi casa.
  2. Bouw eerst een keyword-/regex-terugval, niet het LLM-brein: dat maakt de demo écht ononderbreekbaar.
  3. Schrijf de systeemprompt als expliciete beslisboom (situatie → actie, met disambiguatie tussen buur-acties), naar het voorbeeld van app/api/brain/route.ts:23-138, niet als abstracte instructie.
  4. Leg een lichte beslislog aan (event + mensenzin + correlationId per actie) als bewijsspoor, zonder de leer-/curatielaag erbovenop te bouwen.
  5. Sla de SQLite-leerlus expliciet over voor de pitch; heroverweeg pas bij echt, herhalend gebruik.
  6. Hergebruik de copy-regels 1-op-1: max 2 zinnen, geen jargon, doel vóór techniek, vaste nette foutzin, geen em-dash.
  7. Pas de pariteit-gaplijst-methodiek toe (docs/plannen/pariteit-gaplijst.md) om te bepalen welke Mi casa-acties, mét bewijs uit FUNCTIEKAART.md/PITCH-FEITEN.md, een eigen paneel verdienen.

Open vragen

Bronnen

Alle bestanden via ssh z 'cat ...' gelezen op Mac z, map ~/Developer/genui-tel/, tenzij anders vermeld: README.md, CLAUDE.md, app/api/brain/route.ts, app/page.tsx, app/layout.tsx, components/assistant-ui/tool-ui-panel.tsx, components/layout/chat-container/chat-container.tsx, lib/conversation/stub-conversation-service.ts, lib/conversation/types.ts, lib/mx/lessons.ts, lib/mx/reflect.ts, lib/mx/recipes-learned.ts, lib/mx/kennis-selectie.ts, lib/instellingen/naden.ts, lib/quarantine.ts, app/admin/page.tsx, docs/testronde.md, docs/plannen/leerloop-werkplan.md, docs/plannen/pariteit-gaplijst.md, sessie-log-derde-versie-2026-09-01.txt. Verder git log --oneline in dezelfde repo (o.a. commits 9f24499, c10e455, bc5e6e4, 6d259c2, c4f9010, 266a1f1), en de schermafbeelding /Users/el3333/Library/Mobile Documents/com~apple~CloudDocs/2026/Code/genui-tel-koppeling/oogst/flow-xel-dns-doel.png (bekeken ter bevestiging van de paneel-lay-out).