Naar de inhoud
📐 Technisch architectuurdocument

De architectuur van TranscribIA, uitgelegd voor uw technische teams.

Het meest gevraagde document tijdens voorverkoop. TranscribIA is een audiotranscriptieplatform voor organisaties die de verwerkingsketen van hun opnamen moeten begrijpen, auditen en beheersen. Dit document beschrijft feitelijk de onderdelen, gegevensstromen, multi-tenantisolatie, ingebouwde beveiliging, twee implementatiemodellen en verwerkersketen, zonder overdreven claims.

Technische fiche v1.0 — 30 juni 2026. Uitgever: AMBASSADIA SARL (Monaco). Contact: contact@transcribia.eu.

Onderdelen

Een architectuur met afzonderlijke diensten

Elke verantwoordelijkheid ligt bij een afzonderlijke dienst, aangestuurd via Docker Compose (8 diensten). Gegevens lopen alleen via onderdelen die deze voor hun functie nodig hebben.

# Algemeen overzicht van de onderdelen

┌─────────────────────────────────────────────────────────────┐
│  Utilisateurs — Frontend React 19 / TypeScript / Vite       │
└──────────────────────────┬──────────────────────────────────┘
                           ▼   HTTPS · TLS 1.2+
┌─────────────────────────────────────────────────────────────┐
│  Nginx — reverse proxy + termination TLS                    │
└─┬──────────────────────┬──────────────────────┬────────────┘
  ▼                      ▼                      ▼
┌──────────────┐   ┌──────────────────┐   ┌────────────────────┐
│  API Laravel │   │  Laravel Reverb  │   │  ClamAV            │
│  12 / PHP 8.3│   │  (WebSocket)     │   │  antivirus uploads │
│  + Sanctum   │   │  progression RT  │   │                    │
└──┬───────┬───┘   └──────────────────┘   └────────────────────┘
   │       │
   ▼       ▼
┌──────────────┐   ┌──────────────────────────────────────────┐
│  PostgreSQL  │   │  Redis 7 — cache · queues · sessions     │
│  16          │   └──────────────────────────────────────────┘
│  1 schéma /  │   ┌──────────────────────────────────────────┐
│  organisa-   │   │  Workers transcription (consommateurs)    │
│  tion        │   └─────────────────┬────────────────────────┘
└──────────────┘                     ▼
                          ┌────────────────────────────────────┐
                          │  Serveur GPU — WhisperX / pyannote │
                          │  transcription + diarisation       │
                          └─────────────────┬──────────────────┘
                                            ▼
                          ┌────────────────────────────────────┐
                          │  IA — OpenRouter (Anthropic/OpenAI)│
                          │  post-traitement · no-train        │
                          └────────────────────────────────────┘

  Sauvegardes : age (chiffrement) + rclone → Backblaze B2 / Scaleway (UE)
🖥️

Frontend

React 19 · TypeScript · Vite

  • Statische SPA-build aangeboden door Nginx
  • Voortgang in realtime via Reverb (WebSocket)
  • Geen bedrijfslogica in de browser
⚙️

Laravel-API

Laravel 12 · PHP 8.3 · Sanctum

  • Bedrijfslogica, REST en taakcoördinatie
  • Sanctum-authenticatie en 2FA TOTP
  • RBAC met 5 niveaus, minimale rechten
🐘

PostgreSQL

PostgreSQL 16 · multi-tenant

  • Een afzonderlijk schema per organisatie
  • Versleuteling in rust (schijf en database)
  • Geen query's tussen tenants
⚡

Redis

Redis 7 · cache · wachtrijen

  • Applicatiecache en sessies
  • Transcriptiewachtrijen
  • Coördinatie van workers
📡

Laravel Reverb

WebSocket in realtime

  • Live voortgang van transcripties
  • Meldingen en taakstatussen
  • Afzonderlijk kanaal per organisatie
🔧

Transcriptieworkers

Wachtrijverwerkers

  • Coördineren ClamAV → GPU → AI
  • Asynchrone en reproduceerbare verwerking
  • Isolatie per taak en tenant
🎮

GPU-server

WhisperX · pyannote

  • Zeer nauwkeurige audiotranscriptie
  • Sprekerdiarisatie (sprekeridentificatie)
  • Afzonderlijke server buiten de API
🤖

AI (nabewerking)

OpenRouter · Anthropic / OpenAI

  • Tekstopmaak en nabewerking
  • Contractueel verbod op modeltraining (no-train)
  • Tijdelijke gegevens, niet bewaard

De route van een opname

Van audiobestand tot versleuteld eindresultaat

Deze keten illustreert het gebruikelijke traject van een opname. De toepasselijke maatregelen en het gedrag wanneer een component niet beschikbaar is, hangen af van de implementatievorm en de contractuele reikwijdte; het beveiligingsbeleid beschrijft in het bijzonder het gedrag van de antivirusvoorziening.

1

Versleutelde upload

Het audiobestand gaat via HTTPS (TLS 1.2+) naar Nginx en vervolgens naar de Laravel-API.

2

Antivirus (ClamAV)

Elke upload wordt vóór verwerking gescand. Verdachte bestanden worden geweigerd.

3

In wachtrij plaatsen (Redis)

De transcriptietaak wordt in de Redis-wachtrij geplaatst, geïsoleerd per organisatie.

4

GPU-transcriptie

Een worker stuurt de audio naar de GPU-server: WhisperX (transcriptie) en pyannote (diarisatie).

5

AI-nabewerking

Aanroep via OpenRouter (Anthropic / OpenAI) voor opmaak. No-trainclausule, tijdelijke gegevens.

6

Versleutelde opslag in rust

De transcriptie en metadata worden opgeslagen in het PostgreSQL-schema van de tenant (versleuteld in rust).

7

Export

De gebruiker exporteert het eindresultaat (tekst, ondertitels); de voortgang is in realtime zichtbaar via Reverb.

Gegevensscheiding

Eén organisatie, één afzonderlijk PostgreSQL-schema

Gegevens worden niet alleen met een applicatiefilter gescheiden: elke organisatie heeft een eigen schema in de database.

TranscribIA gebruikt een schema-per-organisatiemodel op PostgreSQL 16: gegevens van verschillende klanten worden nooit in dezelfde structuur opgeslagen. De isolatie is structureel op databaseniveau en niet uitsluitend logisch in de applicatie.

Concreet betekent dit dat een query door het ontwerp nooit gegevens van twee organisaties kan combineren: het doelschema wordt bepaald bij het openen van de organisatiesessie. Deze aanpak vereenvoudigt ook volledige export, verwijdering (recht op vergetelheid) en eventuele on-premise-extractie van een tenant.

De activiteitenlogboeken (activity_logs) worden eveneens per organisatie bijgehouden. Platformlogboeken (audit_logs) registreren gevoelige handelingen zonder transcriptie-inhoud bloot te leggen.

Isolatiegaranties

  • Afzonderlijk schema. Een apart PostgreSQL-schema per organisatie, bepaald per sessie.
  • Geen query's tussen tenants. Het ontwerp voorkomt dat gegevens van twee klanten worden gecombineerd.
  • Gescheiden wachtrijen. Transcriptietaken zijn in Redis geïsoleerd per tenant.
  • Privékanaal in realtime. Reverb-gebeurtenissen (voortgang) zijn gescheiden per organisatie.
  • Verwijdering per tenant. Volledige ZIP-export en gerichte verwijdering van één organisatie zonder gevolgen voor andere organisaties.

Security by design

Ingebouwde platformcontroles

Onderstaande maatregelen zijn standaard aanwezig en verifieerbaar. Ze worden als technische controles gepresenteerd en lopen niet vooruit op het nalevingskader van uw organisatie.

🔐

Versleuteling (tijdens transport en in rust)

  • TLS 1.2+ verplicht, overal HTTPS (tijdens transport)
  • Versleuteling in rust: schijf en PostgreSQL-database
  • Back-ups versleuteld met age (X25519 + ChaCha20-Poly1305)
  • Applicatiegeheimen beschermd (AES-256-CBC)
🔑

Sterke authenticatie

  • Laravel Sanctum-authenticatie
  • 2FA TOTP volgens RFC 6238, activering per rol
  • Extra wachtwoordcontrole bij destructieve handelingen
  • Rate limiting, strikte CORS en CSP-beleid
👥

Toegangsbeheer (RBAC)

  • RBAC met 5 niveaus: super_admin, agent, manager, team_lead, user
  • Beginsel van minimale rechten
  • Rechten per rol en organisatie
  • Geen impliciete rechten buiten de tenant
📋

Logging en audit

  • activity_logs per organisatie en audit_logs voor het platform
  • Alle gevoelige handelingen traceerbaar
  • CSV/JSON-exports voor uw audits
  • Opgeschoonde logboeken: geen transcriptie-inhoud
🛡️

Antimalware en hardening

  • ClamAV op alle uploads, vóór verwerking
  • Scan die verdachte bestanden weigert
  • Bijgewerkte onderdelen en virusdefinities
  • Gescheiden diensten (Docker, één rol per dienst)
♻️

Veerkracht en back-ups

  • Dagelijkse versleutelde externe back-ups in de EU
  • rclone naar Backblaze B2 / Scaleway (EU)
  • Snapshots vóór herstel (tegen overschrijven)
  • Gericht herstel per tenant

Twee implementatiemodellen

Soevereine SaaS in Frankrijk of on-premise

Beide modellen gebruiken hetzelfde product. Het verschil zit in wie de beveiligingscontroles uitvoert en waar de gegevens worden opgeslagen.

☁️

Soevereine SaaS (Frankrijk)

Beheerde dienst met hosting in Frankrijk, snel operationeel.

Beheerd door de uitgever (AMBASSADIA SARL)

  • Hostinger-hosting, datacenter Straatsburg (Frankrijk)
  • De uitgever beheert TLS, back-ups, updates, ClamAV en hardening
  • Volledig beheerde stack (8 Docker Compose-diensten)
  • Externe EU-back-ups (Backblaze B2 / Scaleway)
  • Verwerkersovereenkomst en nalevingsdocumentatie beschikbaar
🏢

On-premise (uw infrastructuur)

Zelfstandige implementatie in uw omgeving, zonder uitgaande gegevens.

Beheerd door uw organisatie

  • Zelfstandige Docker Compose-stack (8 diensten) in uw infrastructuur
  • Uw beveiligingsverantwoordelijke beheert hardening, logboeken, back-ups en monitoring
  • GPU-server en AI configureerbaar (lokale modellen mogelijk)
  • Volledige controle over inventaris en controles
  • Geschikt voor geclassificeerde omgevingen of strenge beveiligingseisen

Bij soevereine SaaSbeheert en documenteert de uitgever de controles voor uw audits. Bij on-premiseligt de operationele verantwoordelijkheid (hardening, monitoring, back-ups en updates) bij uw organisatie. De 8 Docker Compose-diensten zijn in beide gevallen gelijk.

Toeleveringsketen

Verwerkers en externe gegevensstromen

TranscribIA gebruikt een beperkt aantal verwerkers, allemaal gevestigd in de Europese Unie. Standaard geen doorgifte buiten de EU.

🏗️

Hostinger

SaaS-hosting (rekenkracht en primaire opslag)

Locatie
Straatsburg, Frankrijk
Gegevens
Audiobestanden, metadata, PostgreSQL-database (versleuteld in rust)
🗄️

Backblaze B2 + Scaleway

Versleutelde externe back-ups (age + rclone)

Locatie
Europese Unie (B2 EU / Scaleway Frankrijk)
Gegevens
Uitsluitend versleutelde back-ups, geen onversleutelde gegevens
🤖

OpenRouter (Anthropic / OpenAI)

AI-routering voor tekstnabewerking

Locatie
API-verkeer, no-trainclausule
Gegevens
Tijdelijke transcripties/prompts, zonder bewaring of training
🎮

GPU-server (WhisperX / pyannote)

Audiotranscriptie en sprekerdiarisatie

Locatie
Afzonderlijke infrastructuur, Europese Unie
Gegevens
Tijdelijke audiobestanden, na verwerking verwijderd

De volledige lijst van verwerkers, hun contractuele waarborgen en het bewaarbeleid staan in het openbare nalevingsdossier.

Documentatie en contact

Voor uw IT-, beveiligings- en inkoopteams

Het volledige nalevingsdossier — verwerkingsregister, modelverwerkersovereenkomst, beveiligingsmaatregelen, bewaarbeleid, verwerkers en architectuurschema's — is openbaar beschikbaar zonder account. Ons team ondersteunt u bij de technische analyse van uw organisatie.

Uitgever: AMBASSADIA SARL (Monaco). Contact: contact@transcribia.eu. Technische fiche v1.0 — 30 juni 2026.