# Laputa App Redesign — Implementation Plan > Generated from `ui-design.pen` (V2) vs current implementation. **Analysis only — do not implement yet.** --- ## Summary of Changes The V2 design introduces: a **Status Bar**, **Tab Bar** in the editor, an **Info Bar** (breadcrumb + actions), restructured **Sidebar** with Phosphor icons and collapsible groups with count badges, **IBM Plex Mono** for type pills, updated **color palette** (new primary `#155DFF`, new accent colors), and several layout/spacing refinements throughout. --- ## Design Specs Reference (from .pen file) ### Colors Changed | Variable | Old (Light) | New (Light) | Old (Dark) | New (Dark) | |---|---|---|---|---| | `--primary` | `#2383E2` | `#155DFF` | `#4a9eff` | `#155DFF` | | `--accent-green` | `#0F7B6C` | `#00B38B` | `#4caf50` | `#00B38B` | | `--accent-purple` | `#9065B0` | `#A932FF` | `#9c72ff` | `#A932FF` | | `--accent-blue` | `#2383E2` | `#155DFF` | `#4a9eff` | `#155DFF` | ### New Color Variables (not in current CSS) | Variable | Light | Dark | |---|---|---| | `--accent-yellow` | `#F0B100` | `#F0B100` | | `--accent-blue-light` | `#155DFF14` | `#155DFF20` | | `--accent-green-light` | `#00B38B14` | `#00B38B20` | | `--accent-purple-light` | `#A932FF14` | `#A932FF20` | | `--accent-red-light` | `#E03E3E14` | `#f4433620` | | `--accent-yellow-light` | `#F0B10014` | `#F0B10020` | ### Typography - **Font**: Inter (primary), IBM Plex Mono (labels/pills) — **IBM Plex Mono not currently loaded** - App title: 17px / Bold / letter-spacing -0.3 - Sidebar items: 13px / Medium (font-weight 500) - Sidebar section headers: 13px / Semibold (600) — currently 11px - Type pills: 11px / IBM Plex Mono / normal weight / ALL CAPS - Editor H1: 32px / Bold / lh 1.2 - Editor H2: 24px / Semibold / lh 1.3 - Editor body: 16px / Regular / lh 1.6 - Info bar / breadcrumb: 12px - Status bar: 11px ### Panel Widths | Panel | Design | Current | |---|---|---| | Sidebar | 250px | 250px ✅ | | NoteList | 300px | 300px ✅ | | Editor | flexible | flexible ✅ | | Inspector | 260px (design) / 280px (spec) | 280px ✅ | ### Border Radius Scale - 4px (sm) — chips - 6px (md) — buttons, inputs - 8px (lg) — cards, dialogs - 9999px — pills, badges (full-round) - 16px — larger badges --- ## Difference Map ### 1. NEW: Status Bar (bottom of app) **Files**: New component `StatusBar.tsx`, `App.tsx`, `App.css` - 30px height, `bg: --sidebar`, `border-top: 1px --border` - **Left**: box icon + "v0.4.2" | git-branch + "main" | refresh-cw (green) + "Synced 2m ago" - **Right**: sparkles (purple) + "Claude Sonnet 4" | file-text + "1,247 notes" | bell icon | settings icon - Padding: 0 8px, items aligned center, gap 12px between items - Font: Inter 11px, text color `--muted-foreground` - Separators: "|" in `--border` color - **All icons**: Lucide, 13-14px ### 2. NEW: Tab Bar (top of editor panel) **Files**: `Editor.tsx` - 45px height, `bg: --sidebar`, `border-bottom: 1px --sidebar-border` - **Active tab**: `bg: --background`, border-right 1px `--border`, text 12px/500 `--foreground`, X close icon (14px lucide) - **Inactive tab**: no fill, border-right + border-bottom 1px `--sidebar-border`, text 12px/normal `--muted-foreground`, X icon opacity 0 (show on hover) - **Spacer**: fills remaining width, border-bottom 1px `--border` - **Controls area** (right): border-left + border-bottom 1px `--border`, gap 12px, padding 0 12px - Plus icon (Phosphor, 16px) - Columns/split icon (Phosphor, 16px) — **disabled placeholder** - Arrows-out-simple/expand icon (Phosphor, 16px) — **disabled placeholder** ### 3. NEW: Breadcrumb Bar (below tab bar, above editor content) **Files**: `Editor.tsx` - 45px height, `bg: --background`, `border-bottom: 1px --border` - Padding: 6px 16px - **Left (breadcrumb)**: "Project" (12px, muted) › "Laputa App" (12px/500, foreground) · "1,284 words" (12px, muted) · "M" (12px/600, `--accent-yellow`) — M only when file modified - **Right (actions)**: gap 12px, each 16px Phosphor icon in `--muted-foreground` - magnifying-glass (search in file) - git-branch (version history) — **disabled placeholder** - cursor-text (focus mode) — **disabled placeholder** - sparkle (AI assist) — **disabled placeholder** - dots-three (more options) — **disabled placeholder** ### 4. Sidebar Restructure **Files**: `Sidebar.tsx` #### Header changes: - Current: "Laputa" title + theme toggle button - New: "Laputa" title (17px/700, -0.3 ls) + search icon (16px Phosphor magnifying-glass) + settings/gear icon (16px) - Theme toggle moved elsewhere (or removed from header) - Padding: 12px 16px, height 45px, border-bottom 1px #### Search bar added: - Below header, padding 6px 12px, border-bottom 1px - Input with magnifying-glass icon prefix, 13px text, placeholder "Search notes..." - Height ~32px, border-radius 6px, bg `--secondary` #### Navigation section restructured: **Current**: flat list of filters (All Notes, People, Events, Changes, Favorites, Trash) **New**: Two items in top nav: - "All Notes" — file-text icon (Phosphor 16px) + label 13px/500 + count badge (pill, bg `--secondary`, 10px text) - "Favorites" — star icon (Phosphor 16px) + same style #### Section groups restructured: **Current**: PROJECTS, EXPERIMENTS, RESPONSIBILITIES, PROCEDURES as expandable sections with items listed under each **New**: Collapsible groups with consistent pattern: - Each group: chevron-right (12px Lucide) + icon (18px Phosphor, bold) + label (13px/600) + count badge (pill) - **Projects** — folder-open icon (Phosphor) - **Experiments** — flask icon (Phosphor) - **Responsibilities** — target icon (Phosphor) — **currently not in sidebar** - **Procedures** — arrows-clockwise icon (Phosphor) - **People** — users icon (Phosphor) — **moved from filter to section group** - **Events** — calendar-blank icon (Phosphor) — **moved from filter to section group** - **Topics** — tag icon (Phosphor) — **currently at bottom, now integrated as a group** Each group has: - Container: padding 4px 6px, border-bottom 1px (disabled in some), vertical layout, gap 2px - Header row: padding 6px 16px, corner-radius 4px, gap 8px, justify space-between - Badge: height 20px, bg `--secondary`, corner-radius 9999px, padding 0 6px #### Removed from sidebar: - "Untagged" filter — not in new design - "Changes" filter — not in new design (modified files shown elsewhere) - "Trash" filter — not in new design - "People" as top-level filter — now a collapsible section group - "Events" as top-level filter — now a collapsible section group #### Commit button: - Same concept but refined: padding 12px, border-top 1px - Button: fill `--primary`, corner-radius 6px, gap 6px, padding 8px 16px - Icon: git-commit-horizontal (Lucide 14px) in `--primary-foreground` - Text: "Commit & Push" (13px/500) - Badge: bg `#ffffff40`, corner-radius 9px, text `--white` 10px/600 ### 5. NoteList Changes **Files**: `NoteList.tsx` #### Header: - Current: title + count badge + create button - New: "Notes" title (14px/600) + search icon (16px Phosphor) + plus icon (16px Phosphor) — gap 12px - No separate count badge in header #### Search: - Current: always-visible search input below header - New: search icon in header (search may toggle inline or use command palette) - **Remove the always-visible search input** or keep it hidden until search icon clicked #### Type pills: - Current: rounded-full, border, `text-[11px]`, system font, "Projects 4" format - New: `IBM Plex Mono` font, 11px, ALL CAPS format "ALL 24" / "PROJECTS 4" / "NOTES 12" / "EVENTS 5" - Active pill: `bg: #4a9eff18` (blue tint), `border: 1px --primary`, text `--primary` - Inactive pill: `border: 1px --border`, text `--muted-foreground` - Pill padding: 2px 10px, corner-radius 9999px - Height: ~18px (compact) - Layout: absolute positioned at x offsets (12, 76, 166, 243) within 45px height container — effectively a horizontal scrollable row #### Note items: - Selected: `bg: #2383E212` (very light blue), left accent bar 3px `#2383E2`, title 13px/600 - Normal: border-bottom 1px `#E9E9E7`, title 13px/500, time 11px, snippet 12px/lh1.5 - Padding: 10px 16px - **No type badge** on individual items (simplified) - **No status text** on items ### 6. Editor Content Area **⚠️ SKIP — Keep editor as-is. Editor changes in the design are NOT intentional.** ### 7. Inspector Refinements **Files**: `Inspector.tsx` #### Header: - Current: collapsed toggle + title - New: sliders-horizontal icon (16px Phosphor) + "Properties" (13px/600, `--muted-foreground`) + X close button (16px Phosphor) - Height 45px, border-bottom 1px, padding 0 12px, gap 8px #### Properties section: - Key-value rows: label (12px, muted) — value (12px, foreground), space-between - Status badge: colored bg (e.g., `--accent-green-light`) with colored text (e.g., `--accent-green`), rounded, padding 1px 6px, 10px font - "+ Add property" button: full-width, border 1px `--border`, corner-radius 6px, padding 6px 12px, centered text (12px, muted) #### Relationships section: - Group title: 12px/600 foreground - Link buttons: full-width, bg `--accent-blue-light`, corner-radius 6px, padding 6px 10px, text `--primary` 12px/500, icon (tag/flask, Phosphor 14px, 0.5 opacity) - "+ Link existing" button: border 1px `--border`, corner-radius 6px, same padding #### Backlinks: - Title: "Backlinks" 12px/600 + count 11px/500 muted - Items: text `--primary` 12px #### History: - Title: "History" 12px/600 - Items: left border 2px `--border`, padding-left 10px - Hash line: 11px foreground - Date line: 10px muted ### 8. Icon Library Change **Current**: Lucide React throughout **New**: **SF Symbols** (Apple's native icon set) for all new/redesigned icons. Use `sf-symbols-react` or inline SVGs extracted from SF Symbols app. **Note**: The Pencil design used Phosphor as a placeholder — Luca's intent is SF Symbols throughout. Map Phosphor names to SF Symbol equivalents: - `magnifying-glass` → `magnifyingglass` - `star` → `star.fill` - `folder-open` → `folder` - `flask` → `flask` - `target` → `target` - `arrows-clockwise` → `arrow.clockwise` - `users` → `person.2` - `calendar-blank` → `calendar` - `tag` → `tag` - `plus` → `plus` - `columns` → `rectangle.split.2x1` - `arrows-out-simple` → `arrow.up.left.and.arrow.down.right` - `sliders-horizontal` → `slider.horizontal.3` - `cursor-text` → `character.cursor.ibeam` - `sparkle` → `sparkles` - `dots-three` → `ellipsis` - `git-branch` → `arrow.triangle.branch` - `gear` → `gearshape` **Action**: Find the best approach for SF Symbols in React/Tauri (e.g., `sf-symbols-react`, SVG extraction, or native font) --- ## Implementation Phases ### Phase 1: Theme & Typography Updates **Scope**: CSS variables, fonts, colors — no structural changes **Files**: `src/index.css`, `index.html` (or font import) **Estimated effort**: 1 Claude Code session 1. **Add IBM Plex Mono font** — add Google Fonts import or npm package 2. **Update color variables in `index.css`**: - `:root` (light): `--primary: #155DFF`, `--accent-green: #00B38B`, `--accent-purple: #A932FF`, `--accent-blue: #155DFF` - `.dark`: same primary `#155DFF`, accent-green `#00B38B`, accent-purple `#A932FF` - Add new variables: `--accent-yellow`, `--accent-blue-light`, `--accent-green-light`, `--accent-purple-light`, `--accent-red-light`, `--accent-yellow-light` (both modes) - Update all `--ring`, `--sidebar-primary`, `--sidebar-ring` to match new primary - Update app-specific vars: `--accent-blue`, `--accent-green`, `--accent-purple`, `--accent-blue-bg` etc. 3. **Update `theme.json`**: - `headings.h2.fontSize`: 27 → 24 - `editor.paddingHorizontal`: 40 → 64 - `editor.paddingVertical`: 20 → 32 4. **Install Phosphor Icons**: `pnpm add @phosphor-icons/react` ### Phase 2: Sidebar Restructure **Scope**: Sidebar layout, navigation, icons **Files**: `src/components/Sidebar.tsx` **Estimated effort**: 1 Claude Code session 1. **Header**: Replace theme toggle with search icon (Phosphor `MagnifyingGlass`) + gear icon. Move theme toggle to status bar settings or a menu. 2. **Add search input** below header: Phosphor magnifying-glass prefix, 13px, bg `--secondary`, border-radius 6px 3. **Top nav**: Reduce to "All Notes" (Phosphor `FileText` 16px) and "Favorites" (Phosphor `Star` 16px), each with count badge pill 4. **Section groups**: Restructure to new pattern with: - Consistent chevron + Phosphor icon (18px, bold) + label (13px/600) + count badge - Icons: `FolderOpen` (Projects), `Flask` (Experiments), `Target` (Responsibilities), `ArrowsClockwise` (Procedures), `Users` (People), `CalendarBlank` (Events), `Tag` (Topics) - Move People and Events from filters to section groups - Remove "Untagged", "Changes", "Trash" from nav 5. **Commit button**: Update styling to match design (padding, badge style) 6. **Remove** People/Events/Changes/Trash/Untagged filter items ### Phase 3: NoteList Updates **Scope**: Header, type pills, note item styling **Files**: `src/components/NoteList.tsx` **Estimated effort**: 1 Claude Code session 1. **Header**: Replace badge + create button with search icon (Phosphor `MagnifyingGlass`) + plus icon (Phosphor `Plus`), gap 12px 2. **Remove or hide** the always-visible search input — add toggle behavior on search icon click 3. **Type pills**: Switch to IBM Plex Mono, ALL CAPS format ("ALL 24", "PROJECTS 4"), update active/inactive styles per design 4. **Selected note**: Update to `bg: #2383E212`, left accent 3px `#2383E2` (update to new primary), remove type badge and status text from items 5. **Note items**: Adjust padding to 10px 16px, snippet line-height 1.5, remove type/status badges from individual items ### Phase 4: Editor — Tab Bar & Info Bar **Scope**: New sub-components within Editor **Files**: `src/components/Editor.tsx`, `src/components/Editor.css` **Estimated effort**: 1 Claude Code session 1. **Tab Bar** (top of editor): - 45px, bg `--sidebar`, border-bottom - Active tab: bg `--background`, border-right, 12px/500 text, X close button - Inactive tab: muted text, hidden X (show on hover) - Right controls: Plus + Split (disabled) + Expand (disabled) — Phosphor icons 2. **Info Bar** (below tab bar): - 45px, bg `--background`, border-bottom - Left: breadcrumb `Type › Title · N words · M` (M in accent-yellow when modified) - Right: icon buttons (magnifying-glass functional, git-branch/cursor-text/sparkle/dots-three as **disabled placeholders** with `opacity: 0.4, cursor: not-allowed`) 3. **Adjust editor content padding** to 32px 64px per design ### Phase 5: Status Bar + Inspector Polish **Scope**: New StatusBar component, Inspector refinements **Files**: New `src/components/StatusBar.tsx`, `App.tsx`, `App.css`, `src/components/Inspector.tsx` **Estimated effort**: 1 Claude Code session 1. **StatusBar.tsx** (new component): - 30px fixed at bottom, bg `--sidebar`, border-top 1px - Left: version + branch + sync status - Right: AI model + notes count + bell (disabled placeholder) + settings (disabled placeholder) - All Lucide icons 13-14px 2. **App.tsx / App.css**: Add StatusBar below main content, wrap layout in vertical flex (main panels + status bar) 3. **Inspector refinements**: - Header: Phosphor `SlidersHorizontal` icon + "Properties" label + Phosphor `X` close - Status badge: use `--accent-*-light` bg colors with `--accent-*` text - "+ Add property" and "+ Link existing" buttons: match border/radius/padding from design - History items: left-border 2px timeline style, 10px date text ### Phase 6: Icon Migration & Cleanup **Scope**: Replace Lucide icons with Phosphor where specified **Files**: All components **Estimated effort**: 1 Claude Code session 1. **Audit all icon usage** across components 2. **Replace with Phosphor** where the design specifies (sidebar nav, section icons, NoteList header, editor toolbar icons, inspector) 3. **Keep Lucide** for: chevrons, X/close, tab close, status bar icons, git-commit-horizontal 4. **Remove unused Lucide imports** 5. **Visual verification**: Run `pnpm dev` and compare with `ui-design-screenshot.png` --- ## New Features as Disabled Placeholders These buttons/icons appear in the design but don't have backend functionality yet. Add them as disabled UI elements: | Element | Location | Icon | Notes | |---|---|---|---| | Split view | Tab bar controls | Phosphor `Columns` | `opacity: 0.4, cursor: not-allowed, title="Coming soon"` | | Expand/focus | Tab bar controls | Phosphor `ArrowsOutSimple` | Same | | Git branch viewer | Info bar right | Phosphor `GitBranch` | Same | | Focus mode | Info bar right | Phosphor `CursorText` | Same | | AI assist | Info bar right | Phosphor `Sparkle` | Same | | More options | Info bar right | Phosphor `DotsThree` | Same | | Bell/notifications | Status bar right | Lucide `Bell` | Same | | Settings | Status bar right | Lucide `Settings` | Same | | Gear/settings | Sidebar header | Phosphor `Gear` | Same | --- ## Files Inventory | File | Changes | |---|---| | `src/index.css` | Color variables, font import | | `src/theme.json` | H2 size, editor padding | | `index.html` | IBM Plex Mono font link (if using CDN) | | `package.json` | Add `@phosphor-icons/react` | | `src/App.tsx` | Add StatusBar, adjust layout | | `src/App.css` | Vertical flex for status bar | | `src/components/Sidebar.tsx` | Major restructure | | `src/components/NoteList.tsx` | Header, pills, item styling | | `src/components/Editor.tsx` | Add TabBar, InfoBar sections | | `src/components/Editor.css` | Tab/info bar styles | | `src/components/Inspector.tsx` | Header, badges, history styling | | `src/components/StatusBar.tsx` | **NEW** |