Terminal-first e-learning platform for Linux, Git, and command-line mastery.
TermiNest is a modern, hacker-vibe e-learning platform designed to make you fluent on the command line. Through hands-on labs, real-world Git workflows, and guided missions, you’ll build muscle memory for Linux, Git, and terminal productivity.
- React 19 with Vite for fast development
- React Router for client-side routing
- Tailwind CSS v4 for dark, terminal-inspired UI
- Context API for authentication state
- Axios/Fetch for API communication
- Node.js + Express REST API
- MongoDB Atlas with Mongoose ODM
- JWT for stateless authentication
- bcryptjs for password hashing
- express-validator for input validation
- helmet + express-rate-limit for security
- ✅ Role-based authentication (User/Admin)
- ✅ Course catalog with category/difficulty filters
- ✅ Enrollment & progress tracking per lesson
- ✅ Admin panel to create/edit/delete courses
- ✅ Secure APIs with validation, rate limiting, and JWT
- ✅ Responsive, dark-themed UI with a hacker aesthetic
- ✅ Real-time progress bars and lesson completion
- ✅ Seed script for quick demo data
- Node.js >= 18
- MongoDB Atlas cluster (or local MongoDB)
- Git
git clone <repo-url>
cd TermiNest
# Frontend
npm install
# Backend
cd backend
npm installcd backend
cp .env.example .envEdit .env with your MongoDB Atlas URI and a strong JWT secret:
MONGODB_URI=mongodb+srv://<user>:<pass>@cluster0.xxxxx.mongodb.net/terminest
JWT_SECRET=your-super-secret-jwt-key
FRONTEND_URL=http://localhost:5173cd backend
node src/seed.jsThis creates an admin user (admin@terminest.dev / admin123) and sample courses.
# Terminal 1: backend
cd backend
npm run dev
# Terminal 2: frontend
cd ..
npm run devVisit http://localhost:5173.
npm run build
# Deploy the dist/ folder- Set environment variables in the provider
- Ensure MongoDB Atlas network allows the provider’s IPs
- Run
npm startin production
POST /api/auth/signupPOST /api/auth/loginGET /api/auth/me
GET /api/coursesGET /api/courses/:idPOST /api/courses(admin)PUT /api/courses/:id(admin)DELETE /api/courses/:id(admin)
POST /api/enrollGET /api/enrollments/mePUT /api/enrollments/:id/progress
GET /api/admin/usersGET /api/admin/enrollmentsGET /api/admin/reports
- Fork the repo
- Create a feature branch
- Open a PR with a clear description
MIT © TermiNest



