A full-stack MERN placement preparation tracker that brings LeetCode logging, daily task management, goal tracking, study resources, and interview boards into one authenticated platform — built for students who grind.
Students preparing for placements operate across an overwhelming number of tools simultaneously: LeetCode for problems, Notion for notes, Google Sheets for task tracking, random sticky notes for goals, and WhatsApp groups for resources. This context-switching leads to lost progress data, missed follow-ups, and zero visibility into overall placement readiness.
There was no single authenticated platform purpose-built for students to track everything — DSA grind, skill inventory, study materials, goals, and coding profiles — from one dashboard.
I built PrepTrack — a full-stack MERN application with JWT-based authentication where every piece of preparation data is owned by the user and persisted in MongoDB. The frontend is a React + Vite SPA with Zustand for state management, and the backend is a Node.js + Express REST API with protected routes.
The app is structured as an npm workspaces monorepo where
both client/ and backend/ are managed from the project root, enabling a
single npm install to wire up all dependencies.
Authorization: Bearer header.Challenge: Managing Parallel Module State Without Redux
With 7+ independent data modules (tasks, goals, leetcode, skills…), a single Redux store would
have become a monolithic mess. Prop drilling was not an option either.
Solution: I adopted Zustand with one store per module. Each store co-locates its state, actions, and async API calls — making each feature independently testable and the codebase dramatically easier to navigate.
Challenge: JWT Token Expiry UX
When a JWT expired mid-session, users received cryptic 401 errors across every API call, breaking
the entire UI state simultaneously.
Solution: I added an Axios response interceptor that catches 401 errors
globally, clears the token from localStorage, and redirects the user to the login page
with a toast notification — gracefully handling session expiry without per-component error
handling.
Challenge: Activity Heatmap Performance
Rendering 365 daily squares with per-day color intensity from API data caused a noticeable render
lag on the dashboard.
Solution: I pre-aggregated the activity data server-side into a date-keyed map before
sending it to the frontend, and memoized the heatmap component with React.memo to
prevent unnecessary re-renders on unrelated state changes.
PrepTrack consolidates what previously required 4–5 separate tools into a single authenticated dashboard. The readiness score gives students a quantified, at-a-glance view of where they stand — replacing the anxiety of "I don't know how ready I am" with a concrete metric.
Building this project deepened my expertise in full-stack MERN architecture, JWT-based authentication flows, monorepo tooling with npm workspaces, and designing data schemas for multi-module applications.
npm install, add your MongoDB URI and you're running in under 2 minutes.