# Phase 10: UX & Interaction - Discussion Log > **Audit trail only.** Do not use as input to planning, research, or execution agents. > Decisions are captured in CONTEXT.md — this log preserves the alternatives considered. **Date:** 2026-06-14 **Phase:** 10-UX & Interaction **Areas discussed:** Toast position & style, EmptyState illustration approach, AppIcon migration strategy, BreadcrumbBar data source --- ## Toast Position & Style | Option | Description | Selected | |--------|-------------|----------| | Bottom-right | Most common for document/admin apps. Out of the way of the sidebar and header; stacks upward from the corner. | ✓ | | Top-right | Closer to the header. More prominent but overlaps with navigation area. | | | Bottom-center | Prominent, symmetrical. Common in mobile-first apps. | | **User's choice:** Bottom-right (Recommended) **Notes:** None --- | Option | Description | Selected | |--------|-------------|----------| | Colored left border + icon | Thin left accent bar (green/red/amber/blue) + small inline icon. Clean, readable, works with light backgrounds. | ✓ | | Colored icon only | White background, type shown only by icon color. More minimal. | | | Tinted background | Soft background fill per type. Higher contrast but can feel heavy. | | **User's choice:** Colored left border + icon (Recommended) --- | Option | Description | Selected | |--------|-------------|----------| | `` | ToastContainer.vue teleported to document body. Avoids z-index and overflow issues. | ✓ | | Fixed in AppLayout.vue | ToastContainer placed as a fixed div at end of AppLayout. Simpler but can be clipped by parent overflow contexts. | | **User's choice:** `` (Recommended) --- ## EmptyState Illustration Approach | Option | Description | Selected | |--------|-------------|----------| | Per-context icon from existing Heroicons set | Each context gets its own icon from the same Heroicons-style set already in the app. Simple, consistent, no new assets. | ✓ | | Distinct headline + subtext only | One generic icon for all contexts; distinctness via copy alone. | | | Custom illustrations | Hand-drawn or SVG illustrations per context. Most visually distinct but requires new assets. | | **User's choice:** Per-context icon from existing Heroicons set (Recommended) --- | Option | Description | Selected | |--------|-------------|----------| | Explicit props (icon, headline, subtext) | Maximum flexibility, no hidden variant map. | ✓ | | Variant string | EmptyState.vue maintains internal config map. Less repeated markup at call sites. | | **User's choice:** Explicit props (Recommended) --- | Option | Description | Selected | |--------|-------------|----------| | Named slot for CTA | EmptyState renders icon+headline+subtext via props; optional #cta slot for action buttons. | ✓ | | CTA as props (label + handler) | EmptyState accepts cta-label and cta-action props. Simple but limited. | | | No CTA support | Display-only; parent places any CTA above or below. | | **User's choice:** Named slot for CTA (Recommended) --- ## AppIcon Migration Strategy | Option | Description | Selected | |--------|-------------|----------| | Centralize existing SVG paths as-is | Extract inline SVG paths into name→path map in AppIcon.vue. No new dependency. | ✓ | | Install @heroicons/vue | Replace all inline SVGs with imports from @heroicons/vue. Adds ~35 kB dependency. | | **User's choice:** Centralize existing SVG paths as-is (Recommended) --- | Option | Description | Selected | |--------|-------------|----------| | Outline only | All existing inline SVGs are stroke style. No variant prop needed. | ✓ | | Outline + solid via variant prop | Adds complexity for a future use case. | | **User's choice:** Outline only (Recommended) --- ## BreadcrumbBar Data Source | Option | Description | Selected | |--------|-------------|----------| | Props from each view | Every view computes its own segments array and passes as prop. Extends existing StorageBrowser pattern. | ✓ | | Route meta config | Each route declares a breadcrumb meta field; BreadcrumbBar reads route.matched. Dynamic paths still need store data so meta alone can't cover all cases. | | **User's choice:** Props from each view (Recommended) --- | Option | Description | Selected | |--------|-------------|----------| | Emit navigate event with segment index; last segment plain text | Parent handles navigation. Consistent with existing breadcrumb-navigate pattern. Decoupled from Vue Router. | ✓ | | Render as `` with path per segment | Simpler but couples BreadcrumbBar to Vue Router. | | **User's choice:** Emit navigate event with segment index (Recommended) --- ## Claude's Discretion - Icon name assignments in AppIcon.vue's internal map - Exact icon choices for each EmptyState context (researcher picks most semantically appropriate Heroicon per context) - Keyboard shortcut global listener architectural home (App.vue vs dedicated AppKeyboardManager component) - Exact query/store plumbing for `U` shortcut to reach upload input ref - Which specific dropdowns need `` vs `getBoundingClientRect()` fixed positioning ## Deferred Ideas None.