The only AI platform that decodes exam patterns, ranks high-yield topics, and generates a personalized study plan — all from your past papers.
"Every student deserves to know what truly matters in their exam — not from luck, but from data."
— Abhijeet Kangane, Founder & Developer
ExamLens AI is a solo-founded, production-grade SaaS product conceived and built by Abhijeet Kangane. It was created out of a frustration with ineffective, broad-spectrum studying, and a belief that AI could finally give every student the same strategic edge that elite coaching centres charge thousands for.
ExamLens AI is a B2C/B2B SaaS platform that uses Google's Gemini 1.5 Flash AI to perform deep analysis on historical exam papers (PDFs). It identifies recurring topic patterns, maps their frequency across years, ranks them by priority, and generates an actionable, data-driven study planner.
Students waste hours studying low-probability topics while high-yield topics — the ones that repeatedly appear on exams — go unnoticed. ExamLens AI solves this by turning historical exam data into a clear, ranked study strategy.
- Upload any past exam paper as a PDF
- Gemini 1.5 Flash extracts and processes all educational topics
- Calculates topic frequency (how many times each topic was tested)
- Assigns a weightage percentage based on historical occurrence
- Results saved securely to your profile for future reference
- Topic Frequency Bar Chart — visualize which topics dominate past papers
- Topic Weightage Donut Chart — see proportional distribution at a glance
- Built with Recharts for a smooth, responsive charting experience
- Topics automatically ranked from Critical Focus → High Priority → Standard
- See exactly how many times each topic appeared and its % weight
- Color-coded priority system for instant visual clarity
- Powered by Gemini 1.5 Flash with streaming responses
- Ask anything about your exam topics, study strategy, or priorities
- AI maintains full context of your uploaded papers and analysis
- Real-time streaming via Vercel AI SDK
- Google OAuth one-click sign-in
- Email/Password registration with confirmation flow
- Protected routes via Next.js Middleware
- Row-Level Security (RLS) — each user can only access their own data
| Layer | Technology | Purpose |
|---|---|---|
| Frontend | Next.js 16 (App Router) | Full-stack React framework |
| Language | TypeScript | Type-safe codebase |
| Styling | Tailwind CSS | Utility-first dark theme |
| Icons | Lucide React | Clean icon library |
| Charts | Recharts | Data visualization |
| Database | Supabase (PostgreSQL) | Data persistence + RLS |
| Auth | Supabase Auth | OAuth + Email auth |
| Storage | Supabase Storage | PDF file hosting |
| AI Engine | Google Gemini 1.5 Flash | Exam analysis + tutoring |
| AI Streaming | Vercel AI SDK | Streaming chat responses |
| PDF Parsing | pdf-parse | Text extraction from PDFs |
| Deployment | Vercel | Edge-optimized hosting |
- Node.js 18.x or later
- A Supabase account (free tier works)
- A Google AI Studio API key (Gemini 1.5 Flash)
git clone https://github.com/yourusername/examlens-ai.git
cd examlens-ainpm installCreate a .env.local file in the root directory:
# Supabase — get from https://app.supabase.com/project/_/settings/api
NEXT_PUBLIC_SUPABASE_URL=https://your-project-id.supabase.co
NEXT_PUBLIC_SUPABASE_ANON_KEY=your_supabase_anon_key_here
# Google Gemini — get from https://aistudio.google.com/apikey
GEMINI_API_KEY=your_gemini_api_key_here
⚠️ Never commit.env.localto version control. It is already in.gitignore.
Run the SQL schema against your Supabase project. Go to your Supabase dashboard → SQL Editor and execute the contents of supabase_schema.sql:
# The schema creates:
# - public.users table with RLS
# - public.papers table with RLS
# - Storage bucket 'papers'
# - Auth trigger to auto-create user profilesIn your Supabase Dashboard → Storage, create a bucket named papers and set it to Public.
npm run devOpen http://localhost:3000 in your browser.
- Visit Google AI Studio
- Create a new API key
- Add it to
.env.localasGEMINI_API_KEY
The platform uses gemini-1.5-flash for both analysis and chat due to its speed and accuracy for structured JSON extraction.
- Create a new project at supabase.com
- Navigate to Settings → API
- Copy your Project URL and anon/public key
- Add both to
.env.local
- Go to Supabase Dashboard → Authentication → Providers → Google
- Follow the setup guide to configure your Google Cloud OAuth credentials
- Add the redirect URL to your Google Cloud Console
- Push your code to GitHub
- Import the repository on Vercel
- Add all environment variables from
.env.localin the Vercel dashboard - Deploy — Vercel will automatically build and deploy
The vercel.json includes a cron job that pings /api/keep-alive every 48 hours to prevent the Supabase free tier from pausing due to inactivity:
{
"crons": [
{
"path": "/api/keep-alive",
"schedule": "0 0 */2 * *"
}
]
}examlens-ai/
├── app/
│ ├── api/
│ │ ├── analyze/route.ts # PDF ingestion & Gemini analysis
│ │ ├── chat/route.ts # AI tutor streaming endpoint
│ │ └── keep-alive/route.ts # Supabase anti-pause ping
│ ├── dashboard/page.tsx # Main dashboard UI
│ ├── login/page.tsx # Auth page (login + signup)
│ ├── layout.tsx # Root layout with Navbar/Footer
│ └── page.tsx # Landing page
├── components/
│ ├── Navbar.tsx # Sticky navigation header
│ └── Footer.tsx # Footer with founder info
├── utils/
│ └── supabase/
│ ├── client.ts # Browser Supabase client
│ └── server.ts # Server Supabase client (SSR)
├── middleware.ts # Auth route protection
├── supabase_schema.sql # Database schema + RLS policies
├── vercel.json # Vercel cron + config
└── .env.local # Environment variables (not committed)
- Row-Level Security (RLS): Enforced at the database level. Users can only read/write their own data via
auth.uid() = user_idpolicies. - Server-side Auth: All sensitive operations (PDF analysis, DB writes) happen in Next.js API routes, never in the browser.
- Environment Variables: All API keys are server-side only. Only
NEXT_PUBLIC_*prefixed variables are exposed to the client — and these are safe public keys. - Input Validation: All API routes validate inputs before processing.
MIT License — see LICENSE for details.
ExamLens AI · Founded & Built by Abhijeet Kangane
Turning exam history into your competitive advantage.