01 / Solo build · shipped
Solvo
An embeddable AI support agent. One script tag, and a site answers its own visitors from its own docs, with the source attached to every answer and a human one click away.
- Role
- Sole designer & engineer
- Stack
- Next.js 16, Prisma, pgvector
- Live
- solvochat.com

01The problem
Support chatbots fail in one of two ways. They either know nothing about the product they’re bolted onto, or they invent answers that sound right. Both cost more trust than they save time.
The bar I set: a visitor should be able to check the answer. If the widget can’t point at the paragraph it came from, it shouldn’t say it.
02How it works
Ingest
Docs are chunked at 400 words with a 50-word overlap, keeping enough context at each boundary that a chunk still makes sense read on its own.
Embed & store
Gemini embeddings, stored in Postgres with pgvector. Retrieval lives next to the data it retrieves from instead of a separate vector service.
Retrieve & answer
Two searches run side by side, pgvector for meaning and Postgres full-text for exact terms like plan names and error codes, merged with rank fusion. The top chunks go to Gemini 2.5 Flash as the only source.
Hand off
When a question needs a person, such as billing, a refund or a bug, the model flags it, the team gets an email or Slack alert, and the conversation moves to a shared inbox.
Embed anywhere
A single script tag mounts the widget in an isolated root. No build step and no framework requirement on the customer’s site.
03Result
- Top-5 retrieval hit rate on 45 real questions over 126 help-centre pages
- 91%
- Searches per question, vector and keyword, fused into one ranking
- 2
- Script tag to install, no backend on the customer’s side
- 1
04What I would change next
Chunk size is a blunt instrument. 400 words works for docs, badly for changelogs, so the next version segments on document structure instead of word count. The other is speed: most of the wait today is the model, not the search.
