Case study
TruthLens
An AI fact-checking platform that researches a claim on the web and gives a verdict backed by sources.

The problem
Checking a viral claim means reading many sources and separating the parts that are true from the parts that are not. Chatbots answer confidently but cannot show their evidence.
How it works
From input to result
Decompose
The claim is split into smaller sub-claims that can each be checked on their own.
Research
Web search through Serper, Brave or DuckDuckGo, with Wikipedia as a fallback. Pages are extracted with Playwright and Trafilatura.
Retrieve
Evidence is embedded into a local vector store, and the most relevant passages are found by semantic search.
Judge
An LLM (Groq, OpenAI, Anthropic or a local model) weighs each sub-claim against its evidence.
Report
A verdict with the sources behind it, stored in PostgreSQL with the claim history.
Key decisions
Why it is built this way
Three services, each in the right language
A React frontend, a Node.js and Express gateway for routing, history and rate limiting, and a Python FastAPI service for AI orchestration, scraping and embeddings.
A fallback for every outside dependency
Several search providers with Wikipedia as the last resort when DuckDuckGo rate-limits, and several LLM providers, so one outage does not stop a check.
Research depth the user controls
Quick (3 searches, 5 pages), Standard (5, 10) and Deep (8, 18). Deep is tuned to finish in under two minutes to save API credits.
A vector store with no native build step
An in-memory store or Chroma, so the project installs anywhere without C++ build tools.
From a raw server address to a stable domain
It first ran on AWS EC2, but a bare IP address is not something to share. I moved the frontend to Vercel for a stable, shareable domain.
Results
- Public and open: anyone can check a claim without signing up.
- Live demo online and open source under the MIT licence.
Built with