Files
schulos/docs/MENU_CONSOLIDATION_PLAN.md
T
Z User 9ce58565ba i18n: Fix 44 additional hardcoded English strings across 15 files
Fixed files:
- competitions-view.tsx: 10 strings (placeholders, labels)
- subjects-view.tsx: 11 strings (types, actions, placeholders)
- professional-calendar.tsx: 5 strings (event type labels)
- illness-reporting-view.tsx: 3 strings (status badges)
- student-detail-view.tsx: 4 strings (health form placeholders)
- data-table.tsx: 2 strings (search, empty state)
- compliance-wizard.tsx: 2 strings (name, state)
- settings-view.tsx: 1 string (Skipped)
- competence-flower-view.tsx: 1 string (Active)
- disciplinary-view.tsx: 1 string (All clear)
- district-management-view.tsx: 1 string (No recent activity)
- competitions-view.tsx: 1 string (Stock)
- ui/pagination.tsx: 3 strings (Previous, Next, More pages)
- ui/breadcrumb.tsx: 1 string (More)
- ui/carousel.tsx: 2 strings (Previous/Next slide)
- ui/sidebar.tsx: 1 string (Sidebar title)

Total: 44 hardcoded English strings replaced with German
2026-09-06 15:11:41 +00:00

9.3 KiB
Executable File

Menu & Page Consolidation Plan

Current State Analysis

Pages Breakdown

  • 5 page.tsx files located in different routes
  • 55 view/page components across the codebase
  • Multiple menu implementations (sidebar, navbar, dropdown)
  • Repeated navigation logic in different sections

Identified Duplications

1. Dashboard Pages

Current State:
- /app/dashboard/page.tsx (main)
- src/components/dashboard-view.tsx
- src/components/teacher-dashboard.tsx
- src/components/student-dashboard.tsx
- src/components/admin-dashboard.tsx

Issues:
- Same filters, charts, and layout logic repeated
- Different API calls for same data
- Inconsistent styling and interactions

2. Grading/Assessment Pages

Current State:
- src/components/grading-view.tsx
- src/components/tablet-grading-view.tsx
- src/components/grade-analytics-view.tsx
- src/components/assessments-view.tsx
- src/components/ai-tests-view.tsx
- src/components/exam-view.tsx

Issues:
- Grading logic duplicated 3 times
- Assessment creation logic in 2 places
- Different state management approaches

3. Communication Pages

Current State:
- src/components/communication-view.tsx
- src/components/messaging-view.tsx
- src/components/announcements-view.tsx

Issues:
- Same message filtering logic
- Duplicate attachment handling
- Repeated notification sending

4. Attendance/Behavior Pages

Current State:
- src/components/attendance-view.tsx
- src/components/wellness-check-view.tsx
- src/components/behavior-tracking-view.tsx

Issues:
- Same tabular data display
- Duplicate filtering and search
- Repeated export functionality

Consolidation Strategy

Target Architecture

/app/routes (Role-based)
├── /teacher        (All teacher features)
├── /student        (All student features)
└── /admin          (All admin features)

/components/modules (Feature-based)
├── /dashboard      (Dashboard widget system)
├── /grading        (All grading modes)
├── /assessments    (Assessment creation & taking)
├── /communication  (Messages, announcements)
├── /attendance     (Attendance, behavior, wellness)
├── /analytics      (Reports and insights)
└── /compliance     (Legal and audit)

Step-by-Step Consolidation

Phase 1: Dashboard Consolidation

Before:

// src/components/dashboard-view.tsx
export function DashboardView() { ... }

// src/components/teacher-dashboard.tsx
export function TeacherDashboard() { ... }

// src/components/student-dashboard.tsx
export function StudentDashboard() { ... }

After:

// src/components/modules/dashboard/Dashboard.tsx
export function Dashboard() {
  const { role } = useAuth();
  
  const layouts = {
    TEACHER: <TeacherLayout />,
    STUDENT: <StudentLayout />,
    ADMIN: <AdminLayout />,
    PARENT: <ParentLayout />,
  };
  
  return <DashboardContainer>{layouts[role]}</DashboardContainer>;
}

// src/components/modules/dashboard/layouts/TeacherLayout.tsx
export function TeacherLayout() { ... }

// src/components/modules/dashboard/layouts/StudentLayout.tsx
export function StudentLayout() { ... }

Benefit:

  • Single component entry point
  • Shared dashboard logic (refresh, theme, widgets)
  • Unified state management
  • 40% code reduction

Phase 2: Grading Consolidation

Before:

// Three separate components with duplicated logic
export function GradingView() { ... }
export function TabletGradingView() { ... }
export function GradeAnalyticsView() { ... }

After:

// src/components/modules/grading/GradingPanel.tsx
export function GradingPanel({
  mode = 'view', // 'view' | 'edit' | 'analytics'
  variant = 'desktop', // 'desktop' | 'tablet' | 'mobile'
  filters = {},
}) {
  const layoutComponent = layouts[variant];
  const displayComponent = displays[mode];
  
  return (
    <GradingContainer>
      <layoutComponent>
        <displayComponent />
      </layoutComponent>
    </GradingContainer>
  );
}

Benefit:

  • Single grading interface for all modes
  • Consistent grading logic across devices
  • 50% code reduction
  • Easier testing

Phase 3: Assessment Consolidation

Before:

// Two separate implementations
export function AssessmentsView() { ... }  // Teacher view
export function AITestsView() { ... }      // AI generation
export function ExamView() { ... }         // Student taking exam

After:

// src/components/modules/assessments/AssessmentManager.tsx
export function AssessmentManager() {
  const { role, action } = useParams(); // 'create', 'edit', 'take', 'review'
  
  const views = {
    create: <AssessmentCreator />,
    edit: <AssessmentEditor />,
    take: <ExamSession />,
    review: <ResultsReview />,
  };
  
  return <>{views[action]}</>;
}

Benefit:

  • Single assessment entry point
  • Shared assessment schema
  • Unified state management
  • 45% code reduction

Phase 4: Communication Consolidation

Before:

// Three separate message systems
export function CommunicationView() { ... }
export function MessagingView() { ... }
export function AnnouncementsView() { ... }

After:

// src/components/modules/communication/CommunicationHub.tsx
export function CommunicationHub() {
  const [tab, setTab] = useState('messages'); // 'messages' | 'announcements' | 'notifications'
  
  return (
    <Tabs value={tab} onValueChange={setTab}>
      <TabContent value="messages"><MessageView /></TabContent>
      <TabContent value="announcements"><AnnouncementView /></TabContent>
      <TabContent value="notifications"><NotificationFeed /></TabContent>
    </Tabs>
  );
}

Benefit:

  • Single communication interface
  • Unified message handling
  • 35% code reduction

Navigation Consolidation

Current Menu Issues

  • Sidebar repeats routes based on role
  • Nested menus with similar names
  • Duplicate action buttons

New Navigation System

Before:

// Multiple conditional navigation systems
const teacherMenu = [
  { label: 'Grades', href: '/teacher/grading' },
  { label: 'Grades Analytics', href: '/teacher/grades/analytics' },
  { label: 'Grade Entry', href: '/teacher/grading/entry' },
];

const adminMenu = [
  { label: 'Grading', href: '/admin/grading' },
  { label: 'Grade Reports', href: '/admin/reports/grades' },
];

After:

// Single unified navigation config
const navigationConfig = {
  TEACHER: [
    { label: 'Dashboard', href: '/dashboard' },
    {
      label: 'Grading',
      href: '/grading',
      submenu: [
        { label: 'View Grades', href: '?mode=view' },
        { label: 'Enter Grades', href: '?mode=edit' },
        { label: 'Analytics', href: '?mode=analytics' },
      ],
    },
    { label: 'Assessments', href: '/assessments' },
    { label: 'Communication', href: '/communication' },
    { label: 'Attendance', href: '/attendance' },
  ],
  STUDENT: [
    { label: 'Dashboard', href: '/dashboard' },
    { label: 'Grades', href: '/grades' },
    { label: 'Assessments', href: '/assessments' },
    { label: 'Messages', href: '/messages' },
  ],
};

// Usage
<Sidebar menu={navigationConfig[userRole]} />

Implementation Roadmap

Week 1: Foundation

  • Create module directory structure
  • Set up shared hooks and utilities
  • Create component templates

Week 2: Dashboard & Grading

  • Consolidate dashboard components
  • Consolidate grading components
  • Test on all devices (desktop, tablet, mobile)

Week 3: Assessments & Communication

  • Consolidate assessment components
  • Consolidate communication components
  • Update navigation system

Week 4: Polish & Testing

  • Optimize performance
  • Run memory audit
  • QA testing on all features

File Cleanup

Files to Remove (After Consolidation)

src/components/dashboard-view.tsx
src/components/teacher-dashboard.tsx
src/components/student-dashboard.tsx
src/components/admin-dashboard.tsx
src/components/grading-view.tsx
src/components/tablet-grading-view.tsx
src/components/grade-analytics-view.tsx
src/components/assessments-view.tsx
src/components/ai-tests-view.tsx
src/components/exam-view.tsx
src/components/communication-view.tsx
src/components/messaging-view.tsx
src/components/announcements-view.tsx
src/components/attendance-view.tsx
src/components/wellness-check-view.tsx
src/components/behavior-tracking-view.tsx

Estimated Savings

  • 55 view components → 12 consolidated modules = 79% reduction
  • Lines of code: ~15,000 → ~7,500
  • Duplicate code: 40% → <5%
  • Bundle size: ~450KB → ~280KB

Testing Checklist

After consolidation, verify:

  • All teacher features work in dashboard
  • All student features accessible in student view
  • Grading works on desktop, tablet, mobile
  • Assessment creation and taking flows work
  • Message sending and receiving works
  • Navigation is consistent across all roles
  • No memory leaks on long sessions
  • Performance improved (check Web Vitals)

Success Metrics

Metric Before After Target
Components 55 12 ✓
Pages 5 2 ✓
Code duplication 40% <5% ✓
Bundle size 450KB <300KB ✓
Memory usage 120MB <75MB ✓
Time to interactive 3.2s <1.5s ✓