Moves phases 08–11 execution artifacts from .planning/phases/ to .planning/milestones/v0.2-phases/ to keep .planning/phases/ clean for the next milestone. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
5.1 KiB
Phase 11 Research Refresh — Visual Design, Responsive Layout & Cleanup
Researched: 2026-06-16 Inputs: Phase 11 context, roadmap, requirements, pitfall notes, live frontend code.
Executive Summary
The six-plan Phase 11 sequence is structurally sound: measure first, lazy-load routes, fix responsive shells, normalize forms/modals, do the visual consistency pass, then delete dead code and measure again. The second review found several places where the plans needed sharper implementation constraints, especially because 11-CONTEXT.md contains locked decisions that were not fully reflected in the first review.
Current Code Findings
Performance
frontend/package.jsonalready includesrollup-plugin-visualizer@^7.0.1.frontend/vite.config.jscurrently has onlyvue()inplugins; analyzer wiring still needs to be added behind an opt-in flag.frontend/src/router/index.jsstill synchronously imports:FileManagerViewTopicsViewDocumentViewSettingsViewCloudFolderViewCloudStorageView
- Auth routes, admin layout, admin child views, and
SharedVieware already lazy-loaded. - Recommendation: keep
FileManagerViewsynchronous only for/as the critical first authenticated surface. Lazy-loadTopicsView,DocumentView,SettingsView,CloudStorageView, andCloudFolderView. Reuse the synchronousFileManagerViewfor/folders/:folderIdunless the bundle baseline proves it should be split later.
Responsive Shells
App.vuerenders a desktop-onlyflex h-screen overflow-hiddenshell with permanentAppSidebar.AdminLayout.vuemirrors that desktop-only shell with permanentAdminSidebar.AppSidebar.vueandAdminSidebar.vueare presentational enough to stay drawer-agnostic.- Recommendation: use layout-local refs in
App.vueandAdminLayout.vue, not a new Pinia store. Nav link close behavior can be handled by watching route changes in each layout root; no child component needs global drawer state.
Storage Rows
StorageBrowser.vuealready hides Size belowmdand Modified belowsmviahidden md:blockandhidden sm:block.- The grid template remains fixed at
grid-cols-[2rem_1fr_6rem_8rem_6rem], so responsive column sizing still needs explicit adjustment to avoid empty tracks and mobile overflow. - Existing row action buttons use
p-1.5, which may not guarantee 36x36 touch targets belowmd.
Forms
@tailwindcss/formsis already installed and active infrontend/tailwind.config.js.- Many controls still carry repeated full border/focus class stacks. Plan 11-04 should normalize those without introducing a new component library.
Modals
Mobile overflow risk is concrete:
ShareModal.vue: fixed overlay, centered panel,rounded-2xl, nomax-horoverflow-y-auto.CloudCredentialModal.vue: fixed overlay, centered panel,max-w-md p-6, nomax-horoverflow-y-auto; form can become tall with advanced Nextcloud fields.FolderDeleteModal.vue: smaller but should still receive the shared mobile-safe panel pattern.DocumentPreviewModal.vue: full-screen preview is structurally different; it should preserve full-screen behavior and ensure header/content do not overflow on narrow screens.
Recommended modal shell pattern: overlay uses p-4 sm:p-6; panel uses max-h-[calc(100vh-2rem)] overflow-y-auto below sm, with desktop styling preserved.
Visual Consistency
- Current frontend heavily uses
focus:ring-2but rarelyfocus-visible:. rounded-xlandrounded-2xlappear on several ordinary panels/modals even though AGENTS.md prefers cards at 8px radius unless the design system requires otherwise.- There are data-driven inline styles that should remain:
- topic color swatches
- quota/progress bar widths
- Teleport dropdown coordinates
- tree indentation
- There are skeleton width styles such as
:style="{ width: (50 + n * 15) + 'px' }"that are decorative and can be converted to static Tailwind widths during the visual pass.
Recommended convention:
- Page title:
text-2xl font-semibold - Section title:
text-lg font-semibold - Panel/table heading:
text-sm font-semibold - Body:
text-sm - Caption/metadata:
text-xs - Focus ring:
focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-indigo-500 focus-visible:ring-offset-1
Dead Code Signals
HomeView.vueandFolderView.vueremain absent, satisfying AGENTS.md.- Legacy admin-tab test names still exist under
frontend/src/components/admin/__tests__/:AdminAiConfigTab.test.jsAdminQuotasTab.test.jsAdminUsersTab.test.js
- These tests may still cover current components via renamed imports or may be stale; Plan 11-06 should explicitly classify them.
AccountView.vueexists but/accountredirects to/settings. It may be dead unless imported outside the router. Plan 11-06 should confirm before deleting.
Review Verdict
The plan set remains valid after review, but it should be refined with:
- a documented layout-local drawer-state decision
- exact route lazy-loading scope
- exact modal overflow targets
- a locked focus-ring and typography convention
- explicit dead-code suspects for Plan 11-06