RPO Architecture Proposal
Project: Risicoplatform Overheden (RPO) — VNG Risicobeheer Author: Architect, vanmiddag-decision-support Date: 2026-05-28 Status: Draft voor meeting 12:00–17:00 Nijmegen Scope: Architectuur beyond de live demo (https://rpo.humanaize.nl) — naar productie per 1 juli 2026
This document is decision-support, not a finished spec. Doel: 6 architectuur-besluiten landen vanmiddag, niet 60 opties uitleggen.
0. Executive summary — de 6 architectuur-decisies
| # | Vraag | Aanbeveling | Trefzeker? |
|---|---|---|---|
| 1 | Marktonderzoeker + Marketingstrateeg: runtime-service of one-off pipeline? | One-off pipeline in tools/research/ (Python + Playwright + Anthropic API). Niet bolted in Next.js. | Hoog |
| 2 | Journalist-agent ≡ Ask Humanize research-agent? | Split. Verschillende scope (public web vs SharePoint), verschillende audience (leden vs Mano's redactie), verschillende trust-boundary. Hergebruik schema, niet runtime. | Hoog |
| 3 | Frontend evolutie: static prototype → applicatie | Same Next.js app + Auth0 + DigitalOcean Managed Postgres + Prisma. Werkgroepen als embedded forum (Discourse SSO of light-built /werkgroep/[id]). | Middel — forum-keuze open |
| 4 | Deployment voor productie (per 1 juli) | Blijven op droplet + Managed PG erbij. K8s prematuur. Migratie-trigger = ledental of incident, niet datum. | Hoog |
| 5 | Auth | Auth0. Authentik considered-and-rejected (zelf hosten = extra ops voor team-of-1 ops). | Hoog |
| 6 | EU AI Act-positie journalist-agent | Documenteer als limited-risk (transparency obligation). Disclaimer "samengesteld door AI" naast elke feed-item. Voorzie review-pad bij Mano. | Middel — juridische check Q3 |
Hard deadlines die de scope dicteren:
- 1 juli 2026 (~5 weken) — auth + persistente data + zichtbare website voor accountmanager
- Aug 2026 — EU AI Act ingangsdatum
- Okt 2026 — RPO-congres, 200 gemeenten / 4 actieve werkgroepen KPI
Default principe per sectie: "wat ships voor 1 juli, wat schuift naar v1.1."
1. System overview
Narrative. Eén Next.js applicatie draait op de bestaande droplet onder PM2 (rpo-vng), met nginx als TLS-termination. Auth gaat via Auth0 (HumanAIze-default). Persistente data zit in DigitalOcean Managed Postgres — geen Supabase, om binnen de stack te blijven. Drie AI-werkstromen leven naast de applicatie maar communiceren via Postgres: (a) een dagelijkse journalist-agent als Python cron-worker, (b) Mano's Ask Humanize research-agent als SaaS-integratie met scoped SharePoint-toegang, (c) een one-off marktonderzoeker + marketingstrateeg pipeline in tools/research/ die markdown produceert die in de repo gecheckt wordt. Secrets centraal in Azure Key Vault zoals de overige HumanAIze-projecten.
2. De twee-persona AI-laag (marktonderzoeker + marketingstrateeg)
Mano, 27 mei: "Het is echt een marketingonderzoeker, marktonderzoeker. Een marktonderzoeker kan wel aanbevelingen doen, maar een stratege kijkt verder dan alleen het marktonderzoek."
Architectuur-positie: dit is geen deployed service. Het is een one-off content-generation pipeline die één keer (en eventueel kwartaal-iteratief) wordt afgevuurd om de doelgroep-portret + waardepropositie te genereren. Output landt als markdown in de repo (bron voor src/lib/content.ts en de positionerings-doc), niet als runtime endpoint.
Argument: Mano heeft die output één keer nodig voor de 1-juli launch. De waardepropositie verandert niet wekelijks. Bolting dit in de Next.js runtime betekent productie-engineering voor iets dat een notebook kan zijn.
2.1 Marktonderzoeker
| Aspect | Keuze | Rationale |
|---|---|---|
| Runtime | Python script in tools/research/marktonderzoeker/ | Geen runtime-service nodig, alleen build-time |
| Scraping | Playwright (Python) + httpx voor RSS/static pages | Werken-bij sites zijn JS-rendered; Playwright al HumanAIze-default per .mcp.json |
| Bronnen-scope | Zie ONDERZOEK_BRONNEN in src/lib/content.ts (werken-bij sites, vakmedia, LinkedIn-public, beleid) | Lijst is transcript-geverifieerd |
| Legal | Respect robots.txt; rate-limit 1 req/2s; alleen publieke pagina's; geen login-gated content | Werken-bij sites publiceren expliciet voor wervingsdoeleinden — vacatures lezen valt onder normaal gebruik. LinkedIn alleen public posts via search, geen auth-bypass. |
| LLM | Claude Sonnet 4.5 (kostprijs-optimaal voor extractie) | Doelgroep-vocabulaire extractie is geen reasoning-zware taak |
| Output | tools/research/output/doelgroep-portret-2026-06.md | Mens-leesbaar, committable, reviewable by Mano |
Prompt-pattern (1-shot extractie):
SYSTEM: Je bent een ervaren marktonderzoeker met 20+ jaar in risicomanagement bij Nederlandse gemeenten.
Je leest scraped HTML + tekstfragmenten en extraheert: (1) doelgroep-vocabulaire,
(2) pijnpunten, (3) thema-frequentie, (4) gebruikte tools/methoden.
GEEN aanbevelingen, GEEN strategie — alleen observatie.
USER: <bundel van 30-50 scraped fragments + metadata>
2.2 Marketingstrateeg
| Aspect | Keuze | Rationale |
|---|---|---|
| Runtime | Python script in tools/research/marketingstrateeg/ | Idem |
| LLM | Claude Opus 4.7 | Synthese + positionering = reasoning-zware taak, kosten zijn één-time |
| Input | Output van marktonderzoeker + bestaand corpus (Mano's mail, FAMO-vergelijking uit content.ts, YAG-rapport) | Strateeg ziet meer dan alleen marktonderzoek |
| Output | tools/research/output/positionering-2026-06.md + concept-update voor src/lib/content.ts HERO/EVIDENCE | Mano edit handmatig, dan commit |
Handoff. Sequentieel, human-in-the-loop. De strateeg wordt pas gedraaid nadat Mano het doelgroep-portret heeft gelezen en eventueel handmatig aangevuld. Geen automatische trigger.
2.3 Wat ships voor 1 juli
- Pipeline runt één keer in juni
- Output wordt door Mano gereviewed in week 24
- Commits landen in
src/lib/content.tszodat de website-copy verbatim doortikt naar productie - Geen API, geen UI, geen scheduler
2.4 Wat schuift naar v1.1
- Kwartaal-refresh als cronjob (vraagt scheduler + storage van diffs)
- UI in admin-route voor Mano om scrape-bronnen te beheren
3. Journalist-agent vs. Ask Humanize research-agent
Johan, 27 mei: "Je zou eigenlijk ook kunnen zeggen dat je ook een beetje een journalist eigenlijk, hè." Mano, 27 mei: "Ik vind dat echt een briljant idee."
Decision-vraag 6 in de briefing: één agent of twee?
3.1 Aanbeveling: SPLIT
Twee aparte services, met gedeeld schema (pijler-classificatie, dedup-fingerprint), geen gedeelde runtime.
3.2 Argumentatie (vier dimensies)
| Dimensie | Journalist-agent | Ask Humanize research-agent | Implicatie |
|---|---|---|---|
| Input-scope | Publieke web-bronnen (BB, IBD, NCSC, EUR-Lex, VNG, ESB) | Scoped SharePoint-mappen per project | Verschillende auth, verschillende crawl-strategieën, verschillende rate-limits |
| Audience | Leden (publieke feed op /platform) | Mano's redactie (intern) | Verschillende SLA's, verschillende redactie-controle |
| Trust boundary | Open web — geen toegangscontrole nodig | M365-data — moet permission-aware zijn (Sharepoint-perms cascade) | Anders modelleren; mengen creëert lekrisico |
| Vendor | Self-hosted (Python + Anthropic) | Ask Humanize platform (Mano configureert) | Verschillende lifecycles, verschillende kosten-modellen |
Coupling-risico bij one-agent-model: je bouwt een single point of failure voor twee onafhankelijke functies, met een deadline van 5 weken. Een outage in de SharePoint-integratie zou de publieke leden-feed plat leggen. Niet doen.
Wat wel delen: het schema. Beide agenten produceren items met dezelfde shape:
type FeedItem = {
id: string; // fingerprint hash (url + title + datum)
source: string; // 'binnenlandsbestuur' | 'sharepoint:rpo' | ...
pijler: 'ravijn' | 'sociaal' | 'cyber' | 'fraude' | 'vastgoed' | 'overig';
subthema: string[]; // dynamisch aangescherpt (zie Aanscherpen-stap)
titel: string;
samenvatting: string; // LLM-generated, 2-3 zinnen
url: string;
publishedAt: Date;
confidence: number; // pijler-classificatie confidence 0-1
audience: 'public' | 'internal';
};
3.3 Journalist-agent runtime
Type: dagelijkse cron worker. Niet event-driven (sources publiceren op onvoorspelbare momenten; polling is goedkoop genoeg). Niet on-demand (frisheid is feature).
Bronnen (deze landen als config in tools/journalist/sources.yaml, niet hardcoded):
- RSS waar beschikbaar (Binnenlands Bestuur, VNG, NCSC, EUR-Lex search-feeds)
- HTML-scrape met
httpx + selectolaxwaar geen RSS (IBD-meldingen, ESB) - Custom: EUR-Lex CELEX-zoektermen op
gemeente,AI Act,cyberbeveiligingswet
Aanscherpen (Johan's centrale eis: thema-definities moeten groeien, niet bevriezen).
Implementatie: na elke classify-batch berekent de agent welke subthema-strings ≥3× per week opduiken binnen een pijler. Die landen in pijler_subthemes tabel, zichtbaar in admin-UI, met optie "promote to top-level subthema". Mens-in-the-loop: agent stelt voor, mens (Mano of moderator) bevestigt.
Storage. Postgres, geen vector-DB. De volumes zijn klein (~50-200 items/dag), full-text search via tsvector is adequaat, en pijler-classificatie is een symbolisch label (geen embedding-similarity nodig). Vector-search alleen toevoegen als semantic search over werkgroep-content een feature wordt — dat is v1.1.
Modelkeuze. Claude Sonnet 4.5 voor classify (kosten-optimaal, snel). Opus alleen voor weekly digest-samenvatting als die ooit een feature wordt.
3.4 Ask Humanize research-agent runtime
Mano-owned, configured via Ask Humanize UI. Geen eigen build vanuit ons team. Architectuur-implicatie voor ons:
- We exposen geen direct endpoint richting Ask Humanize
- Ask Humanize krijgt read-only SharePoint-toegang scoped per project (RPO + RBF apart)
- Output van research-agent landt als markdown/Word in een SharePoint-export-map, die Mano handmatig binnen-curateert
- Niet automatisch op de publieke feed — anders krijg je SharePoint-lekken op het portaal
Secrets. Ask Humanize-tenant credentials in Azure Key Vault onder humanaize/ask-humanize/rpo-research. SharePoint scoping via Azure AD app-registration met Sites.Selected permission (whitelist alleen RPO-map).
3.5 Wat ships voor 1 juli
- Journalist-agent v0: 3 bronnen (BB, NCSC, IBD), dagelijkse cron, output naar Postgres, simpele feed-UI op
/platform/actualiteiten - Aanscherpen alleen als dashboard-view (geen automatische promotie van subthema's)
- Ask Humanize: Mano configureert standalone, geen UI-integratie aan onze kant
3.6 Wat schuift naar v1.1
- 6-10 extra bronnen
- Auto-promotion van subthema's
- Member-personalized feed (filter op gekozen pijlers uit onboarding)
- Email digest per werkgroep
4. Frontend architecture beyond the demo
4.1 Stack-uitbreiding (additief, geen rewrite)
Huidige stack: Next.js 15 + React 19 + Tailwind + Motion. Blijft als basis.
| Layer | Toevoeging | Rationale |
|---|---|---|
| Auth | @auth0/nextjs-auth0 v4 | HumanAIze-default; gemeente-SSO via Auth0 enterprise connections kan later |
| DB | DigitalOcean Managed Postgres (1GB starter) | In-stack (geen Supabase), backup-managed, ~€15/maand |
| ORM | Prisma | Type-safe, schema-first, migrations |
| Forum | Build-light in eigen routes (/werkgroep/[id], threads tabel) | Discourse SSO overkill voor 5 werkgroepen × ~30 leden. Herzien bij >200 actieve users |
| Search | Postgres FTS (tsvector + pg_trgm) | Volume klein, geen Elastic nodig |
| Resend (transactional) | HumanAIze stack, simpel | |
| File-storage | SharePoint passthrough voor gedeelde docs + DigitalOcean Spaces voor user-uploads | Werkgroep-bijlagen blijven in SharePoint waar Mano ze ook ziet; user-uploads (avatars, kleine attachments) in Spaces |
4.2 Auth-positie
- Auth0. Authentik considered-and-rejected: self-hosting auth toevoegen aan een team-of-1-ops voor 5 weken deadline is risk-additive zonder duidelijke gain.
- Gemeente-medewerkers krijgen in v0 een invite-based magic-link flow. Auth0 Universal Login + email-OTP. Geen wachtwoorden tot enterprise-SSO komt.
- Rollen:
member,moderator,admin. Geen gemeente-niveau permissies — content is binnen het platform open voor alle leden.
4.3 Peer-matching algoritme (sketch)
Uit ONBOARDING flow (content.ts:587): member kiest 3 thema's, krijgt 3 matches. Algoritme v0:
def match(user):
candidates = users.where(
gemeente != user.gemeente, # cross-gemeente voorkeur
thema_overlap(user, candidate) >= 1
)
return sorted(candidates,
key=lambda c: (
jaccard(user.themas, c.themas), # thema-overlap
c.recent_contribution_score, # actieve users boven
-distance(user.regio, c.regio) # regio-nabijheid als tiebreaker
),
reverse=True
)[:3]
Geen ML, geen embeddings — Jaccard + activity score is genoeg voor v0. Belangrijker: thema-keuzes moeten editbaar zijn na onboarding (anders bevriest het matchmodel).
4.4 Werkgroep-functionaliteit
Per VIER_SPOREN[3] (Platform-spoor) en PIJLERS[*].werkgroep: vijf werkgroepen, 1-op-1 met pijlers (default uit briefing decision-vraag 4).
v0-features per werkgroep:
- Threaded discussies (zoals klassiek forum, geen Slack-stijl chat — risicomanagers zijn geen always-on)
- Pinned resources (links naar SharePoint-docs of upload)
- Member-list met thema-tags
- Upcoming meetup (één event-record per werkgroep)
Niet v0: voice/video, DM, polls, gamification. Te veel surface voor 5 weken.
4.5 Search-strategie
Eén index, twee filters. Postgres FTS over één searchable_content materialized view die zowel feed_items (actualiteiten) als forum_posts (werkgroep-content) bevat, met source_type als filter. Dit voorkomt twee aparte search-UIs en houdt relevance-ranking consistent.
CREATE MATERIALIZED VIEW searchable_content AS
SELECT id, 'feed' AS source_type, titel, samenvatting AS body, pijler, published_at
FROM feed_items
UNION ALL
SELECT id, 'forum' AS source_type, subject, body, werkgroep_id::text, created_at
FROM forum_posts;
CREATE INDEX idx_searchable_fts ON searchable_content
USING gin(to_tsvector('dutch', titel || ' ' || body));
Refresh hourly via cron.
4.6 Wat ships voor 1 juli
- Auth0 + invite-flow voor 20-50 pilot members
- 5 werkgroepen met forum-threads + member-list
- Onboarding-flow zoals in prototype
- Actualiteiten-feed op
/platform(read-only, journalist-agent output) - Geen peer-matching nog —
/onboardingstep 3 stuurt naar werkgroep-list i.p.v. matches
4.7 Wat schuift naar v1.1 (na 1 juli)
- Peer-matching (vraagt ~50+ users om zinvol te zijn)
- File-upload naar Spaces (eerst SharePoint-links volstaan)
- Search-UI (eerst direct naar werkgroep navigeren)
- Email-digest
5. Deployment + infra
5.1 Huidige situatie
- Test droplet
157.245.67.48, PM2 processrpo-vng, nginx + Let's Encrypt, deSEC DNSrpo.humanaize.nl - Geen DB, geen auth, geen secrets (statisch prototype)
5.2 Productie-target per 1 juli
Blijf op droplet. Voeg toe:
| Component | Hoe | Kost/maand (€) |
|---|---|---|
| App | Bestaande droplet, PM2 process rpo-vng | 0 (al rented) |
| Postgres | DigitalOcean Managed PG, 1GB, single node | ~15 |
| Backups | DO automated daily snapshots PG + droplet | ~3 |
| Secrets | Azure Key Vault (shared HumanAIze tenant) | ~0 (binnen quotum) |
| DNS | deSEC, bestaand | 0 |
| TLS | Let's Encrypt, bestaand | 0 |
| Resend, free tier <100/dag | 0 | |
| Object storage | DO Spaces 250GB | ~5 |
| Subtotaal infra | ~25 | |
| Anthropic API (journalist-agent dagelijks) | Claude Sonnet 4.5, ~50-200 items/dag, ~€10-25/dag inputs + outputs | ~300 |
| Auth0 | Free tier <7500 active users (we zitten ver onder) | 0 |
| Totaal voor jaar 1 | ~325-400/maand |
Eerste-jaar-ballpark: €4-5k. Plus de marktonderzoeker/strateeg one-off (~€50-100 in API kosten, eenmalig).
5.3 Wanneer migreren? (niet een datum maar een trigger)
| Trigger | Migratie | Naar |
|---|---|---|
| >500 simultane actieve users | App scale-out | 2e droplet + DO load balancer |
| >50GB DB-data of >100 IOPS sustained | DB upgrade | DO Managed PG 4GB |
| Werkgroep-uploads >50GB/maand | File storage | Behoud Spaces, voeg CDN toe (BunnyCDN) |
| Multi-region need (waarschijnlijk nooit voor NL-only product) | K8s | Niet voor product met 341 max-users |
Geen K8s in v1 en v1.1. De gemeente-doelgroep is begrensd (max 341 gemeenten × ~5 users = ~1700 max-users levenscyclus). Droplet + managed PG schaalt daar makkelijk doorheen.
5.4 Deployment-flow
Per-1-juli kritiek pad:
- Provisioneer Managed PG (1 dag)
- Auth0 tenant configureren + invite-flow (2 dagen)
- Prisma schema + seed (2 dagen)
- Werkgroep + forum routes (5 dagen)
- Journalist-agent v0 (3 dagen)
- Onboarding-flow productionizen (3 dagen)
- Buffer + bug-bash (5 dagen)
- Totaal: ~21 werkdagen, marginaal binnen 5 weken bij focus.
6. Integration boundaries
6.1 SharePoint / M365 via Ask Humanize
- Toegang: Azure AD app-registratie met
Sites.Selected(nietSites.Read.All!). Mano whitelist per site-collection - Scope per project:
Risico Platform Overheden/voor RPO research-agent,Risico Beheer Fonds/voor RBF - Credentials: Azure Key Vault, secret-rotation 90-dagen via Azure-policy
- Data-flow: read-only naar Ask Humanize. Output landt als markdown/Word terug in SharePoint, niet rechtstreeks in onze Postgres. Mano cureert handmatig wat er publiek mag
Waarom geen directe SharePoint→portaal-pipe? Permissiestructuur van SharePoint is complex (per-folder, per-doc, member-of-group). Doorlopend correct enforcen vanaf onze app is een security-projectje van weken. Mano-curatie is goedkoper en correcter voor v1.
6.2 VNG / Christiaan Ravensbergen
Voorlopig standalone. Geen directe VNG-systeem integratie in v0/v1.
| Mogelijke integratie | Aanbeveling | Reden |
|---|---|---|
| Member roster import vanuit VNG-CRM | v1.1 | Geen API bekend; CSV-handover is sneller voor 1 juli |
| Billing | Nooit op RPO-platform | VNG factureert lidmaatschap, blijft daar |
| SSO via VNG | v2 indien gevraagd | Auth0 enterprise-connection feature, niet kritiek voor 1 juli |
Concreet vragen aan Christiaan vanmiddag: kunnen we een eenmalige CSV-export krijgen van de 169 gemeente-contacten met email? Dat is voldoende voor invite-flow.
6.3 RBF parallel traject
Volledig gescheiden stack voor de PoC-fase, shared services waar dat gratis is.
| Service | Shared of separated? |
|---|---|
| Domein | Separated — rbf-poc.humanaize.nl of vergelijkbaar |
| Droplet/PM2 | Shared droplet, eigen PM2 process |
| Postgres | Separated database, shared managed PG instance |
| Auth0 tenant | Shared (humanaize.eu.auth0.com), separated application + connections |
| Key Vault | Shared, prefixed secret-keys (rpo/... vs rbf/...) |
| Journalist-agent | Separated. RBF heeft eigen content-domein (brandverzekering, cohort 27). Mogelijk in v2 een gedeelde scheduler-framework |
Schemarefactor: als de journalist-agent v0 al multi-tenant op project_id wordt gemodelleerd, kost RBF-uitbreiding later weinig. Aanbeveling: doe het meteen multi-tenant in de DB, ook al gebruikt RPO-v0 maar één tenant.
7. Risico's & open vragen
7.1 Te beslissen vanmiddag (anders staat het bouwen vanaf maandag stil)
| # | Vraag | Default als geen besluit |
|---|---|---|
| 1 | Auth provider: Auth0 oké? | Auth0 (default doorzetten) |
| 2 | Werkgroep-model: 1-op-1 met pijlers? | Ja (5 werkgroepen) |
| 3 | Journalist-agent in v0? | Ja, met 3 bronnen |
| 4 | Database: Managed PG provisionen? | Ja, vandaag al |
| 5 | Domein voor prod: blijft rpo.humanaize.nl of naar rpo.vng.nl/risicoplatform.nl? | Blijft rpo.humanaize.nl tot VNG-domein-cessie geregeld is — anders moet TLS/DNS opnieuw |
| 6 | Member-roster: CSV van Christiaan? | Vragen vanmiddag |
7.2 Te deferren tot na 1 juli
- Peer-matching (vereist users)
- Email digest
- File-upload UI
- VNG-SSO
- Subthema auto-promotion
- Multi-region, K8s, vector-search
7.3 Onzichtbare risico's die naming verdienen
| Risico | Mitigatie |
|---|---|
| EU AI Act (aug 2026) — journalist-agent is een AI-systeem dat content aan leden serveert. Mogelijk classificeerbaar als "limited risk" (transparency obligation). | Disclaimer naast elk feed-item: "AI-geselecteerd, AI-samengevat — bron-link voor verificatie". Logging van prompts + outputs voor audit-trail. Juridische check Q3. |
| Ledental-inconsistentie (briefing decision-vraag 3) | Architectuur-onafhankelijk, maar de DB moet één canonieke gemeente.member_status veld hebben — geen vrije-tekst ledental op website (alles uit DB) |
| Werken-bij sites veranderen layouts | Playwright-scripts breken stil. Voeg --smoke-test mode toe met verwachte selector-fingerprints. Cron-failure → alert naar Mano via email |
| SharePoint-scope creep — als Mano gemakshalve te brede sites whitelisted, lekt research-agent buiten RPO-context | Audit per kwartaal welke sites Sites.Selected heeft. Documenteer in docs/integrations/sharepoint-scope.md |
| Auth0 free-tier limiet (7500 MAU) — als RPO viraal gaat | Onwaarschijnlijk gegeven max 1700 users levenscyclus, maar plan B is Auth0 Essentials €23/maand |
| Single-droplet SPOF — als droplet onderuit gaat tijdens RPO-congres oktober | Bestaande backups + 1-uur restore-procedure. Bij gevoelig moment: warme stand-by droplet één week voor congres |
8. Sequence diagram — concrete user-flow
Scenario: Marieke, risicomanager in Apeldoorn, opent het platform 's ochtends. Ze ziet nieuwe actualiteiten van de journalist-agent (incl. IBD-melding over ransomware in Brabant), klikt door naar de werkgroep Cyber, en stelt een peer een vraag.
Wat dit diagram laat zien:
- Journalist-agent draait decoupled van user-requests (cron in de ochtend, niet on-demand bij page-load)
- Read-path is plain SQL — geen LLM in user-request critical path
- LLM-calls (Anthropic) zitten alleen in background-jobs
- Auth0 zit alleen in middleware, niet in elke API-call (sessie cached)
- Email-notifications via Resend gaan async (Postgres NOTIFY → background worker)
9. Wat niet in dit document zit (bewust)
- Branding/visueel ontwerp — buiten architectuur-scope
- Inhoudelijke pijler-discussie — dat is decision-vraag 1 in de briefing, niet architectuur
- Detailed seed-data — komt in
prisma/seed.ts - RBF-specifieke architectuur — krijgt eigen doc nadat PoC-bouwplan v3.0 (SharePoint
Risico Beheer Fonds/2. CRM informatie/bouwplan fase 1 poc/) gereviewed is - GDPR/DPIA — moet apart traject, juridisch lead. Aanbeveling: pre-launch lichte DPIA (member-data, journalist-agent classificaties)
10. Beslismomenten — gecondenseerd
Vanmiddag in Nijmegen (12:00–17:00):
- Akkoord op SPLIT-architectuur journalist-agent vs Ask Humanize? → unblocks bouw vanaf maandag
- Akkoord Auth0 + Managed PG provisioneren deze week? → unblocks data-model
- Werkgroep = pijler 1-op-1? → unblocks routes + schema
- CSV-roster vraag aan Christiaan? → unblocks invite-flow
- Journalist-agent v0 met 3 bronnen oké voor 1-juli? → bepaalt bouw-budget
- Domein blijft
rpo.humanaize.nlvoor v1? → unblocks Auth0-config
Bij ja-ja-ja-ja-ja-ja is dit document gepromoveerd van proposal naar spec, en kan Stijn maandag scaffolden.
Referenties:
/home/stijn/coding/rpo-vng/Briefing.md— TL;DR + decision agenda/home/stijn/coding/rpo-vng/src/lib/content.ts— transcript-derived content (BLAUWE_FAMILIE, VIER_SPOREN, ONDERZOEK_PERSONAS, JOURNALIST_AGENT, BRAINSTORMS, ONBOARDING, FAMO_VS_RPO)- Live demo: https://rpo.humanaize.nl
- Repo: git@github-stijnfs:HumanaizeNL/rpo-vng.git