diff --git a/.agent/plan-ui-redesign.md b/.agent/plan-ui-redesign.md new file mode 100644 index 0000000..3dbd18e --- /dev/null +++ b/.agent/plan-ui-redesign.md @@ -0,0 +1,98 @@ +# MealPlanner UI Redesign Plan +## Nielsen's 10 Heuristics → Concrete Changes + +### Classification: `large/high-risk` — full visual redesign + component library + +--- + +## Phase 1: Design System Foundation +- [ ] Custom Tailwind config: color tokens (primary, semantic, surface), font scale, spacing scale, shadow scale, radius scale +- [ ] Install icon library (Lucide React — lightweight, tree-shakeable) +- [ ] Create shared components: Button, Badge, Card, Input, Select, Textarea, Toast, Skeleton, EmptyState, Modal, Tooltip +- [ ] Define animation tokens (Framer Motion — micro-interactions, page transitions) +- [ ] Dark mode foundation (class-based, not implementing yet) + +## Phase 2: Global UX Improvements (Heuristics 1, 3, 5, 6, 7, 9) +- [ ] Toast notification system (React Hot Toast) — system status visibility +- [ ] Loading states: skeleton screens for every async view +- [ ] Error boundaries + graceful error recovery UI +- [ ] Empty states for all lists (no meals, no pantry items, no shopping list) +- [ ] Confirmation dialogs for destructive actions (delete, remove from pantry, never-suggest) +- [ ] Undo capability where possible (remove from pantry → "Undo" toast) +- [ ] Keyboard shortcuts reference (Cmd+K command palette? Maybe too ambitious. Start with basic: / for search, Esc to close modals) + +## Phase 3: Dashboard Redesign (Heuristic 1, 2, 6, 8) +- [ ] Visual hierarchy: week header with clear date range, status summary chips +- [ ] Day columns with clear headers (Mon 5/12, Tue 5/13, etc.) +- [ ] Meal cards: better image handling (aspect ratio, fallback), clearer metadata, hover interactions +- [ ] Quick actions bar: "Generate Week", "Send Vote Email", "View Shopping List" +- [ ] Recent activity / system status panel (last scrape time, next vote date) +- [ ] Responsive: mobile-first card stack, desktop grid + +## Phase 4: Meal Detail Redesign (Heuristic 2, 5, 8) +- [ ] Hero section: full-bleed image, recipe title, key metadata row (time, servings, cost, cuisine tags) +- [ ] Tabbed interface: Overview / Ingredients / Instructions / Feedback +- [ ] Ingredients: checkbox toggle "in pantry", visual quantity display, aisle grouping +- [ ] Instructions: numbered with visual separators, progress indicator +- [ ] Feedback: inline star rating (not a separate card), compact form, saved state indicator +- [ ] Print-friendly layout preserved + +## Phase 5: Pantry Redesign (Heuristic 1, 5, 6, 8) +- [ ] Inline add (not expandable form — always visible, compact) +- [ ] Search + filter existing items +- [ ] Visual quantity badges, expiry warnings (color-coded) +- [ ] Bulk actions (select multiple → remove) +- [ ] Empty state with illustration + CTA + +## Phase 6: Shopping List Redesign (Heuristic 1, 2, 6, 8) +- [ ] Summary header with total cost, savings, item count +- [ ] Aisle sections as collapsible accordions +- [ ] Checkbox strikethrough animation, "in cart" vs "in pantry" distinction +- [ ] Print layout: clean, no UI chrome +- [ ] Empty state when no items + +## Phase 7: Login + Global Nav (Heuristic 1, 4, 8) +- [ ] Centered card with better spacing, icon, and visual focus +- [ ] Nav bar: active state indicator, mobile hamburger, user avatar dropdown +- [ ] Breadcrumbs on sub-pages +- [ ] Footer with version + system status + +## Phase 8: Accessibility + Polish (Heuristic 9, 10) +- [ ] Focus rings on all interactive elements +- [ ] ARIA labels, roles, live regions for toasts +- [ ] Color contrast audit (WCAG AA) +- [ ] Reduced motion support +- [ ] Help tooltips on complex features (vote system, matching algorithm) + +--- + +## Implementation Order +1. Install deps (lucide-react, framer-motion, react-hot-toast) +2. Tailwind config + base design tokens +3. Shared component library +4. Toast + loading infrastructure +5. Dashboard (highest traffic page) +6. Meal Detail +7. Pantry + Shopping List (parallel) +8. Login + Nav +9. Accessibility polish + error boundaries +10. Test responsive on mobile widths + +## New Dependencies +``` +npm install lucide-react framer-motion react-hot-toast +``` + +## Nielsen Mapping Summary +| Heuristic | Where addressed | +|---|---| +| 1. Visibility of status | Skeletons, toasts, loading spinners, progress indicators | +| 2. Match real world | Clear labels, familiar icons, calendar metaphor | +| 3. User control | Confirm dialogs, undo toasts, Escape to close | +| 4. Consistency | Design tokens, shared components, uniform spacing | +| 5. Error prevention | Form validation, disable buttons while loading, confirm destructive actions | +| 6. Recognition > recall | Visual badges, status chips, pantry checkboxes, recent activity | +| 7. Flexibility | Keyboard shortcuts, bulk actions, print layouts | +| 8. Aesthetic + minimal | Clean cards, whitespace, single primary action per view | +| 9. Error recovery | Error boundaries, friendly error messages, retry buttons | +| 10. Help | Empty state CTAs, tooltip hints, inline help text | diff --git a/frontend/index.html b/frontend/index.html index efd461f..9295354 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -4,6 +4,8 @@
+ We encountered an unexpected error. Try refreshing the page or going back to the dashboard. +
+ {this.state.error && ( +{this.state.error.message}
+ {description}
+ {action && ( + + )} +{error}
} + {hint && !error &&{hint}
} +{error}
} + {hint && !error &&{hint}
} +{error}
} + {hint && !error &&{hint}
} +- {item.recipe.total_time_minutes || (item.recipe.prep_time_minutes || 0) + (item.recipe.cook_time_minutes || 0)} min - {' · '} - {item.recipe.servings} servings -
+ ++ {totalTime > 0 && `${totalTime} min · `} + {item.recipe?.servings} servings +
+No meal plan generated yet
- ++ {mealPlan.items.length} meals planned · {mealPlan.items.filter(i => i.approval_status === 'approved').length} approved +
++ View your aisle-organized shopping list with sale tracking. +
+ + View shopping listFamily login
-