Skip to content

Repository files navigation

leet track

A multi-platform competitive-programming dashboard that tracks your LeetCode, Codeforces, and CodeChef profiles in one place, with a head-to-head Compare mode.

All platforms overview

Features

All platforms

  • Summary strip: total solved, combined rating, global active streak (any platform counts), contests this month.
  • One card per platform; each platform connects with its own handle, so usernames can differ per site.
  • Rating progression chart overlaying all three platforms, solved-by-platform donut, and upcoming contests merged from all three sites with one-click Google Calendar reminders.

LeetCode

Platform-scoped tiles and cards, plus a deep dive: submission-activity heatmap with all-time streaks, difficulty analysis against the full question bank, language breakdown, contest-rating history, and practice recommendations.

LeetCode tab

Codeforces and CodeChef

Every card scopes to the active platform — its tiles, a single-series rating chart, a highlighted donut segment, and only that platform's upcoming contests.

Codeforces tab

CodeChef tab

Compare

Enter any public LeetCode username for a head-to-head, then link the rival's Codeforces/CodeChef handles to compare across platforms:

  • Versus header with a live "metrics won" scoreline.
  • Platform switcher: Combined / LeetCode / Codeforces / CodeChef.
  • Head-to-head diverging bars (solved, ratings, streaks, acceptance, contests, percentile).
  • Topic-strengths radar from LeetCode tag stats (top 6 topics by combined solved, normalized per axis).
  • Breakdown card per platform: LeetCode difficulty split, Codeforces solved-by-problem-rating buckets (under 1400 / 1400–1900 / over 1900), CodeChef contests-by-division.
  • Dual rating timeline (last 12 months, all-time fallback) with a computed "gap closed" insight.
  • Recently-compared rivals for one-click rematches.

Stack

Layer Tech
Frontend Vite · React 18 · TypeScript · MUI v6
Backend Express 4 (TypeScript, tsx watch)
Data LeetCode public GraphQL · Codeforces REST API · CodeChef profile parsing

There is no database. Every stat is fetched live from the platform APIs and held in an in-memory cache, so the app runs straight from a clone.

Getting started

Prerequisites

  • Node.js 20+

Setup

npm install
npm run dev        # Express on :3001 + Vite on :5173 (proxied /api)

Open http://localhost:5173 and connect your handles on the All platforms tab.

No configuration is required. The API port defaults to 3001; set PORT in a .env if you need a different one.

API

Routes are platform-first, so every URL reads as platform → user → action (e.g. POST /api/leetcode/alice/sync):

Method Route Purpose
GET /api/leetcode/:handle LeetCode stats payload (cached)
POST /api/leetcode/:handle/sync Force a refetch, return fresh stats
GET /api/codeforces/:handle Codeforces stats payload (cached)
POST /api/codeforces/:handle/sync Force a refetch
GET /api/codechef/:handle CodeChef stats payload (cached)
POST /api/codechef/:handle/sync Force a refetch
GET /api/recommendations Shuffled practice picks
GET /api/contests/upcoming Upcoming contests, all platforms (10-min cache)

How the data works

  • LeetCode — public GraphQL, no auth needed for public profiles. The default calendar only covers the rolling year, so a read walks every active year for true all-time streaks. Those calls are sequential on purpose; a parallel burst trips LeetCode's rate limiting.
  • Codeforces — official REST API (user.info, user.rating, user.status). Problem-rating buckets are computed from each first-AC submission. Submissions are capped at the 10,000 most recent, so the heatmap of a very heavy account won't reach all the way back.
  • CodeChef — no official API, so the profile page is parsed directly. This is brittle by nature: if CodeChef redesigns, the regexes in server/codechef.ts need a refresh. The page exposes no per-day submission data, so CodeChef has no heatmap or streak.
  • Nothing is persisted. Each (platform, handle) pair is cached in memory for 10 minutes and re-fetched on demand, which is why handles can differ per site for both your own profile and compare rivals.

Project structure

server/          Express API, one module per platform + in-memory cache
src/
  components/    Bento cards (heatmap, difficulty, contest chart, …)
  views/         AllPlatformsView · LeetCodeView (deep dive) · CompareView
  theme.ts       Design tokens + MUI theme
docs/screenshots Screenshots used in this README

About

Coding Profile Analysis

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages