2.8 KiB
2.8 KiB
Africa Alert - Smart School PWA
Modern React PWA school management system with Node.js backend, containerized for easy Docker deployment.
Features
- 📱 Progressive Web App - Installable on any device, works offline
- 🐳 One-Click Docker Setup - Single
docker-compose upto get started - 👨🎓 Student Management - Enrollment, profiles, attendance
- 👩🏫 Teacher Management - Staff profiles, assignments
- 📚 Class Management - Subjects, schedules, grading
- 💰 Fee Management - Invoices, payments, reporting
- 📊 Dashboard - Real-time analytics and insights
Quick Start
# Clone and start
cd africa-alert-pwa
docker-compose up -d
# Access the app at http://localhost:3000
Tech Stack
- Frontend: React 18 + Vite + TypeScript
- Backend: Node.js + Express
- Database: SQLite (file-based, easy backups)
- Container: Docker + Docker Compose
Project Structure
africa-alert-pwa/
├── client/ # React frontend
├── server/ # Node.js backend
├── docker-compose.yml
├── Dockerfile.client
└── Dockerfile.server
Development
# Frontend (client folder)
cd client && npm install && npm run dev
# Backend (server folder)
cd server && npm install && npm run dev
# Docker
docker-compose up --build
Default Login
- Admin: admin@school.com / admin123
Production deployment security checklist
Before going live, ensure every item below is set. The server will refuse to start in production (NODE_ENV=production) if any of the required items are missing.
NODE_ENV=productionis set in the environmentJWT_SECRETis set to a 48-byte random value. Generate one with:node -e "console.log(require('crypto').randomBytes(48).toString('hex'))"ALLOWED_ORIGINSis set to the school domain only (comma-separated if multiple). Example:ALLOWED_ORIGINS=https://school.example.comDB_PATHpoints to a persistent volume mount, not./data/school.dbin a transient containerALLOW_CLIENT_OFFLINE_MINTis set tofalseunless you specifically need offline auth. The dev default istrueso the offline flow can be tested.- PAYNOW_* env vars are set if the school is collecting fees. Sync will no-op without
SUPABASE_*env vars. - No
.envfile is committed to git. The repo's.gitignorecovers it. - A SQLite backup cron is running (every 12h) to defend against power-loss corruption during load-shedding
- The Docker compose mounts
data/,uploads/, andbackups/as named volumes, not bind mounts
Environment variables reference
See server/.env.example for the full list with comments. The required-in-prod set is enforced by server/src/config/index.js — the server crashes with a FATAL log line if any are missing.