π Live Frontend Application β’ β‘ Live Backend API β’ π‘οΈ Strapi Admin Dashboard β’ π₯ 10-Minute Video Walkthrough
- π Live Deployments & Quick Links
- π Project Overview
- ποΈ System Architecture
- π₯ User Experience & Feature Breakdown
- π οΈ Tech Stack & Architecture
- π» Local Installation & Setup Guide
- π Environment Variables Reference
- ποΈ Project Directory Structure
- π‘ Core API Endpoints
- π Production Deployment Guide
- π License & Credits
| Service | Environment | URL / Resource |
|---|---|---|
| Frontend Web App | Production (Vercel) | https://skill-flow-lms.vercel.app |
| Backend REST API | Production (Railway) | https://skillflow-learning-management-system-production.up.railway.app |
| Strapi Admin Panel | Production (Railway) | https://skillflow-learning-management-system-production.up.railway.app/admin |
| Demo Walkthrough | 10-Minute Video | Google Drive Video Walkthrough |
SkillFlow is an enterprise-grade, full-stack Learning Management System (LMS) engineered for seamless curriculum delivery, interactive self-assessments, and comprehensive educational operations.
Built with a decoupled Headless CMS architecture, SkillFlow pairs Next.js 16 (App Router) and React 19 on the client with Strapi v5 and PostgreSQL on the backend. It features a complete 4-role ecosystem (Student, Instructor, Content Manager, Admin) providing tailored workspaces for learners, course creators, editorial managers, and system administrators.
- β‘ Blazing Fast Performance: Server Components, streaming rendering, and optimized caching with Next.js 16.
- π― 1-Click Free Enrollment: Instant enrollment workflow with dual-synced state (Strapi REST API + LocalStorage fallback).
- π₯ Distraction-Free Video Player: Custom learning theatre supporting embedded streaming, syllabus navigation, and markdown lecture notes.
- π§ Interactive MCQ Assessment Engine: Auto-grading engine with live countdown timer, scoring breakdown, pass/fail evaluation, and historical submission tracking.
- π Editorial Markdown Studio: Blog publication system with live preview, category taxonomies, and ImgBB CDN image upload integration.
- π‘οΈ Granular Enterprise RBAC: Strict role enforcement for Student, Instructor, Content Manager, and Admin with dynamic role promotion.
- π Sleek Dual Theme (Dark / Light): Fluid theme switching powered by
next-themesand Tailwind CSS v4.
graph TD
User([User Browser / Mobile]) -->|HTTPS / UI Interaction| NextApp[Next.js 16 Client & Server App]
NextApp -->|JWT Authenticated REST API| Strapi[Strapi v5 Headless CMS API Engine]
Strapi -->|CRUD Queries / Relations| Postgres[(PostgreSQL / SQLite Database)]
NextApp -->|Direct Image Uploads| ImgBB[ImgBB Cloud CDN]
Strapi -->|Role Authorization| RBAC[Users & Permissions Plugin]
subgraph "Frontend Layer (Vercel)"
NextApp
Theme[next-themes Dark/Light]
AuthCtx[Auth Context & Cookies]
end
subgraph "Backend Services (Railway)"
Strapi
RBAC
Postgres
end
SkillFlow is designed with a role-first user experience, providing distinct capabilities based on who is using the platform:
βββββββββββββββββββββ
β Public Visitor β
βββββββββββ¬ββββββββββ
β (Register / Login)
βββββββββββββββββββββ΄ββββββββββββββββββββ
βΌ βΌ
βββββββββββββββββββββββββ βββββββββββββββββββββββββ
β Student / Learner β β Staff Roles β
βββββββββββββββββββββββββ βββββββββββββ¬ββββββββββββ
β
βββββββββββββββββββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββββββββ
βΌ βΌ βΌ
βββββββββββββββββββββββββ βββββββββββββββββββββββββ βββββββββββββββββββββββββ
β Instructor β β Content Manager β β Administrator β
β (Course Authoring) β β (Editorial & Catalog) β β (Full Governance) β
βββββββββββββββββββββββββ βββββββββββββββββββββββββ βββββββββββββββββββββββββ
Visitors can explore the platform freely before creating an account:
- Dynamic Landing Page: Hero section with interactive animations, platform statistics, featured popular curriculum tracks, recent blog posts, and role-based onboarding CTA cards.
- Searchable Course Catalog: Real-time keyword search, category filter pills (Web Development, App Development, Data Science, UI/UX Design), and difficulty level filtering (Beginner, Intermediate, Advanced).
- Course Detail Overview: Comprehensive course view with title, badges, syllabus accordion, instructor biography, lesson counts, estimated duration, and introductory Free Preview Lectures.
- Tech Publication / Blog: Read high-impact engineering articles and tutorials with reading-time estimates, categories, and formatted Markdown rendering.
- Interactive About & FAQ: Core educational pillars, platform metrics, and interactive accordion FAQ addressing common learner inquiries.
- Authentication Suite: Secure sign-up and sign-in via email/password, session cookie persistence, and Google OAuth integration ready.
A dedicated workspace for tracking learning milestones and enrolled curricula:
- Personal Student Dashboard (
/dashboard/student):- Top banner with personalized welcome and quick catalog link.
- KPI metric cards: My Courses, In Progress, Completed, and Average Completion Rate.
- Enrolled course cards featuring thumbnail, category badge, completion status tag, progress bar, and 1-click Resume Learning action.
- Curriculum Learning Theatre (
/courses/[slug]/learn):- Distraction-free full-screen theatre player.
- Support for YouTube video embeds and direct video streams.
- Lecture notes & summaries formatted with Markdown.
- Sequential lecture navigation with "Mark as Complete & Next" action.
- Real-time progress bar syncing directly with the database.
- Collapsible course syllabus drawer for desktop and mobile.
- Live MCQ Assessment Engine (
/courses/[slug]/quiz/[quizId]):- Live countdown examination timer (default 5-minute timed test).
- Multiple-choice questions with single-select answers and smooth transitions.
- Instant client-side & server-side auto-grading against correct answers.
- Pass/Fail grading with percentage score calculation (60% passing threshold).
- Results Screen: Visual confetti celebration on passing, total score summary, question-by-question answer review, and attempt persistence in Strapi (
/quiz-submissions).
- Profile & Security Settings (
/profile):- Account information card showing username, email, assigned role, and join date.
- Password update form with current password verification and length validation.
A specialized authoring studio for educators and curriculum developers:
- Instructor Dashboard (
/dashboard/instructor):- Authoring statistics: My Courses, Total Lessons, and Quizzes Built.
- List of authored courses with publication state indicators (Published vs Draft).
- Course Creator & Syllabus Builder (
/dashboard/instructor/courses/new):- Create new course tracks with title, slug, category, difficulty level, thumbnail URL, and descriptions.
- Add, edit, and reorder video lectures with title, duration, video URL, content notes, and "Free Preview" toggle.
- Integrated Quiz Builder:
- Attach multiple-choice quizzes to any course track.
- Define custom passing scores, question prompts, option lists, correct answer indexes, and answer explanations.
- Enrolled Learner Progress Tracker (
/dashboard/instructor/courses/[id]/progress):- View students enrolled in each course, their current progress percentage, and completion status.
- Course Lifecycle Management: Edit syllabi, update metadata, or delete course tracks with confirmation modals.
Designed for editorial leads and content quality managers:
- Manager Dashboard (
/dashboard/manager):- High-level content operations KPIs: Course Catalog, Total Articles, Published Blogs, and Editorial Drafts.
- Quick action studios for Course Management and Blog Publishing.
- Editorial Blog Studio (
/dashboard/manager/blogs):- Markdown editor with live preview side-by-side.
- Cover image upload with direct ImgBB Cloud CDN integration.
- Category selector (Web Development, Career & Advice, Tutorials, Tech News, Student Success).
- Estimated reading time calculator.
- Draft vs Published toggle with date timestamps.
- Full CRUD: Create, edit, preview, and delete published articles.
- Platform-Wide Course Governance (
/dashboard/manager/courses):- Oversight across all course tracks, author assignments, and curriculum updates.
The central command center for enterprise administration:
- Admin Dashboard (
/dashboard/admin):- Platform-wide statistics: Total Registered Users, Total Enrollments, Total Courses, and Total Articles.
- Real-time user role breakdown (Students, Instructors, Managers, Administrators).
- User & Role Governance (
Users & Roles Tab):- Searchable, paginated table of all registered users.
- Dynamic Role Reassignment Dropdown: Instantly promote or change any user's role (Student β Instructor β Content Manager β Admin) with real-time API persistence.
- User account deletion with safeguard preventing admins from deleting their own active account.
- Universal Course & Blog Moderation:
- Global course catalog table with one-click deletion and moderation.
- Global blog post moderation table with publication status toggling and removal.
| Technology | Version | Purpose |
|---|---|---|
| Next.js | 16.3.3 |
React Framework (App Router, Server & Client Components) |
| React | 19.2.8 |
UI Library |
| Tailwind CSS | v4.0 |
Modern Utility-First Styling System |
| Lucide React | ^1.34.0 |
Comprehensive UI Icon Library |
| next-themes | ^0.4.6 |
Dark / Light Theme switching with hydration protection |
| react-markdown | ^10.1.0 |
Markdown lecture notes & article renderer |
| remark-gfm | ^4.0.1 |
GitHub Flavored Markdown plugin |
| canvas-confetti | ^1.9.4 |
Interactive particle celebration on quiz completion |
| js-cookie | ^3.0.8 |
Client-side cookie management for authentication |
| Technology | Version | Purpose |
|---|---|---|
| Strapi CMS | 5.52.1 |
Headless CMS Engine with REST API endpoints |
| Database | PostgreSQL / SQLite | Relational database engine |
| Users-Permissions | @strapi/plugin-users-permissions |
Role-based authentication & JWT token generation |
| Node.js | >=20.0.0 <=26.x.x |
Runtime Environment |
| Service | Role |
|---|---|
| Vercel | Production Edge Hosting for Next.js Frontend |
| Railway | Production Container Hosting for Strapi Backend & PostgreSQL Database |
| ImgBB API | Cloud CDN image hosting for blog covers & thumbnails |
Follow this step-by-step guide to run both the Strapi Backend and Next.js Frontend locally on your machine.
- Node.js:
v20.xor higher installed (Download Node.js) - npm:
v9.xor higher - Git: Installed on your system
git clone https://github.com/Ahsanul-Islam-083/SkillFlow--Learning-Management-System-.git
cd "SkillFlow (Learning Management System)"-
Navigate to the
Backenddirectory:cd Backend -
Install dependencies:
npm install
-
Create your
.envconfiguration file in theBackend/folder:cp .env.example .env
Configure the
.envfile with secure random secrets:HOST=0.0.0.0 PORT=1337 # Secrets (generate random strings or use sample values for local development) APP_KEYS="skillflow_key_1,skillflow_key_2,skillflow_key_3,skillflow_key_4" API_TOKEN_SALT="skillflow_api_token_salt_local_dev" ADMIN_JWT_SECRET="skillflow_admin_jwt_secret_local_dev" TRANSFER_TOKEN_SALT="skillflow_transfer_token_salt_local" JWT_SECRET="skillflow_users_jwt_secret_local_dev" ENCRYPTION_KEY="skillflow_encryption_key_local_dev" # Database Client (SQLite for effortless local development, or postgres) DATABASE_CLIENT=sqlite DATABASE_FILENAME=.tmp/data.db
-
Start the Strapi development server:
npm run develop
-
Open http://localhost:1337/admin in your browser and register your primary Super Admin account.
To enable the frontend to communicate with Strapi smoothly, configure the role permissions in the Strapi Admin Panel:
- Go to Settings β Users & Permissions Plugin β Roles.
- Configure Public role (for unauthenticated visitors):
Course:find,findOneLesson:find,findOneQuiz:find,findOneBlog:find,findOne
- Configure Authenticated role (for logged-in users):
Course:find,findOne,create,update,deleteLesson:find,findOne,create,update,deleteQuiz:find,findOne,create,update,deleteQuiz-submission:find,findOne,createEnrollment:find,findOne,create,update,deleteBlog:find,findOne,create,update,deleteUser:me,find,update
- Click Save.
-
Open a new terminal window and navigate to the
frontenddirectory:cd frontend -
Install dependencies:
npm install
-
Create your
.env.localfile in thefrontend/folder:NEXT_PUBLIC_STRAPI_URL=http://localhost:1337 NEXT_PUBLIC_API_URL=http://localhost:1337/api NEXT_PUBLIC_IMGBB_API_KEY=262dcda3b2740b8e1009a4f1c1a3ee8f
Note: To point the frontend to the live cloud API instead of a local Strapi instance, simply change
NEXT_PUBLIC_STRAPI_URLtohttps://skillflow-learning-management-system-production.up.railway.app. -
Start the Next.js development server:
npm run dev
-
Open http://localhost:3000 in your browser to experience SkillFlow LMS!
| Variable | Description | Example / Default |
|---|---|---|
NEXT_PUBLIC_STRAPI_URL |
Base URL of the Strapi Backend server | http://localhost:1337 or https://skillflow-learning-management-system-production.up.railway.app |
NEXT_PUBLIC_API_URL |
Base REST API endpoint | http://localhost:1337/api |
NEXT_PUBLIC_IMGBB_API_KEY |
Free ImgBB API key for blog cover uploads | your_imgbb_api_key |
| Variable | Description | Example / Default |
|---|---|---|
HOST |
Server host binding | 0.0.0.0 |
PORT |
Server port | 1337 |
APP_KEYS |
Array of session signature secrets | key1,key2 |
API_TOKEN_SALT |
Salt used to generate API tokens | Random 32+ char string |
ADMIN_JWT_SECRET |
Secret used for Strapi Admin JWTs | Random 32+ char string |
TRANSFER_TOKEN_SALT |
Salt for data transfer tokens | Random 32+ char string |
JWT_SECRET |
Secret for Users & Permissions JWT | Random 32+ char string |
DATABASE_CLIENT |
Database engine (sqlite or postgres) |
sqlite |
DATABASE_URL |
Full connection string (when using PostgreSQL) | postgres://user:pass@host:5432/dbname |
SkillFlow (Learning Management System)/
βββ README.md # Comprehensive Platform Documentation
βββ Backend/ # Strapi v5 Headless CMS Backend
β βββ config/ # Server, database, admin & middleware configs
β β βββ admin.js
β β βββ api.js
β β βββ database.js # PostgreSQL & SQLite dynamic database connector
β β βββ middlewares.js # CORS & security headers
β β βββ server.js
β βββ src/
β β βββ api/ # REST API Endpoints & Content-Type Schemas
β β β βββ blog/ # Blog articles schema & controllers
β β β βββ course/ # Course tracks schema & controllers
β β β βββ enrollment/ # Student enrollment records & progress
β β β βββ lesson/ # Sequential video lectures & content
β β β βββ quiz/ # Timed MCQ assessments & questions
β β β βββ quiz-submission/ # Student quiz attempts & graded scores
β β βββ components/
β β β βββ quiz-elements/ # Repeatable MCQ Question components
β β βββ extensions/
β β β βββ users-permissions/ # Custom /users/me endpoint with role population
β β βββ index.js # Bootstrap proxy settings
β βββ package.json
β βββ .env.example
β
βββ frontend/ # Next.js 16 (React 19) App Router Application
βββ public/ # Static assets, icons, and logos
βββ src/
β βββ app/ # App Router Pages & Layouts
β β βββ layout.js # Root layout with ThemeProvider & AuthProvider
β β βββ page.js # Landing page (Hero, Features, Top Courses, Blogs)
β β βββ about/ # About Us & Interactive FAQ page
β β βββ login/ # Authentication sign-in
β β βββ register/ # Learner account registration
β β βββ profile/ # Profile management & password update
β β βββ courses/ # Public course catalog
β β β βββ page.jsx # Searchable catalog with category & level filters
β β β βββ [slug]/ # Course detail overview
β β β βββ page.jsx # Course syllabus, free preview & enroll CTA
β β β βββ learn/page.jsx # Distraction-free video learning player
β β β βββ quiz/[quizId]/ # Timed MCQ test player & results review
β β βββ blogs/ # Public publication & engineering guides
β β β βββ page.jsx # Blog grid with reading time & tags
β β β βββ [slug]/page.jsx # Markdown article reader with author bio
β β βββ dashboard/ # Role-Guarded Dashboards
β β βββ layout.jsx # Dynamic role-aware sidebar navigation layout
β β βββ student/page.jsx # Student learning workspace & metrics
β β βββ instructor/ # Instructor authoring studio & course builder
β β βββ manager/ # Editorial studio & blog publisher
β β βββ admin/page.jsx # Admin command center & RBAC role switcher
β βββ components/ # Modular Component Architecture
β β βββ common/ # Modals, badges, progress bars, Markdown renderer
β β βββ courses/ # Course cards, grids, and live filter bars
β β βββ dashboard/ # Stat cards, banners, and admin tables
β β βββ home/ # Hero section, feature grids, role CTAs
β β βββ layout/ # Navbar, footer, and theme toggle button
β βββ context/
β β βββ AuthContext.jsx # Role normalization, login, register, OAuth state
β βββ lib/
β βββ api.js # Unified Strapi API client with JWT support
β βββ imgbb.js # ImgBB image upload utility
β βββ utils.js # Tailwind class merging helper (clsx + twMerge)
βββ package.json
βββ next.config.mjs
The Strapi backend exposes a unified RESTful API:
| Method | Endpoint | Description | Auth Required |
|---|---|---|---|
POST |
/api/auth/local |
Authenticate user with identifier and password | No |
POST |
/api/auth/local/register |
Register new student account | No |
GET |
/api/users/me?populate=role |
Retrieve current user profile with assigned role | Yes (Bearer) |
POST |
/api/auth/change-password |
Update account password | Yes (Bearer) |
GET |
/api/courses?populate=* |
List all available course tracks | No |
POST |
/api/courses |
Create new course track | Yes (Instructor/Manager/Admin) |
PUT |
/api/courses/:id |
Update existing course syllabus or metadata | Yes (Instructor/Manager/Admin) |
DELETE |
/api/courses/:id |
Delete course track | Yes (Instructor/Manager/Admin) |
GET |
/api/enrollments |
List user enrollments with progress data | Yes (Bearer) |
POST |
/api/enrollments |
Enroll user in a course track | Yes (Bearer) |
PUT |
/api/enrollments/:id |
Sync lesson completion & course progress | Yes (Bearer) |
POST |
/api/quiz-submissions |
Submit quiz attempt and store score result | Yes (Bearer) |
GET |
/api/blogs?populate=* |
List all published blog articles | No |
POST |
/api/blogs |
Create new blog post with Markdown content | Yes (Manager/Admin) |
PUT |
/api/users/:id |
Update user role (RBAC assignment) | Yes (Admin) |
DELETE |
/api/users/:id |
Delete user account | Yes (Admin) |
- Link your GitHub repository to Railway.
- Provision a PostgreSQL database instance on Railway.
- Configure the backend service root directory to
/Backend. - Add the required environment variables:
DATABASE_CLIENT=postgresDATABASE_URL=${{Postgres.DATABASE_URL}}APP_KEYS,API_TOKEN_SALT,ADMIN_JWT_SECRET,JWT_SECRET,ENCRYPTION_KEY
- Railway will automatically build and expose the Strapi CMS with SSL.
- Import your GitHub repository to Vercel.
- Set the Root Directory to
frontend. - Add environment variables:
NEXT_PUBLIC_STRAPI_URL=https://skillflow-learning-management-system-production.up.railway.appNEXT_PUBLIC_API_URL=https://skillflow-learning-management-system-production.up.railway.app/apiNEXT_PUBLIC_IMGBB_API_KEY=your_imgbb_key
- Deploy! Vercel handles automated CI/CD builds on every git push.
- Author: Ahsanul Islam
- Organization: CPS Academy
- License: MIT License β open for academic, personal, and commercial learning applications.
β If you find this project helpful, please consider starring the repository! β