Show HN: Open-source Perplexity clone one file back end, streaming answers (github.com)
I built an open-source research agent. You ask a question, it searches the web via Tavily, synthesizes an answer with an LLM, and shows the sources it used. Answers stream in real-time.
The interesting part is the backend. It's a single JS file (~100 lines) that handles web search, LLM streaming, and per-user conversation history. No vector database, no Redis, no separate storage service.
It runs inside a cell — an isolated environment with a built-in database, search index, and filesystem. The cell handles persistence and streaming natively, so the agent code only has to deal with the actual logic.
Tech: Next.js frontend, Tavily for search, OpenRouter for LLM (Gemini 2.5 Flash default).
2 comments
[ 415 ms ] story [ 3407 ms ] threadCurious how you're handling conversation history at scale though — storing it per-user in-memory works fine for a demo, but what happens when the cell restarts? Does the built-in database persist across restarts or does history reset?