
A Gulf-region research university digital-humanities centre
Thirty-three PDF volumes of 1622–1810 Gulf history — 1.94M words over 5,657 pages — existed only as unsearchable prose, alongside a parallel Arabic edition whose text layer was unrecoverable. No structure, no entities, no map, no way to cite a passage.
What they came to us with.
The corpus was a set of thirty-three InDesign-exported PDF volumes covering Persian Gulf, Arabian and Persian history from 1622 to 1810 — 1,939,670 words across 5,657 pages. As documents they were readable. As research material they were inert: no records, no entities, no dates a machine could sort, and no way for a historian to cite a specific passage and have anyone else find it again.
A parallel Arabic edition of the same thirty-three volumes existed, and it was worse. The PDF text layer was glyph-scrambled and unrecoverable, so the Arabic scholarship was effectively invisible to every tool that could read the English.
The requirement was not a search box over PDFs. It was a structured, bilingual, citable knowledge graph — people, places, ships, commodities, events and the relations between them — with every claim traceable to the page it came from.
How we built it.
Extraction is deterministic and font-aware rather than model-guessed: year headers are identified by weight and point size, body text by its own typographic signature, so segmentation is reproducible across all thirty-three volumes. The Arabic edition was recovered separately by page-level vision transcription at 200 dpi, yielding 8.36 million characters the original text layer could not surrender.
Entities are resolved through a seven-tier cascade — exact, normalised, transliteration-family, token-overlap, prefix, phonetic and edit-distance — backed by thirty-eight curated transliteration families and a hand-built gazetteer. Candidate merges are scored across name overlap, shared correspondents, shared places and year overlap, with explicit vetoes for conflicting residences and titles, and a learned Splink model behind it.
Events, relations and context facts are layered on top and written into Postgres 16 with PostGIS and pgvector. A FastAPI service exposes the graph; a bilingual Next.js 14 application renders it as an interactive Leaflet map, a correspondence network, a facsimile viewer and a cited research agent that is architecturally forbidden from paraphrasing a quotation — citations are sliced from character offsets or refused.
What shipped. What changed.
Source text captured from 33 volumes
Arabic edition records
Entities after source-verified audit
Arabic search recall, bare-alef query
Place mentions stuck at a meaningless 0.50 confidence
Over-span event clusters
Keep reading.

Other — A publishing-adjacent services company handling 500+ DOCX assets per month
Editorial Workflow Platform for Multi-Volume Document Production
Editorial ops was running 11 separate tools to move a document from intake to edit to merge to format to export. Turnaround was unpredictable and any one tool outage stalled the whole pipeline.
- 11 editorial tools consolidated into 1 workspace
- Heavy document merges moved off the request path (no more timeouts)
- Median turnaround per document: 3.5 days to 10 hours

Education — An Arabic-language education initiative
Research-Grade Linguistic Analysis Platform
A corpus of 676 Arabic doubled-verb conjugations needed to be explorable by researchers and students alike. Existing academic tools required CSV wrangling and produced static PNGs that nobody could interact with.
- All 676 entries browsable in a single interactive view
- Phonetic features auto-discovered from sifat strings (no hand-coded feature set)
- Silhouette-guided k-selection removes the need to hand-tune cluster count
Want the same outcome for your team?
Tell us where you are now. You'll get a fixed price in writing before any work starts.