Prep Tracker

Required first. The pattern moves on once all five are solved.

Optional

Activity

System design day   Less More

Daily log

By pattern

How it works

One pattern a day: 5 required, 5 optional. Click Solved when you solve one. The pattern moves on once all 5 required are solved.

Everything you attempt joins the revision list the next day. Solve it again and press +1. 🌱 🌿 🪴 daily for 5 revisions, then 🌳 weekly. Once weekly, Know it cold retires it as ⭐ Perfected.

Skip a due revision 2 days running and it slips: it goes to the top of the list and starts the climb again.

Questions done before the switch count as Solved and join revision after their first +1.

Tracks

Log

⌘ + Enter also adds it

Free path to SWE, ML and AI engineer roles. Core steps are the minimum; a capstone with measured results beats certificates.

Learning path

Reference

Skills employers wantDemand, free coverage and your progress
All resources
Good to knowCosts, certificates, resume tips

Claude Code practice needs a paid Claude plan or API credits. The API course and notebooks make paid API calls, cheap with small models.

DeepLearning.AI videos are free; graded labs and certificates need Pro ($25 to $30 a month). Hugging Face certificates are free. Microsoft samples may need Azure.

Claude Certified Architect exam is paid ($125) and may need a partner organisation. Optional.

On the resume, put agents, RAG, MCP and evals next to measured results, not in a bare skills list. Forward-deployed and solutions engineer roles at AI-native companies fit a full-stack SWE profile.

The Anthropic catalog changes fast. Checked October 2026.

What this is

A personal LeetCode practice tracker for Hrishikesh (Rishi) Verma. One HTML file, no server, no framework, no build step. It was written in September 2026 in a conversation with Claude and reworked in October 2026. Rishi owns it. It exists so Rishi can work through a fixed list of LeetCode questions pattern by pattern while preparing for software engineering interviews.

Why it was made

Rishi had already solved about 400 LeetCode problems. The remaining gap was not volume, it was pattern fluency: seeing a new problem and knowing which technique it belongs to, then coding it cleanly. So the tracker is built around patterns. The list is 35 pattern blocks of 10 questions (5 required, 5 optional) plus a mixed block of 40 where the pattern is hidden: 390 questions, none of them in Rishi's solved list at the time they were added.

The method the tracker enforces

  • One pattern a day. Today shows the pattern name, its 5 required questions and its 5 optional ones. The pattern stays until all 5 required questions have a status, so a missed day never skips a pattern.
  • Required questions 1 to 3 are for studying the solution and building a template, 4 and 5 are attempted cold. Questions 6 to 10 are optional extra practice.
  • The mixed block comes last, 5 required a day. For each one Rishi types his pattern guess before revealing the real one.
  • GregMat-style revision: every question attempted shows up in "Revise today" from the next day on. Rishi solves it again and presses +1. A question is revised daily until its climb reaches 5, then weekly. Only a weekly question can be retired with "Know it cold" (shown as Perfected; "Bring back" undoes it). If a due revision is skipped for 2 days running, the question slips and its climb restarts at 0; the total count is kept. Pressing +1 on a slipped question marks it Solved again. Plant icons show the stage: seedling, herb, potted plant (daily), tree (weekly), star (perfected).

Status and revision counter

  • Each question is either Solved or not. There is one Solved button (click again to undo); no Unsolved button and no dropdown. This was Rishi's explicit choice: keep it binary.
  • Each solved question has a revision counter starting at 0. +1 records one revision today and drops it from today's list; the minus undoes a mistaken click.
  • A question that slipped (missed revision) is stored with status "unsolved" so it stays in revision; it is shown as "slipped" in red and listed first. It still counts as done for moving to the next pattern.

Before October 2026 there were three labels (Solved, Revisit, Coding issue) and a 2/7/21 day retry cycle. Both were removed. Any old label now reads as Solved. Questions attempted before the switch are listed in v2.legacy and only join daily revision after their first +1, because Rishi had forgotten them. Do not bring the Learned label or the retry cycle back.

How the page is organised

  • The top bar has three sections, LeetCode, System Design and AI Fluency, plus About. LeetCode has its own sub-tabs below it.
  • Today: today's pattern with required and optional tiles, then the revision list.
  • All questions: every pattern as a collapsible block with a progress bar, search, filters (including Never revised), and per question a status dropdown, revision counter and note.
  • Header: the app is titled Prep Tracker; LeetCode, System Design and AI Fluency each open with three summary tiles in the same style.
  • Progress: overall percentage, revision totals, streak, activity heatmap (new plus revised), daily log, per-pattern bars.
  • System Design: a separate tracker with its own storage key sd-tracker-v1. Three tracks (collapsible, with a progress bar each) with a status dropdown per item, summary tiles and an Up next bar on top (the Telusko one-shot video in 10 units, Alex Xu Vol 1 in 16 chapters, Alex Xu Vol 2 in 13 chapters), and a free-text log: Rishi writes what he did, presses Log, and the entry becomes a dated card on a timeline. Nothing in the log is pre-written; gaps between days are shown as gaps. The log is deliberately free text with no tagging.
  • AI Fluency: built from Rishi's research doc on a free learning path to SWE, ML and AI engineer roles (October 2026). Own storage key ai-tracker-v1: status (resource id to 0 not started, 1 in progress, 2 completed) and cap (capstone checklist item to true), build (step key to true when its build is done; steps with a build only count as done once it is ticked) and notes (step key to free text). Step keys (k in AI_PATH) are permanent. Hours left come from each step's hrs. Skills, All resources and Good to know start collapsed to keep the page calm; AI_LOW marks low-priority resources. Rishi gave Claude a free hand on this tab's design (October 2026). Sections: Next up (first unfinished step), Learning path (11 steps in AI_PATH, core steps 1, 2, 4, 5, 7, 11; a step is done when its required resources are completed, "a|b" means either, "id?" is optional), Skills employers want (AI_SKILLS: demand tier, free coverage, progress from mapped resources) plus gaps (AI_GAPS), All resources (AI_LIB, grouped by provider), and Good to know. Resource ids are permanent keys; some are old Skilljar slugs whose url now points at academy.claude.com. To add courses later (RAG, other providers), add items to AI_LIB and reference them from steps or skills. Audience-specific Academy courses (educators, students, nonprofits, small business, creative work, Cowork, enterprise rollout) are left out on purpose.
  • About: this page.

Where the data lives and how to keep it safe

Progress is not stored in this file. It is stored in the browser's localStorage under three keys: lc-tracker-v1 for LeetCode, sd-tracker-v1 for System Design and ai-tracker-v1 for AI Fluency. Export and Import handle all three together. Replacing the HTML file with a newer version keeps all progress as long as that key and the data shape survive. Rules for anyone editing this file:

  • Never rename the storage key.
  • Never rename or delete a field inside the saved object. Add new fields instead.
  • If a change in data shape is unavoidable, add a conversion step inside the migrate() function that runs on load, so old data is transformed rather than lost.
  • Keep Export and Import working. They are the user's safety net.
  • Question ids are the keys for all saved data. Adding questions is safe; changing an existing id is not.

Saved fields. Current: st (question id to status, first attempt date f and last change date), rc (question id to revision count n, dates h, last, climb k, next due, undo stack u, last lapse lap, retired date ret), lapsedOn (date the daily lapse check last ran), rlog (date to revisions that day), log (date to questions first attempted that day), day (today's pattern and question ids), v2 (switch date and legacy ids), notes, guess. Old and kept untouched: labels (read as Solved when no st entry), sched, rv.

How the code is laid out

Everything is in one script block at the bottom of the file. PATTERNS holds the question list as pattern name plus an array of [id, title, difficulty, optional hidden pattern hint]; in each normal pattern the first 5 are required and the next 5 optional. st() reads status, setStatus() writes it. ensureToday() picks the day's pattern. revUp(), revDown(), lapse(), retire(), inPool() and revDue() run revision. render() redraws everything from state after each change. LeetCode links are generated from the title by slugifying it.

Design intent

Colorful and friendly, one page, quick to act on. Each pattern has its own hue so tiles are recognisable at a glance. Solved is green, slipped red, revision purple, used consistently everywhere. Keep the page compact. Rishi prefers short text and dislikes being overwhelmed, so avoid adding walls of explanation to the interface itself.

Things to keep in mind when changing it

  • Do not use em dashes anywhere in the text.
  • Keep it a single HTML file with no external dependencies other than the Google Font, which has a system fallback.
  • Do not add browser storage other than the three existing localStorage keys.
  • Any new feature should serve pattern fluency or honest self-assessment. Cosmetic additions are low priority.