A production-ready full-stack school management system combining a Learning Management System (LMS) and Student Information System (SIS) for ICCT Colleges.
- Features
- Tech Stack
- Project Structure
- Getting Started
- Default Accounts
- API Documentation
- Deployment
- Screenshots
- Home, About, Contact, FAQ, Privacy, Terms pages
- News & Announcements feed
- Newsletter subscription
- Search bar with auto-suggest
- System Status page
- Help Center / Knowledge Base
- Custom 404 page
- Fully responsive (mobile, tablet, desktop)
- Dashboard with schedule, grades, and announcements
- View prelim/midterm/final grades with equivalency
- Weekly class schedule viewer
- Access and download course learning materials
- Edit personal profile
- View assigned course sections and class rosters
- Encode and submit student grades online
- Upload and manage course learning materials per section
- View teaching schedule
- System dashboard with live statistics and charts
- User management (approve, suspend, delete accounts)
- Course and section management (CRUD)
- Create and publish announcements
- Finalize submitted grades
- Trigger manual or review automated backups
- Full audit log
- bcrypt password hashing (12 salt rounds)
- JWT access + refresh token authentication
- Role-based access control (Student / Faculty / Admin / Super Admin)
- Helmet.js HTTP security headers
- Rate limiting (100 req/15min)
- Input validation and XSS sanitization
- Daily automated PostgreSQL dump (2:00 AM Asia/Manila)
- C++ microservice encrypts backup file using AES-256-CBC
- Encrypted file uploaded to Google Drive via API
- Backup status logged to database
| Layer | Technology |
|---|---|
| Frontend | React 18 + Vite + Tailwind CSS |
| Backend | Node.js 20 + Express 4 |
| Database | PostgreSQL 15 |
| Auth | JWT (access + refresh) + bcrypt |
| C++ Service | AES-256 encryption microservice |
| File Storage | Local + Google Drive (backups) |
| Deployment | Vercel / Railway / Supabase |
smartcampus-portal/
βββ frontend/ # React + Vite app
β βββ src/
β β βββ components/
β β β βββ layout/ # Navbar, Footer, PortalLayout, PublicLayout
β β βββ context/ # AuthContext (JWT state)
β β βββ pages/
β β β βββ auth/ # Login, Register
β β β βββ public/ # Home, About, Contact, FAQ, etc.
β β β βββ portal/
β β β βββ student/ # Dashboard, Grades, Schedule, Materials
β β β βββ faculty/ # Dashboard, Grades encoder, Materials
β β β βββ admin/ # Dashboard, Users, Courses, Backup
β β βββ styles/ # Tailwind + custom CSS
β β βββ utils/ # Axios API client with auto-refresh
β βββ package.json
β
βββ backend/ # Node.js + Express API
β βββ src/
β β βββ config/ # PostgreSQL pool
β β βββ controllers/ # 11 controllers
β β βββ middleware/ # Auth, validation, upload
β β βββ routes/ # 12 route files
β β βββ services/ # Backup, Scheduler
β β βββ utils/ # API response helpers, logger
β βββ package.json
β
βββ cpp-service/ # C++ AES-256 microservice
β βββ src/main.cpp
β βββ CMakeLists.txt
β βββ Dockerfile
β
βββ database/
β βββ migrations/ # 001_initial_schema.sql (16 tables)
β βββ seeds/ # 001_seed_data.sql (demo data)
β
βββ docs/
β βββ srs/ # Software Requirements Specification
β βββ api/ # REST API Documentation (45+ endpoints)
β βββ DEPLOYMENT_GUIDE.md
β
βββ deployment/
βββ docker-compose.yml
git clone https://github.com/YOUR_USERNAME/smartcampus-portal.git
cd smartcampus-portalpsql -U postgres -c "CREATE DATABASE smartcampus_db;"
psql -U postgres -d smartcampus_db -f database/migrations/001_initial_schema.sql
psql -U postgres -d smartcampus_db -f database/seeds/001_seed_data.sqlcd backend
cp .env.example .envEdit .env and fill in your values:
DB_HOST=localhost
DB_PORT=5432
DB_NAME=smartcampus_db
DB_USER=postgres
DB_PASSWORD=your_password
JWT_SECRET=your_secret_key_here
JWT_REFRESH_SECRET=your_refresh_secret_herecd backend
npm install
npm run dev
# β API running at http://localhost:5000cd frontend
npm install
npm run dev
# β App running at http://localhost:5173Open http://localhost:5173 in your browser.
These are seed data accounts for testing. Change all passwords in production.
| Role | Password | |
|---|---|---|
| Super Admin | superadmin@icctsmartcampus.edu.ph | SmartCampus@2024! |
| Admin | admin@icctsmartcampus.edu.ph | SmartCampus@2024! |
| Faculty | jdela.cruz@icctsmartcampus.edu.ph | SmartCampus@2024! |
| Student | student1@gmail.com | SmartCampus@2024! |
| Student | student2@gmail.com | SmartCampus@2024! |
Base URL: http://localhost:5000/api
| Method | Endpoint | Description |
|---|---|---|
| POST | /auth/register |
Register new account |
| POST | /auth/login |
Login and receive tokens |
| POST | /auth/refresh |
Refresh access token |
| GET | /auth/me |
Get current user profile |
| GET | /students |
List all students (Admin/Faculty) |
| GET | /students/:id |
Get student by ID |
| PUT | /students/:id |
Update student profile |
| GET | /students/:id/grades |
Get student grades |
| GET | /students/:id/schedule |
Get student schedule |
| GET | /faculty |
List all faculty (Admin) |
| GET | /courses |
List all courses |
| POST | /courses |
Create course (Admin) |
| POST | /enrollments |
Enroll student in section |
| POST | /grades |
Submit grades (Faculty) |
| GET | /grades/:studentId |
Get grades by student |
| GET | /announcements |
List public announcements |
| POST | /announcements |
Create announcement |
| GET | /notifications |
Get user notifications |
| PUT | /notifications/read-all |
Mark all as read |
| GET | /materials/section/:id |
Get materials for section |
| POST | /materials |
Upload material (Faculty) |
| POST | /newsletter/subscribe |
Subscribe to newsletter |
| GET | /admin/dashboard |
Admin statistics |
| GET | /admin/users |
List all users |
| PUT | /admin/users/:id/status |
Update user status |
| POST | /backup/run |
Trigger manual backup |
Full API docs: docs/api/API_DOCUMENTATION.md
| Service | Platform |
|---|---|
| Frontend | Vercel |
| Backend | Railway |
| Database | Supabase |
| C++ Service | Railway (Docker) |
| Backups | Google Drive API |
See full instructions: docs/DEPLOYMENT_GUIDE.md
The cpp-service/ directory contains a standalone HTTP server written in C++ that handles AES-256-CBC file encryption for database backups.
# Build (Linux/macOS/WSL)
cd cpp-service
g++ -std=c++17 -O2 -o smartcampus-service src/main.cpp -lssl -lcrypto -lpthread
# Run
./smartcampus-service 8080The Node.js backend calls this service automatically during backup. If unavailable, it falls back to uploading the unencrypted dump.
This project is licensed under the MIT License β see LICENSE for details.
Built as a capstone-level school portal project for ICCT Colleges.
Keywords: school portal, student information system, learning management system, LMS, SIS, React, Node.js, PostgreSQL, Express, Tailwind CSS, school management system, academic portal, ICCT, Philippines