A Premium, User-Centric DSA Progress Tracker.
Vertex is a comprehensive Data Structures and Algorithms (DSA) sheet tracker designed to help developers organize, track, and visualize their preparation journey. Built with a focus on aesthetics, user experience, and robust data management, Vertex transforms the chaotic process of solving LeetCode/GFG problems into a streamlined, gamified workflow.
- Sheet Management: Import any standard DSA sheet (Striver's SDE Sheet, Love Babbar 450, etc.) via Excel/JSON or create your own.
- Question Status: Mark problems as
PendingorSolved. - Revision Bookmarks: Star ⭐ important problems for last-minute revision.
- Notes: Add markdown-supported notes to any problem to document your approach and time complexity.
- Activity Heatmap: A GitHub-style contribution graph that visualizes your daily consistency.
- Overall Progress: Circular and linear progress indicators showing your aggregate completion rate across all sheets.
- Sheet-level Stats: Individual progress bars and completion percentages for each imported sheet.
- CRUD Operations: Add, Edit, Delete questions directly within the UI.
- Reordering: Insert new questions at specific positions (e.g., "Insert Problem Below").
- Sheet Actions: Rename or delete entire sheets with ease.
- Smart Tables: "Topic-only" rows are automatically detected and styled as section headers for better readability.
- Modern Design: Built with Shadcn UI and Tailwind CSS for a sleek, glassmorphic aesthetic.
- Dark Mode: Fully supported system-aware dark mode.
- Mobile Responsive: Optimized layout for seamless use on phones and tablets.
- Optimistic UI: Instant feedback on all actions (toggles, bookmarks, edits) for a snappy experience.
Vertex is built on a modern, type-safe stack ensuring performance, scalability, and developer experience.
| Category | Technology | Usage |
|---|---|---|
| Framework | Next.js 14 | App Router, Server Components, Server Actions |
| Language | TypeScript | Static typing for reliability |
| Styling | Tailwind CSS | Utility-first styling |
| UI Library | Shadcn UI | Reusable, accessible components (based on Radix UI) |
| Icons | Lucide React | Consistent & clean SVG icons |
| Authentication | Clerk | Secure user authentication & session management |
| Database | MongoDB | NoSQL document storage |
| ORM | Mongoose | Type-safe database modeling |
| Utilities | date-fns, clsx, sonner |
Date formatting, class merging, toast notifications |
Vertex follows a Server-First architecture leveraging Next.js App Router capabilities.
graph TD
User((User))
subgraph Client ["Client Side"]
UI[User Interface]
Opt[Optimistic Updates]
end
subgraph Server ["Server Side (Next.js)"]
Auth[Clerk Middleware]
Actions[Server Actions]
Validation[Input Validation]
end
subgraph Data ["Data Layer"]
DB[(MongoDB)]
end
User -->|Interacts| UI
UI -->|Triggers| Opt
Opt -->|Calls| Actions
Actions -->|Checks| Auth
Actions -->|Validates| Validation
Validation -->|Query/Mutate| DB
DB -->|JSON Data| Actions
Actions -->|Revalidate Path| UI
- Server Actions: All mutations (add, update, delete, toggle) are handled via Server Actions (
app/actions.ts), eliminating the need for a separate API layer. - Optimistic UI: Key interactions like marking a question as solved or bookmarking are updated instantly in the UI state while the server request processes in the background.
- Atomic Design: Components are modularized (
SheetCard,SheetTracker,ActivityHeatmap) for reusability and isolation.
The following sequence describes how data flows when a user interacts with the tracker.
sequenceDiagram
participant U as User
participant C as Client Component (SheetTracker)
participant S as Server Action (toggleStatus)
participant DB as MongoDB
U->>C: Clicks Checkbox
C->>C: Optimistically Update UI (Pending -> Solved)
C->>S: Call toggleStatus(sheetId, questionId, status)
S->>S: Verify Authentication (auth())
S->>DB: Find Sheet & Update Question
alt Status is SOLVED
S->>DB: Set `solvedAt = new Date()`
S->>DB: Increment `solvedQuestions` count
else Status is PENDING
S->>DB: Decrement `solvedQuestions` count
end
DB-->>S: Success
S->>S: revalidatePath('/dashboard')
S-->>C: Return { success: true }
Note over C, S: If Server fails, Client reverts UI state
- Node.js 18+
- MongoDB Atlas URI
- Clerk API Keys
-
Clone the repository
git clone https://github.com/somilgupta/vertex.git cd vertex -
Install dependencies
npm install
-
Environment Setup Create a
.env.localfile:MONGODB_URI=your_mongodb_connection_string NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY=your_clerk_publishable_key CLERK_SECRET_KEY=your_clerk_secret_key
-
Run Development Server
npm run dev
-
Open http://localhost:3000 to see the app.
Contributions are welcome! Please feel free to submit a Pull Request.
- Fork the Project
- Create your Feature Branch (
git checkout -b feature/AmazingFeature) - Commit your Changes (
git commit -m 'Add some AmazingFeature') - Push to the Branch (
git push origin feature/AmazingFeature) - Open a Pull Request
Distributed under the MIT License. See LICENSE for more information.
