Inspiration

Misinformation spreads faster than fact-checking does. Every day someone shares a claim a headline, a viral post, something from a group chat and there's no fast way to know if it's actually true without opening ten tabs yourself. We wanted something that could do that checking in seconds, and do it honestly: grounded in real, current sources rather than an LLM just answering confidently from memory (and sometimes hallucinating).

We also gave ourselves a constraint that shaped everything: build and ship the entire thing from a phone, with no laptop on hand. That turned out to push us toward a simpler, cleaner architecture than we'd probably have built otherwise.

What it does

Paste any claim into Fact Pulse and it:

  1. Searches the live web for relevant sources using Tavily
  2. Hands the claim and those sources to NVIDIA's Nemotron 3 Super model, served through Nebius Token Factory, and asks it to weigh the evidence
  3. Returns a verdict — verified, false, or mixed — with a confidence level, a short explanation citing specific sources, and links to every source used

The result is a stamped "case file" style report: the model's reasoning is never just trusted blindly, it's always traceable back to the actual evidence it saw.

How we built it

  • Tavily Search API for real-time, current evidence retrieval this is what keeps the model from reasoning over stale or made-up information
  • NVIDIA Nemotron 3 Super (nvidia/nemotron-3-super-120b-a12b) via Nebius Token Factory's OpenAI-compatible endpoint for the actual reasoning and verdict generation
  • A Vercel serverless function that orchestrates both calls server-side, keeping API keys off the public page entirely
  • A single-file, mobile-first frontend no build step, no framework, so it stays simple to deploy and demo from a phone

The whole thing was built, committed to GitHub, and deployed on Vercel entirely from a mobile browser.

Challenges we ran into

The biggest one: our first version called Tavily and Nebius directly from the browser. It failed immediately not because of a bad API key, but because the sandboxed environment we prototyped in only allows outbound calls to a small set of whitelisted domains. That pushed us to the current architecture: a serverless backend that holds the keys and makes both calls itself, which turned out to be a better design anyway no keys exposed client-side, and no CORS issues to fight.

Doing all of this from a phone also meant relearning workflows we'd normally do with a terminal: creating files and folders through GitHub's mobile "create file" flow (typing api/verify.js as a filename to auto-create the folder), setting environment variables through Vercel's mobile dashboard, and debugging based on screenshots of error messages rather than a local console.

What we learned

  • How Nebius Token Factory's OpenAI-compatible API works in practice, including handling reasoning_content alongside content for Nemotron's reasoning-style outputs
  • That grounding matters more than model size for a task like this the quality of the verdict depends heavily on the quality and diversity of the sources Tavily returns before the model ever sees the claim
  • That a serverless-function-first architecture is often simpler and more secure than trying to do everything client-side, even for a small hackathon project

What's next

  • Show which specific sources the model weighted most heavily in its verdict, so the credibility reasoning is visible, not just the conclusion
  • Add lightweight domain-reputation signals (e.g. distinguishing primary sources from aggregators) before sources reach the model
  • Support checking a batch of claims at once, useful for scanning a full article rather than one claim at a time

Built With

Share this project:

Updates

Submission history