How to use the Excellence Schools Portal
Role-based guides plus deployment, security, backups and architecture notes.
Admin Guide
- 1Sign in with your admin Login ID.
- 2Admit students under Students → Admit Student; assign a class and parent.
- 3Create parent accounts under Parents → Create Parent, then use “Link a Ward”.
- 4Create teachers under Teachers → Create Teacher and assign classes/subjects.
- 5Create sessions/terms under Sessions & Terms and set the current ones.
- 6Manage subjects under Subjects (add or deactivate without deleting history).
- 7Create report cards under Report Cards → Create Report, enter marks, then Publish and Finalize.
- 8Approve teacher question sets under Approvals, then Publish to students.
- 9Adjust grading, behaviour keys and school info under Settings.
- 10Review all actions under Audit Logs (read-only).
Teacher Guide
- 1Sign in with your teacher Login ID.
- 2Open Question Bank → New Question Set.
- 3Pick your class, subject, session and term (only those assigned to you).
- 4Add questions: multiple choice, true/false or short answer. Set marks and the correct answer.
- 5Save as Draft, then Submit for Approval. You cannot publish directly to students.
- 6Download the CSV template to import questions in bulk.
- 7Use Duplicate to reuse a previous term's set without altering the original.
- 8If rejected, read the admin's reason, edit, and resubmit.
- 9Student practice results appear in your dashboard overview.
Parent Guide
- 1Sign in with your parent Login ID.
- 2Your wards appear on the dashboard. Tap a ward to see their reports.
- 3Reports are grouped by session and term. Tap View Report to open a report card.
- 4Tap Print Report Card or Download PDF to print or save an A4 PDF.
- 5Tap Save Offline to keep a report readable without internet (stored securely on your device).
- 6Scan the QR code on any report card to verify it is genuine on the public verify page.
- 7Only your own wards' reports are visible — you cannot search other students.
- 8If information looks wrong, contact the school office.
Student Guide
- 1Sign in with your student Login ID.
- 2Open Practice and choose a subject and a published practice set.
- 3Read the instructions, then Start. A countdown timer runs for timed tests and auto-submits.
- 4Answer each question; your progress is saved automatically if the page refreshes.
- 5Submit to see your score, correct answers and explanations instantly.
- 6Your dashboard shows average score, highest score and topics to revisit.
- 7When offline, attempts are saved locally and synced automatically when you reconnect.
Architecture & Deployment
- Stack: React + TypeScript + Tailwind CSS frontend; Node/Express + TypeScript API; PostgreSQL database; PWA with service worker + IndexedDB offline storage.
- Database: Normalized PostgreSQL with foreign keys and soft deletes — users, students, parents, teachers, classes, subjects, sessions, terms, report_cards, question_sets, attempts, audit_logs, school_settings. This demo mirrors that schema in the browser.
- Frontend deploy: Vercel/Netlify. Backend: Render/Railway. Database: managed PostgreSQL (daily automated, weekly retained, monthly archive backups).
- Subdomain DNS: Add a CNAME record — Host:
portal, Target: your hosting provider's assigned target — in your domain provider's DNS panel. - SSL/HTTPS: Enable automatic HTTPS via your hosting provider; force HTTP→HTTPS redirect. No passwords or student data over HTTP.
- Environment variables:
DATABASE_URL,SESSION_SECRET,STORAGE_BUCKET,ARGON2/BCRYPTcost factor. Server secrets only — never use a VITE_ prefix.
Security & Privacy
- Passwords hashed with Argon2/bcrypt server-side; secure HTTP-only session cookies; rate-limited login.
- Role-based authorization checked on the server for every sensitive action — never the frontend alone.
- Report cards use unique, unpredictable verification tokens — no guessable public student URLs.
- Verification pages show only minimal authenticity info (NDPA 2023 compliant).
- Parents see only their own wards; teachers only their assigned classes/subjects.
- Offline report storage is scoped per authenticated parent; no other student's data is cached.
- Correct answers are never exposed before a controlled-marking submission.
Backups
- Daily automated PostgreSQL backups (point-in-time where supported).
- Weekly retained backups for the past ~4 weeks; monthly archive.
- Restore: run the latest dump against a fresh managed instance, update
DATABASE_URL, and restart the backend. - Generated report-card PDFs are also persisted to object storage as an immutable audit copy.