[{"data":1,"prerenderedAt":1191},["ShallowReactive",2],{"navigation_docs_en":3,"-en-devops-overview":696,"-en-devops-overview-surround":1186},[4],{"title":5,"path":6,"stem":7,"children":8,"page":35},"En","\u002Fen","en",[9,36,102,159,210,253,295,326,357,385,412,432,452,479,514,533,556,583,606,628,653,672],{"title":10,"icon":11,"path":12,"stem":13,"children":14,"page":35},"Guides","i-lucide-book-open","\u002Fen\u002Fguides","en\u002F01.guides",[15,20,25,30],{"title":16,"path":17,"stem":18,"icon":19},"Getting Started","\u002Fen\u002Fguides\u002Fgetting-started","en\u002F01.guides\u002F01.getting-started","i-lucide-rocket",{"title":21,"path":22,"stem":23,"icon":24},"Documentation Directory","\u002Fen\u002Fguides\u002Fdirectory","en\u002F01.guides\u002F02.directory","i-lucide-folder-tree",{"title":26,"path":27,"stem":28,"icon":29},"Role-Based Access","\u002Fen\u002Fguides\u002Frole-based-access","en\u002F01.guides\u002F03.role-based-access","i-lucide-users",{"title":31,"path":32,"stem":33,"icon":34},"Support, Error Reporting & Feature Requests","\u002Fen\u002Fguides\u002Fsupport-error-reporting","en\u002F01.guides\u002F04.support-error-reporting","i-lucide-life-buoy",false,{"title":37,"icon":38,"path":39,"stem":40,"children":41,"page":35},"Director Guide","i-lucide-building-2","\u002Fen\u002Fdirector","en\u002F02.director",[42,47,52,57,62,67,72,77,82,87,92,97],{"title":43,"path":44,"stem":45,"icon":46},"Director Dashboard Overview","\u002Fen\u002Fdirector\u002Foverview","en\u002F02.director\u002F01.overview","i-lucide-layout-dashboard",{"title":48,"path":49,"stem":50,"icon":51},"Student Risk Engine & Early Warnings","\u002Fen\u002Fdirector\u002Fstudent-risk","en\u002F02.director\u002F02.student-risk","i-lucide-alert-triangle",{"title":53,"path":54,"stem":55,"icon":56},"Siren & School Bell System","\u002Fen\u002Fdirector\u002Fsiren-management","en\u002F02.director\u002F03.siren-management","i-lucide-bell-ring",{"title":58,"path":59,"stem":60,"icon":61},"Exam Seating & Hall Allocation","\u002Fen\u002Fdirector\u002Fexam-seating","en\u002F02.director\u002F04.exam-seating","i-lucide-grid",{"title":63,"path":64,"stem":65,"icon":66},"Reports, Analytics & Data Health","\u002Fen\u002Fdirector\u002Freports-analytics","en\u002F02.director\u002F05.reports-analytics","i-lucide-bar-chart-3",{"title":68,"path":69,"stem":70,"icon":71},"School Transport & Bus Routes","\u002Fen\u002Fdirector\u002Ftransport","en\u002F02.director\u002F06.transport","i-lucide-bus",{"title":73,"path":74,"stem":75,"icon":76},"School Settings & Policies","\u002Fen\u002Fdirector\u002Fschool-settings","en\u002F02.director\u002F07.school-settings","i-lucide-sliders",{"title":78,"path":79,"stem":80,"icon":81},"Subscription & Billing","\u002Fen\u002Fdirector\u002Fsubscription-billing","en\u002F02.director\u002F08.subscription-billing","i-lucide-credit-card",{"title":83,"path":84,"stem":85,"icon":86},"Credentials & Login Slips","\u002Fen\u002Fdirector\u002Fcredentials-management","en\u002F02.director\u002F09.credentials-management","i-lucide-key-round",{"title":88,"path":89,"stem":90,"icon":91},"Teacher Performance & Evaluation","\u002Fen\u002Fdirector\u002Fteacher-evaluation","en\u002F02.director\u002F10.teacher-evaluation","i-lucide-trophy",{"title":93,"path":94,"stem":95,"icon":96},"PTA Parent Presentation Generator","\u002Fen\u002Fdirector\u002Fparent-presentation","en\u002F02.director\u002F11.parent-presentation","i-lucide-presentation",{"title":98,"path":99,"stem":100,"icon":101},"Data Consistency & Health Audit","\u002Fen\u002Fdirector\u002Fdata-consistency","en\u002F02.director\u002F12.data-consistency","i-lucide-stethoscope",{"title":103,"icon":11,"path":104,"stem":105,"children":106,"page":35},"Teacher Guide","\u002Fen\u002Fteacher","en\u002F03.teacher",[107,111,116,121,126,131,136,141,146,150,155],{"title":108,"path":109,"stem":110,"icon":46},"Teacher Dashboard Overview","\u002Fen\u002Fteacher\u002Foverview","en\u002F03.teacher\u002F01.overview",{"title":112,"path":113,"stem":114,"icon":115},"Attendance Marking","\u002Fen\u002Fteacher\u002Fattendance-marking","en\u002F03.teacher\u002F02.attendance-marking","i-lucide-check-circle-2",{"title":117,"path":118,"stem":119,"icon":120},"Gradebook & Continuous Assessments","\u002Fen\u002Fteacher\u002Fgradebook-entry","en\u002F03.teacher\u002F03.gradebook-entry","i-lucide-award",{"title":122,"path":123,"stem":124,"icon":125},"Lesson Plans & Assignments","\u002Fen\u002Fteacher\u002Flessons-assignments","en\u002F03.teacher\u002F04.lessons-assignments","i-lucide-book-marked",{"title":127,"path":128,"stem":129,"icon":130},"Student Discipline & Behavior Logs","\u002Fen\u002Fteacher\u002Fdiscipline","en\u002F03.teacher\u002F05.discipline","i-lucide-shield-alert",{"title":132,"path":133,"stem":134,"icon":135},"AI Teaching Copilot","\u002Fen\u002Fteacher\u002Fai-copilot","en\u002F03.teacher\u002F06.ai-copilot","i-lucide-sparkles",{"title":137,"path":138,"stem":139,"icon":140},"Risk & Analytics","\u002Fen\u002Fteacher\u002Frisk-analytics","en\u002F03.teacher\u002F07.risk-analytics","i-lucide-chart-line",{"title":142,"path":143,"stem":144,"icon":145},"Early Childhood & KG Care","\u002Fen\u002Fteacher\u002Fearly-childhood-kg","en\u002F03.teacher\u002F08.early-childhood-kg","i-lucide-baby",{"title":147,"path":148,"stem":149,"icon":125},"Curriculum & Textbook Units","\u002Fen\u002Fteacher\u002Fcurriculum-syllabus","en\u002F03.teacher\u002F09.curriculum-syllabus",{"title":151,"path":152,"stem":153,"icon":154},"Period Swaps & AI Substitution","\u002Fen\u002Fteacher\u002Fperiod-swaps","en\u002F03.teacher\u002F10.period-swaps","i-lucide-arrow-left-right",{"title":156,"path":157,"stem":158,"icon":29},"Homeroom & Class Teacher Workspace","\u002Fen\u002Fteacher\u002Fhomeroom-management","en\u002F03.teacher\u002F11.homeroom-management",{"title":160,"icon":161,"path":162,"stem":163,"children":164,"page":35},"Registrar Guide","i-lucide-user-check","\u002Fen\u002Fregistrar","en\u002F04.registrar",[165,169,174,179,183,187,192,197,201,205],{"title":166,"path":167,"stem":168,"icon":46},"Registrar Overview","\u002Fen\u002Fregistrar\u002Foverview","en\u002F04.registrar\u002F01.overview",{"title":170,"path":171,"stem":172,"icon":173},"Student Enrollment","\u002Fen\u002Fregistrar\u002Fenroll-student","en\u002F04.registrar\u002F02.enroll-student","i-lucide-user-plus",{"title":175,"path":176,"stem":177,"icon":178},"Bulk Import & Provisioning","\u002Fen\u002Fregistrar\u002Fbulk-import","en\u002F04.registrar\u002F03.bulk-import","i-lucide-file-spreadsheet",{"title":180,"path":181,"stem":182,"icon":29},"Student Management","\u002Fen\u002Fregistrar\u002Fstudent-management","en\u002F04.registrar\u002F04.student-management",{"title":184,"path":185,"stem":186,"icon":81},"Student ID Cards","\u002Fen\u002Fregistrar\u002Fid-cards","en\u002F04.registrar\u002F05.id-cards",{"title":188,"path":189,"stem":190,"icon":191},"Generate Report Cards","\u002Fen\u002Fregistrar\u002Freport-cards","en\u002F04.registrar\u002F06.report-cards","i-lucide-file-text",{"title":193,"path":194,"stem":195,"icon":196},"Grade Promotion Engine","\u002Fen\u002Fregistrar\u002Fpromotion","en\u002F04.registrar\u002F07.promotion","i-lucide-trending-up",{"title":198,"path":199,"stem":200,"icon":29},"Staff Management","\u002Fen\u002Fregistrar\u002Fstaff-management","en\u002F04.registrar\u002F08.staff-management",{"title":202,"path":203,"stem":204,"icon":120},"Custom Certificate & Transcript Builder","\u002Fen\u002Fregistrar\u002Fcertificate-templates","en\u002F04.registrar\u002F09.certificate-templates",{"title":206,"path":207,"stem":208,"icon":209},"School-Leaving Clearance & Transfer Certificates","\u002Fen\u002Fregistrar\u002Fschool-leaving-clearance","en\u002F04.registrar\u002F10.school-leaving-clearance","i-lucide-file-check",{"title":211,"icon":81,"path":212,"stem":213,"children":214,"page":35},"Finance Guide","\u002Fen\u002Ffinance","en\u002F05.finance",[215,219,224,229,234,239,244,248],{"title":216,"path":217,"stem":218,"icon":46},"Finance Dashboard Overview","\u002Fen\u002Ffinance\u002Foverview","en\u002F05.finance\u002F01.overview",{"title":220,"path":221,"stem":222,"icon":223},"Fee Structures","\u002Fen\u002Ffinance\u002Ffee-structures","en\u002F05.finance\u002F02.fee-structures","i-lucide-list-checks",{"title":225,"path":226,"stem":227,"icon":228},"Installment Plans","\u002Fen\u002Ffinance\u002Finstallment-plans","en\u002F05.finance\u002F03.installment-plans","i-lucide-calendar-clock",{"title":230,"path":231,"stem":232,"icon":233},"Discount Policies","\u002Fen\u002Ffinance\u002Fdiscounts","en\u002F05.finance\u002F04.discounts","i-lucide-tag",{"title":235,"path":236,"stem":237,"icon":238},"Recording a Payment","\u002Fen\u002Ffinance\u002Frecord-payment","en\u002F05.finance\u002F05.record-payment","i-lucide-circle-dollar-sign",{"title":240,"path":241,"stem":242,"icon":243},"Payment Receipts","\u002Fen\u002Ffinance\u002Freceipts","en\u002F05.finance\u002F06.receipts","i-lucide-receipt",{"title":245,"path":246,"stem":247,"icon":51},"Overdue Fee Reports","\u002Fen\u002Ffinance\u002Foverdue-reports","en\u002F05.finance\u002F07.overdue-reports",{"title":249,"path":250,"stem":251,"icon":252},"Staff Payroll & Salaries","\u002Fen\u002Ffinance\u002Fpayroll","en\u002F05.finance\u002F08.payroll","i-lucide-wallet",{"title":254,"icon":255,"path":256,"stem":257,"children":258,"page":35},"Parent & Student Guide","i-lucide-heart-handshake","\u002Fen\u002Fparent","en\u002F06.parent",[259,263,268,272,276,281,286,291],{"title":260,"path":261,"stem":262,"icon":46},"Parent Dashboard Overview","\u002Fen\u002Fparent\u002Foverview","en\u002F06.parent\u002F01.overview",{"title":264,"path":265,"stem":266,"icon":267},"Parent Attendance Monitoring","\u002Fen\u002Fparent\u002Fattendance","en\u002F06.parent\u002F02.attendance","i-lucide-calendar-check",{"title":269,"path":270,"stem":271,"icon":196},"Viewing Grades","\u002Fen\u002Fparent\u002Fgrades","en\u002F06.parent\u002F03.grades",{"title":273,"path":274,"stem":275,"icon":191},"Report Cards","\u002Fen\u002Fparent\u002Freport-cards","en\u002F06.parent\u002F04.report-cards",{"title":277,"path":278,"stem":279,"icon":280},"Student Portal","\u002Fen\u002Fparent\u002Fstudent-portal","en\u002F06.parent\u002F05.student-portal","i-lucide-graduation-cap",{"title":282,"path":283,"stem":284,"icon":285},"Student Timetable","\u002Fen\u002Fparent\u002Ftimetable","en\u002F06.parent\u002F06.timetable","i-lucide-clock",{"title":287,"path":288,"stem":289,"icon":290},"School Bookstore & Uniform Orders","\u002Fen\u002Fparent\u002Funiform-bookstore","en\u002F06.parent\u002F07.uniform-bookstore","i-lucide-shopping-bag",{"title":292,"path":293,"stem":294,"icon":130},"Behavior, Merit Awards & Pastoral Care","\u002Fen\u002Fparent\u002Fdiscipline-merits","en\u002F06.parent\u002F08.discipline-merits",{"title":296,"icon":280,"path":297,"stem":298,"children":299,"page":35},"Student Guide","\u002Fen\u002Fstudent","en\u002F07.student",[300,304,309,313,317,322],{"title":301,"path":302,"stem":303,"icon":46},"Student Portal Overview","\u002Fen\u002Fstudent\u002Foverview","en\u002F07.student\u002F01.overview",{"title":305,"path":306,"stem":307,"icon":308},"Online Examination Portal","\u002Fen\u002Fstudent\u002Fonline-exams","en\u002F07.student\u002F02.online-exams","i-lucide-monitor-check",{"title":310,"path":311,"stem":312,"icon":191},"Assignments & Digital Lessons","\u002Fen\u002Fstudent\u002Fassignments","en\u002F07.student\u002F03.assignments",{"title":314,"path":315,"stem":316,"icon":120},"Grades & Terminal Report Cards","\u002Fen\u002Fstudent\u002Fgrades-report-cards","en\u002F07.student\u002F04.grades-report-cards",{"title":318,"path":319,"stem":320,"icon":321},"Computer-Based Testing (CBT) & Exam Proctoring","\u002Fen\u002Fstudent\u002Fcbt-examination-guide","en\u002F07.student\u002F05.cbt-examination-guide","i-lucide-monitor-play",{"title":323,"path":324,"stem":325,"icon":71},"School Bus & Transport Tracking","\u002Fen\u002Fstudent\u002Ftransport","en\u002F07.student\u002F06.transport",{"title":327,"icon":280,"path":328,"stem":329,"children":330,"page":35},"Academic Management","\u002Fen\u002Facademic","en\u002F08.academic",[331,336,341,345,349,353],{"title":332,"path":333,"stem":334,"icon":335},"Academic Years & Terms","\u002Fen\u002Facademic\u002Facademic-years","en\u002F08.academic\u002F01.academic-years","i-lucide-calendar",{"title":337,"path":338,"stem":339,"icon":340},"Classes & Sections","\u002Fen\u002Facademic\u002Fclasses-sections","en\u002F08.academic\u002F02.classes-sections","i-lucide-shapes",{"title":342,"path":343,"stem":344,"icon":11},"Subjects & Lessons","\u002Fen\u002Facademic\u002Fsubjects","en\u002F08.academic\u002F03.subjects",{"title":346,"path":347,"stem":348,"icon":285},"Timetables","\u002Fen\u002Facademic\u002Ftimetable","en\u002F08.academic\u002F04.timetable",{"title":350,"path":351,"stem":352,"icon":280},"Academic Overview","\u002Fen\u002Facademic\u002Facademic-overview","en\u002F08.academic\u002F05.academic-overview",{"title":354,"path":355,"stem":356,"icon":125},"Curriculum Framework","\u002Fen\u002Facademic\u002Fcurriculum-mapping","en\u002F08.academic\u002F06.curriculum-mapping",{"title":358,"icon":359,"path":360,"stem":361,"children":362,"page":35},"Examinations","i-lucide-pen-tool","\u002Fen\u002Fexams","en\u002F09.exams",[363,367,372,377,381],{"title":364,"path":365,"stem":366,"icon":359},"Examinations & Continuous Assessments","\u002Fen\u002Fexams\u002Fexams-assessments","en\u002F09.exams\u002F01.exams-assessments",{"title":368,"path":369,"stem":370,"icon":371},"Exam Setup & Configuration","\u002Fen\u002Fexams\u002Fexam-setup","en\u002F09.exams\u002F02.exam-setup","i-lucide-settings-2",{"title":373,"path":374,"stem":375,"icon":376},"Online Computer-Based Testing System","\u002Fen\u002Fexams\u002Fonline-exams-system","en\u002F09.exams\u002F03.online-exams-system","i-lucide-laptop",{"title":378,"path":379,"stem":380,"icon":120},"National & Regional Exams","\u002Fen\u002Fexams\u002Fnational-examinations","en\u002F09.exams\u002F04.national-examinations",{"title":382,"path":383,"stem":384,"icon":61},"Exam Seating & Hall Generator","\u002Fen\u002Fexams\u002Fexam-seating-halls","en\u002F09.exams\u002F05.exam-seating-halls",{"title":386,"icon":387,"path":388,"stem":389,"children":390,"page":35},"Inventory & Store Guide","i-lucide-boxes","\u002Fen\u002Finventory","en\u002F10.inventory",[391,395,400,404,408],{"title":392,"path":393,"stem":394,"icon":46},"Inventory & Store Management Overview","\u002Fen\u002Finventory\u002Foverview","en\u002F10.inventory\u002F01.overview",{"title":396,"path":397,"stem":398,"icon":399},"Managing Catalog & Categories","\u002Fen\u002Finventory\u002Fitems-categories","en\u002F10.inventory\u002F02.items-categories","i-lucide-tags",{"title":401,"path":402,"stem":403,"icon":154},"Stock In, Stock Out & Requisitions","\u002Fen\u002Finventory\u002Fstock-transactions","en\u002F10.inventory\u002F03.stock-transactions",{"title":405,"path":406,"stem":407,"icon":290},"School Uniform & Book Store","\u002Fen\u002Finventory\u002Fschool-store","en\u002F10.inventory\u002F04.school-store",{"title":409,"path":410,"stem":411,"icon":290},"Bookstore & Uniform Sales","\u002Fen\u002Finventory\u002Fbookstore-uniforms","en\u002F10.inventory\u002F05.bookstore-uniforms",{"title":413,"icon":414,"path":415,"stem":416,"children":417,"page":35},"Academic Supervisor Guide","i-lucide-clipboard-check","\u002Fen\u002Fsupervisor","en\u002F11.supervisor",[418,422,427],{"title":419,"path":420,"stem":421,"icon":46},"Academic Supervision Overview","\u002Fen\u002Fsupervisor\u002Foverview","en\u002F11.supervisor\u002F01.overview",{"title":423,"path":424,"stem":425,"icon":426},"Lesson Plan Approvals & Feedback","\u002Fen\u002Fsupervisor\u002Flesson-plan-reviews","en\u002F11.supervisor\u002F02.lesson-plan-reviews","i-lucide-file-check-2",{"title":428,"path":429,"stem":430,"icon":431},"Classroom Observations & Rubrics","\u002Fen\u002Fsupervisor\u002Fclassroom-observations","en\u002F11.supervisor\u002F03.classroom-observations","i-lucide-clipboard-signature",{"title":433,"icon":434,"path":435,"stem":436,"children":437,"page":35},"Communication","i-lucide-message-circle","\u002Fen\u002Fcommunication","en\u002F12.communication",[438,443,447],{"title":439,"path":440,"stem":441,"icon":442},"School Announcements & Broadcasts","\u002Fen\u002Fcommunication\u002Fannouncements","en\u002F12.communication\u002F01.announcements","i-lucide-megaphone",{"title":444,"path":445,"stem":446,"icon":434},"Communication Overview","\u002Fen\u002Fcommunication\u002Fcommunication-overview","en\u002F12.communication\u002F02.communication-overview",{"title":448,"path":449,"stem":450,"icon":451},"Digital Communication Book","\u002Fen\u002Fcommunication\u002Fcommunication-book","en\u002F12.communication\u002F03.communication-book","i-lucide-book-heart",{"title":453,"icon":135,"path":454,"stem":455,"children":456,"page":35},"AI Intelligence Suite","\u002Fen\u002Fai","en\u002F13.ai",[457,462,466,470,474],{"title":458,"path":459,"stem":460,"icon":461},"Interactive AI Assistant","\u002Fen\u002Fai\u002Foverview","en\u002F13.ai\u002F01.overview","i-lucide-bot",{"title":463,"path":464,"stem":465,"icon":135},"Autonomous Background Autopilots","\u002Fen\u002Fai\u002Fautonomous-autopilot","en\u002F13.ai\u002F02.autonomous-autopilot",{"title":467,"path":468,"stem":469,"icon":461},"Timetable Substitution Watchdog","\u002Fen\u002Fai\u002Ftimetable-watchdog","en\u002F13.ai\u002F03.timetable-watchdog",{"title":471,"path":472,"stem":473,"icon":255},"Empathetic Parent Dialogue","\u002Fen\u002Fai\u002Fparent-empathy-dialogue","en\u002F13.ai\u002F04.parent-empathy-dialogue",{"title":475,"path":476,"stem":477,"icon":478},"AI Configuration & Settings","\u002Fen\u002Fai\u002Fai-settings","en\u002F13.ai\u002F05.ai-settings","i-lucide-wrench",{"title":480,"icon":481,"path":482,"stem":483,"children":484,"page":35},"Platform Features","i-lucide-settings","\u002Fen\u002Fplatform","en\u002F14.platform",[485,490,495,500,505,509],{"title":486,"path":487,"stem":488,"icon":489},"Language & Localisation","\u002Fen\u002Fplatform\u002Flanguage","en\u002F14.platform\u002F01.language","i-lucide-languages",{"title":491,"path":492,"stem":493,"icon":494},"Ethiopian & Gregorian Calendar","\u002Fen\u002Fplatform\u002Fcalendar","en\u002F14.platform\u002F02.calendar","i-lucide-calendar-days",{"title":496,"path":497,"stem":498,"icon":499},"Offline Mode (PWA)","\u002Fen\u002Fplatform\u002Foffline","en\u002F14.platform\u002F03.offline","i-lucide-wifi-off",{"title":501,"path":502,"stem":503,"icon":504},"Notifications","\u002Fen\u002Fplatform\u002Fnotifications","en\u002F14.platform\u002F04.notifications","i-lucide-bell",{"title":506,"path":507,"stem":508,"icon":504},"Siren \u002F Bell Management","\u002Fen\u002Fplatform\u002Fsiren-management","en\u002F14.platform\u002F05.siren-management",{"title":510,"path":511,"stem":512,"icon":513},"User Profile, 2FA & Account Security","\u002Fen\u002Fplatform\u002Fuser-profile-security","en\u002F14.platform\u002F06.user-profile-security","i-lucide-shield-check",{"title":515,"icon":516,"path":517,"stem":518,"children":519,"page":35},"School Owner & Executive Guide","i-lucide-crown","\u002Fen\u002Fowner","en\u002F15.owner",[520,524,529],{"title":521,"path":522,"stem":523,"icon":46},"School Owner Executive Overview","\u002Fen\u002Fowner\u002Foverview","en\u002F15.owner\u002F01.overview",{"title":525,"path":526,"stem":527,"icon":528},"Multi-Branch & Campus Comparison","\u002Fen\u002Fowner\u002Fmulti-branch","en\u002F15.owner\u002F02.multi-branch","i-lucide-network",{"title":530,"path":531,"stem":532,"icon":528},"Inter-Branch Operations & Consolidation","\u002Fen\u002Fowner\u002Fbranch-transfers-consolidation","en\u002F15.owner\u002F03.branch-transfers-consolidation",{"title":534,"icon":535,"path":536,"stem":537,"children":538,"page":35},"School Operations","i-lucide-building","\u002Fen\u002Foperations","en\u002F16.operations",[539,543,547,551],{"title":540,"path":541,"stem":542,"icon":71},"Transport & Fleet Management","\u002Fen\u002Foperations\u002Ftransport","en\u002F16.operations\u002F01.transport",{"title":544,"path":545,"stem":546,"icon":494},"School Events & Calendar Planner","\u002Fen\u002Foperations\u002Fevents-calendar","en\u002F16.operations\u002F02.events-calendar",{"title":548,"path":549,"stem":550,"icon":513},"Data Quality & Security Logs","\u002Fen\u002Foperations\u002Fdata-quality-audit","en\u002F16.operations\u002F03.data-quality-audit",{"title":552,"path":553,"stem":554,"icon":555},"Timetable Auto-Assignment Engine","\u002Fen\u002Foperations\u002Ftimetable-engine","en\u002F16.operations\u002F04.timetable-engine","i-lucide-cpu",{"title":557,"icon":558,"path":559,"stem":560,"children":561,"page":35},"Mobile App Guide","i-lucide-smartphone","\u002Fen\u002Fmobile","en\u002F17.mobile",[562,566,570,574,579],{"title":563,"path":564,"stem":565,"icon":558},"Mobile App Overview","\u002Fen\u002Fmobile\u002Foverview","en\u002F17.mobile\u002F01.overview",{"title":567,"path":568,"stem":569,"icon":11},"Teacher Mobile Experience","\u002Fen\u002Fmobile\u002Fteacher-mobile","en\u002F17.mobile\u002F02.teacher-mobile",{"title":571,"path":572,"stem":573,"icon":255},"Parent Mobile Experience","\u002Fen\u002Fmobile\u002Fparent-mobile","en\u002F17.mobile\u002F03.parent-mobile",{"title":575,"path":576,"stem":577,"icon":578},"QR & Barcode Attendance Scanning","\u002Fen\u002Fmobile\u002Fqr-attendance","en\u002F17.mobile\u002F04.qr-attendance","i-lucide-qr-code",{"title":580,"path":581,"stem":582,"icon":499},"Mobile Offline Sync Engine","\u002Fen\u002Fmobile\u002Foffline-sync","en\u002F17.mobile\u002F05.offline-sync",{"title":584,"icon":585,"path":586,"stem":587,"children":588,"page":35},"Documents & Compliance","i-lucide-folder-archive","\u002Fen\u002Fdocuments","en\u002F18.documents",[589,593,597,601],{"title":590,"path":591,"stem":592,"icon":585},"Documents & Compliance Overview","\u002Fen\u002Fdocuments\u002Foverview","en\u002F18.documents\u002F01.overview",{"title":594,"path":595,"stem":596,"icon":513},"Student Compliance Tracking","\u002Fen\u002Fdocuments\u002Fstudent-compliance","en\u002F18.documents\u002F02.student-compliance",{"title":598,"path":599,"stem":600,"icon":161},"Parent Uploads & Review Queue","\u002Fen\u002Fdocuments\u002Fparent-submissions","en\u002F18.documents\u002F03.parent-submissions",{"title":602,"path":603,"stem":604,"icon":605},"Institutional Policies & Handbooks","\u002Fen\u002Fdocuments\u002Finstitutional-policies","en\u002F18.documents\u002F04.institutional-policies","i-lucide-files",{"title":607,"icon":130,"path":608,"stem":609,"children":610,"page":35},"Super Admin & Platform Operations","\u002Fen\u002Fsuperadmin","en\u002F19.superadmin",[611,615,619,623],{"title":612,"path":613,"stem":614,"icon":46},"Super Admin Overview","\u002Fen\u002Fsuperadmin\u002Foverview","en\u002F19.superadmin\u002F01.overview",{"title":616,"path":617,"stem":618,"icon":535},"Tenant Provisioning","\u002Fen\u002Fsuperadmin\u002Ftenant-management","en\u002F19.superadmin\u002F02.tenant-management",{"title":620,"path":621,"stem":622,"icon":81},"Subscriptions & Billing","\u002Fen\u002Fsuperadmin\u002Fsubscriptions-billing","en\u002F19.superadmin\u002F03.subscriptions-billing",{"title":624,"path":625,"stem":626,"icon":627},"System Monitoring","\u002Fen\u002Fsuperadmin\u002Fsystem-monitoring","en\u002F19.superadmin\u002F04.system-monitoring","i-lucide-activity",{"title":629,"icon":630,"path":631,"stem":632,"children":633,"page":35},"DevOps & Deployment","i-lucide-server","\u002Fen\u002Fdevops","en\u002F20.devops",[634,638,643,648],{"title":635,"path":636,"stem":637,"icon":528},"Deployment Architecture","\u002Fen\u002Fdevops\u002Foverview","en\u002F20.devops\u002F01.overview",{"title":639,"path":640,"stem":641,"icon":642},"Production Docker Runbook","\u002Fen\u002Fdevops\u002Fdocker-deployment","en\u002F20.devops\u002F02.docker-deployment","i-lucide-box",{"title":644,"path":645,"stem":646,"icon":647},"Development Setup","\u002Fen\u002Fdevops\u002Fdevelopment-setup","en\u002F20.devops\u002F03.development-setup","i-lucide-code-2",{"title":649,"path":650,"stem":651,"icon":652},"Backups & Disaster Recovery","\u002Fen\u002Fdevops\u002Fbackup-disaster-recovery","en\u002F20.devops\u002F04.backup-disaster-recovery","i-lucide-database-backup",{"title":654,"icon":513,"path":655,"stem":656,"children":657,"page":35},"Security & Compliance","\u002Fen\u002Fsecurity","en\u002F21.security",[658,663,668],{"title":659,"path":660,"stem":661,"icon":662},"Security Architecture","\u002Fen\u002Fsecurity\u002Foverview","en\u002F21.security\u002F01.overview","i-lucide-shield",{"title":664,"path":665,"stem":666,"icon":667},"Data Privacy & Compliance","\u002Fen\u002Fsecurity\u002Fdata-privacy-compliance","en\u002F21.security\u002F02.data-privacy-compliance","i-lucide-lock",{"title":669,"path":670,"stem":671,"icon":513},"File Upload Hardening","\u002Fen\u002Fsecurity\u002Ffile-upload-hardening","en\u002F21.security\u002F03.file-upload-hardening",{"title":673,"icon":555,"path":674,"stem":675,"children":676,"page":35},"Hardware & Integrations","\u002Fen\u002Fintegrations","en\u002F22.integrations",[677,682,686,691],{"title":678,"path":679,"stem":680,"icon":681},"Integrations Overview","\u002Fen\u002Fintegrations\u002Foverview","en\u002F22.integrations\u002F01.overview","i-lucide-layers",{"title":683,"path":684,"stem":685,"icon":56},"Smart Siren & Bell","\u002Fen\u002Fintegrations\u002Fsmart-siren-iot","en\u002F22.integrations\u002F02.smart-siren-iot",{"title":687,"path":688,"stem":689,"icon":690},"RFID & NFC Smart Kiosk","\u002Fen\u002Fintegrations\u002Frfid-nfc-kiosk","en\u002F22.integrations\u002F03.rfid-nfc-kiosk","i-lucide-contact",{"title":692,"path":693,"stem":694,"icon":695},"Messaging Gateways","\u002Fen\u002Fintegrations\u002Fmessaging-gateways","en\u002F22.integrations\u002F04.messaging-gateways","i-lucide-messages-square",{"id":697,"title":698,"body":699,"description":1179,"extension":1180,"links":1181,"meta":1182,"navigation":1183,"path":636,"seo":1184,"stem":637,"__hash__":1185},"docs_en\u002Fen\u002F20.devops\u002F01.overview.md","Production Deployment Architecture & Topology",{"type":700,"value":701,"toc":1174},"minimark",[702,706,710,901,904,909,1032,1034,1038,1103,1105,1109,1112,1170],[703,704,698],"h1",{"id":705},"production-deployment-architecture-topology",[707,708,709],"p",{},"YeneSchool is engineered for high availability, fast response times under Ethiopian internet latency conditions, and seamless vertical and horizontal scaling. The production stack is containerized with Docker and Docker Compose, employing battle-tested services for caching, connection pooling, and background worker queues.",[711,712,717],"pre",{"className":713,"code":714,"language":715,"meta":716,"style":716},"language-mermaid shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","flowchart TD\n    subgraph Public Internet\n        U[\"🌐 Web Users & Mobile Clients (HTTPS)\"]\n    end\n\n    subgraph Edge Gateway\n        NGINX[\"🛡️ Nginx Reverse Proxy (:80, :443)\"]\n    end\n\n    subgraph Application Tier\n        FE[\"💻 Next.js Frontend Container (:8000)\"]\n        BE[\"⚙️ NestJS API Cluster Container (:8001)\"]\n    end\n\n    subgraph Cache & Async Queues\n        REDIS[\"⚡ Redis 7 (BullMQ + Rate Limits + Session Cache)\"]\n    end\n\n    subgraph Data Persistence Tier\n        PGB[\"🏊 PgBouncer Connection Pooler (:6432)\"]\n        PG[\"🗄️ PostgreSQL 16 + pgvector (:5432)\"]\n        VOL[\"💾 Persistent Storage Volumes (\u002Fuploads, \u002Fdata)\"]\n    end\n\n    U --> NGINX\n    NGINX -->|Frontend Requests| FE\n    NGINX -->|API & File Uploads \u002Fapi\u002F*| BE\n    BE \u003C--> REDIS\n    BE --> PGB\n    PGB --> PG\n    BE --> VOL\n","mermaid","",[718,719,720,728,734,740,746,753,759,765,770,775,781,787,793,798,803,809,815,820,825,831,837,843,849,854,859,865,871,877,883,889,895],"code",{"__ignoreMap":716},[721,722,725],"span",{"class":723,"line":724},"line",1,[721,726,727],{},"flowchart TD\n",[721,729,731],{"class":723,"line":730},2,[721,732,733],{},"    subgraph Public Internet\n",[721,735,737],{"class":723,"line":736},3,[721,738,739],{},"        U[\"🌐 Web Users & Mobile Clients (HTTPS)\"]\n",[721,741,743],{"class":723,"line":742},4,[721,744,745],{},"    end\n",[721,747,749],{"class":723,"line":748},5,[721,750,752],{"emptyLinePlaceholder":751},true,"\n",[721,754,756],{"class":723,"line":755},6,[721,757,758],{},"    subgraph Edge Gateway\n",[721,760,762],{"class":723,"line":761},7,[721,763,764],{},"        NGINX[\"🛡️ Nginx Reverse Proxy (:80, :443)\"]\n",[721,766,768],{"class":723,"line":767},8,[721,769,745],{},[721,771,773],{"class":723,"line":772},9,[721,774,752],{"emptyLinePlaceholder":751},[721,776,778],{"class":723,"line":777},10,[721,779,780],{},"    subgraph Application Tier\n",[721,782,784],{"class":723,"line":783},11,[721,785,786],{},"        FE[\"💻 Next.js Frontend Container (:8000)\"]\n",[721,788,790],{"class":723,"line":789},12,[721,791,792],{},"        BE[\"⚙️ NestJS API Cluster Container (:8001)\"]\n",[721,794,796],{"class":723,"line":795},13,[721,797,745],{},[721,799,801],{"class":723,"line":800},14,[721,802,752],{"emptyLinePlaceholder":751},[721,804,806],{"class":723,"line":805},15,[721,807,808],{},"    subgraph Cache & Async Queues\n",[721,810,812],{"class":723,"line":811},16,[721,813,814],{},"        REDIS[\"⚡ Redis 7 (BullMQ + Rate Limits + Session Cache)\"]\n",[721,816,818],{"class":723,"line":817},17,[721,819,745],{},[721,821,823],{"class":723,"line":822},18,[721,824,752],{"emptyLinePlaceholder":751},[721,826,828],{"class":723,"line":827},19,[721,829,830],{},"    subgraph Data Persistence Tier\n",[721,832,834],{"class":723,"line":833},20,[721,835,836],{},"        PGB[\"🏊 PgBouncer Connection Pooler (:6432)\"]\n",[721,838,840],{"class":723,"line":839},21,[721,841,842],{},"        PG[\"🗄️ PostgreSQL 16 + pgvector (:5432)\"]\n",[721,844,846],{"class":723,"line":845},22,[721,847,848],{},"        VOL[\"💾 Persistent Storage Volumes (\u002Fuploads, \u002Fdata)\"]\n",[721,850,852],{"class":723,"line":851},23,[721,853,745],{},[721,855,857],{"class":723,"line":856},24,[721,858,752],{"emptyLinePlaceholder":751},[721,860,862],{"class":723,"line":861},25,[721,863,864],{},"    U --> NGINX\n",[721,866,868],{"class":723,"line":867},26,[721,869,870],{},"    NGINX -->|Frontend Requests| FE\n",[721,872,874],{"class":723,"line":873},27,[721,875,876],{},"    NGINX -->|API & File Uploads \u002Fapi\u002F*| BE\n",[721,878,880],{"class":723,"line":879},28,[721,881,882],{},"    BE \u003C--> REDIS\n",[721,884,886],{"class":723,"line":885},29,[721,887,888],{},"    BE --> PGB\n",[721,890,892],{"class":723,"line":891},30,[721,893,894],{},"    PGB --> PG\n",[721,896,898],{"class":723,"line":897},31,[721,899,900],{},"    BE --> VOL\n",[902,903],"hr",{},[905,906,908],"h2",{"id":907},"_1-container-topology-service-inventory","1. Container Topology & Service Inventory",[910,911,912,929],"table",{},[913,914,915],"thead",{},[916,917,918,923,926],"tr",{},[919,920,922],"th",{"align":921},"left","Container Service",[919,924,925],{"align":921},"Base Image",[919,927,928],{"align":921},"Role & Responsibilities",[930,931,932,951,966,981,998,1015],"tbody",{},[916,933,934,943,948],{},[935,936,937],"td",{"align":921},[938,939,940],"strong",{},[718,941,942],{},"nginx",[935,944,945],{"align":921},[718,946,947],{},"nginx:alpine",[935,949,950],{"align":921},"SSL\u002FTLS termination, request gzip compression, path routing, and authenticated static uploads protection.",[916,952,953,960,963],{},[935,954,955],{"align":921},[938,956,957],{},[718,958,959],{},"frontend",[935,961,962],{"align":921},"Custom Next.js 14+",[935,964,965],{"align":921},"Server-Side Rendering (SSR), App Router, client-side caching with React Query, PWA service worker delivery.",[916,967,968,975,978],{},[935,969,970],{"align":921},[938,971,972],{},[718,973,974],{},"backend",[935,976,977],{"align":921},"Custom NestJS \u002F Node 20",[935,979,980],{"align":921},"REST API controllers, JWT authentication, RBAC authorization, BullMQ job dispatchers, and Prisma ORM client.",[916,982,983,990,995],{},[935,984,985],{"align":921},[938,986,987],{},[718,988,989],{},"redis",[935,991,992],{"align":921},[718,993,994],{},"redis:7-alpine",[935,996,997],{"align":921},"BullMQ task queues, rate-limiting counters, and token revocation blacklists.",[916,999,1000,1007,1012],{},[935,1001,1002],{"align":921},[938,1003,1004],{},[718,1005,1006],{},"pgbouncer",[935,1008,1009],{"align":921},[718,1010,1011],{},"edoburu\u002Fpgbouncer",[935,1013,1014],{"align":921},"Transaction-mode connection multiplexing, bounding active PostgreSQL processes during peak traffic.",[916,1016,1017,1024,1029],{},[935,1018,1019],{"align":921},[938,1020,1021],{},[718,1022,1023],{},"postgres",[935,1025,1026],{"align":921},[718,1027,1028],{},"pgvector\u002Fpgvector:pg16",[935,1030,1031],{"align":921},"Relational multi-tenant database with vector extensions for AI document semantic search.",[902,1033],{},[905,1035,1037],{"id":1036},"_2-port-network-allocation","2. Port & Network Allocation",[1039,1040,1041,1056,1070,1084,1094],"ul",{},[1042,1043,1044,1047,1048,1051,1052,1055],"li",{},[938,1045,1046],{},"Frontend Web UI",": Bound to host port ",[718,1049,1050],{},"8000"," via Nginx (and port ",[718,1053,1054],{},"443"," in HTTPS environments).",[1042,1057,1058,1061,1062,1065,1066,1069],{},[938,1059,1060],{},"Backend REST API",": Exposed on port ",[718,1063,1064],{},"8001"," (internal ",[718,1067,1068],{},"sms_network"," communication).",[1042,1071,1072,1075,1076,1079,1080,1083],{},[938,1073,1074],{},"PostgreSQL Database",": Exposed on host port ",[718,1077,1078],{},"5433"," (mapped internally to ",[718,1081,1082],{},"5432"," to avoid conflicts with existing local Postgres instances).",[1042,1085,1086,1089,1090,1093],{},[938,1087,1088],{},"Redis Cache & Queues",": Exposed internally on port ",[718,1091,1092],{},"6379",".",[1042,1095,1096,1099,1100,1093],{},[938,1097,1098],{},"PgBouncer Pooler",": Operates on internal port ",[718,1101,1102],{},"6432",[902,1104],{},[905,1106,1108],{"id":1107},"_3-recommended-production-hardware-sizing","3. Recommended Production Hardware Sizing",[707,1110,1111],{},"For an institution or multi-tenant deployment hosting between 1,000 and 10,000 active students:",[1039,1113,1114,1120,1164],{},[1042,1115,1116,1119],{},[938,1117,1118],{},"CPU",": 4 vCPUs (x86_64 or ARM64)",[1042,1121,1122,1125,1126],{},[938,1123,1124],{},"Memory (RAM)",": 16 GB ECC RAM\n",[1039,1127,1128,1142,1148,1154],{},[1042,1129,1130,1134,1135,1138,1139],{},[1131,1132,1133],"em",{},"PostgreSQL",": ",[718,1136,1137],{},"shared_buffers=1GB",", ",[718,1140,1141],{},"effective_cache_size=3GB",[1042,1143,1144,1147],{},[1131,1145,1146],{},"PgBouncer",": Max 200 server connections",[1042,1149,1150,1153],{},[1131,1151,1152],{},"NestJS & Next.js",": 4 GB allocation with PM2 cluster mode",[1042,1155,1156,1159,1160,1163],{},[1131,1157,1158],{},"Redis",": 2 GB maxmemory with ",[718,1161,1162],{},"allkeys-lru"," eviction policy",[1042,1165,1166,1169],{},[938,1167,1168],{},"Disk Storage",": 100 GB+ NVMe SSD storage with automated daily snapshot backups",[1171,1172,1173],"style",{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":716,"searchDepth":730,"depth":730,"links":1175},[1176,1177,1178],{"id":907,"depth":730,"text":908},{"id":1036,"depth":730,"text":1037},{"id":1107,"depth":730,"text":1108},"Comprehensive architecture overview of YeneSchool's production container topology — PostgreSQL with pgvector, PgBouncer, Redis BullMQ, NestJS, Next.js, and Nginx.","md",null,{"icon":528},{"title":635,"icon":528},{"title":698,"description":1179},"LVEJLyBGQBcRxr-D-D64RmDyA722udPkCDq2F2yT-xs",[1187,1189],{"title":624,"path":625,"stem":626,"description":1188,"icon":627,"children":-1},"Monitoring BullMQ job queues, Redis cache, database connection pools, WebSocket real-time presence, and platform audit logs.",{"title":639,"path":640,"stem":641,"description":1190,"icon":642,"children":-1},"Step-by-step runbook for deploying YeneSchool in production using Docker Compose — secrets setup, database migrations, and Nginx SSL configuration.",1791357983036]