DEPLOYING SOON · BETA VERSION
Multi-tenant · AI-native corporate intelligence

Turn organizational chaos into corporate memory.

LoremiAI is a unified AI workspace. One platform for OCR, semantic search and AI writing — instead of a different tool for every job. It turns scans, handwritten notes, PDFs, spreadsheets and emails into a governed, searchable knowledge base that any employee can query in plain language.

Overview

One system. Strictly separated data.

Built as an event-driven microservices platform with strict tenant isolation — so a parent holding and all of its subsidiaries run on one system while their data stays fully separated.

Every format your people actually have

Scans, phone photos, handwritten notes, native PDFs, Word files, emails, spreadsheets and CSVs. Each takes the path that suits it, chosen by the file's real content — a PNG renamed to .pdf still goes to OCR.

Holding and subsidiaries, side by side

Every subsidiary works in its own isolated environment with its own documents, its own knowledge graph and its own credits, under one parent organisation.

Anyone can ask, in their own words

Ask in Arabic, German or English and get an answer back in the same language, with a citation pointing at the exact document it came from.

Architecture

Six layers, one message bus.

Services never call each other directly and never share a database connection. Everything crosses the bus, which means any part can fail, retry, or be replaced on its own.

System architecture .NET service Python worker Message bus Storage
1 · CLIENTS 2 · EDGE 3 · SERVICES 4 · BUS 5 · WORKERS 6 · STORAGE document.uploaded HTTP + SSE parsing found no text rows go straight to storage Web application Next.js · session cookie Mobile & API clients JWT bearer Embedded chat widget website · WhatsApp Kubernetes ingress TLS termination · one hostname per service Identity auth · tenants · roles model registry Document upload · storage status ladder Query retrieval orchestration chat sessions Reporting usage · analytics read-only RabbitMQ every hand-off between services and workers travels through here fanout retry 5s·30s·120s dead-letter Triage picks ONE path by real content OCR if the file is visual scans · photos · images Parsing if it already has text PDF · DOCX · XLSX · email Indexing chunk · embed auto-tag Retrieval agent picks its sources streams answer Vector store pgvector semantic search Knowledge graph Apache AGE one per tenant Tabular store typed rows + schema queried with SQL Object storage original files hosted in Germany Each service owns its own database. No connection is ever shared across a service boundary. The three stores hold one corpus in three shapes — meaning, relationships, and rows.
The retrieval agent is the only component in the system permitted to call an AI model. Everything before it — routing, parsing, chunking, embedding, reranking and PII masking — runs locally.
Workflow

What happens to a document.

The path is chosen by what the file actually contains, not by its extension — and a document that turns out to be visual reroutes itself automatically.

Document processing pipeline
no text found Upload any format Triage reads content OCR scans · images Parse layout PDF · DOCX · email Parse rows Excel · CSV Index chunk · embed · tag Answerable with citations Queryable rows kept as real data 1 · Upload 2 · Route 3 · Extract 4 · Understand 5 · Ready Every stage reports its own status. Failures retry on a timer, then park in a dead-letter queue — never silently dropped.
Spreadsheets take a separate path on purpose. Flattening a sheet into prose is how most systems lose the numbers — here the rows stay rows, so totals are computed by the database rather than guessed by a model.
Technology

What it's built on.

Nothing exotic for its own sake. Each choice is there because the layer above it needed something specific.

Frontend & edge

N Next.jsWeb application
TS TypeScriptEnd-to-end typed
TW Tailwind CSSDesign system
K8 KubernetesIngress and scaling

API services

.N .NET 10ASP.NET Core
C# C# · EF CoreCode-first migrations
MQ RabbitMQEvent backbone
DK DockerEvery service containerised

Python workers

Py Python 3.12Async workers
DL DoclingLayout parsing that keeps tables
pd pandas · NumPyTyped spreadsheet rows
M3 BGE-M3Multilingual embeddings, in-cluster
sp spaCy · PresidioPII detection and masking

Data

Pg PostgreSQL 16One database per service
pgv pgvectorSemantic search index
AGE Apache AGEKnowledge graph per tenant
Hz HetznerObject storage, Germany

The model is the last step, not the whole system. Routing, parsing, chunking, embedding, query scoping, reranking and PII masking all run locally. On the standard package, indexing a document makes zero external AI calls — and the model provider is a setting, not a dependency: OpenAI, Claude, Gemini, Mistral, Azure, or a model on your own hardware.