berrypod/docs/plans/admin-ux-polish.md
jamey ad2e6d1e6d add newsletter and email campaigns
Subscribers with double opt-in confirmation, campaign composer with
draft/scheduled/sent lifecycle, admin dashboard with overview stats,
CSV export, and shop signup form wired into page builder blocks.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-28 23:25:28 +00:00

111 lines
6.6 KiB
Markdown

# Admin & page editor UX polish
Status: Complete
## Context
Full UX audit of the admin panel and page editing experience, evaluating intuitiveness, completeness, and newbie-friendliness. The admin is solid and well-built — good accessibility, clear status indicators, logical flow. The gaps are around preventing data loss, helping newbies understand block types, and tidying up navigation.
## What works well
- Dashboard launch checklist with direct links to each setup step
- Split-screen page editor with live preview, undo/redo, keyboard shortcuts
- ARIA labels on all block controls, live region announcements
- Clear dirty state tracking (badge + disabled save button)
- Legal page auto-population with "auto-generated" vs "customised" badges
- Live editing on shop pages via sidebar with same block card UI
- Custom page creation with templates (blank/content/landing)
- Shop header shows "Edit page" and "Admin" icons for logged-in admins
- Settings page with status pills and helpful setup guidance
## Tasks
### High priority
#### 1. Unsaved changes warning
**Problem:** No `beforeunload` handler or LiveView navigation guard. Clicking "Pages" breadcrumb or any sidebar link silently discards all unsaved changes.
**Fix:** Add a `beforeunload` event listener in the `EditorKeyboard` JS hook that checks `data-dirty`. Also handle LiveView `phx-remove` / navigation events to warn before leaving.
**Files:** `assets/js/hooks/editor_keyboard.js`, possibly `lib/berrypod_web/live/admin/pages/editor.ex`
**Est:** 30m
#### 2. Block descriptions in picker
**Problem:** Block picker shows icon + name only. "Info card" vs "Trust badges" vs "Image + text" — a newbie doesn't know what these do or look like.
**Fix:** Add a `description` field to each block type in `BlockTypes`. Show it as a subtitle in the picker modal.
**Files:** `lib/berrypod/pages/block_types.ex`, `lib/berrypod_web/components/block_editor_components.ex`
**Est:** 45m
### Medium priority
#### 3. Sidebar nav grouping
**Problem:** 12 top-level items in the admin sidebar is too flat. Dashboard, Analytics, Orders, Products, Providers, Pages, Navigation, Media, Theme, Settings, Email, Redirects — a wall of links with no visual hierarchy.
**Fix:** Add subtle section headers to group related items:
- **Shop** — Dashboard, Analytics, Orders, Products, Providers
- **Content** — Pages, Navigation, Media
- **Appearance** — Theme
- **Settings** — Settings, Email, Redirects
Alternatively, nest Email under Settings (it's email *settings*) and move Redirects into a Settings sub-page. That drops to 10 items with clearer grouping.
**Files:** `lib/berrypod_web/components/layouts/admin.html.heex`, `assets/css/admin/components.css`
**Est:** 45m
#### 4. Nav editor input labels
**Problem:** Navigation editor shows pairs of text inputs with placeholder text ("Label", "/path") but no visible labels. Accessibility issue and confusing for new users.
**Fix:** Add visible `<label>` elements above each input pair, or at minimum a row header like "Link 1", "Link 2". Consider showing a small preview of each link.
**Files:** `lib/berrypod_web/live/admin/navigation.ex`
**Est:** 30m
#### 5. Custom page settings inline
**Problem:** Clicking "Settings" on a custom page editor navigates away to `/admin/pages/:slug/settings`, losing editing context. Round-tripping between editor and settings is jarring.
**Fix:** Show page settings (title, slug, meta description, published, show in nav) in a collapsible panel at the top of the editor, or in a slide-over panel. Keep the separate settings page as a fallback but make inline editing the default.
**Files:** `lib/berrypod_web/live/admin/pages/editor.ex`
**Est:** 1h
#### 6. Preview with real data
**Problem:** Admin editor preview uses `PreviewData` (fake products, fake cart). The user's actual products don't appear. This means the preview doesn't accurately represent the live shop. The live editor on shop pages uses real data and doesn't have this problem.
**Fix:** Load real products/categories/cart from the database for preview, falling back to `PreviewData` if no products exist yet (fresh install). This makes the admin preview match what the shop actually looks like.
**Files:** `lib/berrypod_web/live/admin/pages/editor.ex` (mount, preview_pane)
**Est:** 45m
### Low priority
#### 7. Block content preview in list
**Problem:** Block settings are hidden behind a gear icon toggle. The block list is just type names with position numbers — no indication of content. You can't scan and see "this hero says 'Welcome to my shop'" without expanding each block.
**Fix:** Show a one-line content preview below the block name (e.g. first text field value, truncated). Only for blocks that have text settings.
**Files:** `lib/berrypod_web/components/block_editor_components.ex` (block_card)
**Est:** 45m
#### 8. "Providers" label clarity
**Problem:** "Providers" is jargon. A newbie selling mugs doesn't know what a "provider" is in this context.
**Fix:** Rename to "Print providers" in the sidebar. Consider "Suppliers" as an alternative. Update the nav label only — the route and module names can stay as-is.
**Files:** `lib/berrypod_web/components/layouts/admin.html.heex`
**Est:** 5m
#### 9. Newsletter block backend
**Problem:** The newsletter signup form renders on the shop but has no backend handler. A user adds it to their page thinking it works, then discovers email signups go nowhere.
**Fix:** Either: (a) wire up a simple email collection table + controller so signups are stored, or (b) add a note in the block settings saying "Coming soon — this block is currently decorative" and mark it visually in the editor.
**Files:** TBD depending on approach
**Est:** 1-3h depending on approach
#### 10. Block preview thumbnails in picker
**Problem:** Block picker shows names and descriptions (after task 2) but no visual preview. Users still have to guess what blocks look like.
**Fix:** Add a small screenshot or SVG illustration for each block type in the picker. Could be static images stored in `priv/static/images/blocks/`.
**Files:** `lib/berrypod_web/components/block_editor_components.ex`, static assets
**Est:** 2h (mostly creating the images)
## Summary table
| # | Task | Priority | Est |
|---|------|----------|-----|
| 1 | Unsaved changes warning | High | 30m |
| 2 | Block descriptions in picker | High | 45m |
| 3 | Sidebar nav grouping | Medium | 45m |
| 4 | Nav editor input labels | Medium | 30m |
| 5 | Custom page settings inline | Medium | 1h |
| 6 | Preview with real data | Medium | 45m |
| 7 | Block content preview in list | Low | 45m |
| 8 | "Providers" label clarity | Low | 5m |
| 9 | Newsletter block backend | Low | 1-3h |
| 10 | Block preview thumbnails | Low | 2h |
Total: ~8-10h across all tasks