A monorepo project that tracks your NeetCode progress and lets you compare with friends.
extension/: Chrome extension that scrapes your NeetCode practice page and syncs progress to Supabase.web-app/: Next.js dashboard to view your own progress and search by friend tag.
If the web app is already deployed:
- Open the deployed app URL (
neetcode-tracker-nu.vercel.app). - Make sure the developer options are turned on in
chrome://extensions. - Load the extension locally (Chrome →
chrome://extensions→ Load unpacked → selectextension/). - Open
https://neetcode.io/practice, set your tag in the extension popup, and click Sync Now. - Go to the deployed dashboard and search your tag.
You do not need to run the Next.js app locally to use the deployed version.
git clone <your-repo-url>
cd "Neetcode Progress tracker"
cd web-app
npm installCopy placeholders and fill real values:
web-app/.env.example→web-app/.env.localextension/.config.example.js→extension/config.js
Required keys:
# web-app/.env.local
NEXT_PUBLIC_SUPABASE_URL=https://YOUR-PROJECT-REF.supabase.co
NEXT_PUBLIC_SUPABASE_ANON_KEY=YOUR_SUPABASE_ANON_KEY// extension/config.js
const NEETCODE_TRACKER_CONFIG = {
SUPABASE_URL: "https://YOUR-PROJECT-REF.supabase.co",
SUPABASE_ANON_KEY: "YOUR_SUPABASE_ANON_KEY",
};Run this in Supabase SQL editor:
create table if not exists public.user_progress (
user_tag text primary key,
progress jsonb not null default '{}'::jsonb,
updated_at timestamptz not null default now()
);
alter table public.user_progress enable row level security;
drop policy if exists "public_select_user_progress" on public.user_progress;
create policy "public_select_user_progress"
on public.user_progress
for select
to anon, authenticated
using (true);
drop policy if exists "public_insert_user_progress" on public.user_progress;
create policy "public_insert_user_progress"
on public.user_progress
for insert
to anon, authenticated
with check (char_length(trim(user_tag)) > 0);
drop policy if exists "public_update_user_progress" on public.user_progress;
create policy "public_update_user_progress"
on public.user_progress
for update
to anon, authenticated
using (true)
with check (char_length(trim(user_tag)) > 0);cd web-app
npm run devOpen http://localhost:3000.
- Open
chrome://extensions - Enable Developer mode
- Click Load unpacked
- Select the
extension/folder
- You open
https://neetcode.io/practice. - Extension content script reads accordion sections (
app-accordion) from the Angular UI. - It extracts solved counts per topic (from label
X / Y, with fallback DOM counting). - Extension reads
user_tagfromchrome.storage.local. - Extension upserts
{ user_tag, progress, updated_at }to Supabaseuser_progress. - Dashboard (
web-app) fetchesprogressbyuser_tagand renders animated comparison cards.
- Set tag in extension popup (for example,
abhinav). - Click Sync Now on NeetCode practice page.
- Open dashboard and view:
- My Tag · My Progress (from localStorage tag)
- Friend progress (search by tag)
- The dashboard currently uses a fixed topic order and totals map matching this repo’s current NeetCode setup.
- If NeetCode changes topic labels, update aliases/mapping in
web-app/app/page.tsxand scraper logic inextension/scripts/content.js.