βββββββ βββββββ βββββββ ββββββββββ βββββββββββ βββββββββββ
ββββββββ ββββββββββββββββ βββββββββββββββββββββββββββββββββββ
βββ βββββββββββββββββββββ ββββββ βββββββββ ββββββ ββββββ
βββ βββββββββββββββββββββββββββ βββββββββ ββββββ ββββββ
ββββββββββββ βββββββββ ββββββββββββββββββββββββββ βββββββββββ
βββββββ βββ βββββββββ ββββββββββββ βββββββββββ βββββββββββ
"The grind never stops. Every problem solved is a weapon forged."
- What is GRIND.EXE?
- Live Demo
- Features
- Screenshots
- Tech Stack
- How Data Storage Works
- Getting Started
- GitHub Token Setup
- Deploying to GitHub Pages
- Usage Guide
- Rank System
- Project Structure
- How to Update the Code
- Data Backup & Recovery
- Privacy & Security
- Roadmap
- Author
GRIND.EXE is a production-ready, single-file web application built to track your DSA (Data Structures & Algorithms) problem-solving journey and aptitude preparation β all synced automatically to your private GitHub Gist, meaning your progress is never lost, even across devices, browsers, and days.
Built as part of a DPIIT internship portfolio and personal development toolkit by a CS Engineering student and ML Engineer, GRIND.EXE is designed to:
- Make you feel the urgency to solve more problems every time you open it
- Keep your progress safe in the cloud (your GitHub account) with zero cost
- Work offline first with smart local caching, and sync when connected
- Give you data-driven insights on exactly where to improve
- Run anywhere β desktop, mobile, tablet β with zero installation
https://Deepayan-Thakur.github.io/grind-exe
Open the link, paste your GitHub Personal Access Token once, and you're ready to track your grind. Your data will persist forever in a private Gist under your own GitHub account.
- Add unlimited DSA problems with title, LeetCode URL, difficulty (Easy / Medium / Hard), and topic tag
- Click any problem card to open its LeetCode link directly in a new tab
- Click the checkbox to mark a problem as solved β triggers a particle burst animation
- Filter problems by difficulty or solved/unsolved status
- Search problems by title or topic tag in real time
- Delete any problem with confirmation
- Three dedicated categories: Logical Reasoning, Quantitative Aptitude, General Intelligence
- Same difficulty system (Easy / Medium / Hard) as DSA
- Per-category progress bars with live counters
- Search across all categories simultaneously
- All data saves to a private GitHub Gist in your account
- Auto-syncs after every action (debounced 1.8s to batch updates)
- Manual sync button in the settings panel
- Conflict-free merge: remote wins for solved status, local wins for new additions
- Offline-first: works from local cache when no internet, syncs when reconnected
- Animated donut chart β Easy / Medium / Hard breakdown of solved problems
- Aptitude breakdown β per-category progress bars
- Overall completion rate with motivational tier labels
- 28-day activity heatmap β visualises your daily grind history
- Personalised insights generated from your actual data
- Identifies weak areas: unattempted problem types, low completion rates
- Flags if you're ignoring aptitude entirely
- Streak warnings and encouragement
- Colour-coded severity: π’ Good / π‘ Warning / π΄ Danger
- Tracks your daily solving streak β increments when you solve at least one problem per day
- 7 rank tiers based on total problems solved:
NEWBIE β BEGINNER β INTERMEDIATE β ADVANCED β EXPERT β MASTER β LEGENDARY - Rank displayed prominently in the sidebar with dynamic colour
Every page load plays a 7-second animated story:
- Logo reveal with glitch effect and star field
- Grinder at desk β SVG illustration of a programmer coding
- Brain on fire β animated sparks and lightning bolts around the figure
- Victory stand β arms raised with energy rays
- Gold medal drop β
#1medal falls with animated confetti - Bubble wave transition β 4 expanding colour circles sweep into the app
- Works on all screen sizes: mobile, tablet, desktop
- Sidebar stacks above content on small screens
- Navigation tabs scroll horizontally on mobile
- Problem cards, analytics, and modals all adapt cleanly
| Intro Animation | Setup Screen | DSA Tracker |
|---|---|---|
| Cinematic 7s story | Two-panel GitHub connect | Problem cards with tags |
| Analytics | Improvement Radar | Mobile View |
|---|---|---|
| Donut + Heatmap | Personalised insights | Fully responsive |
Screenshots can be added by capturing the live site at
https://Deepayan-Thakur.github.io/grind-exe
| Layer | Technology | Why |
|---|---|---|
| UI | Pure HTML5 + CSS3 + Vanilla JS | Zero dependencies, fast load, no build step |
| Fonts | Google Fonts (Space Mono, Syne, JetBrains Mono) | Distinctive cyberpunk aesthetic |
| Storage | GitHub Gist API (REST) | Free, private, tied to your account |
| Hosting | GitHub Pages | Free, permanent, no backend |
| Auth | GitHub Personal Access Token (PAT) | Scoped to gist only β minimal permissions |
| Animations | CSS keyframes + SVG SMIL | Pure CSS/SVG, no animation library needed |
| Caching | Browser localStorage |
Offline-first, instant load |
Zero npm packages. Zero build tools. Zero backend servers. One HTML file.
Your Browser
β
βββ localStorage (cache) βββ instant load on every visit
β
βββ GitHub Gist API βββ cloud sync after every change
β
βββ Private Gist in YOUR GitHub account
βββ grind-exe-data.json (your progress)
- On page load β Load from
localStoragecache immediately (instant) - In background β Fetch latest data from your private Gist
- Merge strategy β Remote solved-status wins (handles multi-device edits); local new items are preserved
- On any change β Wait 1.8 seconds (debounce), then push to Gist
- On error β Save to
localStorageonly, show warning toast, retry next time
A Gist is like a mini-repository in your GitHub account for storing small files. GRIND.EXE creates one private Gist named grind-exe-data.json in your account. You can view it at https://gist.github.com/YOUR_USERNAME. Only you can see it.
Option A β Fork (recommended)
- Go to
https://github.com/Deepayan-Thakur/grind-exe - Click Fork (top right)
- Your copy is now at
https://github.com/YOUR_USERNAME/grind-exe - Enable GitHub Pages in your fork's Settings β Pages
Option B β Clone fresh
git clone https://github.com/Deepayan-Thakur/grind-exe.git
cd grind-exeOption C β Start from scratch (what we did)
# Create folder, add index.html manually, then:
git init
git add .
git commit -m "Initial commit: GRIND.EXE tracker"
git branch -M main
git remote add origin https://github.com/YOUR_USERNAME/grind-exe.git
git push -u origin main --forceThis is the one-time setup you do after opening the live site for the first time.
Open: https://github.com/settings/tokens/new
| Field | Value |
|---|---|
| Note | grind-exe |
| Expiration | No expiration |
| Scopes | β
gist only β nothing else |
Click Generate token β Copy the token starting with ghp_
β οΈ Save this token somewhere safe. GitHub shows it only once. If you lose it, generate a new one at the same URL.
Open your live site β paste the ghp_... token β click Connect & Start Grinding β
The app will:
- Verify your token with the GitHub API
- Search for an existing
grind-exe-data.jsonGist in your account - Load your previous data if it exists
- Create a new private Gist if it's your first time
- Go to github.com/new
- Name:
grind-exe - Visibility: Public (required for free GitHub Pages)
- Do not initialise with README
cd path/to/your/grind-exe/folder
git init
git add .
git commit -m "Initial commit: GRIND.EXE tracker"
git branch -M main
git remote add origin https://github.com/YOUR_USERNAME/grind-exe.git
git push -u origin main --force- Go to your repo on GitHub
- Click Settings tab
- In left sidebar β Pages
- Under Branch β select
main - Folder β
/ (root) - Click Save
Your site goes live at:
https://YOUR_USERNAME.github.io/grind-exe
GitHub will show a green banner in the Pages settings when it's ready.
- Go to the β DSA Problems tab
- Click + Add Problem
- Fill in:
- Title β e.g.
Two Sum - LeetCode URL β e.g.
https://leetcode.com/problems/two-sum/ - Difficulty β Easy / Medium / Hard
- Topic β e.g.
Arrays,DP,Binary Tree
- Title β e.g.
- Click Add β
- Problem appears instantly, auto-saved to GitHub
- Click the checkbox on the left of any problem card
- A particle burst animation fires from your click position
- The problem is marked with a green β and strikethrough
- Your streak counter increments if it's your first solve today
- Data saves to GitHub automatically
- Click anywhere on the problem card body (not the checkbox)
- The LeetCode URL opens in a new tab
- Or click the π link button on the right of the card
- Go to the π§ Aptitude tab
- Click + Add Question
- Select category: Logical Reasoning, Quantitative Aptitude, or General Intelligence
- Set difficulty and title
- Click Add β
- Go to the π Analytics tab
- View donut chart, aptitude breakdown, completion rate, 28-day heatmap
- The heatmap updates automatically as you solve problems each day
- Go to the π― Improve tab
- Insights are generated live from your current data
- Colour-coded: π’ strong area / π‘ needs work / π΄ urgent gap
- Updates every time you switch to this tab
- Click the β button in the top-right header
- View connected GitHub username, Gist ID, last sync time
- β» Sync Now β force a manual push + pull
- β¬ Export JSON Backup β download your full data as a
.jsonfile - Disconnect Account β removes token from browser (data stays safe in Gist)
| Rank | Problems Solved | Colour |
|---|---|---|
NEWBIE |
0 β 4 | Grey |
BEGINNER |
5 β 14 | π΄ Red |
INTERMEDIATE |
15 β 29 | π Orange |
ADVANCED |
30 β 59 | π’ Green |
EXPERT |
60 β 99 | π΅ Cyan |
MASTER |
100 β 199 | π£ Purple |
LEGENDARY |
200+ | π₯ Gold |
Total count includes both DSA and Aptitude problems solved.
grind-exe/
β
βββ index.html β The entire application (HTML + CSS + JS)
β
βββ README.md β This file
The entire app lives in a single index.html file. No node_modules, no package.json, no build process, no backend.
- β Zero build step β edit and push, done
- β Deploys instantly to any static host
- β No dependency vulnerabilities
- β Anyone can read the entire codebase in one scroll
- β Works by just opening the file locally in a browser
index.html
β
βββ <style>
β βββ CSS Variables (design tokens)
β βββ Cinematic Intro Animation styles
β βββ Setup Screen styles
β βββ App layout (header, nav, sidebar, content)
β βββ Component styles (cards, modal, analytics, improve)
β βββ Responsive breakpoints (720px, 900px, 600px)
β
βββ <body>
β βββ #introScreen β 7s cinematic story animation
β βββ #setupScreen β GitHub token connect UI
β βββ .header β Sticky top bar
β βββ .nav-tabs β DSA / Aptitude / Analytics / Improve
β βββ .sidebar β Stats, progress bars, filters
β βββ .content
β β βββ #page-dsa
β β βββ #page-aptitude
β β βββ #page-analytics
β β βββ #page-improve
β βββ .settings-panel β Slide-in settings drawer
β βββ #modal β Add problem/question modal
β
βββ <script>
βββ Constants & State
βββ Intro Animation (story phases + bubble wave)
βββ Boot function (localStorage β Gist β show app)
βββ GitHub Gist API (load, save, merge, debounce)
βββ Render functions (DSA, Aptitude, both)
βββ Toggle solved + particle animation
βββ Stats updater + Rank system
βββ Analytics (donut, heatmap, breakdown)
βββ Improve insights generator
βββ Settings panel + export
βββ Toast notification system
Whenever you make changes to index.html in VS Code:
# Stage all changes
git add .
# Commit with a description
git commit -m "feat: describe what you changed"
# Push to GitHub
git pushGitHub Pages auto-rebuilds within 1β2 minutes. Refresh your live site and changes appear.
# Added new quotes
git commit -m "chore: add motivational quotes"
# Fixed mobile layout
git commit -m "fix: mobile nav tab overflow"
# Added new feature
git commit -m "feat: add notes field to problem cards"
# Visual update
git commit -m "style: improve analytics card spacing"Your data automatically lives in a private Gist at:
https://gist.github.com/YOUR_USERNAME
Look for the file named grind-exe-data.json.
- Open the app β click β (settings)
- Click β¬ Export JSON Backup
- A
.jsonfile downloads to your device
If you ever lose access or switch accounts:
- Open your backup
.jsonfile - Go to
https://gist.github.comβ create a new private Gist - Name the file
grind-exe-data.json - Paste your backup JSON content β Save
- Open GRIND.EXE with a new token β it will find and load your Gist
Your data is safe. It lives in GitHub's servers, not your browser. Just reconnect with your token and everything loads back.
Open GRIND.EXE on any device β paste your GitHub token once β your full history loads. Changes sync across devices via the Gist.
| Concern | Answer |
|---|---|
| Where is my token stored? | Only in your browser's localStorage β never on any server |
| Can anyone see my data? | No β your Gist is private. Only you can access it |
| What does the token have access to? | Only the gist scope β cannot read code, repos, or anything else |
| Is data sent anywhere else? | No β only to api.github.com to read/write your own Gist |
| What if I share my screen? | Token is in a password input field β masked by default |
To revoke access at any time:
Go to https://github.com/settings/tokens β delete the grind-exe token. The app will stop syncing.
These features are planned for future versions:
- Notes field β add personal notes to each problem
- Company tags β tag problems by company (Google, Amazon, etc.)
- Timed practice mode β solve problems against a countdown
- Import from LeetCode β paste a LeetCode problem URL and auto-fill details
- Weekly goal setting β set a target of N problems per week
- PDF progress report β export a formatted PDF of your stats
- Dark / Light theme toggle
- Custom categories β create your own aptitude categories
- Spaced repetition reminders β remind you to revisit unsolved problems
Deepayan Thakur
CS Engineering Student | ML Engineer | Builder
- π GitHub: @Deepayan-Thakur
- π§ Focus: AI/ML, DSA, Trade Analytics, Human-Computer Interaction
- π Projects: LIS Hybrid BCI System, Medicinal Plant Detection, HSN Trade Analytics Suite, VibezLang
This project is open-source. Feel free to fork, modify, and use it for your own grinding journey.
If you find it useful, give it a β β it means a lot!
Built with π» and zero sleep.
GRIND.EXE β because dream companies don't hire people who give up.