De kennisgraaf — brainstorm, past het, en het plan per agent
Voor E · van B · 24 september 2026, ochtend
E: "Onderzoek de mogelijkheden om dit enorm uit te breiden zodat we ook slimmer kunnen worden met onze eigen data, meer controle hebben, begrijpen wat mensen leuk vinden, etc. En ook om dit in een graaf supersexy view weer te geven. Zo zoeken we naar allerlei relaties tussen data en kunnen dat ook weergeven. Dit maakt ook echt indruk bij de eerder genoemde doelgroepen. Laten we hier eerst over brainstormen, bepalen of en hoe dit past en een plan maken uitgebreid op agent niveau. Wie we waarop gaan zetten: Opus, Sonnet of Haiku."
Drie onderzoeksrapporten liggen eronder, vanochtend gemaakt met echte proefqueries en metingen:
R10 · bronnen voor straatkennis (Opus), R11 · graaf: opslag en weergave
(Opus, met een testgraaf van 0,88 miljoen knopen) en R12 · signalen en voorkeuren (Sonnet).
Dit stuk is de synthese en het plan. Het bouwt op wat A gisteren al live zette: het web van één huis als graaf
(/#/web/h01, twee polen: het huis en jij).
In één minuut
- Het past, en het is al begonnen. "Anderen kennen de dingen, wij kennen wat ertussen zit" (concept v3 §13) is letterlijk een graaf. A's scherm van gisteren is het huis-web; dit plan maakt er de stad van.
- Drie lagen, niet één graaf. Stenen (open bronnen, gedeeld, vrij te analyseren), mensen (per huis, alleen de eigenaar, nooit gedeeld) en het weerbericht (opgeteld, nooit onder vijf, bron "bezoekers"). De grens tussen de lagen ís de privacyregel, dus hij zit in het model in plaats van in een instelling.
- Geen Neo4j. Gemeten: SQLite beantwoordt op stadsschaal alles wat een bezoeker vraagt in 0,1 tot 3 ms. Een graafdatabase erbij is een tweede plek om persoonsgegevens te wissen zonder zichtbaar verschil.
- De straatnamen zijn het dunste stuk en de snelste winst. Nu 52 verklaringen; Wikidata en OpenStreetMap geven er in Utrecht 498 op ~3.100, alleen met code. Amsterdam en Rotterdam publiceren de verklaring van bijna al hun straten als open data.
- De pijplijn van de jaarweetjes is het recept: code haalt in bulk op en rekent, Haiku herschrijft alleen proza met citaat, Sonnet redeneert alleen per buurt over verbanden. Kosten: ~€5 voor de tien buurten, €27–55 voor heel Utrecht, €800–2.100 voor heel Nederland.
- Drie beelden die bij ons passen: de stad als sterrenhemel met een tijdschuif, vier zoomniveaus van stad tot huis, en een verhaalpad dat Carmen voorleest. Het verhaalpad kan deze week, de sterrenhemel over twee weken, honderdduizenden lichtjes later.
- Slimmer worden lukt zonder graafdatabase: "lijkt op jouw huis" in 0,7 ms, dertien groepen straten die op elkaar rijmen in 2 ms, straten zonder naamverklaring met één anti-join.
- Begrijpen wat mensen leuk vinden vraagt één tellertabel zonder persoon, IP of tekst, met drempel vijf; dat levert kanten als "thema water —vaak gewenst in→ wijk" naast de registerkanten, herkenbaar aan hun bron.
- Voor zaterdag niets nieuws bouwen behalve, als het donderdag af is, een afspeelknop en een verhaalpad in het bestaande scherm. De stad zelf komt in de twee weken erna.
- Zes besluiten zijn aan jou (§5); daaronder staat het plan met per stap agent, model, uren en euro's.
1 · Waar we staan
| Nu | Bron | |
|---|---|---|
| Straatkennis | 348 straten, 1.113 feiten (102 handgeschreven, 1.011 oogst); 323 van 327 straten in de tien buurten gedekt | server/data/verhalen/ |
| Straatnamen verklaard | 52 straten | idem, soort naam |
| Jaarweetjes | 176 jaren (1636–2026), 1.121 weetjes, NL en EN, elk met citaat | server/data/verhalen/jaren.json |
| Huis-zelfkennis | acht soorten registerfeiten per huis (monument, gezicht, ligging, maten, dak, hoogte, pand, binnen) | lib/kennis/huis-zelf.mjs |
| Straatmaten | tien buurten plus drie op aanvraag (ochtendzon, diepte, bomen, water, halte) | lib/kennis/straat-maten.mjs |
| Het web van een huis als graaf | live sinds gisteren: Sanne 46 knopen, 60 kanten; twee polen, clusters per herkomst, goud voor de band | lib/web-graaf.mjs, /#/web/h01 |
| Signalen | veel, maar óf per persoon (web, tafel, fans) óf zonder vorm (bewijsbord); niets opgeteld per thema | R12 §2 |
Landelijk telt de BAG 270.989 straten (type Weg); Wikidata kent bij 30.371 daarvan een naamgever. Aan de vraagkant is de demo nog te dun voor tellingen boven vijf: dat is een meetvraag, geen ontwerpvraag.
2 · De brainstorm: wat wordt het?
2.1 Eén model, drie lagen
De graaf is een afgeleide van wat er al is (relaties, tafel, registers, verhalen), niet een tweede bron van waarheid. Hij heeft drie lagen, en de laag staat op elke knoop en elke kant:
| Laag | Wat erin zit | Wie het ziet | Wat ermee mag |
|---|---|---|---|
| Stenen | huis, straat, buurt, wijk, jaar, naamgever, monument, architect, boomsoort, water, park, beeld, kaart, bron | iedereen | vrij analyseren, tonen, delen |
| Mensen | jij, je zinnen, je zaken, je open vragen, je fans (als getal en krans) | alleen de eigenaar | nooit gedeeld, nooit over huizen heen; "wis alles" wist ook hier |
| Weerbericht | thema —vaak gewenst in→ wijk, weetje —vaak leuk gevonden bij→ bouwperiode, straat —vaak gevraagd→ … | iedereen, alleen boven vijf | opgeteld, met bron "Mi casa su casa, bezoekers"; nooit een lijst, nooit een naam |
Gedeelde knopen krijgen vaste sleutels (straat:<slak>|<plaats>, wijk:<buurtcode>, jaar:1910,
naamgever:<Wikidata-id>, bron:bag), zodat het web van Sanne en dat van een ander huis dezelfde straat en
hetzelfde jaar delen zonder dat de mensenlaag elkaar ooit raakt.
2.2 Wat erbij komt aan kennis
De nieuwe knopen en kanten uit R10, met hun bron: straat —heet naar→ naamgever (Wikidata, OSM, Amsterdam, Rotterdam, de Wikipedia-lijsten); naamgever —geboren in→ jaar en —was→ beroep; straat —kreeg haar naam in→ jaar (Rotterdam); straat —hoort bij→ thema (admiraals, schilders); straat —heeft→ monument —ontworpen door→ architect; straat —staat op→ beeld (Europeana, met rechtenlabel per foto) en —ligt op→ kaart van een jaar (Kadaster, vanaf 1815); straat —draagt dezelfde naam als→ straat elders; straat —grenst aan→ water of park en —heeft bomen van→ soort. Elk met peildatum.
De helft tot twee derde van de 10–20 feiten per straat komt uit code zonder model: lengte, aantal panden, bouwjaren en lichtingen, monumenten en het oudste, bomen, hoogte, afstand tot water en park, de naamgever met levensjaren, de datum van vaststelling, het aantal foto's en de naamgenoten in het land. Haiku 4.5 herschrijft alleen proza (een naamverklaring, een Wikipedia-regel, een redengevende omschrijving) tot hoogstens acht zinnen met letterlijk citaat, en de code keurt zoals bij de jaarweetjes. Sonnet 5 komt er alleen bij voor twijfelgevallen en één keer per buurt voor de verbanden, op gekeurde feiten, waarbij elk verband op twee feit-id's rust.
2.3 Vijf ontdekkingen die het al oplevert
- De Schildersbuurt in Utrecht-Oost: elf straten heten naar schilders die tussen 1610 en 1638 geboren zijn, van Adriaen van Ostade tot Meindert Hobbema (Wikidata, 24-09). "Kijk, elf straten hier heten naar schilders die binnen dertig jaar van elkaar geboren zijn."
- Naamgenoten in het hele land: 593 straten naar koningin Wilhelmina, 193 naar Rembrandt, 161 naar Frans Hals. "Kijk, er zijn nog 192 straten zoals de jouwe."
- Een naam die ouder is dan de huizen: de datum van vaststelling naast het oudste bouwjaar.
- Jouw bouwjaar en de naamgever om de hoek: huis —klaar in→ 1910 ←geboren in— de naamgever van een straat binnen 500 meter.
- Het jaar in drie lagen: bij 1910 de kaart van 1910, de oudste vrije foto van de straat, en het aantal keren dat de straat dat jaar in de krant stond (alleen het getal, nooit de inhoud).
2.4 Drie beelden
A · De stad als sterrenhemel. Nachtblauw doek, 21.476 adressen als lichtjes op hun echte plek, straten als sterrenbeelden, tien wijknamen in kapitalen. Een tijdschuif van 1869 tot nu laat de stad decennium voor decennium oplichten. Jouw huis en je droomhuizen krijgen een gouden ring, rijmende huizen inkt. Een straat aantikken opent een passe-partout met haar maten en straatfeit. Bewijst: de hele stad uit open bronnen, niet 21 demohuizen.
B · Vier zoomniveaus. Stad (tien wijken) → wijk (straten, rijmgroepen als zachte vlakken) → straat (huizen per bouwjaar) → huis (het bestaande web). Elk niveau hoogstens ~50 knopen, in een passe-partout met onderschrift ("Wittevrouwen · 2.977 adressen · BAG"). Inzoomen brengt je een niveau dieper, niet alleen dichterbij. Bewijst: één model op vier schalen; het weerbericht is dezelfde graaf, opgeteld.
C · Het verhaalpad. Een route: huis → 1910 → jaarweetje → straat → naamgever → wijk. Alleen het pad in volle inkt, de rest gedimd. Per kant zegt het huis of Carmen één zin, gedrukt in de onderrand. Drie vaste paden, of zelf twee knopen aanwijzen. Bewijst: "wij kennen wat ertussen zit." Bouwt op wat er is: kiezen, camerarit, de stem en de werkwoorden bestaan al.
Wat het "supersexy" maakt en tegelijk begrijpelijk houdt (R11 §4): klein beginnen en uitvouwen, dimmen in plaats van verbergen, beweging alleen voor wat verandert, elke lijn leesbaar als zin, één boodschap per beeld. En onze eigen regels: goud alleen als haarlijn voor een band met jou, papier voor wat je leest, nachtblauw voor het podium.
2.5 Slimmer worden van eigen data
| Analyse | Voor wie | Gemeten | Graafdatabase nodig? |
|---|---|---|---|
| Lijkt op jouw huis (bouwjaar, oppervlak, water, park, bomen, rust, ochtendzon, gedeelde buren) | bezoeker: "Acht van ons…" | top-10 in 0,7 ms; alle huizen in 3,5 s | nee |
| Straten die rijmen | Carmen: "Ik heb drie straten" | 343 straten → 13 groepen in 2 ms | nee |
| Dromen per thema per wijk | eigenaar, wijk, weerbericht | tellertabel, k ≥ 5 | nee |
| Ontbrekende kennis (straat zonder naam, feit zonder bron) | wij, de oogst | anti-join | nee |
| Kern van een web (waar komen de meeste relaties uit) | redactie, nooit benoemd | drie tellingen (v3 §7) | nee |
| Wat mensen leuk vinden (♥ op een kaartje, "nog een", chip, vervolgvraag) | wij, Carmen | tellertabel, k ≥ 5 | nee |
Aan de aanbodkant is genoeg: van 343 straten hebben er 133 ochtendzon, 245 water binnen 100 m, 147 zijn rustig en 146 hebben een park binnen 150 m. Een graafdatabase helpt pas bij patronen van wisselende lengte, embeddings op structuur, of data groter dan het geheugen. Dan eerst LadybugDB (de opvolger van het gearchiveerde Kuzu) als zijspoor met alleen de stenenlaag.
3 · Past het?
Ja, en het versterkt het concept. Concept v3 zegt het al: drie webben (mens, huis, plek) die elkaar raken in driehoeken; "bron is spraakrecht"; "huizen kennen elkaar, mensen niet"; "matchen is rijm, geen filter"; en de positionering in zeven woorden. De drie lagen van §2.1 zijn precies die drie webben, en de graaf maakt zichtbaar wat de pitch beweert. Het spraakrecht blijft in het model: een kant uit een register mag klinken, een kant uit "gedaan" of "afgeleid" mag alleen kiezen, en een opgetelde kant is weerbericht, geen citaat.
Waar het schuurt, en wat we daarmee doen:
- Geen netwerkplaatje als thuisscherm voor bewoners (brainstorm 09). De graaf is voor de eigenaar ("Mijn web"), voor het team, voor de zaal en voor onze redactie. De bewoner krijgt het sterrenbeeld: hoogstens negen sterren, in rust geen lijnen.
- Mensen nooit in de gedeelde graaf. Geen
jijover huizen heen, geen fanlijst, geen huisnummers van anderen, geen tellingen onder vijf, geen ranglijst van huizen (D6). De code dwingt dat af met de laag op elke knoop. - Delpher pas na een jurist. De treffers zijn veilingen, prijzen en familieberichten; jonger dan 140 jaar is bovendien niet vrij. Nu hoogstens een telling.
- Licenties. Wikidata en Rotterdam zijn CC0; OSM is ODbL (een eigen zin met link is veilig, een hele laag overnemen niet); Amsterdam moet nagevraagd; geen BY-NC-beelden; Cosmograph zelf is niet-commercieel (de motor eronder wel vrij); Neo4j's weergave mag niet met de gratis versie.
- De uitsluitlijst niet blind hergebruiken. Straatnamen met oorlog of koloniale geschiedenis (Witte de Withstraat, Atjehstraat) vallen dan stil weg. Dat is een keuze voor jou (§5).
- Zaterdag. Niets nieuws in het pad van de teamsessie. Een afspeelknop en een verhaalpad in het bestaande scherm alleen als ze donderdagavond af en gekeurd zijn; anders na zaterdag.
Kosten passen ruim. Modelkosten voor de tien buurten ~€5, heel Utrecht €27–55, landelijk €800–2.100 in batch. Agentwerk (R11's schatting: Opus €8–15, Sonnet €3–6, Haiku €1–3 per uur) voor de twee weken na zaterdag ruwweg €300–500. Geen nieuwe infrastructuur, geen abonnement.
4 · Wie we waarop zetten
| Rol | Wie | Waarom |
|---|---|---|
| Regie van de bouw, deploy, keuring van tekst | A (hoofdagent) | kent de werkkopie en de contracten; deployt |
| Onderzoek, QA, lekcontrole, regiedocumenten | B (deze sessie) | raakt de code niet aan; toetst tegen §4 |
| Architectuur en samengestelde bouw (graaftabellen, stadsweergave, ontdekkingen, sterrenhemel) | Opus | meerdere modules tegelijk, ontwerpkeuzes onderweg |
| Afgebakende bouw (tellers, hooks, batch-oogst, verhaalpaden, stadsroute) | Sonnet | duidelijke opdracht, bestaand patroon |
| Bulk-inhoud (proza per straat, namen voor rijmgroepen) | Haiku 4.5 | goedkoop, alleen kiezen en herschrijven met citaat; code keurt |
| Redeneren per buurt (verbanden, twijfelgevallen bij naamgevers) | Sonnet 5 in de pijplijn | één aanroep per buurt, op gekeurde feiten |
| Steekproeven en de keuze bij ongemakkelijke namen | E | smaak en grens |
5 · Zes besluiten voor jou
- Opslag: doorgaan op SQLite met de graaf als afgeleide (tabellen
knoopenkantmet laag, bron, sinds, tot), géén Neo4j- of Memgraph-container. Advies: ja. - Volgorde van de steden na Utrecht: Amsterdam en Rotterdam (open verklaringen), dan de dertig Wikipedia-lijststeden, dan landelijk met alleen code-feiten waar geen proza is. Advies: zo.
- Ongemakkelijke namen: zwijgen (uitsluitlijst) of vertellen zoals bij het Gifpark ("de straat heet naar een admiraal die in 1658 sneuvelde"). Advies: vertellen, in Carmens droge toon, zonder oordeel; oorlog en ramp in de jaarweetjes blijven wél uitgesloten.
- Welk beeld eerst: het verhaalpad (deze week, als het donderdag af is), de sterrenhemel over twee weken, de zoomniveaus daarna. Advies: zo.
- De signalenlaag (tellertabel zonder persoon, k ≥ 5, ♥ op kaartjes tellen, chips tellen): bouwen in week 40. Advies: ja, met het bewijsbord als eerste afnemer.
- Zaterdag: alleen het bestaande huis-web plus eventueel afspeelknop en verhaalpad; de stad komt erna. Advies: ja; donderdagavond bevriezen.
6 · Het plan op agent-niveau
Uren zijn agent-uren (schatting); euro's zijn API-kosten van de pijplijn, agentkosten staan er apart bij volgens R11's tarieven. B keurt elke stap vóór deploy; A deployt.
Deze week (wo 24 – za 26 september) · alleen wat zaterdag niet raakt
| # | Stap | Agent · model | Uren | € pijplijn | Voorwaarde |
|---|---|---|---|---|---|
| 1 | Afspeelknop (groei op sinds/wanneer) en verhaalpad-stand in Web.svelte, achter een parameter |
Opus | 2–3 | 0 | af en gekeurd donderdagavond, anders na zaterdag |
| 2 | Lezen van R10–R12 en de zes besluiten | E | 0,5 | 0 | — |
| 3 | QA en lekcontrole op 1 | B | 1 | 0 | — |
Twee weken erna (week 40–41, 28 september – 11 oktober) · "Utrecht compleet" en de stad in beeld
| # | Stap | Agent · model | Uren | € pijplijn |
|---|---|---|---|---|
| 4 | Naamgeverlaag voor Utrecht uit Wikidata (via QLever) en OSM, alleen code; doel ~500 van 3.126 straten (nu 52) | Opus | 6 | 0 |
| 5 | Haiku-oogst op proza voor de 327 straten van de tien buurten, keuring als bij de jaarweetjes, uitsluitlijst uitgebreid met bedragen, "verkocht", "geveild" | Sonnet bouwt · Haiku vult | 8 | ~5 |
| 6 | Migratie 0003-web.sql: tabellen knoop en kant (laag, huis_id, bron, sinds, tot), projectie in meldWebVeranderd, "wis alles" en reset, lektests |
Opus | 6–8 | 0 |
| 7 | Signalenlaag: schema en drempel (Opus), tellermodule naar telling.mjs en hooks in wijk/machine/brein (Sonnet), route die alleen opgeteld teruggeeft, weigertests |
Opus 2–3 + Sonnet 6–10 | 8–13 | 0 |
| 8 | Nieuwe knopen en kanten in de graaf (naamgever, jaar, monument, architect, thema, beeld, kaart) plus de ontdekkingen per buurt op gekeurde feiten | Opus bouwt · Sonnet 5 in de pijplijn | 8 | ~1 |
| 9 | GET /api/stad/web (alleen stenen, geen personen) en de stadsweergave op Sigma.js: zoomniveaus, tokens, toetsenbord, telefoon; lay-out vooraf op de server |
Opus | 8–10 | 0 |
| 10 | Nachtjob lib/graaf met graphology: lijkt-op, rijmgroepen (Louvain), ontbrekende kennis, als tabellen |
Sonnet | 4–6 | 0 |
| 11 | Heel Utrecht in batch, met vrije beelden via Europeana (CC0, publiek domein, CC BY) en de kaart van het bouwjaar | Sonnet bouwt · Haiku vult | 10 | ~27–55 |
| 12 | Rijmgroepen een naam geven; naamverklaringen aanvullen met bron-url die 200 gaf | Haiku · Opus keurt | 2–4 | ~5 |
| 13 | Drie verhaalpaden uitschrijven en een reservevideo voor het podium | Sonnet | 2 | 0 |
| 14 | Steekproef van honderd straten en een oordeel | E en B | 3 | 0 |
| 15 | QA, lekcontrole en het bewijsbord met de eerste opgetelde signalen | B | 4 | 0 |
Agentkosten week 40–41 ruwweg €300–500; pijplijn ~€40–65.
Daarna (vanaf half oktober) · andere steden, het land, de sterrenhemel
| # | Stap | Agent · model | Uren | € pijplijn |
|---|---|---|---|---|
| 16 | Amsterdam (5.288 straten) en Rotterdam (5.566); eerst de licentie van Amsterdam navragen | Sonnet | 8 | ~70–170 |
| 17 | De dertig Wikipedia-lijststeden | Sonnet | 12 | ~30–60 per 5.000 straten |
| 18 | Landelijk: overal code-feiten, Haiku alleen waar proza is, Sonnet per buurt | Opus | 20–30 | ~800–2.100 |
| 19 | Sterrenhemel op cosmos.gl (WebGL, honderdduizenden lichtjes, tijdschuif); 3D hoogstens als podiummoment | Opus | 12–16 | 0 |
| 20 | Delpher-tellingen, pas na een juridische toets (KB-voorwaarden, grens van 140 jaar) | jurist eerst | — | — |
| 21 | LadybugDB als zijspoor, alleen bij een meetbare aanleiding (p95 boven 100 ms, ad-hoc Cypher, embeddings op structuur, > ~30 miljoen kanten) | Opus | 4 | 0 |
7 · Wat we niet doen
- Geen Neo4j of Memgraph naast de app; geen Kuzu (gearchiveerd); geen Cosmograph-app (niet-commercieel), geen Neo4j NVL, geen deepscatter; Gephi Lite hoogstens als los teamgereedschap.
- Geen live-SPARQL of Overpass tijdens een gesprek (gemeten: 25 s, time-outs, "too busy"); alles in bulk vooraf.
- Geen Delpher-inhoud, nooit advertenties, veilingen of familieberichten; niets uit CBS over mensen; geen WOZ, geen koopsom, geen waarde uit 1832; geen luchtkwaliteit (leest als een gezondheidsclaim); geluid en energielabel alleen gedrukt en per straat.
- Geen naamverklaring die het model zelf bedenkt: zonder citaat geen feit.
- Geen hele lagen overnemen onder BY-SA of ODbL; geen straatnamenboek of heemkundesite scrapen; geen BY-NC-beelden; geen AI-bewerking van historische foto's van echte adressen (D9).
- Geen mensen in de gedeelde graaf; geen ranglijst van huizen; geen gefaakte groei in de demo; geen 3D als hoofdvorm; geen hex-kleuren in componenten.
- Geen buurtzin die in veertig straten wordt herhaald.
8 · Waar het staat
- Rapporten:
conversational/onderzoek/10-bronnen-straatkennis.md,11-graaf-opslag-en-weergave.md,12-signalen-en-voorkeuren.md(meetscripts van R11 in zijn scratchpad; de metingen staan in het rapport). - Wat er al is:
server/lib/web-graaf.mjs(de graaf van één huis),web/src/schermen/Web.svelteenweb/src/lib/webgraaf.js(canvas, d3-force),server/lib/relaties.mjs(het web als zinnen),server/lib/kennis/(huis-zelf, straat-bronnen, straat-maten, jaarweetjes),server/lib/telling.mjs(tellers). - Eerdere besluiten waar dit op rust: concept v3 §7–9 en §13, brainstorm 09–15, D6 (geen ranglijst), D51 (demo verbergt presentatie, nooit gedrag), OVERDRACHT §4.