← All work

AskUpstream

A domain-specific AI assistant that makes a premium agricultural newsletter archive searchable through natural-language questions with grounded, cited answers.

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.
AskUpstream, subscriber chat over the newsletter archive
Production screenshot, subscriber chat over the archive

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.