Modular, microservices-based ERP system for the NovaCampus higher education alliance (multi-campus management, academic records, billing, scheduling, AI assistance, etc.).
Built with Next.js (frontend), Node/Express + Sequelize (services), PostgreSQL/Mongo/Redis, Docker, Nginx gateway.
# 1. Copy environment template and customize (see below for test credentials)
copy .env.exemple .env
# 2. Clean previous images (recommended for fresh build)
docker compose down --rmi all
# 3. Build and start the entire stack
docker compose up -d --buildWait until you see healthy services in docker compose ps and the frontend log line like:
nova-frontend | GET / 200 in 74ms (next.js: 5ms, application-code: 69ms)
The application is then available at:
- https://localhost (via outer Nginx with TLS termination - recommended)
- http://localhost:3000 (direct to Next.js frontend - useful for dev)
- Copy
.env.exemple→.env - Key variables are documented inline in
.env.exemple NODE_ENV=developmentenables more logs and (optionally) test credentials.- Frontend uses
NEXT_PUBLIC_*vars for API base (proxied through gateway/nginx in the stack).
For rapid testing of role-based features and redirects (login page + dashboards):
-
In your
.env, set:ENABLE_TEST_CREDENTIALS=true -
Recreate the IAM service (env changes only take effect on container creation!):
docker compose up -d --force-recreate iam-service
(Include --build if you also edited code.)
-
Use these accounts on the login page (
/login):Role Email Password Redirects to Student student@test.com student123 /dashboard/student Teacher teacher@test.com teacher123 /dashboard/teacher Admin admin@test.com admin123 /dashboard/admin Executive executive@test.com executive123 /dashboard/executive
These accounts are seeded when ENABLE_TEST_CREDENTIALS=true (and you recreated the container after setting it in .env). If the variable is missing/empty/"false"/other value it defaults to false and any existing test accounts are removed on startup (so the credentials will stop working after recreate). These must never be enabled in production.
See services/iam-service/README.md for the full IAM API documentation, endpoints, and more details on test seeding.
A detailed test script lives at scripts/test-scheduling.js (Node.js, uses native fetch).
node scripts/test-scheduling.jsIt exercises:
- Full rooms + timetables CRUD + all filters
- Conflict detection (room/instructor, exact/partial/1-min/touching/different-sem/year, updates)
- Edge cases (bad times, missing fields, duplicates, large payloads, inverted times, 0/negative values)
- Security: login with test creds, httpOnly cookie capture & forwarding via gateway, unauthenticated calls, tampered cookies, bad logins, SQL-injection style payloads in IDs/bodies (verifies safe handling + no data loss)
It requires test credentials (ENABLE_TEST_CREDENTIALS=true in .env + docker compose up -d --force-recreate iam-service). If not seeded the script aborts with instructions. This keeps it dev-only (works on develop/feature branches with local .env).
Always run against a full rebuilt stack: docker compose up -d --build. The script cleans up its TST* test data.
- Root / Overview: This file
- IAM Service (auth, users, JWT, roles): services/iam-service/README.md
- Frontend:
frontend/nova-campus-web/(Next.js + Tailwind + shared design system) - Gateway:
services/gateway/nginx.conf(API routing + prefix stripping) - Other services: academic (students/grades/attendance), scheduling, billing, reporting, ai-agent
- Git workflow & versioning: docs/NovaCampus_Git_Versioning_Guide.md
Visiting / will:
- Redirect to
/loginif not authenticated. - After successful login, redirect to the appropriate dashboard based on the user's role (
student/teacher/admin/executive).
The login page supports the full theme system (light/dark/high-contrast toggle, persisted).
- WCAG / RGAA friendly (high contrast mode, proper contrast calculation using relative luminance, keyboard accessible, ARIA).
- GDPR/RGPD compliant auth flows with privacy notices.
- Before every commit: run
.\scripts\sync-gitkeep.ps1 - Prefer English everywhere (code, docs, messages).
- Use shared components (
components/shared/) and design tokens inglobals.cssto avoid duplication. - Test with the full
docker composestack when backend is involved.