- About The Project
- The Problem We Solve
- Key Benefits
- Security & Architecture
- Tech Stack
- Features
- Getting Started
- Project Structure
- API Reference
- Deployment
- Contributing
- License
SkillForge is a modern, full-stack Learning Management System (LMS) designed to democratize education and make quality learning accessible to everyone. Built with cutting-edge technologies, it provides a seamless experience for both learners and educators.
Whether you're an individual looking to upskill, an educator wanting to share knowledge, or an organization training employeesβSkillForge provides the tools you need.
| Problem | Our Solution |
|---|---|
| Expensive Education | Affordable courses with free enrollment options |
| Geographic Limitations | Learn anywhere, anytime, on any device |
| Outdated Content | Continuously updated courses by industry experts |
| Lack of Tracking | Built-in progress tracking and certificates |
| Complex Administration | Intuitive admin dashboard for course management |
| Security Concerns | Enterprise-grade authentication with Clerk |
- π Students - Access quality education without barriers
- π¨βπ« Instructors - Create and monetize courses easily
- π’ Organizations - Train teams with custom learning paths
- π« Educational Institutions - Extend reach beyond physical classrooms
|
Lightning-fast with Next.js 16, React 19, and Turbopack for instant page loads |
Enterprise-grade Clerk authentication with protected routes and secure sessions |
Fully responsive design that works beautifully on desktop, tablet, and mobile |
|
Track student progress, course completion rates, and engagement metrics |
Beautiful dark theme with gradient accents and smooth animations |
Microservices-ready architecture that scales with your needs |
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β SECURITY ARCHITECTURE β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ β
β β Frontend ββββββΆβ Clerk ββββββΆβ Backend β β
β β Next.js β β Auth Layer β β Express.js β β
β ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ β
β β β β β
β βΌ βΌ βΌ β
β ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ β
β β Protected β β JWT + β β MongoDB β β
β β Routes β β Sessions β β (Encrypted) β β
β ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
| Layer | Protection |
|---|---|
| Frontend | β’ Clerk middleware for route protection β’ Environment variable isolation β’ XSS prevention with React |
| Authentication | β’ OAuth 2.0 & OpenID Connect β’ Multi-factor authentication (MFA) β’ Session management with automatic refresh |
| Backend | β’ CORS protection β’ Input validation & sanitization β’ MongoDB injection prevention β’ Clerk webhook verification |
| Data | β’ Encrypted connections (HTTPS/TLS) β’ Password hashing (bcrypt) β’ Secure environment variables |
// Clerk webhook verification for secure user sync
const { Webhook } = require("svix");
// All API routes protected with authentication middleware
app.use("/api/protected/*", verifyClerkToken);
// CORS configured for specific origins
app.use(
cors({
origin: process.env.FRONTEND_URL,
credentials: true,
})
);| Technology | Purpose |
|---|---|
| Next.js 16 | React framework with App Router & Turbopack |
| React 19 | UI library with latest concurrent features |
| TypeScript | Type safety and better DX |
| Clerk | Authentication & user management |
| Axios | HTTP client for API communication |
| Technology | Purpose |
|---|---|
| Express.js | Fast, minimal web framework |
| MongoDB | NoSQL database for flexible schemas |
| Mongoose | ODM for MongoDB with validation |
| Svix | Webhook verification for Clerk |
| CORS | Cross-origin resource sharing |
| Technology | Purpose |
|---|---|
| ESLint | Code linting and standards |
| dotenv | Environment variable management |
| npm | Package management |
- β Browse and search courses by category/level
- β Enroll in free and paid courses
- β Track progress with visual indicators
- β Resume learning from where you left off
- β Access courses on any device
- β Earn completion certificates
- π Create and publish courses
- πΉ Upload video content
- π View analytics and earnings
- π¬ Interact with students
- π₯ User management
- π Course CRUD operations
- π Platform analytics
- βοΈ System configuration
- Node.js 18.0 or higher
- npm 9.0 or higher
- MongoDB (local or Atlas)
- Clerk Account (for authentication)
-
Clone the repository
git clone https://github.com/yourusername/skillforge-lms.git cd skillforge-lms -
Install frontend dependencies
cd frontend npm install -
Install backend dependencies
cd ../backend npm install -
Configure environment variables
Frontend (
frontend/.env.local):NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY=your_clerk_publishable_key CLERK_SECRET_KEY=your_clerk_secret_key NEXT_PUBLIC_CLERK_SIGN_IN_URL=/sign-in NEXT_PUBLIC_CLERK_SIGN_UP_URL=/sign-up NEXT_PUBLIC_API_URL=http://localhost:5000/api
Backend (
backend/.env):PORT=5000 MONGODB_URI=mongodb://localhost:27017/skillforge CLERK_WEBHOOK_SECRET=your_webhook_secret
-
Start development servers
# Terminal 1 - Frontend cd frontend npm run dev # Terminal 2 - Backend cd backend npm start
-
Open your browser
http://localhost:3000
skillforge-lms/
βββ π frontend/ # Next.js Application
β βββ π app/ # App Router pages
β β βββ π page.tsx # Homepage
β β βββ π layout.tsx # Root layout + ClerkProvider
β β βββ π about/ # About page
β β βββ π contact/ # Contact page
β β βββ π courses/ # Course listing & details
β β βββ π my-courses/ # Student dashboard
β β βββ π sign-in/ # Clerk sign-in
β β βββ π sign-up/ # Clerk sign-up
β βββ π components/ # Reusable components
β β βββ π Navbar.tsx # Navigation with auth state
β β βββ π Hero.tsx # Homepage hero section
β β βββ π CourseCard.tsx # Course card component
β β βββ π Footer.tsx # Site footer
β βββ π proxy.ts # Clerk middleware
β βββ π package.json
β
βββ π backend/ # Express.js API
β βββ π config/
β β βββ π db.js # MongoDB connection
β βββ π models/
β β βββ π Course.js # Course schema
β β βββ π User.js # User schema
β β βββ π Progress.js # Progress tracking
β βββ π routes/
β β βββ π courseRoutes.js # Course endpoints
β β βββ π userRoutes.js # User endpoints
β β βββ π progressRoutes.js # Progress endpoints
β βββ π server.js # Express entry point
β βββ π package.json
β
βββ π README.md
| Method | Endpoint | Description | Auth |
|---|---|---|---|
GET |
/api/courses |
Get all courses | Public |
GET |
/api/courses/:id |
Get single course | Public |
POST |
/api/courses |
Create course | Admin |
PUT |
/api/courses/:id |
Update course | Admin |
DELETE |
/api/courses/:id |
Delete course | Admin |
| Method | Endpoint | Description | Auth |
|---|---|---|---|
POST |
/api/users/webhook |
Clerk webhook | Webhook |
GET |
/api/users/:clerkId |
Get user profile | Private |
POST |
/api/users/:id/enroll/:courseId |
Enroll in course | Private |
| Method | Endpoint | Description | Auth |
|---|---|---|---|
GET |
/api/progress/:userId/:courseId |
Get course progress | Private |
POST |
/api/progress/complete |
Mark chapter complete | Private |
GET |
/api/progress/:userId |
Get all progress | Private |
- Create a new Web Service on Render
- Connect your GitHub repository
- Set environment variables
- Deploy!
| Variable | Where | Description |
|---|---|---|
NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY |
Frontend | Clerk public key |
CLERK_SECRET_KEY |
Both | Clerk secret key |
MONGODB_URI |
Backend | MongoDB connection string |
NEXT_PUBLIC_API_URL |
Frontend | Backend API URL |
Contributions are what make the open-source community amazing! Any contributions you make are greatly appreciated.
- 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.
- Next.js - The React Framework
- Clerk - Authentication Made Simple
- MongoDB - Database Platform
- Vercel - Deployment Platform
