Recommended Page Architecture
Use separate pages/modules instead of one giant account page:- Dashboard home
- Entry cards/CTAs
- Collection list
- Share link tools
- Informational panels
- Manage products
- Full product grid
- Filter/sort/search
- Add/remove product-to-drop assignment
- Collection editor
- Edit title/description/status
- Reorder products
- Add products
- Storefront editor
- Branding, hero/about content, social links
- Custom-field save actions by section
Data Layer Pattern
1. Bootstrap identity from customer context
2. Resolve collab via proxy
Frontend calls your backend (/api/dashboard/collab?email=...) and gets normalized collab + drops + custom fields.
3. Normalize custom field access
Handle both top-level fields andcustomFields[] handles in one helper so your UI code is stable even if payload shape changes.
Core How-To Flows
A) Storefront Editor (Sectioned Form Saves)
Implementation pattern:- Load collab once on page boot
- Populate section forms from field-handle map
- Save section-by-section (branding, social, hero, about)
- Send only changed values in each mutation payload
- Show deterministic toast on success/failure
cc-company-logocc-website-urlcc-cc-instagram-urlcc-hero-bannercc-hero-header-copycc-hero-subheader-copycc-about-section-title
B) Collection Editor (Existing + Net-New)
Implementation pattern:- Read
collabId(and optionaldropId) from URL - If
dropIdexists: load and edit existing drop - If
dropIdmissing: create net-new drop from form + selected products - Persist title, description, status, and ordered product list
- Redirect to canonical edit URL after create
C) Product-to-Collection Assignment
Implementation pattern:- Render product cards from Shopify Storefront API data
- Build checkbox/dropdown list from collab drops
- On toggle:
- add flow -> add product to drop
- remove flow -> update drop with remaining product IDs
- Refresh local collab cache after mutation
D) Product Enhancement Editing
Implementation pattern:- Open modal/drawer edit UI from product card
- Support note + media upload + collection assignment
- Upload media to your upload service first
- Save enhancement payload via proxy endpoint
- Re-fetch drop data to reconcile local UI state
UX Patterns That Work Well
Loading + Empty States
- Initial page-level skeleton/spinner
- Section-level loaders for async areas (collections, products)
- Explicit empty states with CTA
Optimistic Updates
- For toggles and simple state flips, update UI immediately
- Revert on failed mutation and show error toast
Modal + Drawer Duality
- Desktop modal and mobile drawer for the same action
- Shared save logic behind both UIs
- Ensure body scroll locking and close-on-overlay behavior
Informational Panels (No API Needed)
- Include utility blocks (share-link guidance, embed/email instructions, onboarding reminders)
- Keep these outside your network dependency path so UX still feels useful during outages