THIS SOFTWARE IS IN EARLY DEVELOPMENT. DO NOT RELY ON IT FOR DEPLOYMENT
A full-stack learning management system for educational institutions. Built with React, TypeScript, Express, and SQLite.
- Visual lesson builder with drag-and-drop interface
- Assessment builder with multiple question types
- Course and topic organization
- Media support (images, videos, documents)
- Autosave functionality
- Role-based access control (Admin, Teacher, Student)
- CSV import/export for bulk user management
- Password management with forced password change
- User archiving
- Flexible assignment system
- Progress tracking
- Automated grading for objective questions
- Manual review for subjective answers
- Class marksheets
- Global search (Ctrl+K)
- Complete backup and restore
- Light and dark themes
- Responsive design
- JWT authentication
- bcrypt password hashing
- Input validation
- SQL injection protection
- CORS protection
- Security headers
Frontend: React 18, TypeScript, React Router, Vite
Backend: Node.js, Express, TypeScript, SQLite
Authentication: JWT, bcryptjs
Database: SQLite with better-sqlite3
- Node.js 18+
- npm or yarn
- Git
- Clone the repository:
git clone https://github.com/06benste/schoolmasterVLE
cd schoolmasterVLE- Install dependencies:
# Backend
cd backend
npm install
# Frontend
cd ../frontend
npm install- Build the application:
# Backend
cd backend
npm run build
# Frontend
cd ../frontend
npm run build- Start the server:
# From the root directory
npm start- Access at
http://localhost:3000and complete the setup wizard
- Digital Ocean account
- GitHub account with repository access
-
Log in to your Digital Ocean account and navigate to the App Platform
-
Click "Create App" and select "GitHub" as your source
-
Authorize Digital Ocean to access your GitHub account and select the
schoolmasterVLErepository -
Configure your app:
- Name: schoolmaster-vle (or your preferred name)
- Branch: main
- Source Directory: /
-
Configure the build settings:
- Build Command:
cd backend && npm install && npm run build && cd ../frontend && npm install && npm run build
- Run Command:
cd backend && npm start
-
Set environment variables in the App Platform dashboard:
NODE_ENV=production PORT=3000 JWT_SECRET=your-secure-random-secret-key-here JWT_EXPIRES_IN=7d DATABASE_PATH=./data/app.db UPLOADS_DIR=./data/uploads -
Configure the HTTP port to 3000
-
Add a persistent volume for data storage:
- Mount path:
/workspace/backend/data - Size: 5GB (or as needed)
- Mount path:
-
Review and create the app
-
Once deployed, access your app URL and complete the initial setup wizard
- The SQLite database and uploaded files are stored in the persistent volume
- Make sure to set a strong JWT_SECRET value
- The first user created through the setup wizard will be the admin
- Regular backups can be performed through the admin panel (Import/Export section)
To update your deployed app:
- Push changes to your GitHub repository
- Digital Ocean will automatically detect changes and redeploy
- Or manually trigger a deployment from the Digital Ocean dashboard
Admin:
- Full system access
- User and course management
- System configuration
- Import/export and backups
Teacher:
- Create and edit lessons and assessments
- Manage assignments
- Grade student work
- Access assigned classes
Student:
- View assigned content
- Submit assignments
- Track progress
For local development, create a .env file in the backend directory:
PORT=3000
NODE_ENV=development
DATABASE_PATH=./data/app.db
JWT_SECRET=your-secret-key-here
JWT_EXPIRES_IN=7d
UPLOADS_DIR=./data/uploadsThe system uses SQLite with tables for users, classes, lessons, assessments, courses, topics, assignments, attempts, and settings.
Run the development servers:
# Backend (port 3000)
cd backend
npm run dev
# Frontend (port 5173)
cd frontend
npm run devUse the admin panel to backup and restore your data:
- Log in as admin
- Navigate to Admin > Import/Export
- Use "Complete Backup (ZIP)" to download all data
- Use "Import Complete Backup" to restore from a backup file
Database errors: Check that backend/data/app.db exists and has proper permissions
File upload issues: Verify backend/data/uploads directory exists and is writable
Authentication issues: Ensure JWT_SECRET is set in environment variables
Build errors: Clear node_modules and reinstall dependencies
MIT License