Feature7:53 PM · ZRosserMcIntosh
add comprehensive ring & bracelet sizing with downloadable PDFs
- Create US Letter (8.5x11) PDF sizing guide component with rings & bracelets
- Create A4 (210x297mm) PDF sizing guide for Euro/Brazil markets
- Add bracelet size chart with XS-XXL sizes and wrist measurements
- Add bracelet sizing methods and fit guide (snug/comfortable/loose)
- Update page title to 'Ring & Bracelet Sizing Guide'
- Add download buttons for both US Letter and A4 formats
- Include verification rulers in PDFs (6 inch / 15cm)
- Add ring circle sizing guides in PDFs
- Include bilingual instructions (English/Portuguese) in A4 version
- Add bangle sizing pro tip with hand measurement guide
- Install @react-pdf/renderer for PDF generation
- Printable verification rulers
- Ring size charts with diameter/circumference
- Bracelet size charts with wrist measurements
- Detailed measurement instructions
- Visual sizing guides with circles for rings
- Professional formatting for accurate printing
Feature7:29 PM · ZRosserMcIntosh
add JBT number and optional industry references to wholesale form
- Add jbtNumber field (optional) to wholesale application form
- Add industryReferences field (up to 3 optional references) with full CRUD UI
- Update Prisma schema to support jbtNumber and industryReferences JSON storage
- Create database migration for new wholesalelead columns
- Update API to handle and store industry references
- Include references in internal notification emails
- Made both JBT number and references optional but recommended
Feature6:46 PM · ZRosserMcIntosh
implement SKU generation system, collections API, AI descriptions, and SEO improvements
- Add automated SKU generation with TYPE-MATERIAL-NAME-VARIANT-SEQ format
- Implement atomic transaction-based sequence claiming via SkuCounter table
- Create Collections REST API with full CRUD operations
- Add AI-powered product description generation with OpenAI integration and fallback templates
- Implement SEO system with structured data, JSON-LD, breadcrumbs, robots.txt, and sitemap
- Update product forms with SKU lock toggle, live preview, and AI generation buttons
- Add database schema changes for skuLocked, skuBase fields and SkuCounter table
- Fix tooltip component to remove external Radix UI dependency
- Create comprehensive utility libraries for SKU generation and AI descriptions
Update2:07 PM · ZRosserMcIntosh
Implement next.config.ts rewrites for non-prefixed locale routing
- Add async rewrites() function in next.config.ts with beforeFiles array
- Maps 28 public routes from non-prefixed to /en/ prefixed versions
- Fixes 404 errors on all public pages (shop, education, contact, etc.)
- Simplify middleware.ts matcher to focus on root and locale-prefixed routes
- Fix i18n/request.ts to use requestLocale parameter from middleware
- Ensure locale detection works with URL-based routing
- All routes now return 200 status with proper translations
- Tested: /shop/earrings, /education, /, /en routes all working
Update1:22 PM · ZRosserMcIntosh
Correct footer translation structure
- Fixed footer translation keys to use nested structure (shop.title, shop.rings, etc.)
- Fixed bottom links to use flat keys (privacyPolicy instead of bottom.privacyPolicy)
- Changed copyright key from 'copyright' to 'allRightsReserved'
- Updated all 6 language files (en, es, pt, it, de, fr) with correct structure
Feature1:18 PM · ZRosserMcIntosh
Add comprehensive translations for all 6 languages
- Created complete translation files for EN, ES, PT, IT, DE, FR
- Updated header component to use translation keys for navigation
- Updated footer component to use translation keys for all sections
- Translations cover: navigation, footer, engagement wizard, education, shop, cart, wishlist, account, blog, about, FAQ, shipping, wholesale
- Navigation dropdowns (Jewelry, Love & Engagement, Education, Jewel Vox)
- Footer sections (Shop, Love & Engagement, Client Care, Company)
- Bottom links (Privacy, Terms, Accessibility, Employee Login)
- Newsletter section
- All product-related content
- All educational content (4Cs, diamond guide, metals, sizing)
Feature12:51 PM · ZRosserMcIntosh
implement cookie-based i18n with automatic locale detection
- Remove locale prefixes from URLs (/pt, /en) - now all URLs are clean
- Automatic locale detection based on: cookie > geo location > browser language
- Language switcher now sets cookie instead of changing URL
- Middleware handles locale detection and cookie management
- Added country-to-locale mapping (Brazil/Portugal→pt, Spain/Mexico→es, etc.)
- middleware.ts: Complete rewrite for cookie-based locale detection
- src/i18n/request.ts: Read locale from cookie/header instead of URL
- src/i18n/routing.ts: Set localePrefix to 'never'
- src/components/language-selector.tsx: Use cookie-based switching
- next.config.ts: Removed locale rewrites (handled by next-intl)
Update12:28 PM · ZRosserMcIntosh
product photo upload not saving on new product creation
- Photos are now properly stored in component state
- After product creation, photos are automatically uploaded with productId
- Extracts File objects from PhotoData to send to upload API
- Sets primary photo correctly (first photo)
- Better error handling with user-friendly messages
- Logs progress at each step for debugging
Update12:18 PM · ZRosserMcIntosh
restore diamond shape images in engagement design wizard
- Add helper function to handle different image extensions
- Marquise uses .tiff, all other shapes use .png
- Set unoptimized flag for TIFF image
- All diamond shape images now display correctly:
- Round (round.png)
- Oval (oval.png)
- Pear (pear.png)
- Marquise (marquise.tiff)
- Princess (princess.png)
- Emerald (emerald.png)
- Radiant (radiant.png)
- Cushion (cushion.png)
- Asscher (asscher.png)
- Heart (heart.png)
Feature12:07 PM · ZRosserMcIntosh
redesign blog post layout for better elegance and image display
- Replace full-width hero image with elegant header section
- Move featured image into content area with proper aspect ratio (16:10)
- Images now maintain quality and match text width (max 4xl container)
- Improved typography hierarchy and spacing
- Enhanced prose styling for better readability
- Better mobile responsiveness
- Cleaner, more magazine-style layout
Update12:01 PM · ZRosserMcIntosh
remove migration script to fix build error
- The migration script has already been executed and all blog posts are
- imported to the database. Keeping it causes a TypeScript redeclaration
- error during Next.js build on Vercel.
Update11:59 AM · ZRosserMcIntosh
resolve blog edit page error and image loading issues
- Fix params Promise issue in edit page (Next.js 15 compatibility)
- Add unoptimized flag to external images from Shopify CDN
- Configure next.config to allow katura1999.com CDN images
- Images now load correctly in blog list and detail pages
Feature11:41 AM · ZRosserMcIntosh
migrate 6 blog posts from katura1999.com to jewel-vox section
- PushPresent: February (Amethyst birthstone)
- PushPresent: January (Garnet birthstone)
- M + S: Emerald cut with Cadillac cut side stones
- J + A: Inherited diamond Toi et Moi design
- A + H: Hope Blue diamond engagement ring
- S + V: Emerald cut with baguette side stones
Update11:09 AM · ZRosserMcIntosh
add comprehensive logging for real-time pay counter debugging
- Logs when timer effect starts with payInfo status
- Logs interval ID creation and cleanup
- Logs pay updates every 10 seconds
- Warns when pay calculation is skipped
- Better error messages for failed fetch
- Logs successful pay info load in development
- Warns when no pay info found
- Shows exact hours worked
- Shows hourly rate
- Shows calculated pay
- Helps diagnose why pay counter might not update
- Store elapsed time before setting
- Store formatted pay before setting
- Makes debugging easier
- [Timer Effect] Starting with payInfo: HOURLY @ $X/hr
- [Timer Effect] Interval started: <id>
- [Pay Update] { time: '22m', hours: '0.3667', rate: 25, pay: '$9.17' }
Docs10:59 AM · ZRosserMcIntosh
add comprehensive guide on React Hooks order fix
- Explanation of Rules of Hooks violation
- Before/after code examples
- Why the error occurred
- How the fix works
- Testing verification steps
- Prevention strategies
- ESLint configuration recommendations
Update10:58 AM · ZRosserMcIntosh
resolve React Hooks order violation in HeaderClockIn
- Role check (EMPLOYEE/MANAGER/OWNER only)
- Hydration check (isMounted)
- UI rendering (isClocked state)
Docs10:56 AM · ZRosserMcIntosh
add deployment checklist for Vercel production fix
- Pre-deployment testing steps
- Deployment options (auto-deploy, CLI, dashboard)
- Comprehensive post-deployment testing
- Browser and mobile testing checklist
- Rollback procedures
- Success criteria
- Troubleshooting guide
- Notification templates
Update10:55 AM · ZRosserMcIntosh
resolve real-time pay counter issues on Vercel production
- Added proper dependency arrays to all useEffect hooks
- Wrapped checkClockStatus and fetchPayInfo in useCallback
- Prevents stale closures and ensures intervals work correctly
- Added isMounted state to prevent SSR/client mismatch
- Component now waits for client-side mount before rendering
- Eliminates timing calculation discrepancies
- Better cleanup functions in useEffect returns
- Explicit interval storage and cleanup
- Error handling around interval operations
- Added validation for clockedInAt timestamp
- Try-catch blocks around time calculations
- Better error logging for production debugging
- Reset elapsed time/pay when not clocked in
- Validates time calculations (prevents negative times)
- Handles edge cases (future timestamps, invalid data)
- Clean component lifecycle management
- Memory leak prevention
- src/components/admin/header-clock-in.tsx
- REALTIME_PAY_VERCEL_FIX.md (comprehensive troubleshooting guide)
Docs10:50 AM · ZRosserMcIntosh
add comprehensive mobile navigation testing guide
- Visual testing checklist
- Step-by-step testing procedures
- Before/after comparison
- Common issues and solutions
- Browser testing matrix
- Accessibility testing steps
- Sign-off checklist for QA
Feature10:48 AM · ZRosserMcIntosh
optimize mobile navigation with enhanced hamburger menu
- Improve header responsive layout (grid → flexbox)
- Reduce header/logo sizes on mobile for better space usage
- Add logo to mobile menu for branding consistency
- Add quick links footer in mobile menu (Account, Wishlist, Cart)
- Improve spacing and touch targets for mobile devices
- Add visual separators between menu sections
- Ensure all desktop nav items hidden on mobile (< 1024px)
- Smaller icons on mobile (h-4 w-4 → h-5 w-5 on larger screens)
- Better padding and gaps for mobile devices
- Scrollable mobile menu for smaller screens
- Enhanced mobile UX with clear visual hierarchy
- Header: h-20 (mobile) → h-24 (desktop)
- Logo: h-16 (mobile) → h-20 (tablet) → h-24 (desktop)
- Icons: 16px (mobile) → 20px (desktop)
- Padding: px-4 (mobile) → px-6 (desktop)
- Touch-friendly 44x44px minimum tap targets
- src/components/layout/header.tsx
- MOBILE_NAV_OPTIMIZATION.md (documentation)
Docs8:20 AM · ZRosserMcIntosh
add comprehensive Supabase setup guide for employee photos
- Step-by-step bucket creation instructions
- Environment variables configuration
- Testing checklist
- Troubleshooting common issues
- Production deployment checklist
- Monitoring recommendations
Docs8:18 AM · ZRosserMcIntosh
add Supabase storage policies SQL for employees bucket
- SQL script to set up proper RLS policies for employee photo uploads
- Includes policies for INSERT, SELECT, UPDATE, DELETE
- Instructions for bucket configuration in dashboard
Feature8:17 AM · ZRosserMcIntosh
add employee profile photo upload functionality
- Create API routes for photo upload/delete to Supabase 'employees' bucket
- Add ProfilePhotoUpload reusable component with preview and validation
- Integrate photo upload into account settings page
- Add user profile API routes (GET/PUT) for profile management
- Features:
- Support JPEG, PNG, WebP (max 5MB)
- Automatic old photo cleanup
- Real-time session updates
- Loading states and error handling
- Confirmation dialog for photo removal
- Accessible with ARIA labels
- Files created:
- src/app/api/user/profile-photo/route.ts
- src/app/api/user/profile/route.ts
- src/components/profile/profile-photo-upload.tsx
- EMPLOYEE_PHOTO_UPLOAD.md (complete documentation)
- Updated:
- src/app/[locale]/account/settings/page.tsx
- Uses NextAuth v5 authentication
- Photos stored at: employees/profile-photos/{userId}-{timestamp}.{ext}
Update8:12 AM · ZRosserMcIntosh
make admin account menu item clickable
- Convert 'My Account' label to clickable menu item
- Rename to 'My Account & Settings' with Settings icon
- Links to /admin/settings page for better UX
- Change label header to 'Account Menu' for clarity
- Fixes issue where 'My Account' button did nothing
Refactor8:08 AM · ZRosserMcIntosh
add TypeScript type casts to inline chart styles
- Apply React.CSSProperties type cast to suppress CSS linting warnings
- Addresses inline styles for dynamic chart bar visualizations
- Files modified:
- overview-tab.tsx: revenue trend chart bars (line 291)
- customers-tab.tsx: RFM distribution chart (line 256)
- time-tracking-tab.tsx: time tracking visualization (line 328)
- These are legitimate uses of inline styles for data-driven chart heights/widths
- VS Code CSS linter warnings handled via .vscode/settings.json configuration
8:04 AM · ZRosserMcIntosh
Add comprehensive bug fix completion report
- Documents all 11 bugs fixed across 5 files
- Provides detailed solutions and commit references
- Includes accessibility, inline styles, and import fixes
- Complete testing and validation checklist
8:04 AM · ZRosserMcIntosh
Fix remaining CSS inline style warning in customers tab
- Add VS Code settings to ignore inline styles warning for CSS
- Inline styles are necessary for dynamic chart bar heights in data visualizations
- Configure css.lint.inlineStyles to ignore this false positive
- Update customers-tab to use proper inline style with comment
7:59 AM · ZRosserMcIntosh
Add documentation for analytics dashboard import fixes
7:59 AM · ZRosserMcIntosh
Fix import errors in analytics dashboard
- Use barrel export from ./tabs instead of individual imports
- Update ClockInButton to HeaderClockIn with correct props (userId, userRole)
- Fix import path for header clock-in component
- Resolves all module not found errors
7:57 AM · ZRosserMcIntosh
Add documentation for contact form accessibility fix
7:57 AM · ZRosserMcIntosh
Fix accessibility issue in contact form - add title and aria-label to select
- Add title attribute for tooltip text
- Add aria-label for screen reader accessibility
- Improves keyboard navigation and accessibility compliance
7:54 AM · ZRosserMcIntosh
Add documentation for engagement design page inline styles fix
7:54 AM · ZRosserMcIntosh
Fix inline styles in engagement design page - use SVG instead
- Replace inline styles for metal color visualization with SVG-based gradient rendering
- Use radial gradient in SVG instead of CSS-in-JS for metal circles
- Improves code quality and removes ESLint warnings
- Maintains visual appearance and interactivity
7:53 AM · ZRosserMcIntosh
Add documentation for cart page accessibility fixes
7:53 AM · ZRosserMcIntosh
Fix accessibility issues in cart page - add titles and aria-labels to buttons
- Add title and aria-label to decrease quantity button
- Add title and aria-label to increase quantity button
- Add title and aria-label to remove item button
- Improves keyboard navigation and screen reader support
7:51 AM · ZRosserMcIntosh
Add quick reference guide for real-time pay feature
7:50 AM · ZRosserMcIntosh
Add comprehensive implementation summary for real-time pay feature
7:49 AM · ZRosserMcIntosh
Add real-time pay feature documentation
7:46 AM · ZRosserMcIntosh
Add real-time pay calculation and hourly rate display in analytics
- Team tab now shows employee's hourly rate under $/Hour column
- Header clock-in button displays real-time pay calculation in /bin/zsh.01 increments
- Updates every 100ms for smooth, real-time pay display
- Only shows for hourly employees with rate configured
- Fetches pay info from /api/admin/analytics/team/pay endpoint
7:40 AM · ZRosserMcIntosh
Add project completion summary
7:39 AM · ZRosserMcIntosh
Add bug fixes summary documentation
7:38 AM · ZRosserMcIntosh
Fix TypeScript compilation errors for Next.js 15 dynamic route parameters
- Fixed articles API route: params now awaited as Promise
- Fixed careers API route: params now awaited as Promise
- Fixed jewel-vox page: added type annotation for related parameter
- All routes now properly handle async params in Next.js 15+
7:30 AM · ZRosserMcIntosh
Add analytics & time tracking system with header clock-in button
- Added 5 new Prisma models: AnalyticsEvent, TimeEntry, TeamMemberPay, AnalyticsDailyRollup, Affiliate
- Created analytics types and utility functions
- Built 10+ API endpoints for analytics (overview, products, customers, team, affiliates, export)
- Built time tracking endpoints (clock-in, clock-out, entries management, status check)
- Created analytics dashboard page with 6 tabs (Overview, Products, Customers, Team, Affiliates, Time Tracking)
- Added header clock-in button with confirmation dialog and state persistence
- Implemented team pay management (hourly/salary, pay schedules, payment details)
- Hours worked comparison chart with EST timezone default and 7-day view
- Full RBAC implementation with role-based access control
- Audit logging for all exports and time entry edits
Docs6:33 AM · ZRosserMcIntosh
Add blog migration completion summary
Feature6:32 AM · ZRosserMcIntosh
Add Jewel Vox blog content migration and comprehensive guides
- Created seed-jewel-vox-blog.ts with 6 blog articles extracted from Shopify
- All articles seeded with full content, images, dates, and metadata
- Added BLOG_MIGRATION_GUIDE.md with complete migration instructions
- Added IMPLEMENTATION_COMPLETE.md with project status summary
- Articles now published and visible on /jewel-vox frontend
- Includes: S+V Emerald Cut, A+H Something Blue, J+A Heirloom, M+S Cadillac Cut, January Garnet, February Amethyst
Feature6:12 AM · ZRosserMcIntosh
Add careers management system and job postings
- Add JobPosting model to Prisma schema with DRAFT/PUBLISHED/CLOSED/ARCHIVED statuses
- Create admin careers dashboard at /admin/careers with full CRUD operations
- Implement job posting creation form at /admin/careers/new
- Implement job posting editing form at /admin/careers/[id]
- Create admin API routes for job management (GET, POST, PUT, PATCH, DELETE)
- Update public /careers page to display published jobs from database
- Add Careers tab to admin sidebar navigation
- Implement job filtering, searching, and status management
- Add comprehensive documentation for careers and blog migration
- All pages fully responsive and accessible
- Support for job metadata: location, type, salary, department, reporting structure
Feature6:04 AM · ZRosserMcIntosh
Complete site-wide feature implementation - admin pages, forms, and blog system
- Add all missing admin pages (collections, media, orders, settings, jewel-vox)
- Create complete collection management with CRUD operations
- Implement Jewel Vox blog admin interface with article management
- Add media library with drag-and-drop upload support
- Create order management dashboard with status tracking
- Implement comprehensive settings panel (store, email, payments, shipping)
- Add contact form with validation and database storage
- Implement consultation booking system with engagement leads
- Add design wizard form with file uploads
- Create newsletter subscription system
- Add category pages (engagement rings, wedding bands)
- Implement privacy policy and terms of service pages
- Create dynamic company info utility with automatic year calculation
- Fix About page to use dynamic founding year calculations
- Add CompareButton and WishlistButton to product listings
- Implement slug-based product lookup (dual id/slug support)
- Add UI components (alert-dialog, switch)
- Update navigation and footer with new links
- All forms validated with Zod schema
- All changes fully localized with i18n support
Update5:04 AM · ZRosserMcIntosh
correct sorting implementation and fix text clipping in sort dropdown
Update5:00 AM · ZRosserMcIntosh
implement sorting for category pages (featured, price, name)
3:56 AM · ZRosserMcIntosh
Update header and footer navigation: Change 'Engagement' to 'Love & Engagement'
- Updated mainNav configuration in src/lib/config.ts
- Updated footer section heading in src/components/layout/footer.tsx
- Changes applied to both header and footer for consistency