AI-powered LeetCode profile roaster — in pure Indian tech-bro Hinglish.
Enter any LeetCode username and get a brutally funny, data-driven roast of their profile stats — written like a classic Indian engineering senior at a chai tapri.
LeetCheck fetches your real LeetCode profile data and feeds it to an AI model that roasts:
- Easy / Medium / Hard split — are you actually solving problems or just farming Two Sum?
- Submission count vs accepted — treating LeetCode like a debugging console?
- Contest rating & global ranking — scared of Sunday 8 AM contests?
- Submission streak & calendar — daily 1 easy problem for "green box ki kheti"?
- Badges — participation trophies galore?
The roast is delivered in authentic Hinglish, punchy bullet points, and ends with a Final Verdict.
LeetCheck/
├── backend/ # FastAPI Python backend
│ ├── app/
│ │ ├── api/
│ │ │ └── routes.py # GET /analyze/{username}
│ │ ├── services/
│ │ │ ├── leetcode.py # LeetCode GraphQL API client
│ │ │ └── llm.py # Groq LLM roast generation
│ │ └── main.py # FastAPI app + GET /roast/{username}
│ ├── pyproject.toml
│ └── .env # (not committed) GROQ_API_KEY
│
├── frontend/ # React + Vite frontend
│ ├── src/
│ │ ├── components/
│ │ │ ├── SearchBox.jsx
│ │ │ ├── ProfileHeader.jsx
│ │ │ ├── DifficultyStats.jsx
│ │ │ ├── SolvedProgress.jsx
│ │ │ ├── ContestStats.jsx
│ │ │ ├── SubmissionHeatmap.jsx
│ │ │ ├── BadgeSection.jsx
│ │ │ ├── RoastCard.jsx
│ │ │ ├── LoadingState.jsx
│ │ │ └── InteractiveBackground.jsx
│ │ ├── services/
│ │ │ └── api.js # Calls /analyze and /roast endpoints
│ │ ├── App.jsx
│ │ └── main.jsx
│ ├── package.json
│ └── vite.config.js
│
├── .gitignore
└── README.md
| Layer | Technology |
|---|---|
| Frontend | React 19, Vite 8, Lucide React |
| Backend | FastAPI, Uvicorn, Python 3.12+ |
| AI / LLM | Groq API (openai/gpt-oss-120b) |
| Data Source | LeetCode GraphQL API |
| Package Manager | uv (backend), npm (frontend) |
| Rate Limiting | SlowAPI |
- Python 3.12+
- Node.js 18+
- A Groq API key (free tier available)
cd backend
# Install dependencies with uv
pip install uv # if not already installed
uv sync
# Create your .env file
echo GROQ_API_KEY=your_key_here > .env
# Start the server
uvicorn app.main:app --reload --port 8000The API will be live at http://localhost:8000.
API Endpoints:
| Method | Endpoint | Description |
|---|---|---|
GET |
/ |
Health check |
GET |
/health |
Health status |
GET |
/analyze/{username} |
Fetch LeetCode profile data |
GET |
/roast/{username} |
Fetch profile + generate AI roast |
cd frontend
npm install
# Optional: create a .env.local to point at a remote backend
# VITE_API_BASE_URL=http://localhost:8000
npm run devThe app will open at http://localhost:5173.
By default, the frontend calls the backend at the same origin (no
.env.localneeded for local dev when the backend is on port 8000 via the Vite proxy or you setVITE_API_BASE_URL).
Backend — create backend/.env:
GROQ_API_KEY=your_groq_api_key_hereFrontend (optional) — create frontend/.env.local:
VITE_API_BASE_URL=http://localhost:8000
⚠️ Never commit.envfiles. They are excluded by.gitignore.
- 🔍 Username search — enter any public LeetCode handle
- 📊 Profile stats — difficulty breakdown, solved counts, submission calendar heatmap
- 🏆 Contest data — rating, global rank, contests attended
- 🎖️ Badges — all earned badges displayed
- 🤖 AI Roast — savage, funny Hinglish roast generated by Groq LLM
- ✨ Interactive background — animated canvas background
- ⏳ Loading states — smooth animated loading screen
Built with chai, sarcasm, and one too many LeetCode sessions. ☕