Inspiration

Researching anything properly means the same slog every time: open a dozen tabs, cross-check claims against each other, then wrestle scattered notes into something readable. That's genuinely three different jobs — digging up facts, verifying them, and writing them up clearly — usually done by one exhausted person at 1am. I wanted to see what happens if you split that work across a small team of specialized AI agents that hand off to each other the way a real research team would, instead of asking one model to guess straight through.

What it does

Proof turns a single question into a structured, source-aware report. You type a topic, choose Quick or Deep dive, and three agents run in sequence — visible live in the UI as they work:

  • Researcher gathers current facts and angles on the topic, using real web search rather than just training data
  • Fact-checker reviews that research, flags weak or unverifiable claims, and produces a vetted version
  • Writer takes the vetted research and composes it into a clean, structured report

The final report renders in the browser with a transparent, expandable Fact-check summary showing exactly what got flagged and why, and can be exported instantly as a PDF.

How we built it

Proof is intentionally a zero-backend, zero-API-key app. The entire thing runs client-side: React, Vite, and Tailwind CSS for the frontend, and Puter.js for keyless, serverless access to AI models directly from the browser — no server, no database, no .env file, no billing setup on my end.

I built it in clean, staged commits — frontend first with mocked data, then wired in the real agent pipeline, then fixed issues one at a time (Markdown table rendering, fact-check parsing, PDF export, then upgrading the Researcher to use real web search via an OpenAI model through Puter.js). I prototyped the UI in Bolt.new against a custom design system I built called "Cosmos" — a calm, editorial visual language with a warm linen background and a single whisper-weight serif typeface — then moved to local development in Cursor, using Freebuff for free AI-assisted coding once I was out of paid credits.

Challenges we ran into

The biggest one was realism: the first version of the Researcher agent only used the model's training data, so it missed genuinely recent information — a real gap for a "research" tool. Fixing that meant switching to a model that supports live web search through Puter.js, which also meant reworking the streaming logic, since tool-calling responses don't arrive as simple text chunks the way a plain chat response does.

I also hit some very "first real project" moments: raw Markdown syntax leaking into the UI instead of rendering, fact-check output showing raw parsing artifacts instead of clean text, and a genuinely humbling stretch of Git merge conflicts and divergent branches from editing directly on GitHub's web UI while also working locally. Working through each of those one at a time, and committing in small clean stages, made the whole thing much easier to debug than trying to fix everything at once would have been.

Accomplishments that we're proud of

Getting a genuinely multi-step agentic pipeline working end-to-end, live, in the browser — with zero backend infrastructure — feels like the real win here. Watching three agents actually hand off work to each other in real time, land on a report, and export a clean PDF, all without a single API key or server, was a genuinely satisfying moment.

What we learned

I came into this as a "vibe coder" leaning heavily on AI tools, and came out of it with a much better working understanding of how LLM tool-calling actually behaves, how streaming responses differ from full responses, and — maybe most usefully — a real, hands-on understanding of Git: staging, committing, merging, and resolving divergent branches, instead of just vaguely knowing the commands.

What's next for Proof

  • Saved report history, so users can revisit past research without starting over
  • Inline source citations linked directly within the report text
  • Adjustable agent "personas" so reports can be tuned for different audiences or tones

Built With

  • bolt.new
  • cursor
  • github
  • puterjs
  • react
  • tailwindcss
  • typescriptjavascript
  • vite
Share this project:

Updates

Submission history