Products & groups
Dashboard: every screen, state and flow in Products & groups.
18 screens and overlays, 69 states, 1 flows. Frames show a real screenshot where one was captured and a wireframe card where the state needs data or conditions a device run cannot produce.
Flows
Products and groups
Branches and edge cases
Product Management
Sync running
Sync button shows Syncing... and is disabled
Needs data: Needs specific backend rows, a role, or a submitted write on a disposable record
Product Detail
Partial save
Nothing saved or Saved override, en. Failed: ms (message)
Not reachable on a device: Needs a server error, crash, race or code change
Delete Override?
Needs data: Needs a product that has overrides
Delete beauty tag
Needs data: Needs a product with a beauty tag
Create Product Group
Group created
Toast Product group created successfully
Needs data: Needs specific backend rows, a role, or a submitted write on a disposable record
Edit Product Group
Mirrored group refused
Server refuses add, remove, reorder but UI shows generic failure
Needs data: Needs specific backend rows, a role, or a submitted write on a disposable record
Flow diagram
Screens and states
Unsaved Changes
UnsavedChangesDialogUnsaved Changes
Guard leaving edit mode with unsaved override edits.
src/features/products/components/product-view.tsxEntry
- Toggle to View Mode while dirty
Exits
- Discard → leaves edit mode
- Stay → keeps editing
States · 1
src/features/products/components/product-view.tsx:497Product Management
/dashboard/productsProduct Management
Search and filter the mirrored Shopify catalogue; edit marketing overrides.
src/app/dashboard/products/page.tsxEntry
- Sidebar Products
- Delete override redirect
- Back from /products/new
Exits
- Title or View Details → /products/[id]
- View in Store → external store URL
- New Product → /products/new
- Sync → reads from Shopify, toast
- Export (admin) → Export dialog
- Bulk bar → Featured or badge
States · 9
src/app/dashboard/products/loading.tsxsrc/features/products/components/product-table.tsx:98src/features/products/components/product-listing.tsx:207src/features/products/components/product-listing.tsxsrc/features/products/components/product-listing.tsx:69src/features/products/components/product-listing.tsx:168src/features/products/components/product-listing.tsx:84src/features/products/components/product-listing.tsx:84src/features/products/components/product-table.tsx:37Filters
ProductFiltersSheetFilters
Filter products by override and featured flags.
src/features/products/components/product-filters.tsxEntry
- Filters button on products list
Exits
- Apply → closes, filters list
- Clear → resets filters
States · 2
src/features/products/components/product-listing.tsx:74src/features/products/components/product-filters.tsx:91Set Badge
ProductBulkBadgeDialogSet Badge
Apply a badge label to the selected products (Convex only).
src/features/products/components/product-bulk-actions.tsxEntry
- Bulk bar Set Badge
Exits
- Confirm → useBulkSetBadge
- Cancel → closes
States · 2
src/features/products/components/product-bulk-actions.tsx:83lib/access-control.tsCreate New Product
/dashboard/products/newCreate New Product
Dead end that sends the user to Shopify admin to create products.
src/app/dashboard/products/new/page.tsxEntry
- New Product on products list
Exits
- Go Back → previous page
- Create in Shopify → Shopify admin (external)
States · 3
src/features/products/components/product-form.tsx:282src/features/products/components/product-form.tsx:201src/app/dashboard/products/new/page.tsxProduct Detail
/dashboard/products/[id]Product Detail
View a product and edit override, localization, SEO and beauty tags.
src/app/dashboard/products/[id]/page.tsxEntry
- Products list title or menu
- /products/[id]/edit redirect
- Group detail product rows
Exits
- View or Edit Mode toggle → ?mode=edit
- View in Store → external link
- Sync → reads product from Shopify
- Featured switch → immediate toast
- Save All Overrides → multi-step save
- Delete Override → list
States · 14
src/features/products/components/product-view.tsx:524src/features/products/components/product-view.tsx:535src/features/products/components/product-view.tsxsrc/features/products/components/product-view.tsx:325src/features/products/components/product-view.tsx:1054src/features/products/components/product-override-form.ts:174src/features/products/components/product-view.tsx:336src/features/products/components/product-override-form.ts:26src/features/products/components/product-override-form.ts:26src/features/products/components/beauty-tags/product-beauty-tag-editor.tsx:181src/features/products/components/beauty-tags/product-beauty-tag-editor.tsx:181src/features/products/components/product-override-form.tssrc/features/products/components/product-override-form.tssrc/app/dashboard/products/[id]/edit/page.tsx:12Delete Override?
Delete Override?
Needs data: Needs a product that has overrides
DeleteOverrideDialogDelete Override?
Confirm removing the marketing override and reverting to Shopify data.
src/features/products/components/product-view.tsxEntry
- Delete Override button
Exits
- Confirm → override deleted, /products
- Cancel → closes
States · 1
src/features/products/components/product-view.tsx:467Delete beauty tag
Delete beauty tag
Needs data: Needs a product with a beauty tag
BeautyTagDeleteDialogDelete beauty tag
Confirm removing a product beauty tag.
src/features/products/components/beauty-tags/product-beauty-tag-editor.tsxEntry
- Beauty tag delete action
Exits
- Confirm → tag deleted
- Cancel → closes
States · 1
src/features/products/components/beauty-tags/product-beauty-tag-editor.tsx:495Product edit redirect
/dashboard/products/[id]/editProduct edit redirect
Server redirect to the product page in edit mode.
src/app/dashboard/products/[id]/edit/page.tsxEntry
- Old links and bookmarks
Exits
- Redirect → /products/[id]?mode=edit&tab=override
States · 1
src/app/dashboard/products/[id]/edit/page.tsx:12Product Groups
/dashboard/products/groupsProduct Groups
Manage curated product collections.
src/app/dashboard/products/groups/page.tsxEntry
- Product detail Groups tab
- Direct URL
Exits
- New Group → /groups/new
- Name or View → /groups/[id]
- Edit → /groups/[id]/edit
- Delete → Delete dialog
- Bulk Publish or Unpublish → per-group calls
States · 5
src/app/dashboard/products/groups/page.tsx:13src/features/products/components/groups/group-listing.tsx:99src/features/products/components/groups/group-listing.tsx:149src/features/products/components/groups/group-bulk-actions.tsx:48src/features/products/components/groups/group-filters.tsx:118Delete Product Group
GroupDeleteDialogDelete Product Group
Confirm permanent group delete; products themselves are kept.
src/features/products/components/groups/group-delete-dialog.tsxEntry
- Row menu Delete
Exits
- Delete → toast, back to list
- Cancel → closes
States · 2
src/features/products/components/groups/group-delete-dialog.tsx:60src/features/products/components/groups/group-delete-dialog.tsx:43Create Product Group
/dashboard/products/groups/newCreate Product Group
Create a group with slug, type, image and publish switch.
src/app/dashboard/products/groups/new/page.tsxEntry
- New Group button
Exits
- Back to Groups link
- Cancel → list (unsaved dialog)
- Submit → /groups/[newId]
States · 11
src/features/products/components/groups/group-form.tsx:270src/features/products/components/groups/group-form.tsx:160src/features/products/components/groups/group-form.tsx:160packages/backend/convex/dashboard/mutations.tssrc/features/products/components/groups/group-form.tsx:291src/features/products/components/groups/group-form.tsx:291src/features/products/components/groups/group-form.tsx:350src/features/products/components/groups/group-form.tsxsrc/features/products/components/groups/group-form.tsx:59src/features/products/components/groups/group-form.tsx:59src/features/products/components/groups/group-form.tsx:386Product group detail
/dashboard/products/groups/[id]Product group detail
Read-only group detail with its products.
src/app/dashboard/products/groups/[id]/page.tsxEntry
- Group list
- Create redirect
- Edit Back
- Product Groups tab
Exits
- Back to Groups
- Edit → /groups/[id]/edit
- Product row → /products/[id]
States · 4
src/app/dashboard/products/groups/[id]/loading.tsxsrc/app/dashboard/products/groups/[id]/error.tsx:23src/features/products/components/groups/group-view.tsx:50src/features/products/components/groups/group-view.tsx:168Edit Product Group
/dashboard/products/groups/[id]/editEdit Product Group
Edit group details and manage its products.
src/app/dashboard/products/groups/[id]/edit/page.tsxEntry
- Group list menu Edit
- Group detail Edit
Exits
- Back → /groups/[id]
- Save details → /groups/[id]
- Delete Group → Delete dialog
- Add products → picker dialog
- Remove products → confirm
- Drag reorder → reorder call
States · 9
src/app/dashboard/products/groups/[id]/edit/loading.tsxsrc/app/dashboard/products/groups/[id]/edit/error.tsxsrc/features/products/components/groups/group-edit-view.tsx:79src/features/products/components/groups/group-form.tsx:358src/features/products/components/groups/group-products-manager.tsx:244src/features/products/components/groups/group-products-manager.tsx:307src/features/products/components/groups/group-products-manager.tsxsrc/features/products/components/groups/group-products-manager.tsxsrc/features/products/components/groups/group-form.tsx:198Unsaved Changes
GroupUnsavedTabDialogUnsaved Changes
Guard switching tabs with a dirty Details form.
src/features/products/components/groups/group-edit-view.tsxEntry
- Switch tab while dirty
Exits
- Stay → keeps editing
- Discard → switches tab
States · 1
src/features/products/components/groups/group-edit-view.tsx:215Delete Group?
GroupDeleteAlertDelete Group?
Confirm delete from the edit screen.
src/features/products/components/groups/group-edit-view.tsxEntry
- Delete Group button
Exits
- Delete → /products/groups
- Cancel → closes
States · 1
src/features/products/components/groups/group-edit-view.tsx:60Add products
ProductPickerDialogAdd products
Server-side product search (limit 100) to add products to a group.
src/features/products/components/groups/group-product-picker.tsxEntry
- Add products on Products tab
Exits
- Select → adds to group
- Close → cancels
States · 1
src/features/products/components/groups/group-product-picker.tsxRemove Product(s)?
Remove Product(s)?
Needs data: Needs a group with products
GroupRemoveProductsAlertRemove Product(s)?
Confirm removing one or many products from a group.
src/features/products/components/groups/group-products-manager.tsxEntry
- Remove action or multi-select
Exits
- Remove → toast
- Cancel → closes
States · 1
src/features/products/components/groups/group-products-manager.tsx:435















