Waterside Chatbot EngineDirected

One RAG assistant, installed per site

A shared Claude chatbot engine our sites install as a package. It answers from that site's own content with citations, refuses to guess at prices, qualifies the visitor as it helps them, and hands off to a person at the right moment. Live for Longfellow Design Build. I directed it; a co-op engineer built it.

Jul 2026 - Present

TypeScript · Claude · Vercel AI SDK · Voyage AI · Neon Postgres · HubSpot · Vitest

The chatbot engine, recreated 1:1 in code from the package, on Longfellow's brand. Sample conversation.

Our sites answered questions the way brochures do, which is to say they did not. A visitor to Longfellow Design Build wanting to know how long a kitchen takes, or whether the firm works in their town, had a contact form and a phone number. Most people with a question at 9pm do not fill in a contact form, and the ones who do are answered the next day by someone reading the same question for the hundredth time.

I directed this one and a Northeastern co-op engineer built it, in agentic AI coding environments, across 214 commits. The brief was one engine that every Waterside site could install rather than a bot per site: shared retrieval and tools, separate content, voice, and keys, and no path by which one site could read another's data.

Answers are grounded in the site's own CMS content. Keyword and semantic search run in parallel, merge, and rerank, and every answer carries citations back to the page it came from. The harder design decision was what it refuses to do: prices and timelines swing too much per project, so it names the factors that drive them and routes to a person instead, with a guardrail that scans replies for any number that slips past. While it helps, six conversational signals feed an intent score that decides whether to keep answering, start asking, or offer the hand-off.

When someone agrees to talk to a human, the lead is written to the database and synced to HubSpot with a transcript link. If HubSpot is down the write queues, retries with backoff, and finally emails the team, because a lead that vanishes quietly is worse than one that never came. The visitor accepts a privacy notice before the composer unlocks, and Global Privacy Control is honored automatically.

  • Directed the build; a Northeastern co-op engineer wrote it across 214 commits
  • Hybrid retrieval: keyword and semantic search in parallel, merged and reranked, with [source:N] citations
  • Refuses to quote prices or timelines, with a guardrail that flags numbers that slip through
  • Six conversational signals drive an intent score that times the hand-off to a human
  • book_consultation writes the lead and syncs to HubSpot; failed writes queue, retry with backoff, then email the team
  • Consent gate before the composer unlocks, and Global Privacy Control honored automatically
  • 58 test files covering the retrieval and tool layers

Live for Longfellow Design Build, with 58 test files behind the retrieval and tool layers. It is the clearest example of what I want the adoption work to produce: not a bot that talks confidently about everything, but one that knows what it can source, says so, and hands the rest to a person.