Where Logic Meets Peace.
A full-stack LeetCode-style competitive programming and algorithm learning platform β calm, cozy, and focused. Built with React JS, Node.js, and JSON file storage.
- π¨ Cozy Study Theme β Warm blue & gold palette, light/dark mode, cinematic landing page
- π Auth System β JWT-based register/login with bcrypt password hashing
- π» Code Editor β Monaco Editor with syntax highlighting, run & submit
- π Dashboard β XP tracker, streak, progress rings, daily challenge
- πΊοΈ Explore β Search, filter, sort 15+ problems by difficulty/topic
- π Leaderboard β Global & weekly rankings with podium visualization
- π¬ Discussions β Threaded forum with voting, comments, tag filters
- π Practice β Topic-grouped problems with cheat sheets
- π€ Ava AI Mentor β Floating hint bot on problem/practice pages
- π± Responsive β Works on mobile, tablet, and desktop
| Layer | Tech |
|---|---|
| Frontend | React 18 + Vite, React Router v6 |
| Styling | Pure CSS (no Tailwind), CSS Variables |
| Code Editor | Monaco Editor (@monaco-editor/react) |
| Backend | Node.js + Express.js |
| Database | JSON files (fs read/write) |
| Auth | JWT (jsonwebtoken) + bcryptjs |
| Fonts | Playfair Display, Inter, Poppins, JetBrains Mono |
| Icons | Phosphor Icons |
| Notifications | react-hot-toast |
algovault/
βββ client/ # React Vite Frontend
β βββ src/
β β βββ components/
β β β βββ Navbar.jsx # Auth-aware navbar with dropdown
β β β βββ Footer.jsx # Full footer with links
β β β βββ LoadingScreen.jsx # Animated 2.5s intro
β β β βββ ProtectedRoute.jsx
β β β βββ AvaBot.jsx # Floating AI mentor widget
β β β βββ DifficultyBadge.jsx
β β βββ context/
β β β βββ AuthContext.jsx # User state, login/logout
β β β βββ ThemeContext.jsx # Light/dark theme
β β βββ pages/
β β β βββ LandingPage.jsx # Hero, CSS study room, features, testimonials
β β β βββ AuthPages.jsx # Login + Register (split-screen)
β β β βββ HomePage.jsx # Dashboard after login
β β β βββ ExplorePage.jsx # Problem list with filters
β β β βββ ProblemPage.jsx # Monaco editor + run/submit
β β β βββ LeaderboardPage.jsx
β β β βββ DiscussPage.jsx # Forum with threads & comments
β β β βββ OtherPages.jsx # Practice, About, 404
β β βββ services/api.js # Axios instance with JWT interceptor
β β βββ App.jsx # Router + loading screen
β β βββ index.css # Full design system (600+ lines)
β βββ index.html
β βββ vite.config.js
β
βββ server/ # Node.js Express Backend
βββ data/
β βββ users.json # 5 seed users
β βββ problems.json # 15 real problems
β βββ submissions.json # User submissions
β βββ discussions.json # Forum threads
βββ routes/
β βββ auth.routes.js
β βββ problems.routes.js
β βββ submissions.routes.js
β βββ users.routes.js
β βββ discussions.routes.js
β βββ leaderboard.routes.js
βββ middleware/auth.middleware.js
βββ utils/jsonDB.js
βββ server.js
- Node.js v18+
- npm v8+
cd server
npm install
npm run dev
# β
Server running on http://localhost:5000cd client
npm install
npm run dev
# β
App running on http://localhost:5173Navigate to http://localhost:5173
| Field | Value |
|---|---|
manthan@example.com |
|
| Password | password |
Other seed users: arjun@example.com, priya@example.com, alex@example.com, sofia@example.com β all use password.
POST /api/auth/register Create account
POST /api/auth/login Login β JWT
GET /api/auth/me Get current user (π)
GET /api/auth/check-username/:u Check availability
GET /api/problems List (search, difficulty, topic, sort, page)
GET /api/problems/:id Single problem by ID or slug
POST /api/problems Create (admin only π)
POST /api/submissions/run Run code against test cases (π)
POST /api/submissions/submit Submit solution (π)
GET /api/submissions/me My submissions (π)
GET /api/submissions/problem/:id Problem submissions (π)
GET /api/users/:username Public profile
GET /api/users/me/stats My stats (π)
PUT /api/users/me Update profile (π)
GET /api/leaderboard Global rankings
GET /api/leaderboard/weekly Weekly rankings
GET /api/discussions List threads (sort, tag)
POST /api/discussions Create thread (π)
GET /api/discussions/:id Single thread
POST /api/discussions/:id/comments Add comment (π)
PUT /api/discussions/:id/vote Upvote/downvote (π)
/* Brand Colors */
--primary-blue: #436b95; /* Main brand */
--accent-gold: #caa855; /* Highlights, badges */
/* Difficulty */
--easy: #4caf50;
--medium: #ff9800;
--hard: #f44336;
/* Fonts */
Playfair Display β Headings, titles
Inter β Body, UI text
Poppins β Buttons, CTAs
JetBrains Mono β Code, editorPORT=5000
JWT_SECRET=algvault_super_secret_jwt_key_2025
NODE_ENV=development
{
"react": "^18",
"react-router-dom": "^6",
"axios": "^1",
"@monaco-editor/react": "^4",
"react-hot-toast": "^2",
"date-fns": "^3"
}{
"express": "^4",
"bcryptjs": "^2",
"jsonwebtoken": "^9",
"uuid": "^9",
"cors": "^2",
"morgan": "^1",
"dotenv": "^16"
}- Python/C++ code execution (Docker sandbox)
- Real AI integration for Ava (Claude API)
- User profile pages & avatars
- Weekly challenge system with prizes
- Premium features (solution unlocks)
- PostgreSQL migration from JSON storage
- Email notifications & password reset
Manthan Vinzuda β Full-Stack Developer
"Every algorithm begins with silence and ends in clarity."
AlgoVault 2025 β Crafted with β€οΈ