Online Judge data analysis and problem recommendation tool for competitive programmers. Currently supports Codeforces, with AtCoder integration planned.
- Rating Analysis — rating trends, peaks, volatility, and recent performance over time
- Tag Analysis — tag frequency, solve rate, and average difficulty per algorithmic topic
- Strengths & Weaknesses — proficiency scoring per tag, identifying mastered vs. underdeveloped areas
- Visualization — interactive charts (rating history line chart, tag distribution bar chart, strength/weakness radar chart)
- Problem Recommendations — tag-based recommendation engine with rating-range matching and diversity optimization
- AI Coach (planned) — AI-powered personalized analysis and training advice
| Layer | Technology |
|---|---|
| Frontend | React 18, TypeScript, Vite, Recharts |
| Backend | FastAPI (Python), httpx |
| Data Analysis | Pandas |
| Data Source | Codeforces API (public) |
- Python 3.10+
- Node.js 18+
cd backend
pip install -r requirements.txt
python -m uvicorn main:app --reload --port 8000The API server starts at http://localhost:8000. Interactive docs available at http://localhost:8000/docs.
cd frontend
npm install
npm run devThe dev server starts at http://localhost:5173 with API requests proxied to the backend.
| Method | Path | Description |
|---|---|---|
GET |
/ |
Health check |
GET |
/api/user/{handle} |
User info + rating history |
GET |
/api/user/{handle}/submissions |
Submission history (paginated) |
GET |
/api/user/{handle}/analysis |
Combined analysis (rating + tags + strengths) |
GET |
/api/user/{handle}/recommend |
Problem recommendations |
GET |
/api/contests |
Contest list |
GET |
/api/problemset |
Problemset search |
| Phase | Feature | Status |
|---|---|---|
| Phase 1 | Codeforces API integration | Done |
| Phase 2 | Data analysis engine | Done |
| Phase 3 | Visualization (React + Recharts) | Done |
| Phase 4 | Problem recommendation system | Done |
| Phase 5 | AtCoder API integration | Blocked — upstream API (Kenkoooo) returns 403; exploring Playwright-based alternative |
| Phase 6 | AtCoder analysis & recommendations | Pending Phase 5 |
| Phase 7 | AI Coach | Planned |
| Phase 8 | Production deployment | Planned |
AtCoder's official site has no public API. The Kenkoooo API (a widely-used community data source) has blocked external access. We are evaluating Playwright-based scraping of the AtCoder official site or AtCoder Problems frontend as a fallback.
backend/
├── main.py # FastAPI entry point
├── api/ # Route handlers
├── analysis/ # Data analysis modules (rating, tags, strengths)
├── recommender/ # Recommendation engine
├── services/ # External API clients
└── models/ # Data models (placeholder)
frontend/
├── src/
│ ├── components/ # Reusable UI components
│ ├── charts/ # Recharts-based chart components
│ ├── pages/ # Page-level components
│ ├── App.tsx # Root component
│ └── types.ts # TypeScript type definitions
└── vite.config.ts # Vite build config + API proxy
- File an issue to discuss proposed changes before starting work
- Follow the existing module structure — API handlers in
backend/api/, analysis logic inbackend/analysis/ - Do not modify existing API signatures without prior discussion
- Use TypeScript strict mode for frontend changes
- Match the existing dark theme and responsive layout conventions for UI work
MIT