Context
A premium agricultural intelligence newsletter had published hundreds of issues over the years, a genuinely valuable archive of strategic analysis that subscribers paid for but couldn't search.
The problem
The expertise existed; finding it didn't scale. Subscribers wanted answers ("what has been written about carbon markets in Brazil?"), not a folder of PDFs.
What I owned
The full build: the ingestion pipeline, the retrieval system, the subscription-gated authentication, the chat experience, and the admin dashboard the client uses to run it.
How it works
- Ingestion: new newsletter issues flow in automatically from the publishing platform, are converted and vectorized, and join the searchable archive without manual work.
- Retrieval first, generation second: answers are grounded in the vectorized archive with citations back to the source issues. The AI can't invent expertise the archive doesn't contain.
- Gated access: the assistant validates premium-subscriber status against the publishing platform's API before granting entry, with multi-step email verification.
- Operations built in: an admin dashboard tracks users, messages, and AI costs, so the client runs the product without me in the loop.

Outcome
In production with real subscribers: 171 active users, 3,691 AI messages, and the full archive searchable. The archive went from a static folder to the product's most-used feature.
What I'd improve today
Retrieval quality evaluation is manual today; I'd add a small automated eval set to catch regressions when the archive or models change.