Inspiration
On June 5, 2026 — two weeks before NEET, India's largest medical entrance exam — partial question papers began circulating on private Telegram channels. By Day 3 they were on Reddit. By Day 4, 2 million students had access. NTA announced an investigation on Day 5. NEET was postponed on Day 12.
The papers were on public, API-accessible platforms the entire time. Nobody was watching.
That 12-day gap between leak and confirmation is what FindLeaks is built to close. If something had been monitoring Telegram on June 5, NEET wouldn't have been postponed on June 16. The technology existed. The connection between question bank and open internet just didn't.
What it does
FindLeaks is the world's first AI-powered exam leak detection platform. It:
- Monitors Telegram, Reddit, Pastebin, Discord, and Twitter simultaneously — 24/7
- Detects leaked questions using semantic AI + OCR, catching paraphrased text and phone photos of papers
- Alerts exam board administrators within 30 seconds of a suspicious post appearing
- Provides a full forensic report — OCR text, matched question, confidence score, platform source, post ID — suitable for filing a legal complaint
- Requires zero technical knowledge — any exam board officer can upload a question bank PDF, start a scanner, and receive alerts through a clean web dashboard
How we built it
Three-layer AI detection engine:
Layer 1 — Semantic Search: Questions are embedded into 384-dimensional vectors using all-MiniLM-L6-v2. Incoming posts are compared against the entire question bank using FAISS cosine similarity — catching paraphrased leaks that keyword search misses entirely.
$$\text{cosine_sim}(A, B) = \frac{A \cdot B}{|A| \cdot |B|}$$
Layer 2 — Jaccard Overlap Gate: FAISS alone over-scores exam instructions that share vocabulary with questions. A multiplicative penalty gates every score by actual word and character trigram overlap — eliminating false positives while preserving noisy OCR matches:
$$\text{score} = \text{faiss_score} \times \left(0.30 + 0.70 \times \min\left(1,\ J_w \cdot 6 + J_c \cdot 2\right)\right)$$
Layer 3 — Multi-match Boost: Multiple questions matching above threshold signals a full paper dump, not a coincidence.
OCR pipeline: Two-pass Tesseract with OpenCV preprocessing (adaptive + Otsu threshold) handles blurry phone photos of leaked papers.
Stack: FastAPI + PostgreSQL + SQLAlchemy (backend) · sentence-transformers + FAISS (AI) · React + TailwindCSS (frontend) · Deployed live on Railway + Vercel.
Challenges we ran into
The "Which" problem: Our first demo scored 84% HIGH confidence on a post containing only the word "Which" — because every exam question starts with "Which of the following..." FAISS had no way to distinguish the word from the question. Building the Jaccard gate to eliminate this entire class of false positives required significant iteration.
Platform diversity: Telegram uses long-polling bots, Reddit uses OAuth2, Pastebin scrapes a public archive, Discord uses WebSocket gateway. Building one unified BaseScanner abstraction that handles all five platforms cleanly was architecturally demanding.
The async race condition: We pushed an SSE notification to the Dashboard before committing the leak to the database. The Dashboard's immediate refresh returned empty — the transaction hadn't committed yet. One await db.commit() reordered before push_notification() fixed it, but finding it required tracing the exact execution order of FastAPI dependency cleanup vs. ASGI response dispatch.
No ground truth dataset: Every threshold and formula coefficient was calibrated manually against synthetic test cases. No labelled dataset of real exam leaks exists publicly.
Accomplishments that we're proud of
- It actually works — live deployment, not a prototype. Upload a PDF, start a scanner, inject a demo, watch the alert arrive in under 30 seconds.
- The Jaccard gate — a novel scoring formula that combines semantic embeddings with textual overlap, making the system trustworthy enough to act on without an investigator manually verifying every alert.
- Five platforms, one abstraction — a new scanner platform can be added in under 50 lines of code.
- Zero-code UX — an exam board officer with no technical background can fully operate the system: upload questions, configure scanners, review forensic leak reports, and acknowledge alerts — entirely through the dashboard.
- Built while the wound was fresh — we started building as the NEET postponement was still in the news. The problem wasn't hypothetical.
What we learned
Semantic similarity ≠ textual overlap — you need both. FAISS finds conceptually related content brilliantly. But "conceptually related" includes instructions, answer keys, and notes that aren't leaks. The Jaccard gate was the difference between a demo and a deployable system.
OCR on phone photos is a different problem from OCR on clean scans. Real leaked papers are photographed at angles in bad lighting. Character trigram similarity survives the noise that breaks word-level matching entirely.
False positives destroy trust faster than false negatives. An investigator who receives three wrong alerts stops trusting the system. Precision matters more than recall when the cost of distrust is abandonment.
No-code UX is a first-class feature. The best AI in the world doesn't help if the people who need it can't use it without calling an engineer.
What's next for FindLeaks
- WhatsApp Business API — the highest-volume leak channel in India, still inaccessible to independent developers. Closing this gap is the single highest-priority next step.
- Multilingual OCR — Hindi, Tamil, Telugu exam papers. The NEET leak itself was multilingual.
- Agentic investigation — an autonomous agent that follows leak chains across platforms, correlates sources, and produces a complete evidence dossier without human intervention.
- Blockchain paper fingerprinting — cryptographic watermarks embedded in each distributed copy, so the source of any leak can be traced to a specific exam centre or recipient.
- Feedback-loop learning — investigator accept/reject decisions feed back into threshold calibration, continuously improving precision over time.
The NEET leak took 12 days to confirm. FindLeaks would have flagged it in 30 seconds on Day 1.
Built With
- ai
- aiosmtplib
- api
- bcrypt
- bot
- discord
- eslint
- faiss
- fastapi
- gateway
- github
- huggingface
- javascript
- ocr
- opencv
- pastebin
- postgresql
- praw
- pydantic
- pytest
- python
- python-jose
- python-telegram-bot
- railway
- react
- scraping
- search
- sentence-transformers
- similarity
- sql
- sqlalchemy
- structlog
- supabase
- tailwindcss
- telegram
- tesseract
- tweepy
- twitter/x
- uvicorn
- vercel
- vite
Log in or sign up for Devpost to join the conversation.