+31648934831 hello@manualninja.com

Technische specificaties

Een moderne RAG-architectuur met AI-visie.

Architectuur in een oogopslag

ManualNinja is een multi-tenant RAG-applicatie met een Python-backend, een React SPA-frontend, een PostgreSQL-database en een Qdrant vectoropslag. Pdf's worden geparseerd, in stukken geknipt, geëmbed en als geciteerde antwoorden aangeboden via een chatinterface. Het platform bevat nu ook AI-visie voor beeldanalyse, OAuth social login en door Stripe aangedreven abonnementsfacturering.

Backend API
FastAPI + Uvicorn (Python 3.13). REST-eindpunten voor auth, handleidingen, chat, facturering en beheer. JWT-gebaseerde authenticatie met OAuth2.
Frontend
React 18 + Vite. Single-page application met chat-UI, beheerderspaneel, facturatieportal en superadmin-dashboard.
Database
PostgreSQL 17. Slaat organisaties, gebruikers, handleidingen, chatsessies, gebruikstracking en configureerbare instellingen op.
Vectoropslag
Qdrant 1.19. Semantisch zoeken over handleidingsfragmenten met organisatie-afgebakende filtering.
Embeddings
BAAI/bge-small-en-v1.5 (384 dimensies, CPU). Lokale inferentie — geen externe embedding-API-aanroepen.
LLM (tekst)

OpenAI-compatibele API. Standaardmodel: deepseek/deepseek-v3-0324. Configureerbaar via het superadmin-dashboard.
Een lokale AI gewenst voor extra beveiliging? Geen probleem. Neem contact op

LLM (visie)
Novita AI-visiemodel — google/gemma-3-27b-it. Analyseert geüploade afbeeldingen (apparaatlabels, foutcodeschermen, naamplaten) met OCR en gestructureerde extractie.
PDF-extractie
PyMuPDF (fitz). Paginaniveau chunking met behoud van metadata voor nauwkeurige citaties.
Authenticatie
JWT-tokens + Google OAuth 2.0 + LinkedIn OAuth 2.0 (OpenID Connect). E-mailverificatie met configureerbare SMTP.
Betalingen
Stripe — terugkerende abonnementen via Checkout, klantportal voor selfservice-beheer, webhook-gedreven levenscyclusgebeurtenissen.
Reverse proxy
Caddy — automatische HTTPS via Let’s Encrypt, HTTP/2, HTTP/3-ondersteuning.

Multi-tenancy & isolatie

Elke klantorganisatie krijgt een volledig geïsoleerde werkruimte:

  • Organisatie-afgebakende gebruikers, handleidingen en chatsessies
  • Qdrant-payloads bevatten org_id — vectorzoekopdracht wordt altijd gefilterd
  • Op niveau gebaseerde limieten: vragen/maand, opslag, vraaggelengte, aantal handleidingen
  • Alle integratiesleutels (Stripe, Google, LinkedIn, LLM, SMTP, reCAPTCHA) zijn per implementatie configureerbaar via de admin-UI

Beveiliging & gegevensbescherming

ManualNinja is gebouwd met beveiliging als eerste prioriteit. Elke laag van de stack is verhard om je gegevens en het vertrouwen van je klanten te beschermen.

End-to-end-versleuteling

Al het verkeer loopt over HTTPS met TLS 1.2/1.3 via Caddy met automatische Let’s Encrypt-certificaten. Geen plaintext-verbindingen geaccepteerd.

Veilige authenticatie

JWT-authenticatie met sterke secrets, bcrypt-wachtwoordhashing, OAuth 2.0 met CSRF-beschermde state-validatie en kortlevende exchange-codes in plaats van tokens in URL's.

Brute-force-bescherming

Inlog-pogingen beperkt (10 pogingen per 5 minuten per IP), aanmeldingslimiet (3 per IP per dag) en verplichte Google reCAPTCHA bij openbare aanmelding.

Multi-tenant-isolatie

Elke database-query en vectorzoekactie is beperkt tot organization_id. Cross-tenant datalek is onmogelijk — je handleidingen en chats zijn alleen van jou.

Veilige bestandsuploads

PDF uploads are validated by magic bytes, content type, and a 50 MB hard size limit. Files are stored with UUID names — no path traversal possible.

Geverifieerde webhooks

Stripe payment webhooks are always signature-verified. No unauthenticated payment events are ever processed — the system fails closed if the secret is missing.

Alleen interne services

De FastAPI-backend en Qdrant-vectordatabase binden alleen aan 127.0.0.1. Ze zijn nooit direct bereikbaar vanaf het internet — al het externe verkeer gaat via de Caddy reverse proxy.

E-mailverificatie

Aanmelding vereist e-mailverificatie met tijdgebonden tokens (24 uur geldig). Ongeverifieerde accounts kunnen niet inloggen.

Audit-logging

Alle admin- en superadmin-acties — organisatie-aanmaak, gebruikersbeheer, instellingswijzigingen — worden gelogd in een speciaal audit-spoor voor verantwoording en compliance.

Wil je het in actie zien?