1.8 KiB
1.8 KiB
Screen Architecture
Screens orchestrate reusable components and route-level data boundaries. They do not own domain logic or duplicate server state.
Workspaces
/admin: SaaS operations and platform health/app: Course Designer creative and monitoring workspace/manager: authorized team analytics/learn: mobile-first assigned learning
Designer navigation includes /app/skills-taxonomy and Monitoring > Skills & Competencies. Contextual LearningMappingPanel is reused for Course, Module, Lesson, Block, Question, and Assessment.
Every meaningful route renders loading, empty, populated, error, and permission-denied states. Offline state is explicit where supported. Mutations expose pending, success, and failure.
Desktop uses persistent workspace navigation. Tablet uses collapsible panels. Designer mobile uses a drawer; the full Builder is not compressed into an unusable layout. Learner mobile uses at most five labeled bottom-navigation destinations.
Course Builder
- Real route:
/app/courses/:courseId/versions/:versionId/lessons/:lessonId/builder - UI-review route:
/app/builder-preview(clearly labelled local-only sample data) - Physical desktop layout: block library, canvas, contextual inspector, and course structure; content inside each panel follows the active document direction.
- TanStack Query owns server documents and mutations. Zustand owns selection, panel, and device-preview state only.
- DnD is progressive enhancement: every library block has a semantic button for click/keyboard insertion and canvas handles have accessible labels.
- Inspector edits are debounced before the API mutation. The server remains authoritative through
expectedRevision; conflict responses are HTTP 409 and include the current block. - Widths below 760px show a clear larger-screen requirement instead of a misleading compressed authoring surface.