3.6 KiB
3.6 KiB
Frontend Change Map
Purpose
This document tracks the refactoring of App.svelte from a 4794-line monolith
into a modular frontend architecture. Each step preserves behaviour exactly.
Phase 1: Documentation & Foundation
- Audit App.svelte (all 4794 lines read and mapped)
- Create
docs/frontend-architecture.md - Create
docs/frontend-change-map.md
Phase 2: API Layer
Extract all Wails calls into service modules.
- Create
lib/services/wails.js— basewailsCallhelper - Create
lib/services/notes.js—listNotes,createNote,readNote,saveNote,renameNote,deleteNote - Create
lib/services/files.js—loadFolder,addFile,deleteFile, etc. - Create
lib/services/search.js—searchNodes - Create
lib/services/inbox.js—listInbox,captureClipboard, etc. - Create
lib/services/trash.js—loadTrash,restore,purge - Create
lib/services/sync.js—loadSyncStatus,runSync - Create
lib/services/journal.js—loadJournal,worklog CRUD - Create
lib/services/actions.js—listActions,createAction,deleteAction - Create
lib/services/links.js—listLinks,updateLink,deleteLink - Create
lib/services/activity.js—loadActivityFeed,loadCaseActivity
Phase 3: State Extraction
- Create
lib/state/navigation.js—selectedSection,selectedNode,activeTab,navHistory - Create
lib/state/uiState.js— modals state, confirm state, rename state, drag state
Phase 4: Component Extraction — Layout
- Extract
Sidebar.svelte— brand, nav items, workspace tree, footer - Extract
MainWorkspace.svelte— content routing - Create
AppShell.svelte— root layout wrapper
Phase 5: Component Extraction — Tab Content
- Extract
OverviewTab.svelte - Extract
NotesTab.svelte - Extract
FilesTab.svelte - Extract
LinksTab.svelte - Extract
ActionsTab.svelte - Extract
WorklogTab.svelte - Extract
ActivityTabContent.svelte - Extract
InboxContent.svelte - Extract
InboxFullScreen.svelte - Extract
TrashContent.svelte - Extract
JournalScreen.svelte - Extract
ActivityFeedScreen.svelte - Extract
WelcomeScreen.svelte
Phase 6: Component Extraction — Modals
- Extract
CreateNodeModal.svelte - Extract
WorklogModal.svelte - Extract
CreateActionModal.svelte - Extract
ImportModal.svelte - Extract
RenameModal.svelte - Extract
AssignInboxModal.svelte - Extract
EditLinkModal.svelte - Extract
ContextMenu.svelte
Phase 7: Extract Inline Components
- Extract
NoteEditorHeader.svelte(note editor header with rename) - Extract
ErrorBanner.svelte - Extract
CaptureDropOverlay.svelte - Extract
SidebarFooter.svelte
Phase 8: Verification
npm run buildpassesgo test ./...passes- Smoke checklist:
- Sidebar renders with system views
- Workspace tree loads and is expandable
- Selecting a node shows tabs
- Overview tab shows metadata and quick actions
- Notes tab — create, rename, delete notes
- Note editor — edit, preview, save, internal links, external links
- Files tab — browse, add file/folder, navigate breadcrumbs
- File preview — open, close
- Inbox — list, sort, group, assign, delete
- Trash — browse, restore, purge
- Journal — filter, export, worklog CRUD
- Activity feed — load and open events
- Today screen — dashboard, suggestions, browser events
- Settings — open/close, sections
- Context menu on workspace tree
- Create node modal — templates