CrossComITS is a modern learning management platform designed for creating, managing, and delivering interactive educational content. Built with a monorepo architecture using NX, the platform combines powerful content authoring tools with H5P integration for rich, interactive learning experiences.
Homepage |
Main Dashboard |
Login |
Collection Overview |
Lesson Details |
FAQ |
About Page |
Management Dashboard |
Lesson Management |
Your content |
Content Management |
- Interactive Content Creation: Rich text editor with support for multimedia, formatting, and H5P interactive elements
- H5P Integration: Full integration with H5P content types for quizzes, presentations, interactive videos, and more
- Course Management: Hierarchical organization of courses, modules, and lessons
- User Management: Role-based access control (Admin, Teacher, Student)
- Media Library: Centralized storage and management of media assets
- Progressive Web App: Installable web application with offline capabilities
- Responsive Design: Mobile-first design that works on all devices
- RESTful API: Well-documented backend API with Swagger/OpenAPI
- Infrastructure as Code: AWS deployment managed with Pulumi
This project is organized as an NX monorepo containing:
crosscom-its/
βββ apps/
β βββ frontend/ # React-based web application
β βββ server/ # NestJS backend API
β βββ infrastructure_frontend/ # Pulumi infrastructure for frontend
β βββ infrastructure_server/ # Pulumi infrastructure for backend
βββ libs/
β βββ shared-nest/ # Shared NestJS utilities and modules
βββ art/ # Screenshots and visual assets
- React 18 - Modern UI library
- Material-UI (MUI) - Component library
- React Router - Client-side routing
- Zustand - State management
- Slate.js - Rich text editor
- H5P React - Interactive content integration
- i18next - Internationalization
- Vite - Fast build tool and dev server
- NestJS 10 - Progressive Node.js framework
- TypeORM - SQL database ORM
- MySQL - Primary database
- MongoDB - H5P content storage
- Redis - Caching layer
- AWS S3 - File storage
- Passport JWT - Authentication
- Swagger - API documentation
- Pulumi - Infrastructure as Code
- AWS - Cloud hosting platform
- Docker - Containerization
- NX - Monorepo management
- TypeScript - Type-safe JavaScript
- ESLint & Prettier - Code quality
- Jest & Vitest - Testing frameworks
- Playwright - E2E testing
Before you begin, ensure you have the following installed:
- Node.js 18+ - JavaScript runtime
- npm - Package manager
- MySQL - Database server
- MongoDB - NoSQL database for H5P
- Redis - Caching server
- FFmpeg - Media processing (required for video handling)
macOS:
brew install ffmpegUbuntu/Debian:
sudo apt-get update
sudo apt-get install ffmpegWindows: Download from ffmpeg.org and add to PATH
- Clone the repository
git clone <repository-url>
cd crosscom-its- Install dependencies
npm install --legacy-peer-deps- Configure environment variables
Create a .env file in apps/server/src/assets/ based on the following template:
NODE_ENV=local
FRONTEND_URL=http://localhost:4200
# Database Configuration
DATABASE_HOST=localhost
DATABASE_PORT=3306
DATABASE_USER=root
DATABASE_PASSWORD=your_password
DATABASE=crosscom_its
# JWT Authentication
JWT_SECRET=your_secret_key_here
# Server Configuration
PORT=3001
# AWS S3 Storage
S3_BUCKET_NAME=crosscom-its-bucket
H5P_CONTENT_S3_BUCKET=h5p-content
H5P_TEMPORARY_S3_BUCKET=h5p-temp
# MongoDB for H5P Storage
H5P_MONGODB_URL=localhost
H5P_MONGODB_USER=root
H5P_MONGODB_PASSWORD=your_mongodb_password
# Redis Cache
H5P_REDIS_HOST=localhost
H5P_REDIS_PORT=6379
# SMTP Email Configuration
SMTP_HOST=smtp.gmail.com
SMTP_PORT=465
SMTP_SECURE=true
SMTP_USER=your_email@gmail.com
SMTP_PASSWORD=your_app_password
SMTP_FROM_NAME=CrossComITS Platform
SMTP_FROM_EMAIL=your_email@gmail.com- Set up databases
MySQL:
mysql -u root -p
CREATE DATABASE crosscom_its;MongoDB:
# Start MongoDB service
mongod --dbpath /path/to/dataRedis:
# Start Redis service
redis-server- Run database migrations
npx nx run server:migration:runStart the backend server:
npx nx run server:serveThe API will be available at http://localhost:3001
Start the frontend application:
npx nx run frontend:serveThe web app will be available at http://localhost:4200
Run both concurrently:
npx nx run-many --target=serve --projects=server,frontendBuild all applications:
npx nx run-many --target=build --allBuild specific app:
npx nx build server
npx nx build frontendWhen running the server, Swagger API documentation is available at:
http://localhost:3001/api/docs
This provides interactive documentation for all available endpoints.
Run all tests:
npx nx run-many --target=test --allRun tests for specific app:
npx nx test server
npx nx test frontendRun E2E tests:
npx nx e2e frontend-e2eTest with coverage:
npx nx test server --coverageLinting:
npx nx run-many --target=lint --allFormat code:
npx prettier --write .Type checking:
npx nx run-many --target=type-check --all-
apps/frontend/- React web application with Material-UI- Handles user interface and interaction
- Integrates H5P content player
- Progressive Web App capabilities
-
apps/server/- NestJS backend API- RESTful API endpoints
- Database management with TypeORM
- File upload and processing
- Authentication and authorization
-
apps/infrastructure_frontend/- Frontend infrastructure- Pulumi configuration for AWS CloudFront
- S3 bucket for static hosting
- CDN configuration
-
apps/infrastructure_server/- Backend infrastructure- Pulumi configuration for AWS ECS
- Application Load Balancer
- RDS database instances
- S3 buckets for storage
libs/shared-nest/- Shared NestJS utilities- Common decorators
- Swagger configuration
- Shared DTOs and entities
- Utility functions
- Configure AWS credentials:
aws configure- Deploy infrastructure:
cd apps/infrastructure_server
pulumi up- Deploy frontend infrastructure:
cd apps/infrastructure_frontend
pulumi upThe application supports different environments:
local- Local developmentdevelopment- Development serverstaging- Staging environmentproduction- Production environment
Configure the NODE_ENV variable in your .env file accordingly.
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes following conventional commits (
git commit -m 'feat: add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project uses Conventional Commits:
feat:- New featuresfix:- Bug fixesdocs:- Documentation changesstyle:- Code style changes (formatting, etc.)refactor:- Code refactoringtest:- Adding or updating testschore:- Maintenance tasks
This project is licensed under the MIT License - see the LICENSE file for details.
Port already in use:
# Kill process on port 3001 (backend)
lsof -ti:3001 | xargs kill -9
# Kill process on port 4200 (frontend)
lsof -ti:4200 | xargs kill -9Database connection errors:
- Ensure MySQL is running:
mysql.server start - Check credentials in
.envfile - Verify database exists:
SHOW DATABASES;
MongoDB connection issues:
- Ensure MongoDB is running:
brew services start mongodb-community - Check MongoDB URL in
.envfile
Redis connection issues:
- Ensure Redis is running:
redis-cli ping - Should return
PONGif running correctly
FFmpeg not found:
- Verify installation:
ffmpeg -version - Ensure FFmpeg is in your system PATH
NPM install fails:
- Use
--legacy-peer-depsflag:npm install --legacy-peer-deps - Clear cache:
npm cache clean --force
For issues and questions:
- Create an issue in the GitHub repository
- Check existing documentation in the
/appssubdirectories - Review the API documentation at
/api/docs
Thans go to these awesome contributors:
Future enhancements planned:
- Enhanced analytics and reporting
- Advanced user progress tracking
- Mobile native applications
- Real-time collaboration features
- Advanced quiz and assessment tools
- Integration with external LMS systems
- Multi-language support expansion
- Advanced media editing capabilities
Built with β€οΈ using NX, NestJS, and React










