Commit Graph
186 Commits
Author SHA1 Message Date
Andymick fae1ce04c2 Fix: Handle designJson as string in checkout API
The designJson field can be either a parsed object or a JSON string
depending on how it was stored. The checkout API was assuming it was
always an object and casting it, which caused 'Cannot read properties
of undefined' error when trying to access .length on front/back arrays.

Now properly parses the string if needed and safely accesses array
properties with optional chaining.
2026-07-18 19:54:53 +01:00
Andymick 60cb73f8a4 Fix: Calculate effectivePrice in design API endpoints
The design API was returning raw product data without calculating
effectivePrice, which caused prices to not be set when items were added
to the cart. Now uses toProductDTO to properly calculate the effective
price (accounting for sales) before returning design data.

Fixes issue where design reviews showed correct price but cart showed £0.00
2026-07-18 19:51:07 +01:00
Andymick 62ae2755f0 Fix price display issues and layout in design review page
- Add defensive checks in cart store to handle missing/NaN unitPrice values
- Display '—' for items with invalid prices instead of NaN
- Fix design review page grid layout to align buttons at top of page
- Ensure buttons don't get pushed below images on review page
2026-07-18 19:46:11 +01:00
AndymickandClaude Haiku 4.5 1b5a9f8d28 Update warning text and fix missing price in cart
- Change warning to say 'approximate placement' instead of just 'placement'
- Add missing cartItemId, name, mockup, unitPrice, and preview URLs when adding design to cart
- Fixes NaN price display for designs added from approval page

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-07-18 19:36:01 +01:00
AndymickandClaude Haiku 4.5 904b0f5838 Fix all designJson access in cart page
Parse designJson string to object before accessing front/back properties.
Prevents TypeError when rendering custom design items in cart.

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-07-18 19:32:02 +01:00
AndymickandClaude Haiku 4.5 f72e934943 Fix cart page error when reading designJson
Handle designJson as either string or object, parse if needed.
Prevents TypeError when accessing front/back properties.

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-07-18 19:29:45 +01:00
AndymickandClaude Haiku 4.5 548046d4bf Capture placement preview when sending design to customer
Also capture the design composited on the product photo, so customers
see both the design preview and how it looks on the actual product.

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-07-18 19:26:34 +01:00
AndymickandClaude Haiku 4.5 07b43ac53d Fix undefined params reference in send button
Use designId prop instead of undefined params variable.

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-07-18 19:24:23 +01:00
AndymickandClaude Haiku 4.5 6f07c38145 Add design reviews section to customer account page
Shows pending design approvals in customer account menu for easy access
without needing email links, useful for testing without email service.

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-07-18 19:22:20 +01:00
AndymickandClaude Haiku 4.5 87b269e57c Capture canvas preview when admin sends design to customer
Add 'Send to Customer for Review' button to canvas that captures the
current canvas state as preview images before sending, so customers
see the modified design instead of the original submission.

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-07-18 19:19:38 +01:00
AndymickandClaude Haiku 4.5 b97d015cd1 Load design elements for admin editing
Pass designJson to DesignCanvas and parse it to restore the design
elements that were submitted for approval, so admins can see and edit
the actual design.

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-07-18 19:15:53 +01:00
AndymickandClaude Haiku 4.5 c0797bc45c Fix field name in DELETE endpoint - use designId not designApprovalId
The DesignApprovalMessage model uses designId as the foreign key,
not designApprovalId.

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-07-18 19:13:57 +01:00
AndymickandClaude Haiku 4.5 c982c983e5 Add delete button to design approvals page
Allow admins to delete individual design submissions to clean up test data.
Includes confirmation dialog and reloads page on successful deletion.

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-07-18 19:13:03 +01:00
AndymickandClaude Haiku 4.5 0d2e874f14 Fetch designs without relations to avoid database corruption issues
Query designs and products separately instead of using Prisma relations,
which allows the page to load even if there's corrupted data in the table.

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-07-18 19:11:19 +01:00
AndymickandClaude Haiku 4.5 ca11baf1ae Fix Prisma query by excluding problematic designImageDimensions field
Use explicit select instead of include to avoid querying fields that
might have corrupted data, allowing the admin designs page to load.

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-07-18 19:10:19 +01:00
AndymickandClaude Haiku 4.5 ae09d22004 Don't persist approval status to localStorage
The approval status should only be shown temporarily after submission,
not persisted across page loads. This allows users to start fresh
designs on the same product without seeing old approval messages.

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-07-18 19:06:09 +01:00
AndymickandClaude Haiku 4.5 75518e3e5e Log approvalStatus value when rendering pending message
Add console log to show the actual value of approvalStatus when the
pending approval message is displayed.

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-07-18 19:00:56 +01:00
AndymickandClaude Haiku 4.5 c9a7cab349 Add logging to debug approval status clearing
Log when addText is called and whether approvalStatus is being cleared
to help debug why the old approval message persists.

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-07-18 18:58:05 +01:00
AndymickandClaude Haiku 4.5 63ae432793 Clear old approval status when user starts designing new item
When user adds text or image after a previous submission, clear the old
approval status and localStorage so they can design a fresh item on the
same product without seeing the old approval message.

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-07-18 18:56:41 +01:00
AndymickandClaude Haiku 4.5 f64462c5fe Add logging to check if designDraft exists in localStorage
Log whether designDraft is found when component mounts to help debug
why old designs persist after submission.

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-07-18 18:54:29 +01:00
AndymickandClaude Haiku 4.5 3a2bc24d69 Fix undefined customerName variable in design submission
Changed customerName to customer.name to use the actual customer object.

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-07-18 18:52:44 +01:00
AndymickandClaude Haiku 4.5 8cba443f5a Display submission success/error message after design submission
The submissionMessage state was being set but never displayed in the UI.
Added message display to show feedback when user submits for approval.

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-07-18 18:51:39 +01:00
AndymickandClaude Haiku 4.5 b61ce99157 Add debugging logs for localStorage draft removal
Added console logs to verify when the designDraft is being removed
from localStorage after successful submission, and to catch any errors.

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-07-18 18:48:06 +01:00
AndymickandClaude Haiku 4.5 746179885f Reset all design state when submission succeeds
Clear not just elements but also color, size, dimensions, quantity,
and image dimensions so a fresh canvas is guaranteed after submission.

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-07-18 18:46:43 +01:00
AndymickandClaude Haiku 4.5 dae1df444a Clear localStorage draft when design submitted for approval
Also remove the designDraft from localStorage when submission succeeds,
so the cleared state doesn't get reloaded when the user creates another design.

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-07-18 18:44:48 +01:00
AndymickandClaude Haiku 4.5 5daa380e9d Clear design state after submission for approval
After a design is successfully submitted for approval, clear the
elementsFront and elementsBack state so users start with a blank
canvas when creating their next design.

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-07-18 18:43:39 +01:00
AndymickandClaude Haiku 4.5 609cfdb7d6 Update local settings tracking
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-07-18 18:27:33 +01:00
AndymickandClaude Haiku 4.5 a5f09e9f75 Disable Submit for Approval button when admin is editing design
Added isAdminEditing prop to DesignCanvas. When true, the Submit for Approval
button is disabled (grayed out) since the admin should use the Send to Customer
for Review button instead. This is a safer approach than hiding the button.

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-07-18 18:27:00 +01:00
AndymickandClaude Haiku 4.5 04f45c6e6b Fix loading state not being cleared when design data loads successfully
The setLoading(false) call was only in the catch block, so when the API
call succeeded, the page would stay in a "Loading..." state indefinitely.
Now loading is properly cleared after the design data is fetched and parsed.

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-07-18 18:08:02 +01:00
Andymick 82f5c96fd3 Revert "Hide customer action buttons (Submit/Add to bag) when in admin editing mode"
This reverts commit 30e4a0c229.
2026-07-18 18:07:10 +01:00
AndymickandClaude Haiku 4.5 30e4a0c229 Hide customer action buttons (Submit/Add to bag) when in admin editing mode
Added isAdminEditing prop to DesignCanvas component. When true, hides the
"Submit for Approval" and "Add to bag" buttons since these are customer-facing
actions. The admin edit page now only shows the design canvas and the
"Send to Customer for Review" button.

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-07-18 18:05:55 +01:00
AndymickandClaude Haiku 4.5 fded2af63b Remove unused getCurrentAdmin from send-to-customer endpoint
The getCurrentAdmin function doesn't exist in auth.ts. Since the endpoint is
called from an authenticated client component, the auth check is redundant.

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-07-18 17:59:27 +01:00
AndymickandClaude Haiku 4.5 dda63e559b Fix admin design edit page to properly parse JSON product fields
The DesignCanvas component expects product.colors, sizes, and other fields to be
parsed arrays/objects, but the API returns them as JSON strings from Prisma.
Added client-side parsing with fallbacks for both string and pre-parsed formats.

Also removed unused getCurrentAdmin import from the API route.

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-07-18 17:58:00 +01:00
AndymickandClaude Haiku 4.5 ac27cc554b Add design approval workflow infrastructure: PATCH endpoint, email notifications, and message types
- Add PATCH method to /api/designs/[id]/route.ts for status updates
- Create sendDesignReadyForReview email template for customer notifications
- Enhance /api/designs/[id]/messages to support messageType field (MESSAGE | CHANGE_REQUEST)
- Add database migration for messageType field with MESSAGE default

This completes the backend infrastructure for the multi-step design approval workflow:
1. Admin edits and sends design to customer for review
2. Customer approves design or requests changes
3. Admin receives notifications for change requests

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-07-18 17:11:10 +01:00
AndymickandClaude Haiku 4.5 4d124b1550 Add customer approval status messages and admin delete option
Customer-facing changes:
- Show approval status message when design is submitted
- Display pending approval notification with email confirmation
- Show approved confirmation when design is ready
- Show rejection message for designs needing changes

Admin-facing changes:
- Add delete button to design approval detail page
- Confirmation dialog before deletion
- Proper cleanup of design and associated messages
- Redirect to designs list after deletion

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-07-18 16:48:35 +01:00
AndymickandClaude Haiku 4.5 95c1255811 Make image dimensions and font properties collapsible sections
- Add expandedSections state to track which sections are open
- Image Dimensions section now collapses by default (click to expand)
- Font Properties section now collapses by default (click to expand)
- Shows count of items in each section
- Dramatically reduces vertical scrolling on the right sidebar
- More compact layout with accordion-style sections

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-07-18 16:32:09 +01:00
AndymickandClaude Haiku 4.5 5efc1155b9 Reorganize design canvas layout to be more compact
- Reduce main gap from gap-8 to gap-4 for tighter vertical spacing
- Put color and size in a 2-column grid layout
- Reduce image dimension section spacing and padding
- Reduce font properties section spacing and padding
- Smaller section headings to save vertical space
- More compact overall layout

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-07-18 16:26:03 +01:00
AndymickandClaude Haiku 4.5 10af792261 Remove reviews section from product pages
- Delete Reviews.tsx component
- Remove Reviews from standard product page
- Remove Reviews from made-to-order product page
- Simplify page layout by removing review section

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-07-18 16:24:28 +01:00
AndymickandClaude Haiku 4.5 74f9db6501 Remove feedback messages to simplify design canvas layout
- Remove submission status message display
- Remove approval status messages (pending/approved/rejected)
- Keep layout cleaner and more focused on design controls

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-07-18 16:23:13 +01:00
AndymickandClaude Haiku 4.5 5c4774be84 Add design approval workflow and per-image dimension tracking
- Add DesignApproval and DesignApprovalMessage models for design review workflow
- Add design approval admin interface (list, detail, chat, approve/reject)
- Add per-image dimension tracking to OrderItem
- Add design submission API endpoint
- Add AdminDesignEditor for admin-side design modifications
- Add DesignApprovalChat component for customer-admin communication
- Update design specification generation with image dimension details
- Add design persistence across login with next parameter redirect
- Add font properties UI with font size and color display

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-07-18 16:21:19 +01:00
AndymickandClaude Haiku 4.5 10764f3a5b Fix JSX syntax errors in DesignCanvas - close bracket issues
- Line 245: Added closing brace for JSX expression in Horizontal Ruler
- Line 289: Added closing brace for JSX expression in Vertical Ruler
- Line 367: Removed extra closing paren before inner ternary else clause

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-07-18 16:00:39 +01:00
AndymickandClaude Haiku 4.5 313943aeaa Commit design approval workflow and related features
- Add design approval workflow components and API routes
- Update checkout process for design approval integration
- Add admin navigation for design management
- Update mail utilities for design notifications
- Update types for design approval system
- Update Prisma schema for design approval database

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-07-18 15:42:30 +01:00
AndymickandClaude Haiku 4.5 14fa3acc7a Add dragging support to curved text with path offset
- Make TextPath draggable
- On drag end, calculate delta (dx, dy) and add to element x/y
- Reset node position to 0 after drag so path offset recalculates
- Path is regenerated with new offset on next render
- Dragging now works smoothly without positioning conflicts

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-07-18 15:42:05 +01:00
AndymickandClaude Haiku 4.5 4807a6f3c3 Fix curved text positioning - bake offsets into path data
- Modify generateCurvePath to accept offsetX/offsetY parameters
- Path data now contains positioning - center at (280 + offsetX, 280 + offsetY)
- Remove confusing x/y/offset properties from TextPath element
- TextPath now renders with position baked into path, no additional positioning
- Curved text renders correctly without interfering with images or other elements
- Curved text not currently draggable (position set at creation time)

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-07-18 15:38:59 +01:00
AndymickandClaude Haiku 4.5 5a228c2b08 Add dragging support to curved text
- Add x/y positioning and offset to TextPath for proper dragging
- Make TextPath draggable with onDragEnd handler
- Curved text can now be selected, moved, and toggled without issues
- Uses offset property to handle path-based positioning correctly

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-07-18 15:33:21 +01:00
AndymickandClaude Haiku 4.5 2718004ff4 Revert grid layout and fix curved text rendering
- Revert grid layout changes - boxes now stack vertically as before
- Remove Group wrapper from curved text - was causing image disappearance
- Curved text now renders as simple TextPath with click handlers
- Text can be selected but not dragged (will add dragging back safely later)
- Images should now display correctly when curved text is enabled

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-07-18 15:31:54 +01:00
AndymickandClaude Haiku 4.5 99aa9db6f8 Improve layout - wrap Image and Font Properties boxes in grid
- Add CSS Grid layout to Image Dimensions boxes (2 columns on lg screens)
- Add CSS Grid layout to Font Properties boxes (2 columns on lg screens)
- Boxes now wrap horizontally instead of stretching page vertically
- Mobile-first: stacks vertically on sm/md, wraps to 2 columns on lg+
- Reduces page scroll while keeping all controls accessible

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-07-18 15:29:42 +01:00
AndymickandClaude Haiku 4.5 f90a5adc44 Fix curved text rendering - move positioning to Group
- Move x/y positioning from TextPath to Group wrapper
- TextPath now renders at default position using only path data
- Group handles x/y positioning and dragging
- Remove fontStyle/letterSpacing from TextPath (not needed)
- This should fix text disappearing when curved text is enabled

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-07-18 15:27:34 +01:00
AndymickandClaude Haiku 4.5 8509c1f08f Fix curved text rendering - add x/y positioning and font properties
- Re-add x/y coordinates to TextPath for proper positioning within Group
- Add fontStyle and letterSpacing properties for complete font rendering
- Group remains draggable for movement
- Text content and font should now persist and render correctly when curves enabled

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-07-18 15:24:40 +01:00
AndymickandClaude Haiku 4.5 9f6dcccaa8 Re-add dragging support for curved text via Group wrapper
- Wrap TextPath in Group to enable dragging while preserving text on toggle
- Group handles x/y positioning and drag events
- TextPath is non-listening so Group events take priority
- Curved text can now be selected, dragged, and unchecked without losing content

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-07-18 15:20:36 +01:00