Frontend UI and PWA
UI Composition Model
The frontend uses a shell-plus-features model.
Shell (App.tsx):
- app bar and global controls
- sidebar navigation
- page content outlet
- footer
Feature pages compose domain widgets and delegate state mutations to providers.
Rendering Responsibilities
- components render local UI and emit intent (events)
- pages aggregate components and handle user feedback
- providers perform async mutations and server sync
This keeps rendering logic and orchestration logic separated.
UI Structural Notes
HomecomposesProjectsandFiledropSprintcomposesTicketFilters,Kanban,Backlog, and theTicketInfosidebar- route components do not own server orchestration logic in the current implementation; they trigger provider actions and show feedback
PWA Implementation
Configured via vite-plugin-pwa in vite.config.ts.
Current baseline:
- generated service worker
- manifest metadata (some fields are placeholder values in the current configuration)
- static icons in public/icons
- dev PWA mode enabled
PWA Gaps and Potential Extensions
Current gaps: - no offline fallback UX - no app-update prompt for new service worker - no explicit runtime caching strategy for API calls
Potential extensions (not implemented in current baseline): 1. runtime caching rules per resource type 2. update notification flow when a new service worker is available 3. offline page/route for navigation fallback