[{"data":1,"prerenderedAt":1442},["ShallowReactive",2],{"navigation_docs_en":3,"-en-devops-backup-disaster-recovery":696,"-en-devops-backup-disaster-recovery-surround":1437},[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":1430,"extension":1431,"links":1432,"meta":1433,"navigation":1434,"path":650,"seo":1435,"stem":651,"__hash__":1436},"docs_en\u002Fen\u002F20.devops\u002F04.backup-disaster-recovery.md","Database Backup & Disaster Recovery Runbook",{"type":700,"value":701,"toc":1420},"minimark",[702,706,710,752,755,760,763,1097,1100,1155,1157,1161,1168,1211,1213,1217,1220,1225,1245,1249,1296,1300,1303,1389,1393,1413,1416],[703,704,698],"h1",{"id":705},"database-backup-disaster-recovery-runbook",[707,708,709],"p",{},"Educational data is mission-critical. A comprehensive backup strategy ensures academic transcripts, payment ledgers, and attendance records are protected against hardware failure, human error, or data corruption.",[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 LR\n    A[\"🗄️ PostgreSQL 16 Active DB\"] -->|Daily 02:00 AM Cron| B[\"📦 Compressed pg_dump (.sql.gz)\"]\n    C[\"💾 Persistent Storage (\u002Fuploads)\"] -->|Daily rsync \u002F tar| D[\"📁 Uploads Archive (.tar.gz)\"]\n    B & D --> E[\"🔒 Encrypted Local Cold Storage (\u002Fbackups)\"]\n    E -->|Offsite Replication| F[\"☁️ Remote Secure Object Storage \u002F S3\"]\n","mermaid","",[718,719,720,728,734,740,746],"code",{"__ignoreMap":716},[721,722,725],"span",{"class":723,"line":724},"line",1,[721,726,727],{},"flowchart LR\n",[721,729,731],{"class":723,"line":730},2,[721,732,733],{},"    A[\"🗄️ PostgreSQL 16 Active DB\"] -->|Daily 02:00 AM Cron| B[\"📦 Compressed pg_dump (.sql.gz)\"]\n",[721,735,737],{"class":723,"line":736},3,[721,738,739],{},"    C[\"💾 Persistent Storage (\u002Fuploads)\"] -->|Daily rsync \u002F tar| D[\"📁 Uploads Archive (.tar.gz)\"]\n",[721,741,743],{"class":723,"line":742},4,[721,744,745],{},"    B & D --> E[\"🔒 Encrypted Local Cold Storage (\u002Fbackups)\"]\n",[721,747,749],{"class":723,"line":748},5,[721,750,751],{},"    E -->|Offsite Replication| F[\"☁️ Remote Secure Object Storage \u002F S3\"]\n",[753,754],"hr",{},[756,757,759],"h2",{"id":758},"_1-automated-postgresql-daily-backups","1. Automated PostgreSQL Daily Backups",[707,761,762],{},"Run this script as a root cron job on the host machine every night at 2:00 AM:",[711,764,768],{"className":765,"code":766,"language":767,"meta":716,"style":716},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","#!\u002Fusr\u002Fbin\u002Fenv bash\nset -eo pipefail\n\nBACKUP_DIR=\"\u002Fvar\u002Fbackups\u002Fyeneschool\"\nTIMESTAMP=$(date +\"%Y%m%d_%H%M%S\")\nBACKUP_FILE=\"${BACKUP_DIR}\u002Fyeneschool_db_${TIMESTAMP}.sql.gz\"\nCONTAINER_NAME=\"sms_postgres\"\nDB_USER=\"yene_admin\"\nDB_NAME=\"yeneschool_production\"\n\n# Ensure backup directory exists\nmkdir -p \"${BACKUP_DIR}\"\n\n# Execute compressed pg_dump directly from container\ndocker exec -t \"${CONTAINER_NAME}\" pg_dump -U \"${DB_USER}\" -d \"${DB_NAME}\" --clean --if-exists | gzip > \"${BACKUP_FILE}\"\n\n# Enforce 30-day retention policy (prune backups older than 30 days)\nfind \"${BACKUP_DIR}\" -name \"yeneschool_db_*.sql.gz\" -type f -mtime +30 -delete\n\necho \"[$(date)] Backup completed successfully: ${BACKUP_FILE}\"\n","bash",[718,769,770,776,789,795,814,839,870,885,900,915,920,926,943,948,954,1015,1020,1026,1064,1069],{"__ignoreMap":716},[721,771,772],{"class":723,"line":724},[721,773,775],{"class":774},"sHwdD","#!\u002Fusr\u002Fbin\u002Fenv bash\n",[721,777,778,782,786],{"class":723,"line":730},[721,779,781],{"class":780},"s2Zo4","set",[721,783,785],{"class":784},"sfazB"," -eo",[721,787,788],{"class":784}," pipefail\n",[721,790,791],{"class":723,"line":736},[721,792,794],{"emptyLinePlaceholder":793},true,"\n",[721,796,797,801,805,808,811],{"class":723,"line":742},[721,798,800],{"class":799},"sTEyZ","BACKUP_DIR",[721,802,804],{"class":803},"sMK4o","=",[721,806,807],{"class":803},"\"",[721,809,810],{"class":784},"\u002Fvar\u002Fbackups\u002Fyeneschool",[721,812,813],{"class":803},"\"\n",[721,815,816,819,822,826,829,831,834,836],{"class":723,"line":748},[721,817,818],{"class":799},"TIMESTAMP",[721,820,821],{"class":803},"=$(",[721,823,825],{"class":824},"sBMFI","date",[721,827,828],{"class":784}," +",[721,830,807],{"class":803},[721,832,833],{"class":784},"%Y%m%d_%H%M%S",[721,835,807],{"class":803},[721,837,838],{"class":803},")\n",[721,840,842,845,847,850,852,855,858,861,863,865,868],{"class":723,"line":841},6,[721,843,844],{"class":799},"BACKUP_FILE",[721,846,804],{"class":803},[721,848,849],{"class":803},"\"${",[721,851,800],{"class":799},[721,853,854],{"class":803},"}",[721,856,857],{"class":784},"\u002Fyeneschool_db_",[721,859,860],{"class":803},"${",[721,862,818],{"class":799},[721,864,854],{"class":803},[721,866,867],{"class":784},".sql.gz",[721,869,813],{"class":803},[721,871,873,876,878,880,883],{"class":723,"line":872},7,[721,874,875],{"class":799},"CONTAINER_NAME",[721,877,804],{"class":803},[721,879,807],{"class":803},[721,881,882],{"class":784},"sms_postgres",[721,884,813],{"class":803},[721,886,888,891,893,895,898],{"class":723,"line":887},8,[721,889,890],{"class":799},"DB_USER",[721,892,804],{"class":803},[721,894,807],{"class":803},[721,896,897],{"class":784},"yene_admin",[721,899,813],{"class":803},[721,901,903,906,908,910,913],{"class":723,"line":902},9,[721,904,905],{"class":799},"DB_NAME",[721,907,804],{"class":803},[721,909,807],{"class":803},[721,911,912],{"class":784},"yeneschool_production",[721,914,813],{"class":803},[721,916,918],{"class":723,"line":917},10,[721,919,794],{"emptyLinePlaceholder":793},[721,921,923],{"class":723,"line":922},11,[721,924,925],{"class":774},"# Ensure backup directory exists\n",[721,927,929,932,935,938,940],{"class":723,"line":928},12,[721,930,931],{"class":824},"mkdir",[721,933,934],{"class":784}," -p",[721,936,937],{"class":803}," \"${",[721,939,800],{"class":799},[721,941,942],{"class":803},"}\"\n",[721,944,946],{"class":723,"line":945},13,[721,947,794],{"emptyLinePlaceholder":793},[721,949,951],{"class":723,"line":950},14,[721,952,953],{"class":774},"# Execute compressed pg_dump directly from container\n",[721,955,957,960,963,966,968,970,973,976,979,981,983,985,988,990,992,994,997,1000,1003,1006,1009,1011,1013],{"class":723,"line":956},15,[721,958,959],{"class":824},"docker",[721,961,962],{"class":784}," exec",[721,964,965],{"class":784}," -t",[721,967,937],{"class":803},[721,969,875],{"class":799},[721,971,972],{"class":803},"}\"",[721,974,975],{"class":784}," pg_dump",[721,977,978],{"class":784}," -U",[721,980,937],{"class":803},[721,982,890],{"class":799},[721,984,972],{"class":803},[721,986,987],{"class":784}," -d",[721,989,937],{"class":803},[721,991,905],{"class":799},[721,993,972],{"class":803},[721,995,996],{"class":784}," --clean",[721,998,999],{"class":784}," --if-exists",[721,1001,1002],{"class":803}," |",[721,1004,1005],{"class":824}," gzip",[721,1007,1008],{"class":803}," >",[721,1010,937],{"class":803},[721,1012,844],{"class":799},[721,1014,942],{"class":803},[721,1016,1018],{"class":723,"line":1017},16,[721,1019,794],{"emptyLinePlaceholder":793},[721,1021,1023],{"class":723,"line":1022},17,[721,1024,1025],{"class":774},"# Enforce 30-day retention policy (prune backups older than 30 days)\n",[721,1027,1029,1032,1034,1036,1038,1041,1044,1047,1049,1052,1055,1058,1061],{"class":723,"line":1028},18,[721,1030,1031],{"class":824},"find",[721,1033,937],{"class":803},[721,1035,800],{"class":799},[721,1037,972],{"class":803},[721,1039,1040],{"class":784}," -name",[721,1042,1043],{"class":803}," \"",[721,1045,1046],{"class":784},"yeneschool_db_*.sql.gz",[721,1048,807],{"class":803},[721,1050,1051],{"class":784}," -type",[721,1053,1054],{"class":784}," f",[721,1056,1057],{"class":784}," -mtime",[721,1059,1060],{"class":784}," +30",[721,1062,1063],{"class":784}," -delete\n",[721,1065,1067],{"class":723,"line":1066},19,[721,1068,794],{"emptyLinePlaceholder":793},[721,1070,1072,1075,1077,1080,1083,1085,1088,1091,1093,1095],{"class":723,"line":1071},20,[721,1073,1074],{"class":780},"echo",[721,1076,1043],{"class":803},[721,1078,1079],{"class":784},"[",[721,1081,1082],{"class":803},"$(",[721,1084,825],{"class":824},[721,1086,1087],{"class":803},")",[721,1089,1090],{"class":784},"] Backup completed successfully: ",[721,1092,860],{"class":803},[721,1094,844],{"class":799},[721,1096,942],{"class":803},[707,1098,1099],{},"To install the cron job:",[711,1101,1103],{"className":765,"code":1102,"language":767,"meta":716,"style":716},"# Open crontab editor\ncrontab -e\n\n# Add daily 2:00 AM job\n0 2 * * * \u002Fusr\u002Flocal\u002Fbin\u002Fbackup-yeneschool.sh >> \u002Fvar\u002Flog\u002Fyeneschool-backup.log 2>&1\n",[718,1104,1105,1110,1118,1122,1127],{"__ignoreMap":716},[721,1106,1107],{"class":723,"line":724},[721,1108,1109],{"class":774},"# Open crontab editor\n",[721,1111,1112,1115],{"class":723,"line":730},[721,1113,1114],{"class":824},"crontab",[721,1116,1117],{"class":784}," -e\n",[721,1119,1120],{"class":723,"line":736},[721,1121,794],{"emptyLinePlaceholder":793},[721,1123,1124],{"class":723,"line":742},[721,1125,1126],{"class":774},"# Add daily 2:00 AM job\n",[721,1128,1129,1132,1136,1139,1141,1143,1146,1149,1152],{"class":723,"line":748},[721,1130,1131],{"class":824},"0",[721,1133,1135],{"class":1134},"sbssI"," 2",[721,1137,1138],{"class":799}," *",[721,1140,1138],{"class":799},[721,1142,1138],{"class":799},[721,1144,1145],{"class":784}," \u002Fusr\u002Flocal\u002Fbin\u002Fbackup-yeneschool.sh",[721,1147,1148],{"class":803}," >>",[721,1150,1151],{"class":784}," \u002Fvar\u002Flog\u002Fyeneschool-backup.log",[721,1153,1154],{"class":803}," 2>&1\n",[753,1156],{},[756,1158,1160],{"id":1159},"_2-backing-up-uploaded-student-files-documents","2. Backing Up Uploaded Student Files & Documents",[707,1162,1163,1164,1167],{},"Uploaded assets (student registration photos, National Exam result slips, teacher certifications) are stored in the persistent Docker volume mapped to ",[718,1165,1166],{},"\u002Fuploads",":",[711,1169,1171],{"className":765,"code":1170,"language":767,"meta":716,"style":716},"# Archive the uploads volume directory\ntar -czf \"\u002Fvar\u002Fbackups\u002Fyeneschool\u002Fuploads_${TIMESTAMP}.tar.gz\" -C \u002Fvar\u002Flib\u002Fdocker\u002Fvolumes\u002Fyeneschool_uploads_data\u002F_data .\n",[718,1172,1173,1178],{"__ignoreMap":716},[721,1174,1175],{"class":723,"line":724},[721,1176,1177],{"class":774},"# Archive the uploads volume directory\n",[721,1179,1180,1183,1186,1188,1191,1193,1195,1197,1200,1202,1205,1208],{"class":723,"line":730},[721,1181,1182],{"class":824},"tar",[721,1184,1185],{"class":784}," -czf",[721,1187,1043],{"class":803},[721,1189,1190],{"class":784},"\u002Fvar\u002Fbackups\u002Fyeneschool\u002Fuploads_",[721,1192,860],{"class":803},[721,1194,818],{"class":799},[721,1196,854],{"class":803},[721,1198,1199],{"class":784},".tar.gz",[721,1201,807],{"class":803},[721,1203,1204],{"class":784}," -C",[721,1206,1207],{"class":784}," \u002Fvar\u002Flib\u002Fdocker\u002Fvolumes\u002Fyeneschool_uploads_data\u002F_data",[721,1209,1210],{"class":784}," .\n",[753,1212],{},[756,1214,1216],{"id":1215},"_3-disaster-recovery-restoration-procedure","3. Disaster Recovery Restoration Procedure",[707,1218,1219],{},"To restore a database backup onto a fresh server or recover from accidental corruption:",[1221,1222,1224],"h3",{"id":1223},"step-1-ensure-containers-are-running","Step 1: Ensure Containers are Running",[711,1226,1228],{"className":765,"code":1227,"language":767,"meta":716,"style":716},"docker compose up -d postgres\n",[718,1229,1230],{"__ignoreMap":716},[721,1231,1232,1234,1237,1240,1242],{"class":723,"line":724},[721,1233,959],{"class":824},[721,1235,1236],{"class":784}," compose",[721,1238,1239],{"class":784}," up",[721,1241,987],{"class":784},[721,1243,1244],{"class":784}," postgres\n",[1221,1246,1248],{"id":1247},"step-2-unpack-and-stream-restore-file","Step 2: Unpack and Stream Restore File",[711,1250,1252],{"className":765,"code":1251,"language":767,"meta":716,"style":716},"# Decompress and feed SQL dump directly into psql\ngunzip \u003C \u002Fvar\u002Fbackups\u002Fyeneschool\u002Fyeneschool_db_20261007_020000.sql.gz | docker exec -i sms_postgres psql -U yene_admin -d yeneschool_production\n",[718,1253,1254,1259],{"__ignoreMap":716},[721,1255,1256],{"class":723,"line":724},[721,1257,1258],{"class":774},"# Decompress and feed SQL dump directly into psql\n",[721,1260,1261,1264,1267,1270,1272,1275,1277,1280,1283,1286,1288,1291,1293],{"class":723,"line":730},[721,1262,1263],{"class":824},"gunzip",[721,1265,1266],{"class":803}," \u003C",[721,1268,1269],{"class":784}," \u002Fvar\u002Fbackups\u002Fyeneschool\u002Fyeneschool_db_20261007_020000.sql.gz",[721,1271,1002],{"class":803},[721,1273,1274],{"class":824}," docker",[721,1276,962],{"class":784},[721,1278,1279],{"class":784}," -i",[721,1281,1282],{"class":784}," sms_postgres",[721,1284,1285],{"class":784}," psql",[721,1287,978],{"class":784},[721,1289,1290],{"class":784}," yene_admin",[721,1292,987],{"class":784},[721,1294,1295],{"class":784}," yeneschool_production\n",[1221,1297,1299],{"id":1298},"step-3-run-database-integrity-verifications","Step 3: Run Database Integrity Verifications",[707,1301,1302],{},"Verify that core table counts match expected figures:",[711,1304,1306],{"className":765,"code":1305,"language":767,"meta":716,"style":716},"docker exec -it sms_postgres psql -U yene_admin -d yeneschool_production -c \"\n  SELECT \n    (SELECT COUNT(*) FROM \\\"School\\\") AS total_schools,\n    (SELECT COUNT(*) FROM \\\"Student\\\") AS total_students,\n    (SELECT COUNT(*) FROM \\\"AttendanceRecord\\\") AS total_attendance_records;\n\"\n",[718,1307,1308,1336,1341,1357,1371,1385],{"__ignoreMap":716},[721,1309,1310,1312,1314,1317,1319,1321,1323,1325,1327,1330,1333],{"class":723,"line":724},[721,1311,959],{"class":824},[721,1313,962],{"class":784},[721,1315,1316],{"class":784}," -it",[721,1318,1282],{"class":784},[721,1320,1285],{"class":784},[721,1322,978],{"class":784},[721,1324,1290],{"class":784},[721,1326,987],{"class":784},[721,1328,1329],{"class":784}," yeneschool_production",[721,1331,1332],{"class":784}," -c",[721,1334,1335],{"class":803}," \"\n",[721,1337,1338],{"class":723,"line":730},[721,1339,1340],{"class":784},"  SELECT \n",[721,1342,1343,1346,1349,1352,1354],{"class":723,"line":736},[721,1344,1345],{"class":784},"    (SELECT COUNT(*) FROM ",[721,1347,1348],{"class":799},"\\\"",[721,1350,1351],{"class":784},"School",[721,1353,1348],{"class":799},[721,1355,1356],{"class":784},") AS total_schools,\n",[721,1358,1359,1361,1363,1366,1368],{"class":723,"line":742},[721,1360,1345],{"class":784},[721,1362,1348],{"class":799},[721,1364,1365],{"class":784},"Student",[721,1367,1348],{"class":799},[721,1369,1370],{"class":784},") AS total_students,\n",[721,1372,1373,1375,1377,1380,1382],{"class":723,"line":748},[721,1374,1345],{"class":784},[721,1376,1348],{"class":799},[721,1378,1379],{"class":784},"AttendanceRecord",[721,1381,1348],{"class":799},[721,1383,1384],{"class":784},") AS total_attendance_records;\n",[721,1386,1387],{"class":723,"line":841},[721,1388,813],{"class":803},[1221,1390,1392],{"id":1391},"step-4-restart-application-stack","Step 4: Restart Application Stack",[711,1394,1396],{"className":765,"code":1395,"language":767,"meta":716,"style":716},"docker compose restart backend frontend\n",[718,1397,1398],{"__ignoreMap":716},[721,1399,1400,1402,1404,1407,1410],{"class":723,"line":724},[721,1401,959],{"class":824},[721,1403,1236],{"class":784},[721,1405,1406],{"class":784}," restart",[721,1408,1409],{"class":784}," backend",[721,1411,1412],{"class":784}," frontend\n",[707,1414,1415],{},"All users can now log back into the restored system.",[1417,1418,1419],"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);}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":716,"searchDepth":730,"depth":730,"links":1421},[1422,1423,1424],{"id":758,"depth":730,"text":759},{"id":1159,"depth":730,"text":1160},{"id":1215,"depth":730,"text":1216,"children":1425},[1426,1427,1428,1429],{"id":1223,"depth":736,"text":1224},{"id":1247,"depth":736,"text":1248},{"id":1298,"depth":736,"text":1299},{"id":1391,"depth":736,"text":1392},"Automated PostgreSQL snapshot backups, Docker persistent volume preservation, disaster recovery procedures, and database restoration verification.","md",null,{"icon":652},{"title":649,"icon":652},{"title":698,"description":1430},"CCtrbogRB_sr64IEJ5PaieiuYFx-_X9zlQZPwFEUI6E",[1438,1440],{"title":644,"path":645,"stem":646,"description":1439,"icon":647,"children":-1},"Guide for setting up YeneSchool locally for active development — hot reloading with docker-compose.dev.yml, manual dev servers, and running security tests.",{"title":659,"path":660,"stem":661,"description":1441,"icon":662,"children":-1},"Comprehensive overview of YeneSchool's security posture — JWT with Redis revocation, 10-role RBAC authorization hierarchy, and rate limiting.",1791357983847]