Records platform for 50+ diplomatic missions
A multi-tenant document and records management system with hybrid search and AI classification.
- Role
- Senior Technical Lead
- Period
- 2025 – 2026
- Sector
- Government · foreign affairs
- Team
- 5 engineers, 3 researchers
- Stack
- Django REST Framework
- PostgreSQL RLS
- ParadeDB BM25
- pgvector
- Celery
- Zitadel OIDC
The problem
Over fifty missions needed one records system where each mission's documents stay isolated, every access is auditable, and staff can find a file in seconds.
What I built
- Tenant isolation through PostgreSQL row-level security and per-tenant S3 prefixes; object-level permissions via django-guardian.
- Zitadel OIDC single sign-on with MFA.
- Hybrid search combining ParadeDB BM25 with pgvector semantic embeddings.
- Async pipelines for OCR (Tesseract, Kreuzberg), IMAP ingestion and barcode routing.
- LLM document classification through LiteLLM with a Groq → DeepSeek → Gemini fallback chain, plus FastText auto-categorisation.
Outcome
- 49 API endpoints, 305 schema migrations and 2,000+ automated tests.
- Serving 50+ missions from one codebase.
Updated 2026-10-17 · Client name withheld.
Need something like this?
Tell me what you're working on and I'll reply within one working day.
Start a conversation