8.0 KiB
Household & Store Management - Implementation Summary
Overview
Built comprehensive household and store management UI for the multi-household grocery list application. Users can now fully manage their households, members, and stores through a polished interface.
Features Implemented
1. Manage Page (/manage)
Location: frontend/src/pages/Manage.jsx
- Tab-based interface for Household and Store management
- Context-aware - always operates on the active household
- Accessible via "Manage" link in the navbar
2. Household Management
Component: frontend/src/components/manage/ManageHousehold.jsx
Features:
- Edit Household Name: Admin-only, inline editing
- Invite Code Management:
- Show/hide invite code with copy-to-clipboard
- Generate new invite code (invalidates old one)
- Admin-only access
- Member Management:
- View all household members with roles
- Promote/demote members between admin and member roles
- Remove members from household
- Cannot remove yourself
- Admin-only actions
- Delete Household:
- Admin-only
- Double confirmation required
- Permanently deletes all data
Permissions:
- Viewers: Can only see household name and members
- Members: Same as viewers
- Admins: Full access to all features
3. Store Management
Component: frontend/src/components/manage/ManageStores.jsx
Features:
- View Household Stores:
- Grid layout showing all stores
- Shows store name, location, and default status
- Add Stores:
- Select from system-wide store catalog
- Admin-only
- Cannot add already-linked stores
- Remove Stores:
- Admin-only
- Cannot remove last store (validation)
- Set Default Store:
- Admin-only
- Default store loads automatically
Permissions:
- Viewers & Members: Read-only view of stores
- Admins: Full CRUD operations
4. Create/Join Household Modal
Component: frontend/src/components/manage/CreateJoinHousehold.jsx
Features:
- Tabbed interface: "Create New" or "Join Existing"
- Create Mode:
- Enter household name
- Auto-generates invite code
- Creates household with user as admin
- Join Mode:
- Enter invite code
- Validates code and adds user as member
- Error handling for invalid codes
Access:
- Available from household switcher dropdown
- "+ Create or Join Household" button at bottom
- All authenticated users can access
5. Updated Household Switcher
Component: frontend/src/components/household/HouseholdSwitcher.jsx
Enhancements:
- Added divider between household list and actions
- "+ Create or Join Household" button
- Opens CreateJoinHousehold modal
Styling
CSS Files Created
-
frontend/src/styles/pages/Manage.css
- Page layout and tab navigation
- Responsive design
-
frontend/src/styles/components/manage/ManageHousehold.css
- Section cards with proper spacing
- Member cards with role badges
- Invite code display
- Danger zone styling
- Button styles (primary, secondary, danger)
-
frontend/src/styles/components/manage/ManageStores.css
- Grid layout for store cards
- Default badge styling
- Add store panel
- Available stores grid
-
frontend/src/styles/components/manage/CreateJoinHousehold.css
- Modal overlay and container
- Mode tabs styling
- Form inputs and buttons
- Error message styling
Theme Updates
Added simplified CSS variable aliases:
--primary: var(--color-primary);
--primary-dark: var(--color-primary-dark);
--primary-light: var(--color-primary-light);
--danger: var(--color-danger);
--danger-dark: var(--color-danger-hover);
--text-primary: var(--color-text-primary);
--text-secondary: var(--color-text-secondary);
--background: var(--color-bg-body);
--border: var(--color-border-light);
--card-hover: var(--color-bg-hover);
Backend Endpoints Used
All endpoints already existed - no backend changes required!
Household Endpoints
GET /households- Get user's householdsPOST /households- Create householdPATCH /households/:id- Update household nameDELETE /households/:id- Delete householdPOST /households/:id/invite/refresh- Refresh invite codePOST /households/join/:inviteCode- Join via invite codeGET /households/:id/members- Get membersPATCH /households/:id/members/:userId/role- Update member roleDELETE /households/:id/members/:userId- Remove member
Store Endpoints
GET /stores- Get all storesGET /stores/household/:householdId- Get household storesPOST /stores/household/:householdId- Add store to householdDELETE /stores/household/:householdId/:storeId- Remove storePATCH /stores/household/:householdId/:storeId/default- Set default
User Flow
Managing Household
- Click "Manage" in navbar
- View household overview (name, members, invite code)
- As admin:
- Edit household name
- Generate new invite codes
- Promote/demote members
- Remove members
- Delete household (danger zone)
Managing Stores
- Click "Manage" in navbar
- Click "Stores" tab
- View all linked stores with default badge
- As admin:
- Click "+ Add Store" to see available stores
- Click "Add" on any unlinked store
- Click "Set as Default" on non-default stores
- Click "Remove" to unlink store (except last one)
Creating/Joining Household
- Click household name in navbar
- Click "+ Create or Join Household" at bottom of dropdown
- Select "Create New" or "Join Existing" tab
- Fill form and submit
- New household appears in list and becomes active
Responsive Design
All components are fully responsive:
- Desktop: Grid layouts, side-by-side buttons
- Tablet: Adjusted spacing, smaller grids
- Mobile:
- Single column layouts
- Full-width buttons
- Stacked form elements
- Optimized spacing
Permissions Summary
| Feature | Viewer | Member | Admin |
|---|---|---|---|
| View household info | ✅ | ✅ | ✅ |
| Edit household name | ❌ | ❌ | ✅ |
| View invite code | ❌ | ❌ | ✅ |
| Refresh invite code | ❌ | ❌ | ✅ |
| View members | ✅ | ✅ | ✅ |
| Change member roles | ❌ | ❌ | ✅ |
| Remove members | ❌ | ❌ | ✅ |
| Delete household | ❌ | ❌ | ✅ |
| View stores | ✅ | ✅ | ✅ |
| Add stores | ❌ | ❌ | ✅ |
| Remove stores | ❌ | ❌ | ✅ |
| Set default store | ❌ | ❌ | ✅ |
| Create household | ✅ | ✅ | ✅ |
| Join household | ✅ | ✅ | ✅ |
Next Steps
Consider adding:
- Household Settings: Description, profile image, preferences
- Member Invitations: Direct user search instead of just invite codes
- Store Details: View item counts, last activity per store
- Audit Log: Track household/store changes
- Notifications: Member added/removed, role changes
- Bulk Operations: Remove multiple members at once
- Store Categories: Group stores by region/type
- Export Data: Download household grocery history
Testing Checklist
- Create new household and verify admin role
- Generate and copy invite code
- Join household using invite code
- Edit household name as admin
- Promote member to admin
- Demote admin to member
- Remove member from household
- Add store to household
- Set default store
- Remove store (verify last store protection)
- Try admin actions as non-admin (should be hidden/disabled)
- Delete household and verify redirect
- Test responsive layouts on mobile/tablet/desktop
- Verify all error messages display properly
- Test with multiple households