# Africa Alert - Screen & Navigation Documentation ## Overview Africa Alert is a Progressive Web App (PWA) for school management with **4 distinct user roles**, each with their own personalized dashboard and navigation. **Roles:** - πŸ‘” **Admin** - Full school management access (8 nav items) - πŸ‘©β€πŸ« **Teacher** - Teaching and attendance management (5 nav items) - πŸ‘¨β€πŸŽ“ **Student** - Personal portal and attendance view (4 nav items) - πŸ‘¨β€πŸ‘©β€πŸ‘§ **Parent** - Children's progress and fee management (5 nav items) --- ## Navigation Architecture ### Role-Based Navigation The navigation adapts automatically based on the logged-in user's role. Each role sees only the links relevant to their responsibilities. ``` β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ 🏫 Africa Alert [Role-Specific Links...] [Badge] [Avatar] β”‚ β”‚ School Management [Logout] β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` ### Navigation Config by Role #### Admin Navigation (Full Access) | Icon | Label | Route | Description | |------|-------|-------|-------------| | πŸ“Š | Dashboard | `/dashboard/admin` | Overview & stats | | πŸ‘¨β€πŸŽ“ | Students | `/students` | Manage students | | πŸ‘©β€πŸ« | Teachers | `/teachers` | Manage teachers | | πŸ“š | Classes | `/classes` | Manage classes | | πŸ“… | Attendance | `/attendance` | Take/view attendance | | πŸ’° | Fees | `/fees` | Manage fees | | πŸ’¬ | Messages | `/messages` | Internal messaging | | πŸ“… | Events | `/events` | School calendar | ``` β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ 🏫 Africa Alert β”‚ β”‚ School Management β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ πŸ“Š Dashboard β”‚ πŸ‘¨β€πŸŽ“ Students β”‚ πŸ‘©β€πŸ« Teachers β”‚ πŸ“š Classes β”‚ ... β”‚ β”‚ [+ 4 more links] β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` #### Teacher Navigation (Teaching Focus) | Icon | Label | Route | Description | |------|-------|-------|-------------| | 🏠 | Dashboard | `/dashboard/teacher` | Teaching overview | | πŸ“š | My Classes | `/classes` | View assigned classes | | πŸ“‹ | Attendance | `/attendance` | Mark attendance | | πŸ’¬ | Messages | `/messages` | Communication | | πŸ“… | Schedule | `/events` | View calendar | ``` β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ 🏫 Africa Alert β”‚ β”‚ School Management β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ 🏠 Dashboard β”‚ πŸ“š My Classes β”‚ πŸ“‹ Attendance β”‚ πŸ’¬ Messages β”‚ πŸ“… Schedule β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` #### Student Navigation (Personal Portal) | Icon | Label | Route | Description | |------|-------|-------|-------------| | 🏠 | My Dashboard | `/dashboard/student` | Personal portal | | πŸ“… | My Attendance | `/attendance` | View own attendance | | πŸ’¬ | Messages | `/messages` | Inbox | | πŸ“… | Events | `/events` | School events | ``` β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ 🏫 Africa Alert β”‚ β”‚ School Management β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ 🏠 My Dashboard β”‚ πŸ“… My Attendance β”‚ πŸ’¬ Messages β”‚ πŸ“… Events β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` #### Parent Navigation (Children Focus) | Icon | Label | Route | Description | |------|-------|-------|-------------| | 🏠 | Dashboard | `/dashboard/parent` | Children overview | | πŸ‘¨β€πŸ‘©β€πŸ‘§ | Children | `/attendance` | View children's attendance | | πŸ’° | Fees | `/fees` | View & pay fees | | πŸ’¬ | Messages | `/messages` | School communication | | πŸ“… | Events | `/events` | School calendar | ``` β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ 🏫 Africa Alert β”‚ β”‚ School Management β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ 🏠 Dashboard β”‚ πŸ‘¨β€πŸ‘©β€πŸ‘§ Children β”‚ πŸ’° Fees β”‚ πŸ’¬ Messages β”‚ πŸ“… Events β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` --- ## Navigation Bar Components ### 1. Logo & Brand ``` β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ 🏫 Africa Alert β”‚ β”‚ School Mgmt β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` - SVG icon with blue background - App name and subtitle - Clickable β†’ redirects to role dashboard ### 2. Navigation Links - Horizontal list of links (center) - Active state: blue background + blue text - Hover state: light gray background - Icon + label for each link - Responsive: hidden on mobile ### 3. Role Badge ``` β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ ● Admin β”‚ (red background) β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` | Role | Background | Text | Border | |------|------------|------|--------| | Admin | `#fee2e2` | `#991b1b` | `#fecaca` | | Teacher | `#dbeafe` | `#1e40af` | `#bfdbfe` | | Student | `#dcfce7` | `#166534` | `#bbf7d0` | | Parent | `#fef3c7` | `#92400e` | `#fde68a` | ### 4. User Avatar ``` β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ [JS] John Smith β”‚ β”‚ john@school.com β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` - Circular avatar with user initials - Gradient purple background - Full name + email displayed ### 5. Logout Button - Red hover state - Icon + text (text hidden on mobile) --- ## Login Screen **URL:** `/login` **Access:** Public (all users) ### UI Layout ``` β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”‚ 🏫 Africa Alert β”‚ β”‚ β”‚ β”‚ School Management System β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”β”‚ β”‚ β”‚ β”‚ β”‚ πŸ‘” β”‚ β”‚ πŸ‘©β€πŸ«β”‚ β”‚ πŸ‘¨β€πŸŽ“β”‚ β”‚ πŸ‘¨β€πŸ‘©β€πŸ‘§β”‚β”‚ β”‚ β”‚ β”‚ β”‚Adminβ”‚ β”‚Teachβ”‚ β”‚Studβ”‚ β”‚Parentβ”‚β”‚ β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”˜β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ Email: [________________] β”‚ β”‚ β”‚ β”‚ Password: [________________] β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ [ Sign In ] β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ Demo Accounts: β”‚ β”‚ β”‚ β”‚ β€’ admin@school.com / admin123 β”‚ β”‚ β”‚ β”‚ β€’ teacher@school.com / ... β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` ### Features 1. **Role Quick-Select Buttons** - Click to auto-fill credentials - Visual hover feedback - 4 role options 2. **Login Form** - Email + password inputs - Loading state on submit - Error display 3. **Demo Accounts List** - Admin: `admin@school.com` / `admin123` - Teacher: `teacher@school.com` / `teacher123` - Student: `student@school.com` / `student123` - Parent: `parent@school.com` / `parent123` ### Login Flow ``` User clicks role ↓ Credentials auto-fill ↓ User clicks Sign In ↓ JWT token stored in localStorage ↓ Redirect to role-specific dashboard ↓ Navigation updates to show role-appropriate links ``` --- ## Dashboard Screens ### Admin Dashboard (`/dashboard/admin`) **Purpose:** Complete school management overview **Stats Cards:** | Card | Icon | Value | Trend | |------|------|-------|-------| | Students | πŸ‘¨β€πŸŽ“ | 245 | +12% | | Teachers | πŸ‘©β€πŸ« | 28 | +5% | | Classes | πŸ“š | 12 | +3 | | Revenue | πŸ’° | $45K | +18% | **Sections:** - Quick Overview (attendance, fees) - Quick Actions (shortcuts) - System Status **Access:** Full CRUD on all modules --- ### Teacher Dashboard (`/dashboard/teacher`) **Purpose:** Teaching schedule and daily tasks **Stats Cards:** | Card | Icon | Value | |------|------|-------| | My Classes | πŸ“š | 4 | | Periods Today | ⏰ | 6 | | Pending Tasks | πŸ”” | 2 | | Messages | πŸ’¬ | 5 | **Sections:** - My Classes (assigned) - Today's Schedule - Quick Actions **Access:** View classes, mark attendance, send messages --- ### Student Dashboard (`/dashboard/student`) **Purpose:** Personal school portal **Stats Cards:** | Card | Icon | Value | |------|------|-------| | Attendance | πŸ“… | 95% | | Classes | πŸ“š | 3 | | Due Fees | πŸ’° | $500 | | Messages | πŸ’¬ | 2 | **Sections:** - Profile Card (gradient background) - Today's Classes - Attendance Summary - My Fees - Recent Messages **Access:** View own data only --- ### Parent Dashboard (`/dashboard/parent`) **Purpose:** Monitor children's activities **Stats Cards:** | Card | Icon | Value | |------|------|-------| | Children | πŸ‘¨β€πŸ‘©β€πŸ‘§ | 2 | | Total Fees | πŸ’° | $2,850 | | Due | ⚠️ | $850 | | Messages | πŸ’¬ | 3 | **Sections:** - Profile Card - My Children (with attendance + fees) - Quick Actions - Fee Summary **Access:** View children, pay fees --- ## Module Pages ### Classes (`/classes`) **Access:** Admin (CRUD), Teacher (view) ``` β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ Classes & Subjects β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”β”‚ β”‚ β”‚ Classes [+] β”‚ β”‚ Subjects [+] β”‚β”‚ β”‚ β”‚ β”‚ β”‚ β”‚β”‚ β”‚ β”‚ Grade 1 - A (40) [πŸ—‘]β”‚ β”‚ Mathematics (Grade 1) [πŸ—‘] β”‚β”‚ β”‚ β”‚ Grade 2 - A (35) [πŸ—‘]β”‚ β”‚ English (Grade 1) [πŸ—‘] β”‚β”‚ β”‚ β”‚ Grade 3 - A (38) [πŸ—‘]β”‚ β”‚ Science (Grade 1) [πŸ—‘] β”‚β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` ### Attendance (`/attendance`) **Access:** All roles (view/edit varies) ``` β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ Attendance β”‚ β”‚ Date: [2026-01-15] Class: [All Classes β–Ό] [Save] β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”‚ Student β”‚ Present β”‚ Absent β”‚ Late β”‚ Excused β”‚ β”‚ β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ β”‚ β”‚ Alice Johnson β”‚ [●] β”‚ [ ] β”‚ [ ] β”‚ [ ] β”‚ β”‚ β”‚ β”‚ Bob Williams β”‚ [ ] β”‚ [●] β”‚ [ ] β”‚ [ ] β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` ### Fees (`/fees`) **Access:** Admin (full), Parent (view/pay) ``` β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ Fees Management β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”‚βž• Create β”‚ β”‚πŸ“‹ Assign β”‚ β”‚πŸ’° Payment β”‚ β”‚ β”‚ β”‚Fee Group β”‚ β”‚Fees β”‚ β”‚Record β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚ β”‚ β”‚ Student Fees: β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”‚ Student β”‚ Fee β”‚ Amount β”‚ Paid β”‚ Status β”‚ β”‚ β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ β”‚ β”‚ Alice J.β”‚ Tuition β”‚ $5,000 β”‚$3,000 β”‚ 🟑 Partial β”‚ β”‚ β”‚ β”‚ Bob W. β”‚ Tuition β”‚ $5,000 β”‚$5,000 β”‚ 🟒 Paid β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` ### Messages (`/messages`) **Access:** All roles ``` β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ Messages [+ Compose]β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”‚ From β”‚ To β”‚ Subject β”‚ Date β”‚ β”‚ β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ β”‚ β”‚ Admin β”‚ Jane S. β”‚ Meeting... β”‚ Jan 15, 10:30 β”‚ β”‚ β”‚ β”‚ John S. β”‚ Admin β”‚ Question... β”‚ Jan 14, 3:45 β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` ### Events (`/events`) **Access:** All roles ``` β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ Events & Calendar [+ Add] β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”‚ Date β”‚ Title β”‚ Type β”‚ Description β”‚ β”‚ β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ β”‚ β”‚ Jan 15 β”‚ First Day β”‚ πŸ“Œ General β”‚ β”‚ β”‚ β”‚ β”‚ Feb 20 β”‚ Mid-Term Exams β”‚ πŸ“ Exam β”‚ Week-long β”‚ β”‚ β”‚ β”‚ Mar 10 β”‚ Spring Holiday β”‚ πŸ– Holidayβ”‚ Closed β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` --- ## Role Permissions Matrix | Feature | Admin | Teacher | Student | Parent | |---------|:-----:|:-------:|:-------:|:------:| | **Dashboard** | | | | | | View dashboard | βœ“ | βœ“ | βœ“ | βœ“ | | Role-specific stats | βœ“ | βœ“ | βœ“ | βœ“ | | **Users** | | | | | | Manage students | βœ“ | - | - | - | | Manage teachers | βœ“ | - | - | - | | View own profile | βœ“ | βœ“ | βœ“ | βœ“ | | **Academic** | | | | | | Manage classes | βœ“ | - | - | - | | View classes | βœ“ | βœ“ | βœ“ | βœ“ | | Mark attendance | βœ“ | βœ“ | - | - | | View attendance | βœ“ | βœ“ | βœ“ | βœ“ | | **Financial** | | | | | | Manage fees | βœ“ | - | - | - | | View fees | βœ“ | - | βœ“ | βœ“ | | Pay fees | - | - | - | βœ“ | | **Communication** | | | | | | View messages | βœ“ | βœ“ | βœ“ | βœ“ | | Send messages | βœ“ | βœ“ | βœ“ | βœ“ | | **Calendar** | | | | | | Manage events | βœ“ | - | - | - | | View events | βœ“ | βœ“ | βœ“ | βœ“ | **Legend:** βœ“ = Full access, - = No access --- ## Responsive Design ### Breakpoints | Width | Layout | Navigation | |-------|--------|------------| | >1024px | Full | Desktop: all links visible | | 768-1024px | 2-column | Tablet: condensed nav | | <768px | 1-column | Mobile: hamburger menu | ### Mobile Navigation - Hamburger menu icon appears - Full-screen overlay menu - All links listed vertically - Logout button at bottom --- ## Route Structure ``` / β”œβ”€β”€ login # Public β”‚ β”œβ”€β”€ dashboard/ β”‚ β”œβ”€β”€ admin # Admin dashboard β”‚ β”œβ”€β”€ teacher # Teacher dashboard β”‚ β”œβ”€β”€ student # Student dashboard β”‚ └── parent # Parent dashboard β”‚ β”œβ”€β”€ students # Admin only β”œβ”€β”€ teachers # Admin only β”œβ”€β”€ classes # Admin, Teacher β”œβ”€β”€ attendance # All roles β”œβ”€β”€ fees # Admin, Parent β”œβ”€β”€ messages # All roles └── events # All roles ``` ### Route Protection 1. Check if user is authenticated (JWT token) 2. Check if user has required role 3. Redirect unauthorized users to their dashboard --- ## File Structure ``` africa-alert-pwa/ β”œβ”€β”€ client/src/ β”‚ β”œβ”€β”€ components/ β”‚ β”‚ └── Nav.tsx # Role-aware navigation β”‚ β”‚ β”‚ β”œβ”€β”€ pages/ β”‚ β”‚ β”œβ”€β”€ Login.tsx # Login with role select β”‚ β”‚ β”‚ β”‚ β”‚ β”œβ”€β”€ Students.tsx # Admin only β”‚ β”‚ β”œβ”€β”€ Teachers.tsx # Admin only β”‚ β”‚ β”œβ”€β”€ Classes.tsx # Admin, Teacher β”‚ β”‚ β”œβ”€β”€ Attendance.tsx # All roles β”‚ β”‚ β”œβ”€β”€ Fees.tsx # Admin, Parent β”‚ β”‚ β”œβ”€β”€ Messages.tsx # All roles β”‚ β”‚ β”œβ”€β”€ Events.tsx # All roles β”‚ β”‚ β”‚ β”‚ β”‚ └── dashboard/ β”‚ β”‚ β”œβ”€β”€ AdminDashboard.tsx # Full management β”‚ β”‚ β”œβ”€β”€ TeacherDashboard.tsx # Teaching focus β”‚ β”‚ β”œβ”€β”€ StudentDashboard.tsx # Personal portal β”‚ β”‚ └── ParentDashboard.tsx # Children overview β”‚ β”‚ β”‚ β”œβ”€β”€ store/ β”‚ β”‚ └── auth.ts # Zustand auth state β”‚ β”‚ β”‚ β”œβ”€β”€ App.tsx # Routes + protection β”‚ β”œβ”€β”€ main.tsx # Entry point β”‚ └── index.css # Global styles β”‚ β”œβ”€β”€ server/ β”‚ └── src/ β”‚ β”œβ”€β”€ index.js # API routes β”‚ └── database/ β”‚ └── init.js # Schema + seed data β”‚ β”œβ”€β”€ docker-compose.yml β”œβ”€β”€ Dockerfile └── README.md ``` --- ## Key Implementation Details ### Navigation Config ```javascript const NAV_CONFIG = { admin: [ { path: '/dashboard/admin', label: 'Dashboard', icon: LayoutDashboard }, { path: '/students', label: 'Students', icon: GraduationCap }, // ... 8 items ], teacher: [ { path: '/dashboard/teacher', label: 'Dashboard', icon: Home }, { path: '/classes', label: 'My Classes', icon: BookOpen }, // ... 5 items ], // ... }; ``` ### Role Colors ```javascript const ROLE_COLORS = { admin: { bg: '#fee2e2', color: '#991b1b', border: '#fecaca' }, teacher: { bg: '#dbeafe', color: '#1e40af', border: '#bfdbfe' }, student: { bg: '#dcfce7', color: '#166534', border: '#bbf7d0' }, parent: { bg: '#fef3c7', color: '#92400e', border: '#fde68a' }, }; ``` ### Route Protection ```javascript function ProtectedRoute({ children, allowedRoles }) { const { token, user } = useAuthStore(); if (!token) return ; if (allowedRoles && !allowedRoles.includes(user.role)) { return ; } return children; } ``` --- *Document Version: 3.0* *Last Updated: June 2026* *Features: Role-based nav, 4 dashboards, permissions matrix, responsive design*