DV Software – website-, dashboard- en AI-platform voor ondernemers
Meer aanvragen. Minder gedoe. Een bedrijf van Djim Vissers.
Interactieve demo van een multi-tenant platform waarmee je voor veel verschillende ondernemers een website, een beheerdashboard, een mobiele app (PWA) en een AI-assistent levert en beheert vanuit één centrale omgeving.
Voorbeeldklant: Noordlicht Installatietechniek (fictief installatiebedrijf in Amersfoort). Alle gegevens zijn verzonnen.
Snel starten (lokaal, zonder accounts)
Benodigd: Node.js 20+ (getest met Node 24).
cd vlotwerk
npm install
npm run dev
Open daarna http://localhost:3000.
| Wat | Adres |
|---|---|
| Startpagina met uitleg | http://localhost:3000 |
| Publieke website van de klant | http://localhost:3000/sites/noordlicht |
| Inloggen (kies een rol) | http://localhost:3000/login |
| Klantdashboard | http://localhost:3000/dashboard (na inloggen als Erik) |
| Platformbeheer (jij) | http://localhost:3000/admin (na inloggen als Platformeigenaar) |
| Mobiele app (PWA) | http://localhost:3000/m |
| Documentatie in de app | http://localhost:3000/docs |
| Klantsite op "eigen domein" | http://noordlicht.localhost:3000 (zie hieronder) |
De demo bewaart alles in data/db.json (wordt automatisch aangemaakt). Terug naar de
beginsituatie: in Platformbeheer op Demo resetten klikken, of npm run demo:reset
en de server herstarten.
Klantsite op eigen domein testen
src/proxy.ts herschrijft verzoeken op een klantdomein naar die klant. Lokaal werkt
<slug>.localhost in Chrome/Edge direct, bijvoorbeeld http://noordlicht.localhost:3000
of http://bloesem.localhost:3000. Links en formulieren werken dan op de root (/).
Optioneel: echte AI en e-mail aanzetten
Kopieer .env.example naar .env.local en vul alleen in wat je wilt testen. Plak
sleutels nooit in de chat of in de broncode.
ANTHROPIC_API_KEY: de AI-assistent gebruikt dan Claude in plaats van de Demo-AI.RESEND_API_KEY+EMAIL_FROM: e-mails worden dan echt verzonden. Zonder deze sleutels wordt niets verstuurd en staat er "Niet verzonden" bij het bericht.HUBSPOT_PRIVATE_APP_TOKEN: test de echte HubSpot-connector (alleen lezen).
Herstart npm run dev na het aanpassen van .env.local.
Optioneel: draaien op PostgreSQL (zonder Docker of account)
npm run db:local # terminal 1: lokale Postgres met schema + demodata
Zet in .env.local:
DATA_BACKEND=postgres
DATABASE_URL=postgres://postgres@127.0.0.1:54329/postgres
DATABASE_POOL_MAX=1
en start in een tweede terminal npm run dev. De startpagina toont dan
"Opslag: PostgreSQL met Row Level Security". Opnieuw beginnen: npm run db:local -- --reset.
Echte database en login (Supabase)
Stap voor stap in docs/08-supabase-koppelen.md. Online zetten: docs/09-online-zetten.md.
Demostand naast echte instellingen
npm run dev:demo start de app met voorbeelddata en klik-login, ook als .env.local
echte Supabase-instellingen bevat. Handig om iets te proberen zonder je echte data te raken.
Handige commando's
npm run dev # ontwikkelserver
npm test # 60 tests: tenant-scheiding (JSON + Postgres), RLS, AI-beleid, versleuteling, domeinen
npm run db:local # lokale PostgreSQL (PGlite) met schema en demodata
npm run typecheck # TypeScript-controle
npm run build # productiebuild
Projectstructuur
src/
app/
page.tsx startpagina van de demo
login/ demo-login per rol
sites/[slug]/… publieke klantwebsites (multi-tenant)
dashboard/… klantdashboard + server actions (actions/)
admin/… platformbeheer + server actions
m/ mobiele app (PWA)
editor-preview/[pageId] live voorbeeld voor de websitebouwer (iframe)
api/upload, api/media afbeeldingen per klant
api/export data-export voor de klant (AVG)
docs/ documentatie in de app
components/
site/ websiteblokken, header/footer, formulieren
editor/ websitebouwer (blokken, velden, preview)
dashboard/ admin/ mobile/ interfaces per omgeving
ui/ shadcn/ui-componenten (Base UI)
lib/
db/repo.ts ENIGE toegang tot klantdata (tenant-scoped)
db/backend.ts keuze opslag (DATA_BACKEND) + Store-interface
db/json-store.ts demo-opslag (data/db.json)
db/pg-store.ts PostgreSQL/Supabase met RLS per gebruiker
db/platform.ts platformbrede bewerkingen (alleen platformbeheer)
auth.ts sessies (demo of Supabase Auth), rollen, pakketcontrole
supabase.ts Supabase Auth-clients, uitnodigingen
agent/ AI-agent: beleid, runtime, demo-engine, Claude-engine
integrations/ koppelingencatalogus, connector-contract, kluis
templates.ts branchetemplates (installatie, bouw, salon, horeca, zzp)
blocks.ts schema van alle websiteblokken
supabase/migrations/ productieschema met Row Level Security (getest)
scripts/local-db.ts lokale PostgreSQL zonder Docker (npm run db:local)
docs/ businessplan, techniek, architectuur, roadmap, status
tests/ Vitest-tests
Documentatie
- Status: wat werkt echt en wat is gesimuleerd
- Concept en businessplan
- Technologieadvies en kosten
- Architectuur en multi-tenancy
- AI-agent
- Integraties
- Aanbod en rekenmodel
- Roadmap, AVG en beveiliging
- Beslissingen en openstaande punten
Let op: project in OneDrive
Het project staat in een OneDrive-map. node_modules en .next bevatten tienduizenden
bestanden, en OneDrive kan die vergrendelen tijdens het synchroniseren. Daarom heeft de
demo-opslag al herhaalpogingen ingebouwd. Advies: zet de projectmap buiten OneDrive
(bijvoorbeeld C:\dev\dvsoftware) en gebruik GitHub als back-up.