
A Gulf-region tax and compliance advisory firm
Advisory staff were answering the same 40-50 recurring UAE corporate-tax questions by hand, each pulling 2-3 regulatory PDFs. Turnaround averaged 6 hours and junior staff frequently missed cross-references between VAT and CT documents.
What they came to us with.
The firm fielded the same 40–50 recurring UAE corporate-tax and VAT questions every week. Each answer required pulling two or three regulatory PDFs and reconciling cross-references between legislation — work only senior staff could do reliably.
Turnaround averaged six hours per question. Junior associates escalated constantly because retrieving the correct sub-article manually was error-prone, and the firm was capacity-bound: they could not take on new clients without hiring more senior hands.
How we built it.
We built a retrieval-augmented assistant against a pgvector store of cleaned regulation PDFs. Ingestion runs a 2-pass pipeline — PyMuPDF extracts raw text, then an LLM pass structures it into article-aware chunks that survive retrieval.
Composite embeddings were the unlock. Each chunk is embedded as a weighted mix of its own text (70%), RAKE-extracted keywords (10%), and LLM-generated synthetic questions (20%). Cross-article references like “see Article 23 of Cabinet Decision No. 52” stopped being invisible to retrieval.
The assistant streams answers via SSE, runs a context-condensation pass before each LLM call to keep prompt windows tight, and preserves the full conversation (no sliding window) so follow-ups stay grounded. Auth is RS256 JWT with 10-minute access tokens and 30-day refresh.
What shipped. What changed.
Avg. first-answer latency under 4s end-to-end
Retrieval precision@5 improved from 0.61 to 0.88
L1 staff resolution rate climbed from 35% to 82%
Full conversation history preserved so follow-ups stay grounded
Keep reading.

Technology — A MENA-region AI startup shipping two consumer-facing products
Production-Grade Multi-Product AI Backend on a Shared Core
Two AI products (one retrieval-heavy, one vision-heavy) were being built as separate backends. Duplicated auth, duplicated RBAC, duplicated observability, and diverging fast.
- Auth, RBAC, and observability built once and consumed by both products
- Per-product workers (ARQ) keep heavy work off the request path
- Token-versioning invalidates all sessions on password change with zero revocation-list growth

Retail — A UAE home-furnishing retailer with a 40k-SKU catalogue
Visual Product-Discovery Assistant for Home-Furnishing Retail
Customers shared Pinterest-style inspiration photos over WhatsApp and expected matching SKUs in return. Manual matching cost 20-30 minutes per enquiry; most customers dropped off before the retailer could respond.
- Enquiry-to-shortlist time compressed from ~25 minutes to ~45 seconds
- 58% of enquiries now resolve without staff involvement
- Rate-limited (5 req / 5s burst, 20 req / 60s sustained) to cap SerpAPI spend
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.