Lexiverse
Lexiverse - AI contextual reading engine for English learners. Your next article is your next review.
翻译准备中
企业 LeetCode 分析平台,面向 V.S.B. 工程学院技术校区。集中式 LeetCode 性能跟踪,面向学生和教职工。
AI 翻译
Enterprise LeetCode Analytics Platform for V.S.B. College of Engineering Technical Campus. Centralised LeetCode performance tracking for students and staff.
教育TypeScript · JavaScriptGitHub @abish05在线运营者未确认
试用过了吗? 点一下就好,无需登录。
尚未检测到更新。GitHub 发布版本后会显示在这里。
正在加载完整 README。 以下为已保存的摘录。
LeetTrack AI
Enterprise LeetCode Analytics Platform
V.S.B. College of Engineering Technical Campus · Coimbatore – 642109
A centralised dashboard that tracks the LeetCode performance of every student
and staff member in the college.
Only the administrator signs in. Students and staff never create accounts —
the admin uploads one spreadsheet, and a scheduled job reads each person's
public LeetCode profile once a day and stores a permanent daily snapshot.
Every report, chart and leaderboard is built from those snapshots.查看完整 README ↗A centralised dashboard that tracks the LeetCode performance of every student and staff member in the college.
Only the administrator signs in. Students and staff never create accounts — the admin uploads one spreadsheet, and a scheduled job reads each person's public LeetCode profile once a day and stores a permanent daily snapshot. Every report, chart and leaderboard is built from those snapshots.
Runs entirely on free tiers: Supabase Postgres + Vercel Hobby + GitHub Actions.
Dashboard — 12 KPI tiles (total users, active today, solved today, highest streak, averages by difficulty, weekly/monthly growth with trend arrows), a 30-day activity chart, a college-wide difficulty donut, top-performer / most-active / longest-streak highlight cards, and a department comparison.
Users — searchable, sortable, filterable roster with inline add/edit/delete, per-user "refresh from LeetCode", and Excel/CSV/PDF export honouring the active filters.
Individual profile — identity card with college and department rank, seven period counters (today / week / month / year / streak / best streak / contests), plus daily-activity, cumulative-progress, streak-history and global-ranking charts.
Daily Report — a dated snapshot of every profile. Pick any past date and the table reproduces that day exactly, with page totals and print support.
Leaderboard — daily / weekly / monthly / all-time, with a podium for the top three. Weekly and monthly are summed from snapshots, not guessed.
Split Report — how the college distributes across problems-solved bands (0, 1–10, 11–25, 26–50, 51–100, 101–200, 201–500, 501–1000, 1000+). Click a band to list exactly who is in it, and export just that band.
Department & Staff analytics — per-department totals, averages, streaks, active-today share, weekly volume, difficulty mix, and top / most-active / inactive callouts. Staff get a dedicated page separate from students.
Bulk import — drag-and-drop .xlsx / .xls / .csv with fuzzy header matching ("Reg No" and "Register Number" both work), row-level validation, and an import summary listing every skipped row with the reason.
Notifications — generated after each sync: new highest streak, top daily solver, inactive users, invalid profiles, and username changes.
Settings — sync schedule (with the exact UTC cron expression to paste into the workflow), inactivity threshold, sync history, and JSON backup/restore.
Plus: dark mode, keyboard search (⌘K), responsive down to mobile, and the college crest throughout.
Administrator (single account)
│
Next.js App Router UI
│
Next.js API routes
│
Prisma ── PostgreSQL
│
┌─────────────────────┴─────────────────────┐
│ │
users (current values) daily_snapshots (history)
│ │
└─────────────────────┬─────────────────────┘
│
GitHub Actions · once per day
│
LeetCode public GraphQL endpoint
Two levels of storage, deliberately:
users holds each person's latest known figures. Every list, filter and
leaderboard reads from here, so those pages need no joins.daily_snapshots holds one immutable row per user per day. Every
historical report, trend chart and weekly/monthly total is derived from here.todaySolved is computed as the difference between today's cumulative total and
the most recent previous snapshot — LeetCode does not expose "problems solved
today" directly.
| Layer | Choice |
|---|---|
| Framework | Next.js 15 (App Router) · React 19 · TypeScript |
| Styling | Tailwind CSS v4 + hand-rolled shadcn-style components |
| Charts | Recharts |
| Database | PostgreSQL (Supabase free tier) |
| ORM | Prisma 6 |
| Auth | Auth.js (NextAuth v5), credentials, admin only |
| Spreadsheets | SheetJS (xlsx) |
| PDF export | jsPDF + autoTable |
| Scheduler | GitHub Actions cron |
| Hosting | Vercel Hobby |
No paid service is required at any point.
Prerequisites: Node.js 20+ and a PostgreSQL database (local or Supabase).
git clone <your-repo-url> leettrack-ai
cd leettrack-ai
npm install
Create your environment file:
cp .env.example .env
Fill in DATABASE_URL, then generate the two secrets:
openssl rand -base64 32 # → AUTH_SECRET
openssl rand -hex 32 # → CRON_SECRET
Set ADMIN_EMAIL and ADMIN_PASSWORD to the credentials you want, then:
npm run db:deploy # apply migrations
npm run db:seed # create the administrator account
npm run dev
Open http://localhost:3000, sign in, and upload your spreadsheet at
Bulk Import. A ready-made example lives at
docs/sample-import.xlsx.
Then run one sync to populate the statistics:
npm run sync
以上为 README 的开头部分。其余内容请阅读原文。 查看完整 README ↗