Files
alexei.dolgolyov a6b09aae9c feat(inline-edit): add WYSIWYG inline dashboard editing mode
Replace the disconnected board edit page with inline editing directly
on the board view. Toggle with Ctrl+E or the Edit button. Features:

- Edit mode store with changeset accumulation and batch save
- Floating toolbar (save, discard, add section, board settings, exit)
- Widget hover overlays with edit/delete/drag controls
- Type-specific widget config panels for all 14 widget types
- Section inline editing (title, icon picker, delete)
- "+" buttons for adding widgets and sections inline
- Section-level drag-and-drop reordering via svelte-dnd-action
- Batch save API endpoint (single Prisma transaction)
- Board properties side panel with live theme/wallpaper preview
- Modal widget type picker with search filtering
- Icon picker component with visual grid and search
- Confirmation dialog modal for all destructive actions
- HTML format support for Note widget (in addition to markdown/text)
- Full i18n support (en + ru) for all new UI strings
- Legacy edit page banner linking to new inline mode
2026-04-03 00:01:29 +03:00

1.9 KiB

Feature Context: Inline Dashboard Editing

Configuration

  • Development mode: Automated
  • Execution mode: Direct
  • Strategy: Big Bang
  • Build: npm run build
  • Test: npm run test
  • Lint: npm run lint
  • Dev server: npm run dev (port: 5173)

Current State

Starting fresh. The board view page (/boards/[boardId]) is read-only. The edit page (/boards/[boardId]/edit) is a separate form-based page.

Key Architecture Notes

  • SvelteKit 2 + Svelte 5 (runes: $state, $derived, $props)
  • Prisma ORM with SQLite
  • Tailwind CSS v4
  • svelte-dnd-action for drag-and-drop
  • lucide-svelte for icons
  • bits-ui for UI primitives
  • Widget configs stored as JSON strings in Widget.config
  • Each widget type has Zod validation in src/lib/utils/validators.ts
  • Existing form actions on edit page: ?/updateBoard, ?/addSection, ?/deleteSection, ?/updateSection, ?/addWidget, ?/deleteWidget
  • Board view components: Board.svelte → Section.svelte → WidgetGrid.svelte → WidgetRenderer.svelte → [TypeWidget].svelte

Temporary Workarounds

(none yet)

Cross-Phase Dependencies

  • Phase 3 (widget overlay) depends on Phase 1 (edit mode state)
  • Phase 4 (config panels) depends on Phase 3 (overlay triggers)
  • Phase 6 (add widget) depends on Phase 4 (config panel infrastructure)
  • Phase 7 (DnD) depends on Phase 1 (edit mode gate)
  • Phase 8 (batch save) depends on Phases 1-7 (all accumulated changes)
  • Phase 9 (board properties) depends on Phase 2 (toolbar trigger)
  • Phase 10 (migration) depends on all previous phases

Deferred Work

(none yet)

Failed Approaches

(none yet)

Review Findings Log

(none yet)

Phase Execution Log

Phase Agent Used Test Writer Parallel Notes

Environment & Runtime Notes

  • Windows 10, Git Bash
  • Node.js project with Vite dev server

Implementation Notes

(none yet)