Inspiration

My drive is full of question papers. Coaching modules, pre-boards, random PDFs at midnight. Great material — useless format.

Practicing them properly meant paying test-series platforms for questions that aren't mine. All I wanted was my own papers, in a real exam interface, without a printer or a payment plan.

So I built Rankify. One job: PDF in → CBT out. Free. No account. Nothing leaves your browser.


What it does

Three steps. That's the whole product.

1. Extract — Drop a PDF. The primary path is our public Gemini GEM: upload there, copy the JSON back, paste here. No key, no signup. Or let the built-in AI Agent read it page-by-page on any free provider — Groq, Mistral, NVIDIA, even local Ollama. Long paper? It checkpoints after every page and resumes after crashes.

2. Review — AI drafts, you approve. Every question is editable before test day. Diagrams are never AI-guessed: you drag a box on the real PDF page and that exact crop ships with the question.

3. Attempt — A genuine CBT. Timer, palette, mark-for-review, auto-save. Submit → per-section analytics instantly.

Papers become plain JSON (our UniversalPaper schema) — 9 question types: MCQ, MSQ, numeric, true/false, fill-blank, match, assertion–reason, passage, long answer. Math survives as LaTeX:

{ "type": "numeric", "text": "Find $\\int_0^1 x^2 dx$", "answer": 0.33 }

Privacy is structural, not promised: there is no backend. Papers, answers, results live in your browser's IndexedDB.


How we built it

Vue 3 + TypeScript + Vite, Tailwind v4 — a plain SPA on Vercel's CDN.

  • pdfjs-dist pulls text per page; empty text layer? Auto-routes through OCR.
  • Dexie / IndexedDB stores papers, test state, checkpoints.
  • Provider manager: BYOK keys stay local; presets hit free tiers via an optional proxy.
  • Custom cropper boxes diagram regions straight off the rendered page.
  • The design is a notebook — ruled paper, washi tape, sticky notes, handwriting fonts, a pencil ink-trail cursor, and a WebGL-dithered footer that ripples under your mouse. GSAP + Lenis underneath, tuned hard (off-screen pausing, transforms only).
  • UI speaks English, हिन्दी and Hinglish — new languages arrive via a GitHub issue form anyone can file.

Open source under PolyForm Noncommercial 1.0.0.


Challenges we ran into

Models invent things. Confident nonsense options, baseless answers. Fix: strict JSON schema + validation warnings + a review step no question can skip.

Diagrams broke trust first. Instead of fighting hallucination and missing diagram, we removed it — manual crops from the actual PDF. Slower, but correct.

Free-tier limits vs. 100-page papers. Page-chunked runs with delays and per-page checkpoints. A crash costs one page now, not eighty.

Math turned to soup. Naive extraction mangles equations. The schema forces $...$ passthrough verbatim.


Accomplishments that we're proud of

  • Whole pipeline — parse, extract, review, attempt, analyze — runs client-side. Zero required servers.
  • Nine question types behind one schema a human can actually read.
  • Same paper on Groq today, Ollama tomorrow, whatever's free ai provider next semester.
  • People mention the sticky notes and dither footer unprompted. The design has fans.

What we learned

Schema-first prompting beats clever prompting. A rigid contract catches more errors than asking nicely ever will.

The UX around failure matters more than accuracy. Every paper breaks some assumption; usable means nothing fails silently.

Killing features is shipping. Accounts, cloud sync, auto-diagram-detection — all cut. The demo got less shiny and the product got better.


What's next

  • More languages — community translations from the issue-form pipeline land in the switcher.
  • Side-by-side review — question ↔ source-page jump highlighting.
  • Portable papers — export as a single file a friend imports and attempts.
  • Time-per-question heatmaps across attempts. -Robust-Logics across many usecases and scenerios.

Built With

Share this project:

Updates

posted an update —

Rankify just got a full rebuild. Here's what changed.

Hey everyone! After months of rebuilding from scratch, the new Rankify is live — and it's a completely different beast from the one you saw here last year.

Same mission: any question-paper PDF → a real computer-based test. New everything else.

What's new

  • A free extraction path that needs zero setup. Our public Gemini GEM turns your PDF into structured JSON — upload there, paste back here. No API key. No account. Or flip to the built-in AI Agent and let it read page-by-page on Groq / Mistral / NVIDIA / even local Ollama.
  • Checkpoint resume. 100-page paper died at page 60 because of rate limits? Hit resume. It continues from page 61, not page 1.
  • Manual diagram cropping. AI never guesses figures anymore — you drag a box on the actual PDF page and that exact crop ships with the question. Zero hallucinated diagrams.
  • 9 question types behind one clean schema — MCQ, MSQ, numeric, true/false, fill-blank, match-the-following, assertion–reason, passage, long answer. LaTeX math passes through untouched.
  • A total design overhaul. The app now looks like a student's notebook — ruled paper, washi tape cards, sticky notes, handwriting accents, a pencil ink-trail cursor, and a WebGL-dithered footer that reacts to your mouse. Yes, we had fun.
  • Multilingual UI. English, हिन्दी and Hinglish built in. Want another language? There's a GitHub issue form for exactly that.
  • Lighter than ever. Fully static build, WebP everywhere, whole image payload under 0.5MB.

Privacy, unchanged

Still no backend. Still no accounts. Papers, answers and results live in your browser's IndexedDB — clear your data and they're gone by design.

Also: the license moved from AGPL to PolyForm Noncommercial 1.0.0 — free forever for students, research and education.

Try it → https://rankify-pdf2cbt.vercel.app Star it → https://github.com/namandhakad712/Rankify-PDF2CBT

Feedback welcome — especially broken PDFs. Weird formats are my favourite bug reports.

Log in or sign up for Devpost to join the conversation.

Submission history