turbo prune storefront --docker excludes admin, so tailwind-merge was
not installed at root in Docker (it was only hoisted because of admin's dep).
@heroui/styles/node_modules/tailwind-variants requires tailwind-merge >=3.0.0
and walks up to root to find it. Adding it as a root-level dep ensures npm ci
always installs it regardless of which workspace is being built.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- apps/admin: tailwind-merge ^2.6.1 → ^3.4.0 so root resolves to v3.x,
satisfying @heroui/styles/node_modules/tailwind-variants peer dep (>=3.0.0)
- apps/storefront: add lucide-react ^0.400.0 as explicit dep (used in
SearchEmptyState and SearchResultsPanel but was previously undeclared)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Added .env.staging files for admin and storefront applications to .gitignore.
- Updated package.json and package-lock.json to include @convex-dev/resend and its dependencies.
- Introduced new Convex-related modules and updated peer dependencies for better compatibility.
This commit enhances the environment configuration and integrates the Resend service into the project.
- Extend addVariant with dimension fields and SKU uniqueness check; expand updateVariant to full field set; update getByIdForAdmin to return all variants (active + inactive)
- Add generateSku utility to @repo/utils; auto-generates SKU from brand, product name, attributes, and weight with manual-override support
- Move ProductSearchSection to components/shared and fix nav link /variants → /variant
- Variants page: product search, loading skeleton, variants table, toolbar with create button
- VariantsTable: 8 columns, activate/deactivate toggle, delete with AlertDialog confirmation
- VariantPreviewDialog: read-only full variant details with sections for pricing, inventory, shipping, attributes
- VariantForm: zod schema with superRefine for dimension and on-sale validation, auto-SKU generation
- CreateVariantDialog and EditVariantDialog wiring dollarsToCents on submit
- Install sonner and add Toaster to root layout; install ShadCN Switch component
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Add Next.js API route for server-side Cloudinary upload with structured
public_id (the-pet-loft/products/{id}/main|gallery-n) and asset_folder
for portal folder visibility in dynamic folder mode
- Add background removal flow via Image Processing API with side-by-side
original vs processed preview (Skeleton while loading)
- Dual upload buttons: processed (background removed) or original file
- Horizontal drag-and-drop image gallery using @dnd-kit/sortable with
horizontalListSortingStrategy; reorder persisted via reorderImages mutation
- Per-image delete with AlertDialog confirmation
- 180° rotation technique for card layout: drag handle top, image center,
delete bottom
- Debounced product search (300 ms) with inline results (max 3); clears
gallery state when search input is cleared
- Install: cloudinary, @dnd-kit/core/sortable/utilities, embla-carousel-react,
ShadCN carousel component
- Configure next.config.js with Cloudinary remote image pattern
- Mark checklist items 3.5 and 3.6 complete
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>