Keyboard-First Navigation & Offline Sync Guide
This document describes how to operate the keyboard-first navigation features, global Command Palette, and client-side offline synchronization behavior in the School ERP.
⌨️ 1. Keyboard-First Navigation
The ERP implements a fully keyboard-accessible interface. Administrative users can perform daily operations, search for sections, and submit data without touching a mouse.
Global Keyboard Shortcuts
| Shortcut | Action | Scope |
|---|---|---|
Ctrl + K or Cmd + K |
Toggle Command Palette | Global (Any page) |
Escape |
Dismiss Command Palette / Close modals | Global |
/ |
Focus search bar (when not inside an input) | Global (on pages with search) |
Ctrl + Enter or Cmd + Enter |
Submit current active form | Global (Any form input focus) |
Global Command Palette
Pressing Cmd + K or Ctrl + K triggers a clean, slate-styled search overlay.
- Dynamic Scans: The palette automatically scans the sidebar navigation options. It dynamically updates options based on the active Tenant's module marketplace features and Spatie user roles, preventing unauthorized access.
- Navigation: Type to filter, use
ArrowUpandArrowDownkeys to move highlight selection, and pressEnterto navigate to the selected route.
📶 2. Offline-First Synchronization
To support operational work in settings with spotty connectivity (like active classrooms or sports fields), the ERP leverages a Progressive Web App (PWA) architecture.
How it works
- Asset Caching: A Service Worker (
sw.js) intercepts GET requests. Core CSS/JS and primary pages are cached. If the system is offline, the layout falls back to localized pages. - Connectivity Status Badge: A live badge in the layout header indicates network status:
- Online (Green): The browser is connected. Sync transactions are completed instantly.
- Offline (Orange): Connection has dropped. Transactions are written locally.
- Syncing (Blue): Reconnecting and pushing queued logs.
- IndexedDB outbox queue: Writes (e.g. logging student behavioral milestones) are intercepted when offline. Payload parameters are serialized and saved to IndexedDB (
offline_erp_db.milestones_outbox). - Reconciliation endpoint: When internet connection is restored:
- The client background sync loop reads all queued items.
- The items are batched and sent via
POSTto/plugins/counseling/milestones/sync. - On successful validation and ledger processing, local outbox logs are cleared.
Tenant Isolation Protection
Offline outbox queues are tagged with the active tenant_id and logged-in user_id. The Laravel reconciliation endpoint validates that each queued student record belongs to the active tenant scoped user session, ensuring complete multi-tenant security during asynchronous synchronization.