A unified, responsive dashboard that aggregates coding-interview questions for software engineers, ranks them for a target role + company (e.g. SDE 2 @ American Express), and tracks your preparation β inspired by a mix of LeetCode + Notion + Power BI.
- π― Smart Recommendations β AI-powered ranking based on company frequency, difficulty fit, and interview trends
- π Analytics Dashboard β Progress tracking, topic coverage, readiness gauge
- πΊοΈ Study Roadmap β 6-week personalized plan with must-do questions
- π Advanced Filters β Company, role, experience, topic, difficulty, source, frequency
- π Multi-Source Data β LeetCode (1500+), Codeforces (300+), GeeksforGeeks (300+), curated overlay (90+)
- πΌ Interview Types β Coding (DSA), System Design (HLD), Low-Level Design (LLD), AI/ML
- π¨ Modern UI β Dark/light theme, responsive layout, export to CSV/PDF
- π Progress Tracking β Mark questions as todo/attempted/solved, bookmark favorites, add notes
- Backend: FastAPI + SQLAlchemy + SQLite
- Frontend: React + Vite + TypeScript (custom SVG charts, no heavy UI deps)
- Data: Live ingestion from public APIs + curated company-overlay layer
- Quick Start
- Troubleshooting
- Data Sources
- Architecture
- API Reference
- Dashboard Features
- Contributing
- License
π Complete Documentation Index β Find all guides and documentation
Linux/macOS:
git clone https://github.com/YOUR_USERNAME/interview-prep-dashboard.git
cd interview-prep-dashboard
./start.shWindows:
git clone https://github.com/YOUR_USERNAME/interview-prep-dashboard.git
cd interview-prep-dashboard
start.batBackend:
cd backend
python -m venv .venv
source .venv/bin/activate # Linux/macOS: source .venv/bin/activate
# Windows: .venv\Scripts\activate
pip install -r requirements.txt
python -m uvicorn app.main:app --reload --port 8000Frontend (new terminal):
cd frontend
npm install
npm run devLoad data: Open http://localhost:5173 β click "β» Refresh Data"
π Detailed setup guide: SETUP.md
β‘ Quick reference: QUICK_START.md
- Python 3.9+ (tested on 3.9β3.14)
- Node.js 18+ and npm
- Git (to clone the repo)
git clone https://github.com/YOUR_USERNAME/interview-prep-dashboard.git
cd interview-prep-dashboardcd backend
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
python -m uvicorn app.main:app --reload --port 8000cd backend
python -m venv .venv
.\.venv\Scripts\Activate.ps1
pip install -r requirements.txt
python -m uvicorn app.main:app --reload --port 8000cd backend
python -m venv .venv
.venv\Scripts\activate.bat
pip install -r requirements.txt
python -m uvicorn app.main:app --reload --port 8000β
Backend running at http://127.0.0.1:8000
π API docs: http://127.0.0.1:8000/docs
Open a new terminal (keep backend running), then:
cd frontend
npm install
npm run devβ
App running at http://localhost:5173
(Vite proxies /api/* to the backend on :8000)
The SQLite database auto-creates on first startup. Populate it by clicking β» Refresh Data in the UI, or via:
# Full ingestion (LeetCode + Codeforces + GeeksforGeeks + curated overlay)
curl -X POST "http://127.0.0.1:8000/api/ingest/run"
# OR offline mode (curated data only, no external API calls)
curl -X POST "http://127.0.0.1:8000/api/ingest/seed-only"First-time ingestion takes ~30β60 seconds (fetches 1500 LeetCode, 300 Codeforces, 300 GeeksforGeeks problems). Subsequent runs are faster (upserts only).
Only two of the requested sources expose a usable public API; the rest have no public API, and company-tag / frequency / "last asked" data is premium-gated everywhere. This dashboard is honest about that split:
| Source | How | What we get |
|---|---|---|
| Codeforces | Official REST API (problemset.problems) |
Real problems, tags, ratingβdifficulty, solve-countβpopularity |
| LeetCode | Public GraphQL (questionList), paginated (100/page, up to leetcode_limit) |
Real free problems (~1200), difficulty, topic tags, acceptance rate, links |
| GeeksforGeeks | Best-effort scrape of the practice explore endpoint | Real practice problems, difficulty, topic + company tags, links |
| Curated overlay | backend/app/data/curated_*.json (merged) |
Company tags, frequency, last-asked, Blind75/NeetCode flags, complexities, similar-question links, article/video resources, and content that has no API: HLD, LLD, and AI/ML interview questions (incl. an expanded American Express SDE-2 set) |
HackerRank / InterviewBit / CodeStudio have no public API. GeeksforGeeks has no official API, so its ingester is best-effort and fails gracefully to the curated GfG article links. Company tags / frequency / "last asked" are premium-gated everywhere, hence the curated overlay.
Beyond DSA, the dataset covers HLD (news feed, chat, distributed cache,
autocomplete, payments ledger), LLD (elevator, vending machine, Splitwise,
BookMyShow, logging), and AI/ML (bias-variance, regularization,
precision/recall, gradient descent, backprop, transformers, RAG chatbot,
recommendation & fraud-detection system design). Add more by editing any
data/curated_*.json file β the loader merges them all.
If you see CERTIFICATE_VERIFY_FAILED errors when running /api/ingest/run:
Option 1 (recommended): Point to your system's CA bundle
# Linux/macOS
export SSL_CERT_FILE=/etc/ssl/certs/ca-certificates.crt
# or wherever your corporate CA bundle lives
# Windows
set SSL_CERT_FILE=C:\path\to\ca-bundle.crtOption 2 (dev only): Disable SSL verification
# Linux/macOS
export INGEST_SSL_VERIFY=false
# Windows (PowerShell)
$env:INGEST_SSL_VERIFY="false"
# Windows (Command Prompt)
set INGEST_SSL_VERIFY=falseThen restart uvicorn. Not recommended for production.
If pip install fails with build errors:
- Upgrade pip/setuptools:
pip install --upgrade pip setuptools wheel - Use pre-built wheels: Most packages ship wheels for Python 3.9β3.13. If you're on 3.14+, some packages may need source builds (requires Rust/C++ compilers).
- Fallback: Use Python 3.11 or 3.12 (most stable ecosystem support).
If :8000 or :5173 are taken, change them:
# Backend (choose any port)
python -m uvicorn app.main:app --reload --port 8001
# Frontend: edit frontend/vite.config.ts
server: { port: 5174, proxy: { '/api': 'http://localhost:8001' } }SQLite doesn't handle high concurrency well. If you see database is locked:
- Only run one backend instance at a time
- For production, consider PostgreSQL (change
database.pyconnection string)
ββββββββββββββββββββββββββββββ βββββββββββββββββββββββββββββββββββββββββ
β React SPA (Vite, :5173) β /api β FastAPI (:8000) β
β Questions Β· Analytics Β· ββββββββΊ β routers/ questions, analytics, β
β Roadmap Β· AI Recommender β proxy β roadmap, recommend, ingest β
β dark/light Β· CSV/PDF β β services/ recommend (ranking engine) β
ββββββββββββββββββββββββββββββ β ingest/ codeforces, leetcode, seed, β
β classify (DSA taxonomy) β
β models / schemas β SQLite β
βββββββββββββββββββββββββββββββββββββββββ
questions
id, external_id, source, title, slug, url, description, difficulty, topic, subtopic, tags(JSON), ac_rate, cf_rating, popularity, is_blind75, is_neetcode150, similar_ids(JSON), time_complexity, space_complexity, solution_hint, created_at, updated_at β unique(source,external_id).
company_questions (curated overlay, N per question)
id, question_idβquestions, company, role, experience_level, interview_type, frequency, frequency_score, last_asked.
user_progress (1:1 with question)
id, question_idβquestions, status(todo|attempted|solved), bookmarked, notes, updated_at.
ingest/classify.py maps raw source tags onto the requested canonical taxonomy
(Arrays, Strings, Hashing, Sliding Window, Two Pointers, Stack, Queue, Linked
List, Heap/PQ, Trees, BST, Graphs, Backtracking, DP, Greedy, Bit Manipulation,
Binary Search, Recursion, System Design, LLD, OOP) and derives a primary topic
- subtopic.
Weighted score per question for a (company, role, experience) context:
| Factor | Weight |
|---|---|
| Company frequency | 40% |
| Recent interview trend (last-asked recency) | 20% |
| Difficulty fit (Medium-preferred for SDE-2) | 15% |
| Blind75 / NeetCode + popularity signal | 15% |
| DSA-pattern coverage (diversity bonus) | 10% |
Also powers weak-areas detection and the 6-week study plan.
| Method | Path | Purpose |
|---|---|---|
| GET | /api/health |
health check |
| GET | /api/filters |
dropdown options (companies, roles, topics, β¦) |
| GET | /api/questions |
filtered + sorted + paginated table rows |
| GET | /api/questions/{id} |
full question detail (companies, similar, complexity) |
| PATCH | /api/questions/{id}/progress |
set status / bookmark / notes |
| GET | /api/analytics |
totals, difficulty & progress distributions, readiness |
| GET | /api/roadmap |
must-do, frequently-asked, Blind75/NeetCode coverage, SD/LLD |
| GET | /api/recommendations |
ranked Top-N with score breakdown |
| GET | /api/weak-areas |
topics to focus on |
| GET | /api/study-plan |
balanced weekly plan |
| POST | /api/ingest/run |
fetch LeetCode (paginated) + Codeforces + GeeksforGeeks, then apply curated overlay (params: leetcode_limit, codeforces_limit, gfg_limit) |
| POST | /api/ingest/seed-only |
apply curated overlay only (offline) |
/api/questions filters: company, role, experience, interview_type, topic, difficulty, source, frequency, last_asked_after, search, bookmarked, sort_by, sort_dir, skip, limit.
- Search & filter β company, role, experience, type, topic, difficulty, source, frequency, last-asked, bookmarked (defaults to American Express Β· SDE 2).
- Questions table β sortable columns, inline status cycling & bookmarking, Blind75/NeetCode badges, source & frequency badges, pagination.
- Question detail drawer β statement link, companies-asked table, complexity, hint, tags, similar questions, discussion + video resources.
- Analytics β totals, Easy/Medium/Hard donut, progress tracker, most-asked topics, company-wise frequency, source split, readiness gauge.
- Roadmap β Must-Do, Frequently-Asked, Company-Tagged, Blind75 & NeetCode coverage bars, System Design & LLD tracks.
- AI Recommendations β ranked Top-50 with per-factor score breakdown, weak areas, and a 6-week study plan.
- UX β dark/light theme, responsive layout, Export to Excel (CSV) & PDF (print), bookmarks, progress tracking.
Contributions are welcome! Here's how you can help:
- Add more curated questions: Edit
backend/app/data/curated_*.json - Improve the ranking algorithm: Modify
backend/app/services/recommend.py - Add new data sources: Create ingesters in
backend/app/ingest/ - Enhance the UI: Improve components in
frontend/src/components/ - Report bugs: Open an issue on GitHub
- Submit PRs: Fork, create a feature branch, and submit a pull request
# Backend type checking
cd backend && python -m mypy app/
# Frontend type checking
cd frontend && npx tsc --noEmit
# Frontend build
cd frontend && npm run buildMIT License - see <ref_file file="C:/One/interview-prep-dashboard/LICENSE" /> for details.
- Data Sources: LeetCode, Codeforces, GeeksforGeeks (public APIs)
- Inspiration: Blind75, NeetCode150, Grind75
- Community: Thanks to all contributors and users!
- Documentation: <ref_file file="C:/One/interview-prep-dashboard/SETUP.md" /> for detailed setup
- Issues: Open an issue on GitHub
- API Docs: http://127.0.0.1:8000/docs (when backend is running)
Made with β€οΈ for software engineers preparing for their dream job