Referentiearchitectuur
Referentiearchitectuur van het Noveu-platform voor architecten en technische beslissers: de principes, de componenten en hoe de lagen samenwerken.
Overzicht
Dit document beschrijft de referentiearchitectuur van het Noveu platform, bedoeld voor architects en technische beslissers.
Architectuurprincipes
1. Waar data staat
- Gegevens en back-ups in een Hetzner-datacenter in Falkenstein (Duitsland)
- Geen US-cloudproviders (AWS, Azure, GCP) voor primaire data; Cloudflare (VS) zit aan de rand van het netwerk
- Transparante supply chain
2. Modulairiteit
- Loosely coupled services
- Vervangbare componenten
- API-first design
3. Resilience
- Alles draait vandaag op één fysieke server bij Hetzner; dat is een single point of failure
- Elke nacht een versleutelde kopie van de databases en de mail in aparte objectopslag bij Hetzner, buiten deze server en ook in Falkenstein
4. Security by Design
- Back-ups worden sinds 30 september 2026 versleuteld opgeslagen; de schijven zelf zijn nog niet versleuteld, een datum daarvoor geven we nog niet
- Netwerken per dienst achter firewalls
- Defense in depth
- Encryption in transit (TLS 1.2 of hoger, TLS 1.3 wordt ondersteund)
Logische Architectuur
┌─────────────────────────────────────────────────────────────────────┐
│ PRESENTATION LAYER │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │ Web │ │ Desktop │ │ Mobile │ │ Klant- │ │ API │ │
│ │ Portal │ │(gepland)│ │(gepland)│ │ portaal │ │ Gateway │ │
│ └────┬────┘ └────┬────┘ └────┬────┘ └────┬────┘ └────┬────┘ │
└───────┼────────────┼────────────┼────────────┼────────────┼────────┘
│ │ │ │ │
└────────────┴────────────┼────────────┴────────────┘
│
┌───────┴───────┐
│ API Gateway │
│ + AuthN │
└───────┬───────┘
│
┌─────────────────────────────────┼─────────────────────────────────┐
│ APPLICATION LAYER │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │ Mail │ │Calendar │ │ Files │ │ Chat │ │ AI │ │
│ │ Service │ │ Service │ │ Service │ │ Service │ │ Service │ │
│ └────┬────┘ └────┬────┘ └────┬────┘ └────┬────┘ └────┬────┘ │
└───────┼────────────┼────────────┼────────────┼────────────┼───────┘
│ │ │ │ │
└────────────┴────────────┼────────────┴────────────┘
│
┌─────────────────────────────────┼─────────────────────────────────┐
│ PLATFORM LAYER │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │Identity │ │ Notif- │ │Observa- │ │ Compli- │ │ Backup │ │
│ │ IAM │ │ ication │ │ bility │ │ ance │ │ │ │
│ └────┬────┘ └────┬────┘ └────┬────┘ └────┬────┘ └────┬────┘ │
└───────┼────────────┼────────────┼────────────┼────────────┼───────┘
│ │ │ │ │
└────────────┴────────────┼────────────┴────────────┘
│
┌─────────────────────────────────┼─────────────────────────────────┐
│ INFRASTRUCTURE LAYER │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │ Docker │ │ Object │ │ Block │ │ DNS/ │ │ Secrets │ │
│ │ (VM's) │ │ Storage │ │ Storage │ │ CDN │ │(gepland)│ │
│ └─────────┘ └─────────┘ └─────────┘ └─────────┘ └─────────┘ │
└───────────────────────────────────────────────────────────────────┘
Componenten Detail
Presentation Layer
| Component | Technologie | Functie |
|---|---|---|
| Web Portal | React, Next.js | Browser-based UI |
| Desktop Client | Tauri | Bestanden op je computer (gepland, zie de roadmap) |
| Mobile Apps | Nog niet beschikbaar | iOS en Android (gepland) |
| Klantportaal | React, Next.js | Facturatie, gebruikers en instellingen |
| API Gateway | NestJS (eigen gateway) | Request routing, auth |
Application Layer
| Service | Verantwoordelijkheid | Storage |
|---|---|---|
| Mail Service | IMAP/SMTP, filtering, archiving | Object + DB |
| Calendar Service | CalDAV, scheduling | PostgreSQL |
| Files Service | REST API, versioning (geen WebDAV); desktop-sync in ontwikkeling | Object + DB |
| Chat Service | Realtime messaging (Berichten, beta) | PostgreSQL + Redis |
| AI Service | LLM (Mistral AI, Frans bedrijf), RAG, on-prem embeddings (bge-m3/TEI) | pgvector (self-hosted, EU) |
Platform Layer
| Component | Technologie | Functie |
|---|---|---|
| Identity (IAM) | Zitadel | Inloggen (OIDC), MFA en gebruikersbeheer |
| Notification | Custom (noveu-notification-service) | Transactionele en systeemnotificaties, kanaalroutering |
| Observability | Prometheus, Grafana, GlitchTip | Metrics, dashboards, foutmeldingen |
| Compliance | Custom | Audit en rapportage (gepland) |
| Backup | Dagelijkse back-ups | Zie Backup Strategy; back-ups worden sinds 30 september 2026 versleuteld opgeslagen |
Infrastructure Layer
| Component | Specificatie | Redundantie |
|---|---|---|
| Compute | Dedicated server bij Hetzner (Proxmox VE) in Falkenstein | Eén fysieke server |
| Storage | Opslag op dezelfde server | Geen replicatie naar een tweede server |
| Back-ups | Dagelijkse back-ups in Falkenstein | Elke nacht een versleutelde kopie van de databases en de mail in aparte objectopslag bij Hetzner, buiten deze server en ook in Falkenstein |
| DNS/CDN | Cloudflare (VS) aan de rand van het netwerk | Geen EU-dienst |
Deployment Architectuur
Multi-Tenant (SaaS)
┌────────────────────────────────────────────┐
│ Shared Control Plane │
│ ┌────────┐ ┌────────┐ ┌────────┐ │
│ │ IAM │ │ Billing│ │Provisn │ │
│ └────────┘ └────────┘ └────────┘ │
└────────────────────────────────────────────┘
│ │ │
┌─────────┘ │ └─────────┐
▼ ▼ ▼
┌────────┐ ┌────────┐ ┌────────┐
│Tenant A│ │Tenant B│ │Tenant C│
│ (Data) │ │ (Data) │ │ (Data) │
└────────┘ └────────┘ └────────┘
Dedicated Tenant
Nog niet beschikbaar. Een eigen omgeving per klant is een toekomstige optie op offerte.
┌────────────────────────────────────────────┐
│ Dedicated Control Plane │
│ ┌────────┐ ┌────────┐ ┌────────┐ │
│ │ IAM │ │ Config │ │ Ops │ │
│ └────────┘ └────────┘ └────────┘ │
└────────────────────────────────────────────┘
│
▼
┌────────────────────────────────────────────┐
│ Dedicated Data Plane (Customer) │
│ ┌────────┐ ┌────────┐ ┌────────┐ │
│ │ Apps │ │ Data │ │Network │ │
│ └────────┘ └────────┘ └────────┘ │
└────────────────────────────────────────────┘
Data Flow
E-mail Ontvangst
Internet ─► MX ─► Antispam ─► Policy ─► Delivery ─► Mailbox
│ │ │
▼ ▼ ▼
[Block] [Quarantine] [Store]
│ │ │
└───────────┴───────────┘
│
▼
[Audit Log]
Authenticatie Flow
User ─► Client ─► API Gateway ─► IAM ─► Service
│ │ │
│ ┌─────┘ │
│ ▼ │
│ [Token] │
│ │ │
└────┼───────────────┘
│
▼
[Validate + Authorize]
│
▼
[Response]
Security Architecture
Network Zones
| Zone | Components | Ingress | Egress |
|---|---|---|---|
| Edge | Cloudflare (VS), met Tunnel naar de server | Internet | Platform |
| Platform | Diensten, databases en opslag op één VM | Edge | Externe diensten waar nodig |
| Mailserver op een eigen VM | Internet (SMTP, IMAP) | Internet | |
| Mgmt | Monitoring en beheer | Alleen via SSH over de Proxmox-host | Platform |
Diensten en databases draaien nu op dezelfde VM; een aparte datazone is er nog niet.
Encryption
| Layer | Mechanism | Key Management |
|---|---|---|
| Transport | TLS 1.2 of hoger | Cloudflare aan de rand; Let's Encrypt op de mailserver |
| Application | S/MIME (in ontwerp), PGP (nog niet beschikbaar) | Nog niet van toepassing |
| Storage (volume) | Nog niet versleuteld; een datum daarvoor geven we nog niet | Nog niet bepaald |
| Backup | Back-ups worden sinds 30 september 2026 versleuteld opgeslagen | Aparte sleutel-hiërarchie (gepland) |
Integration Patterns
Synchronous
Client ──► API Gateway ──► Service ──► Response
│ │
│ ┌────┴────┐
│ ▼ ▼
│ [Cache] [Database]
│
└► [Rate Limit] [Circuit Breaker]
Disaster Recovery
Herstel
Back-ups staan in het Hetzner-datacenter in Falkenstein (Duitsland), op een aparte schijf en VM. Back-ups worden sinds 30 september 2026 versleuteld opgeslagen. De schijven zelf zijn nog niet versleuteld; een datum daarvoor geven we nog niet. Herstel gebeurt vanuit die back-ups. De SLA noemt geen vaste hersteltermijn. Elke nacht gaat een versleutelde kopie van de databases en de mail naar aparte objectopslag bij Hetzner, buiten deze server en ook in Falkenstein. Periodieke hersteltests staan gepland.
Backup Strategy
Back-ups ─► Hetzner-datacenter Falkenstein (DE)
Capaciteit
Er zijn nog geen gemeten richtwaarden per aantal gebruikers. Capaciteit voor een organisatie spreken we af op offerte.
Technology Choices
| Category | Choice | Rationale |
|---|---|---|
| Containers | Docker op VM's; Coolify voor de website en de loginpagina | Eenvoudig beheer op één fysieke server (Proxmox) |
| Monitoring | Prometheus, Grafana en Uptime Kuma | Metrics, dashboards, beschikbaarheid en alarmering |
| Error tracking | GlitchTip | Foutmeldingen, geen centrale logaggregatie of tracing |
| Database | PostgreSQL | Betrouwbaar, open source |
| Cache | Redis | Performance, pub/sub |
| Object storage | MinIO (S3-compatibel) | In productie in Falkenstein; SeaweedFS draait er al naast MinIO, de overstap van de bestandsdienst is gepland |
Laatste wijziging (22-10-2026): de stand van de back-ups volgt de meting van 22-10-2026: elke nacht gaat een versleutelde kopie van de databases en de mail naar aparte objectopslag bij Hetzner, buiten deze server en ook in Falkenstein; de oudere zin over een kopie die nog moest komen, is weg. Eerder (15-10-2026): bij Mistral AI in de tabel met diensten staat nu 'Frans bedrijf' in plaats van 'EU'; de locatie bij Mistral staat elders als opgave van Mistral zelf. Eerder (14-10-2026): de schijven zelf zijn nog niet versleuteld en we geven daarvoor geen datum meer; de stand van de back-ups blijft de meting van 30-09-2026. Eerder (07-10-2026): de stand van de back-ups volgt de meting van 30-09-2026; de overige opslag at rest blijft gepland. Eerder (05-10-2026): de sectie Capaciteit noemt geen cijfers per aantal gebruikers meer, want er zijn geen gemeten richtwaarden; de regel over graceful degradation is weg, daarvoor is geen bron; de rij Object storage noemt de gemeten stand (MinIO in productie, SeaweedFS draait er al naast, overstap gepland). Eerder: versleuteling van back-ups en opslag at rest staat als "wordt ingevoerd", volgens de gemeten stand.
Architectuur kan variëren per deployment model
Lees verder
- NaslagWaar je gegevens staan en onder welk rechtDe verklaring over dataresidentie, met de sub-verwerker die de uitzondering is.
- NaslagKoppelingen: inloggen, de API en meerPer methode wat er mogelijk is.
- BlogDrie vragen over digitale soevereiniteit voor je leveranciersWaar staan je gegevens, wie kan erbij en kun je weer weg?
Wat is je volgende stap?
Wil je weten hoe dit er voor jouw organisatie uitziet? Bekijk hoe Noveu het aanpakt, of plan een gesprek.