DEV Community

Cover image for I Got Tired of Fake LeetCode Trackers, So I Built One That Actually Updates
TROJAN
TROJAN

Posted on

I Got Tired of Fake LeetCode Trackers, So I Built One That Actually Updates

Most LeetCode trackers fail at the one thing that matters most: trust.

If I solve a problem, I expect the app to:

  • mark it as solved
  • remove it from recommendations
  • update my progress immediately

No refresh. No manual ticking. No lies.

That frustration is exactly why I built GrindGuard 2.0.

Live app: https://grindguard.vercel.app/
GitHub repo: https://github.com/TROJANmocX/GrindGuard-2.0


What is GrindGuard 2.0?

GrindGuard 2.0 is a LeetCode accountability and focus system that turns your accepted submissions into:

  • Automatic progress tracking
  • Smart daily missions
  • Topic-wise analytics
  • Zero manual work

If LeetCode says you solved it, GrindGuard believes it. Period.


Core Philosophy

One source of truth. Everything else is derived.

No duplicated state.
No stale UI.
No “why didn’t this update?” moments.


Key Features

1. Automatic Progress Tracking

Solved problems are fetched directly from LeetCode accepted submissions and normalized into a single solvedProblems state.

If a problem is solved:

  • it is instantly marked as done
  • it never appears again in focus or suggestions

No manual input required.


2. No Repeat Questions

Daily Mission and recommendations strictly filter out solved problems using a normalized identifier (slug).

Once a question is done, it’s gone for good.


3. Real-Time Progress Analytics

Progress bars recompute every time solved data changes.

  • Topic-wise completion
  • Smooth count-up animations
  • Visual feedback that feels alive

If bars don’t move, users don’t trust the app. This fixes that.


4. Smart Focus System

Instead of showing everything, GrindGuard answers one question:

“What should I solve next?”

The algorithm:

  • Detects weakest topics (<40% completion)
  • Selects high-impact unsolved problems
  • Uses seeded randomness so missions stay consistent for 24 hours

No noise. Just focus.


5. One-Click Sync

A single Sync button:

  • fetches LeetCode data
  • updates progress, focus, and analytics together
  • shows freshness (“Synced 2 mins ago”)

Explicit feedback builds trust.


6. Zero Manual Work

The happy path is fully automated.

Manual overrides exist only as a fallback — never as the primary flow.


Architecture Overview

GrindGuard uses a simple but strict data flow:

LeetCode API

fetchSolvedProblems()

Dashboard (single source of truth)

Derived UI

  • Progress
  • Daily Mission
  • Analytics

All components are reactive and render-only.
No component fetches data on its own.


Tech Stack

  • React 18 + TypeScript
  • Vite
  • TailwindCSS
  • Alfa LeetCode API (accepted submissions)
  • Striver SDE Sheet (curated problems)
  • LocalStorage fallback for resilience

What I Learned

  • Trust beats features
  • Reactive derivation beats stored state
  • If UI doesn’t update instantly, users assume it’s broken
  • One clear recommendation beats ten options

GrindGuard is not a dashboard. It’s a coach.


Try It Out

Live: https://grindguard.vercel.app/
Code: https://github.com/TROJANmocX/GrindGuard-2.0

If you’re grinding LeetCode and want accountability without friction,this one’s for you.

Happy grinding.

Top comments (2)

Collapse
 
mahirr profile image
Mayank Parashar

Love this idea Finally a LeetCode tracker that actually stays accurate instead of relying on manual updates. The real-time sync and single source of truth approach is smart, and the focus-first design keeps it motivating instead of overwhelming. Great work — excited to see how this evolves!

Collapse
 
bhavin-allinonetools profile image
Bhavin Sheth

This hits on a real pain point. Progress trackers that don’t update instantly destroy trust faster than missing features.

I really like the “one source of truth” approach — deriving everything from accepted submissions instead of storing duplicate state is such a solid design choice. The fact that solved problems disappear immediately from focus/recommendations is exactly how a tracker should behave.

Also love the idea of treating it like a coach, not a dashboard. One clear “what should I solve next?” beats a wall of stats any day.

Great work — this feels built by someone who actually grinds LeetCode, not just tracks it