A MERN (MongoDB, Express, React, Node.js) stack application for an online skill-learning platform with a recommendation engine.
Upskill is an MVP platform designed around 4 core features:
- 🛠️ Catalog - Content library and learning resources
- 👤 User Progress - Track user activity and learning history
- 🧠 Recommendation Engine - Personalized next-step suggestions
- 🧪 Simulator - Demo and testing the recommendation engine
MVP/
├── client/
│ ├── src/
│ │ ├── components/ # Reusable React components
│ │ ├── pages/ # Page components
│ │ ├── services/ # API service calls
│ │ ├── utils/ # Utility functions
│ │ ├── App.jsx # Main App component
│ │ └── main.jsx # React entry point
│ ├── index.html # HTML template
│ ├── vite.config.js # Vite configuration
│ ├── package.json # Client dependencies
│ └── .env.example # Example env variables
├── server/
│ ├── src/
│ │ ├── config/ # Configuration files (db.js)
│ │ ├── controllers/ # Route handlers
│ │ ├── data/ # Mock data (mockCatalog.json)
│ │ ├── models/ # Data models
│ │ ├── routes/ # API route definitions
│ │ ├── services/ # Business logic
│ │ ├── app.js # Express app setup
│ │ └── server.js # Server entry point
│ ├── package.json # Server dependencies
│ └── .env.example # Example env variables
├── .gitignore # Git ignore rules
└── README.md # This file
- Route File:
server/src/routes/catalog.routes.js - API:
GET /api/catalog - Purpose: Serves learning resources and course catalog
- Frontend:
client/src/components/(PathView, etc.)
- Route File:
server/src/routes/user.routes.js - API:
GET /api/user - Purpose: Manages user profiles and activity tracking
- Frontend:
client/src/components/(StatTiles, etc.)
- Service File:
server/src/services/engine.service.js - API:
GET /api/engine - Purpose: Generates personalized learning recommendations
- Frontend:
client/src/components/(NextAssetCard, etc.)
- Route File:
server/src/routes/engine.routes.js - API:
POST /api/engine/simulate - Purpose: Tests recommendation logic
- Frontend:
client/src/pages/(Simulate.jsx)
| Feature | Backend | Frontend | Purpose |
|---|---|---|---|
| 🛠️ Catalog | catalog.routes.js |
Components | Content library |
| 👤 User | user.routes.js |
Components | User tracking |
| 🧠 Engine | engine.service.js |
Components | Recommendations |
| 🧪 Simulator | engine.routes.js |
Pages | Demo/testing |
Sample catalog data in server/src/data/mockCatalog.json:
[{ "id": "1", "name": "Intro to Python", "type": "video" }]Create .env files:
server/.env:
PORT=5000
NODE_ENV=development
client/.env:
VITE_API_URL=http://localhost:5000
GET /api/catalog
Returns: Array of learning resources
GET /api/user
Returns: User profile and activity data
GET /api/engine
Returns: Personalized recommendations
- Feature-based modular design - Each feature has clear backend/frontend separation
- Service-oriented backend - Business logic in services, routes handle HTTP
- Scalable structure - Easy to add new features without touching existing code
- API-first approach - Frontend directly maps to API responsibilities