Status: wat werkt echt, wat is gesimuleerd, wat is nog nodig

Laatst bijgewerkt: 28 oktober 2026. Eerlijk overzicht van de demo.

✅ Werkt echt (lokaal, getest)

Onderdeel Toelichting
Publieke website per klant 5 klanten, elk met eigen huisstijl, pagina's, diensten. Mobielvriendelijk.
Contact- en offerteformulier Validatie, spamfilter (honeypot), privacy-toestemming. Aanvraag komt in het dashboard + melding.
Websitebouwer Blokken toevoegen, verslepen, dupliceren, verwijderen; velden bewerken; afbeeldingen uploaden; live preview (desktop/tablet/mobiel); ongedaan maken (Ctrl+Z); concept opslaan; publiceren; versiegeschiedenis terugzetten; nieuwe pagina's; SEO-velden.
Huisstijl Kleuren, lettertype, hoeken, logo – direct live op de website.
Diensten & producten Toevoegen, bewerken, volgorde, verbergen – direct op de site.
Klantdashboard Overzicht, aanvragen, offertes (kanban + regels + totalen), klanten, agenda, taken, e-mail, gebruikers & rechten, instellingen, data-export (JSON).
Rollen en rechten Eigenaar / medewerker / alleen-lezen; gecontroleerd in elke server action (niet alleen verborgen knoppen).
Tenant-scheiding Elke query gaat via scoped(tenantId, gebruiker); tenantId komt uit de sessie. Getest op beide opslagvormen.
PostgreSQL-opslag (fase 2) DATA_BACKEND=postgres: zelfde app op PostgreSQL. Migratie 0001_init.sql getest op echte Postgres (PGlite). Hele app doorgeklikt op Postgres: dashboard, AI-analyse + goedkeuren, offerteformulier, nieuwe klant, functie aan/uit, tenant-isolatie (404).
Row Level Security (fase 2) Database dwingt tenantscheiding zelf af, ook buiten de app-filters om. 15 aanvalstests (tests/pg-rls.test.ts): andere klant lezen/wijzigen/aanmaken/verwijderen, eigen pakket of verbruik aanpassen, platformbeheerder aanmaken, tokens lezen, anonieme toegang – allemaal geweigerd.
Klant genereren uit een beschrijving Platformbeheer → "Klant genereren": één beschrijving levert website (5 pagina's, diensten, FAQ), huisstijl en AI-assistent (toon, kennis, prijslijst) plus taken voor wat ontbreekt. Voorstel eerst ter controle. Getest in de browser met de demo-generator; verzint geen reviews, cijfers of prijzen (5 tests).
Afbeeldingen in Supabase Storage MEDIA_BACKEND=supabase: privé-bucket, getest met het echte project (upload, download, niet publiek bereikbaar).
Lokale database zonder Docker npm run db:local start PostgreSQL (PGlite) met schema en demodata.
Platformbeheer Alle klanten, MRR, status, functies per klant aan/uit (werkt direct door), pakket wijzigen, nieuwe klant + startwebsite uit branchetemplate, websiteprojecten met fases, integratiefouten, audit-log, rekenmodel.
AI-beleid en goedkeuringen 12 vaardigheden met niveau uit/advies/concept/uitvoeren, harde limieten, goedkeuringsregels, logboek met reden.
Demo-AI Regelgebaseerde analyse van offerteaanvragen (ontbrekende info, conceptregels uit prijslijst), triage van aanvragen, FAQ uit goedgekeurde bronnen, weekrapportage. Altijd gelabeld als "Demo-AI".
Mobiele app (PWA) Installeerbaar (manifest + service worker), bellen/mailen/route, taken afvinken, aanvragen oppakken, offertes opvolgen, gegevens wijzigen, lokale meldingen.
Domeinroutering <slug>.localhost:3000 en (in productie) eigen domeinen tonen de klantsite op /.
Tests 60 Vitest-tests (npm test), waarvan de tenant-tests op JSON én PostgreSQL draaien.

🟣 Gesimuleerd (zichtbaar gelabeld, er gebeurt niets extern)

Onderdeel Wat er gebeurt Wat is nodig voor echt
Inloggen (standaard) Klik-login per demo-account (ondertekende cookie) AUTH_MODE=supabase + Supabase-project (zie docs/08)
Opslag (standaard) JSON-bestand data/db.json DATA_BACKEND=postgres + Supabase-database (zie docs/08)
E-mail verzenden Opgeslagen met status Niet verzonden + reden Resend-account, geverifieerd domein, RESEND_API_KEY
Inkomende e-mail Voorbeeldberichten Gmail- of Microsoft 365-koppeling (OAuth)
Integraties (Google, Moneybird, Exact, …) Status "Demo-verbinding", logregels zeggen expliciet "geen echte API-aanroep" App-registratie per leverancier, OAuth-flow, tokens in versleutelde kluis
Agenda-sync Afspraken alleen in DV Software Google Calendar / Microsoft Graph
Pushmeldingen Lokale testmelding via service worker VAPID-sleutels + push-abonnementen + verzendservice
Bezoekersstatistieken Vaste voorbeeldcijfers Plausible / Vercel Analytics
Facturatie & betalingen Voorbeeldstatussen Mollie of Stripe (abonnementen)

🔑 Werkt echt zodra je een sleutel invult (code is af, niet getest zonder sleutel)

Sleutel Effect
ANTHROPIC_API_KEY AI-assistent gebruikt Claude (tool use, beleid + logboek blijven gelijk). Niet getest in deze sessie (geen sleutel beschikbaar).
RESEND_API_KEY + EMAIL_FROM Bevestigingsmails, offertes en goedgekeurde AI-mails worden echt verzonden. Niet getest (geen sleutel).
HUBSPOT_PRIVATE_APP_TOKEN Echte verbindingstest en alleen-lezen-sync van contacten. Niet getest (geen account).
ANTHROPIC_API_KEY in de generator Claude schrijft het websitevoorstel (teksten, kleuren, FAQ). Niet getest (geen sleutel); zonder sleutel draait de demo-generator.
AUTH_MODE=supabase + Supabase-sleutels Echte login: wachtwoord, inloglink per e-mail, wachtwoord vergeten, uitnodigingen voor nieuwe gebruikers en nieuwe klanten. Deels getest: inlogscherm, foutmelding, afwijzen van ongeldige links en het blokkeren van demo-sessies zijn lokaal gecontroleerd; echt inloggen, e-mails en uitnodigingen niet (geen Supabase-project).
DATABASE_URL naar Supabase Getest met een echt Supabase-project (Transaction pooler): verbinding versleuteld met gecontroleerd certificaat, schema en RLS aanwezig, sleutels geldig (npm run check:supabase).

⚠️ Bekende beperkingen van de demo

  • Standaardopslag (JSON-bestand) is alleen voor de demo; productie gebruikt DATA_BACKEND=postgres.
  • Afbeeldingen: lokaal in data/uploads/ tenzij MEDIA_BACKEND=supabase (verplicht online).
  • Nog niet online: zie docs/09 (GitHub en Vercel, jouw accounts nodig).
  • Het platformoverzicht laadt alle gegevens in één keer; prima voor tientallen klanten, voor honderden zijn gerichte queries nodig.
  • Tweestapsverificatie (2FA) is nog niet aangezet.
  • Geen rate limiting op formulieren (productie: Vercel Firewall / Upstash rate limit).
  • Geen cookiebanner nodig zolang er alleen functionele cookies zijn; zodra analytics/marketing wordt toegevoegd is toestemming vereist.
  • De editor ondersteunt blokken onder elkaar (geen vrije kolommen-indeling); zie docs/03 voor uitbreiding.