Naar de inhoud
Terug naar Resources
Architectuur8 min leestijdBijgewerkt op , gepubliceerd op 

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

ComponentTechnologieFunctie
Web PortalReact, Next.jsBrowser-based UI
Desktop ClientTauriBestanden op je computer (gepland, zie de roadmap)
Mobile AppsNog niet beschikbaariOS en Android (gepland)
KlantportaalReact, Next.jsFacturatie, gebruikers en instellingen
API GatewayNestJS (eigen gateway)Request routing, auth

Application Layer

ServiceVerantwoordelijkheidStorage
Mail ServiceIMAP/SMTP, filtering, archivingObject + DB
Calendar ServiceCalDAV, schedulingPostgreSQL
Files ServiceREST API, versioning (geen WebDAV); desktop-sync in ontwikkelingObject + DB
Chat ServiceRealtime messaging (Berichten, beta)PostgreSQL + Redis
AI ServiceLLM (Mistral AI, Frans bedrijf), RAG, on-prem embeddings (bge-m3/TEI)pgvector (self-hosted, EU)

Platform Layer

ComponentTechnologieFunctie
Identity (IAM)ZitadelInloggen (OIDC), MFA en gebruikersbeheer
NotificationCustom (noveu-notification-service)Transactionele en systeemnotificaties, kanaalroutering
ObservabilityPrometheus, Grafana, GlitchTipMetrics, dashboards, foutmeldingen
ComplianceCustomAudit en rapportage (gepland)
BackupDagelijkse back-upsZie Backup Strategy; back-ups worden sinds 30 september 2026 versleuteld opgeslagen

Infrastructure Layer

ComponentSpecificatieRedundantie
ComputeDedicated server bij Hetzner (Proxmox VE) in FalkensteinEén fysieke server
StorageOpslag op dezelfde serverGeen replicatie naar een tweede server
Back-upsDagelijkse back-ups in FalkensteinElke nacht een versleutelde kopie van de databases en de mail in aparte objectopslag bij Hetzner, buiten deze server en ook in Falkenstein
DNS/CDNCloudflare (VS) aan de rand van het netwerkGeen 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

ZoneComponentsIngressEgress
EdgeCloudflare (VS), met Tunnel naar de serverInternetPlatform
PlatformDiensten, databases en opslag op één VMEdgeExterne diensten waar nodig
MailMailserver op een eigen VMInternet (SMTP, IMAP)Internet
MgmtMonitoring en beheerAlleen via SSH over de Proxmox-hostPlatform

Diensten en databases draaien nu op dezelfde VM; een aparte datazone is er nog niet.

Encryption

LayerMechanismKey Management
TransportTLS 1.2 of hogerCloudflare aan de rand; Let's Encrypt op de mailserver
ApplicationS/MIME (in ontwerp), PGP (nog niet beschikbaar)Nog niet van toepassing
Storage (volume)Nog niet versleuteld; een datum daarvoor geven we nog nietNog niet bepaald
BackupBack-ups worden sinds 30 september 2026 versleuteld opgeslagenAparte 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

CategoryChoiceRationale
ContainersDocker op VM's; Coolify voor de website en de loginpaginaEenvoudig beheer op één fysieke server (Proxmox)
MonitoringPrometheus, Grafana en Uptime KumaMetrics, dashboards, beschikbaarheid en alarmering
Error trackingGlitchTipFoutmeldingen, geen centrale logaggregatie of tracing
DatabasePostgreSQLBetrouwbaar, open source
CacheRedisPerformance, pub/sub
Object storageMinIO (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

Wat is je volgende stap?

Wil je weten hoe dit er voor jouw organisatie uitziet? Bekijk hoe Noveu het aanpakt, of plan een gesprek.

Meer resources bekijken