KATURA
Your browser is not supported. Please update your iPad to the latest iOS version, or visit us on a newer device.
How to update your iPad Skip to main content JOIN THE WORLD OF KATURA Be the first to discover new collections, exclusive events, and the stories behind our legendary creations.
Katura—Crafting timeless treasures since 1999.
Are You a Jewelry Business? E-commerce, CRM, marketing, payroll, analytics, and AI — everything you need to run a modern jewelry business, all in one platform.
© 2026 KATURA. All rights reserved.
Software Updates · KATURA | KATURA
Live from GitHub · Refreshed continuously
Software Updates Every change we ship to katura1999.com — features, fixes, security patches, the lot. Pulled straight from our private GitHub repository so you can see exactly what was built and when.
By the numbers Lines of code
751,820
across the entire repo (equivalent to 37.0 King James Bibles)
Characters written
29.13M
29,126,188 total characters
Updates pushed
1,573
exact commit count on main
Current version
v1.15.73
build 1573 · 6d58963
Database models
366
across 47 schema files — most SaaS platforms have 20–50
API endpoints
854
individually routed — Stripe's public API has ~400
Translated strings
79,872
every string, in 24 languages
System permutations
10^257
2^854 endpoint combinations — more than atoms in the observable universe (10^80)
Project age
4mo 29d
since Dec 14, 2025
Pre-AI dev hours
25.1K hrs
751,820 lines ÷ 30 LOC/hr — equivalent to 12.0 years (senior engineer, no AI)
With-AI dev hours
6.3K hrs
4× AI productivity multiplier (2024–2026 studies) — equivalent to 783 days
Equivalent firm cost
$6,479,155
live ticker · $60/hr ongoing
Hours estimated from source line count at 30 LOC/hr (industry benchmark for production-quality TypeScript/React without AI assistance), with a 4× multiplier for AI-assisted development per published 2024–2026 enterprise studies. Equivalent Firm Cost uses a $250/hr loaded billable rate reflecting a premium engineering firm building enterprise-grade SaaS — and ticks up live, because the project is still being actively built.
Commit history
1,573 updates pushed Showing page 18 of 33 · 851–900 of 1,643 fetched
Tuesday, February 10, 2026 16 updates pushed
Feature 7:00 PM · ZRosserMcIntosh
hero pagination+pinning, ShipStation auto-export, platform gap analysis Hero analytics: paginated results up to 50/page (15/25/50 selector) Hero mosaic: admin pin management API + UI (force-include products) Collage API: pinned products get weight=100 for guaranteed display Product search API: added slug, price, jewelryType fields ShipStation: auto-export orders on Stripe payment confirmation ShipStation: 15-min cron sync added to vercel.json Gap analysis: comprehensive doc comparing promo page vs actual features Feature 6:43 PM · ZRosserMcIntosh
welcome gift $500 min, mobile popup centering, admin-editable offer, smart registration Popup centered on mobile (left-1/2 -translate-x-1/2) $100 gift only redeemable on orders over $500 (configurable) New /api/welcome-offer endpoint reads from WELCOME100 promotion Popup, register API, and checkout all read amounts dynamically Register page detects existing customers, prompts for password only check-email API returns set-password for any passwordless user Duplicate gift card issuance prevention for returning customers Auto sign-in after returning customer activates account Update 6:01 PM · ZRosserMcIntosh
exclude trunk show from hero mosaic cache + redirect to cart on Add to Bag Added 'hero-mosaic' tag to ISR fetch and unstable_cache for on-demand revalidation Created /api/admin/revalidate-hero endpoint to bust mosaic cache Bulk edit trunk-show actions now auto-revalidate hero mosaic cache DB queries already correctly exclude trunk-show tagged products; issue was stale ISR/API cache from before tags were applied AddToCartButton now redirects to /cart by default after successful add Added redirectToCart prop (default true) for CTA reinforcement Wishlist uses redirectToCart=false to keep toast-only behavior Feature 5:55 PM · ZRosserMcIntosh
3-step checkout flow (Information → Payment → Confirmed) Redesigned checkout from 2-step to 3-step inline flow Step 1 (Information): contact, shipping address, gift options, promo codes Added sign-in/create-account option for guest customers Changed lead time notice from yellow/amber to stone color scheme Removed lead time checkbox, replaced with passive acceptance text Step 2 (Payment): Stripe PaymentElement with billing auto-filled from step 1 Shows shipping summary with edit button to go back Step 3 (Confirmed): inline order confirmation (no redirect to /checkout/success) Shows order number, confirmation email, What Happens Next steps Continue shopping and view order status buttons Added 3-step progress indicator with emerald checkmarks Fixed PaymentForm to not redirect when onSuccess callback is provided /checkout/success route preserved as fallback for redirect-based payments (3DS, Pix) Added translations for all 10 languages (en, pt, de, es, fr, it, ja, ko, zh, ar) Feature 5:33 PM · ZRosserMcIntosh
tag-based trunk show system with bulk edit Products tagged 'trunk-show' are excluded from category pages, hero mosaic, and related products But keep their actual jewelryType (Bracelet, Earrings, etc.) for SEO POST /api/admin/products/bulk-edit - bulk add/remove trunk show tags /admin/products/bulk - bulk edit page with product selection and filters Trunk Show checkbox on individual product edit form category-page.tsx: tags filter instead of jewelryType check creations/page.tsx: tags filter for main shop creations/trunkshow/page.tsx: query by tag instead of jewelryType creations/[id]/page.tsx: related products exclusion by tag admin products/trunkshow API: query by tag admin products page: trunk show count by tag hero analytics/collage/cache: tag-based exclusion payment intent: tag-based trunk show detection Removed 'Trunkshow Special' from jewelry type dropdowns Update 3:56 PM · ZRosserMcIntosh
reclassify 18 trunk show products to correct jewelry types, boosting hero eligibility from 71 to 89 Updated 17 'Trunkshow Special' products to their actual types (Earrings, Bracelet, Necklace) Fixed 1 product with null jewelryType ('Pearl Stud Earrings Light Gold Round Orb' -> Earrings) Removed now-unnecessary trunk show exclusion filter from 3 locations: src/app/api/admin/analytics/hero/route.ts src/app/api/products/collage/route.ts src/lib/cache/collage-cache.ts Final distribution: Earrings=40, Necklace=27, Ring=13, Bracelet=9 Feature 3:16 PM · ZRosserMcIntosh
Brevo eCommerce product sync for email editor Product Block Add src/lib/brevo/ecommerce.ts - full Brevo eCommerce API client (activate, create/update products, batch sync, categories, list) Add src/app/api/admin/brevo/products/route.ts - admin API for manual sync (activate, full sync, single product sync, list) Add src/app/api/cron/brevo-product-sync/route.ts - nightly cron syncs all active products + categories to Brevo at 5 AM Update daily cron to include product sync as Task 6 Update vercel.json with brevo-product-sync cron schedule Batch fallback: if batch API fails, falls back to individual product sync so partial failures don't block the entire catalog 9:24 AM · ZRosserMcIntosh
Fix hero mosaic eligibility: add Pendant type, trunk show exclusion, and storefront filtering Add 'Pendant' to JEWELRY_TYPES in collage route, analytics route, and collage cache Add explicit storefrontId filter to analytics route and collage cache (katura_storefront_001) Add NOT filter to exclude 'Trunkshow Special' products from hero mosaic Update category-to-type mapping: pendants -> 'Pendant' (was 'Necklace') Update analytics rules text to reflect current filtering criteria 9:15 AM · ZRosserMcIntosh
Suppress CSS inline style and Tailwind class lint warnings Replace inline style={{ gridTemplateColumns }} with Tailwind grid-cols-N classes via lookup map in media/page.tsx Add tailwindCSS.lint.suggestCanonicalClasses: ignore to suppress z-[100]->z-100 and sm:w-[200px]->sm:w-50 class shorthand hints Add css.lint.inlineStyles: ignore at top level and per-language scope for any remaining inline style usage in TSX files 8:42 AM · ZRosserMcIntosh
Fix 4 QA issues: header dark mode, design folder nav + previews, media size control, marketing redirect 1. Header dark mode (/design-your-ring): Account name/icon now properly inverts to white on dark pages (expanded isDarkPage check in user-menu) 2. Admin design page: Fixed folder detection (Supabase returns id=null for folders), fixed folder click navigation to build full paths, fixed back button to go up one level, added image previews with signed URLs in both grid and list views 3. Admin media page: Added adjustable grid size control (2-8 columns per row) with slider and +/- buttons for viewing more images at once 4. Marketing/media redirect: All 3 marketing/media sub-pages now redirect to /admin/media to eliminate redundancy 7:45 AM · ZRosserMcIntosh
Fix 4 admin bugs: revenue mismatch, folder date, Leads0, drag-drop Customers page was showing all-time totalSpent from User model Dashboard shows trailing 12-month revenue from settled Orders Now both use the same calculation: 12-month settled order totals Label changed to 'Revenue (12 mo)' with consistent formatting Supabase Storage folder objects have null/empty created_at new Date(null) resolves to Unix epoch (12/31/1969) Added formatDate() helper that returns '—' for invalid/epoch dates Applied to both grid and list views, plus sort comparator Classic React bug: {0 && <Component/>} renders literal '0' Changed condition from 'item.badge && item.badge > 0' to 'Number(item.badge) > 0' which evaluates to boolean false Replaced relatedTarget-based dragLeave with drag counter pattern Added onDragEnter handler with Files type check Counter increments on enter, decrements on leave, resets on drop More reliable across browsers and nested DOM elements 7:25 AM · ZRosserMcIntosh
Fix 4 admin issues: CAD drag-drop upload, taxonomy counts, birthday timezone, wholesale PT translations Added drag-and-drop file upload to the entire page and individual folders Folders visually highlight when dragging files over them (📁→📂) Added 'Upload to [folder]' button when inside a folder Empty folders now show drag-and-drop hint instead of generic message Product counts now match by productType/jewelryType/productCategory name Previously only counted ProductCategoryLink entries (always 0 for Shopify imports) Children categories also get enriched product counts Category creation: improved error handling, wrapped audit log in try/catch Added timeZone: 'UTC' to all birthday/anniversary date displays Fixed off-by-one day bug (UTC midnight → local timezone shift) Applies to customer detail page and linked people card Added wholesalePage section to AdminTranslations (EN + PT) Created WholesaleHeader reusable component for translated page titles Translated: WholesaleNav, WholesaleOverview, WholesaleAccountsClient, WholesaleLeadsClient, WholesaleSettingsClient All 5 wholesale pages and pipeline now use translated headers Update 6:50 AM · ZRosserMcIntosh
Hero mosaic DESIGN YOUR RING button to point to /design-your-ring instead of /engagement/design Update 6:34 AM · ZRosserMcIntosh
DESIGN YOUR RING button to use relative link instead of hardcoded absolute URL 2:48 AM · ZRosserMcIntosh
Complete 5 admin panel tasks: CAD upload flow, hero mosaic audit, translations, bug fixes Chore 1:52 AM · ZRosserMcIntosh
update Design Your Ring button to external URL Changed home page CTA button from internal route /engagement/design to https://katura1999.com/design-your-ring Updated navigation config to use external URL for consistency Button now directs to external design-your-ring page Monday, February 9, 2026 7 updates pushed
Feature 4:59 PM · ZRosserMcIntosh
@mentions, @username tasks, CAD design page, employee/goals translations, salesRep leaderboard fix Messages: @mentions use username with highlighted styling (bg-primary/10) Tasks: Assignee display shows @username format CAD Design: New /admin/design page with Supabase 'cad' bucket, upload/download/delete/folder support Employee sub-pages: Full EN+PT translations for company-structure and careers Goals: Full EN+PT translations for all tabs (leaderboard, goals, achievements, commissions) Goals: Translated goalTypes and goalPeriods with useMemo Leaderboard: Fixed to aggregate by salesRepId instead of userId (customer) Commission: Auto-calculation already in place via order PATCH when salesRepId is assigned Navigation: Added CAD Design - For Antar to sidebar with PenTool icon Fixed: messages realtime sender username type, tasks JSX syntax error, company-structure t scope Feature 10:27 AM · ZRosserMcIntosh
complete messenger page rewrite with Slack-level features Rewrote messages page (1921 lines) with sticky bottom input Added 6 new API routes: members, mute, message edit/delete, reactions, pins New web notifications hook with AudioContext chime sound Sunday, February 8, 2026 10 updates pushed
6:34 PM · ZRosserMcIntosh
Fix broken logo paths and design-your-ring white area on mobile Replace all 'logo copy 2.png' and 'logo copy.png' refs with 'logo.png' Affected: header, footer, login, register, home page, gift cards, wholesale, employee login, admin layout, mobile nav Add dark background wrapper to design-your-ring layout to eliminate white gaps between header/footer and dark page content on mobile Update 5:46 PM · ZRosserMcIntosh
Move LocaleAttributes inside NextIntlClientProvider to resolve intl context error LocaleAttributes was rendered outside NextIntlClientProvider but uses useLocale() hook This caused 'No intl context found' error on all pages Moved component inside provider to give it access to intl context Chore
Saturday, February 7, 2026 14 updates pushed
1:18 PM · ZRosserMcIntosh
Fix mobile glow overflow and hide reCAPTCHA badge Hide ambient glow effects on mobile (hidden md:block) to prevent overflow glows above/below page Hide mouse-following spotlight on chapter 0 on mobile devices Add CSS animation to fade out reCAPTCHA badge after 3 seconds Improves mobile UX by removing visual distractions 12:38 PM · ZRosserMcIntosh
Fix header z-index and mobile optimizations Navigation dropdowns: Added z-[100] to both left and right NavigationMenuContent to ensure they appear above sticky content Developer page header: Reduced z-index from z-50 to z-40 to allow dropdowns to render on top User menu: Added isDeveloperPage detection and conditional white text styling for visibility on dark backgrounds User menu dropdown: Increased z-index to z-[100] Footer: Mobile-optimized bottom bar with wrapped links, centered layout, and grouped language/currency selectors Developer page: Mobile-optimized navigation buttons with smaller text, padding, and icons; hide 'BACK' text on small screens Friday, February 6, 2026 3 updates pushed
Update 11:03 PM · ZRosserMcIntosh
typescript errors in export route - use OrderStatus enum and filter nulls Update 10:55 PM · ZRosserMcIntosh
add has-ordered segment to export endpoint Added 'has-ordered' to valid segment IDs in export route Made getSegmentWhereClause async to fetch order data for has-ordered segment Uses same logic as segments API: distinct userIds from Order table with confirmed statuses Feature 10:49 PM · ZRosserMcIntosh
linked people on customer profiles, 9th segment fix, custom segment creation
Database migration: ChatPinnedMessage, WebPushSubscription, NotificationPreference tables
Features: add/remove people, edit/delete messages, pin/unpin, mute (timed & indefinite)
30-emoji picker, @mentions, message search, channel settings sheet
System messages for member changes, pinned messages
Channel creation with type selection (Group/Project/Announcement)
Hover action toolbar with quick reactions, reply, more menu
All 8 files verified zero errors Feature 9:09 AM · ZRosserMcIntosh
Re-enable commission rate fields in orders API Viewing commission rates on orders Seeing calculated commission amounts Full commission tracking integration with sales rep assignments Chore 9:07 AM · ZRosserMcIntosh
Add migration helper scripts for commission tracking add_order_commission_columns.sql: Quick fix for missing Order commission columns check_commission_migration_status.sql: Diagnostic script to check migration status Update 9:04 AM · ZRosserMcIntosh
Remove commission rate fields from orders API to prevent 500 errors The orderCommissionRate and orderCommissionAmount fields were selected in the orders API query but may not exist in production database yet. Temporarily removed from API response to fix 500 errors. Commission tracking still works via /api/admin/commissions endpoint and the orders [id] route which handles commission calculation. Feature 8:12 AM · ZRosserMcIntosh
Add commission tracking and employee compensation system Commission Tracking: New /admin/goals Commissions tab with filterable table, bulk approve/pay, monthly totals Sales Rep Assignment: Dropdown on /admin/orders rows to assign sales rep; auto-calculates commission Employee Compensation: /admin/employees now has salary, hourly rate, commission rate, job title, department, start date, reports-to fields Page Restructuring: /admin/employees is Team Members only; /admin/employees/audit and /admin/employees/careers as separate pages Company Structure: New /admin/employees/company-structure page with recursive org chart, role/dept badges, stats Database: Added User compensation fields, Order sales rep tracking, new CommissionRecord model with status workflow API: New /api/admin/commissions route for commission management; updated orders and users routes UI: Enhanced employees table with commission/compensation columns (owner only), navigation bar for sub-pages 5:04 AM · ZRosserMcIntosh
Update header logo to new AVIF design Add new header-logo.avif to public/brand/ Update both mobile and desktop header logo references 12:42 PM · ZRosserMcIntosh
comprehensive site audit - 28 items 7 broken multi-line imports from safeLog codemod Fixed Sentry hideSourceMaps -> sourcemaps.disable Converted 5 multi-arg safeLog calls to template literals Cleaned .next/types cache (stale test-video reference) Removed stale package-lock.json (pnpm project) 7:46 AM · ZRosserMcIntosh
Organize scripts and migration files: Move .cjs, .sql, .sh, and .mjs files into organized folders 6:52 AM · ZRosserMcIntosh
Complete education section i18n: translate all pages + add SEO metadata Rewrite education/page.tsx (hub) with education.hub translations Rewrite education/metals/page.tsx with education.metals translations Rewrite education/settings/page.tsx with education.settings translations Rewrite education/diamond-shapes/page.tsx with education.diamondShapes translations Upgrade education/diamonds/page.tsx SEO (canonical, hreflang, OG) Add education.metals translations to all 10 locales (en/es/pt/de/fr/it/ko/ja/zh/ar) Add education.hub translations to all 10 locales Add education.settings translations to all 10 locales Add education.diamondShapes translations to all 10 locales Fix 3 missing translation keys: footer.shop.trunkShow, engagement.metals.sterlingSilver, shop.categoryPage.metalTypes.sterlingSilver 6:10 AM · ZRosserMcIntosh
Add full metadata for /design-your-ring page across all 10 locales Create layout.tsx with generateMetadata for design-your-ring route (page.tsx is 'use client' so metadata must come from server layout) Add designYourRing SEO templates (title + description) for all 10 locales (en, es, pt, de, fr, it, ko, ja, zh, ar) Add /design-your-ring to sitemap with priority 0.8 Add 'ar' locale to root layout alternates.languages (was missing) Add 'ar' to SEO config currencyByLocale (ar → SAR) Fix locale regex patterns in getCanonicalUrl and getHrefLangUrls to include 'ar' Update Organization schema availableLanguage to include all supported languages Page-specific: canonical URL, hreflang for all 10 locales + x-default, Open Graph tags, Twitter Card meta Feature 6:02 AM · ZRosserMcIntosh
full i18n for design-your-ring — Arabic locale, QAR currency, multi-currency language selector, translated shapes/settings/metals in all 10 locales Fix ring image capture error: compositeImage now nullable/optional in API, conditionally sent from page Pin GBP/EUR at 1:1 with USD (PINNED_1_TO_1 Set in currency context) Add Arabic locale (ar) to i18n config with full ar.json translations Add Qatari Riyal (QAR) currency with fallback rates and rounding rules Rewrite language selector with multi-currency options per locale (LOCALE_CURRENCY_OPTIONS) Add shapes/settings/metals translation keys to all 10 language files (en, es, pt, fr, de, it, ja, ko, zh, ar) Wire page.tsx to use t() for all shape/setting/metal names and descriptions instead of hardcoded English from config 5:30 AM · ZRosserMcIntosh
Multi-currency pricing: dynamic conversion + Brazilian Real (R$) translations Integrate useCurrency() into design-your-ring page for dynamic pricing Replace all hardcoded USD formatPrice() with currency-aware fmtPrice() Hero, Ch4, Ch7 per-carat labels now convert dynamically (e.g. R.000 for BRL) Ch2 surcharge display now dynamic: +{fmtPrice(surcharge)} instead of static text HandcraftedStats banner uses dynamic perCaratLabel Add Halo setting surcharge (+$1,000) to config.ts Update pt.json: all 13 designRing keys converted from USD to BRL equivalents $1,000 → R$4.000, $5,500 → R$22.000, $1K → R$4K stats.dollarsPerCarat: DÓLARES → REAIS 5:07 AM · ZRosserMcIntosh
Ch6 special requests, checkout flow, regional currency selector, language-currency popup, Brazil pricing text Chapter 6: replaced contact form (name/email/phone) with Special Requests textarea + consultation notice Chapter 7: removed orderContact display, added specialRequests display, simplified add-to-bag disabled condition Completion screen: primary CTA = Proceed to Checkout -> /checkout, secondary = View Bag -> /cart API route: removed contact fields from schema, added specialRequests, updated lead + email notification Currency selector: grouped by region (North America, South America, Europe, Asia, Middle East, Oceania) Language selector: shows currency switch dialog when new locale has different default currency Brazil pt.json: tagline changed to QUATRO MIL POR QUILATE DE KATURA All 9 translation files updated (en, es, fr, de, it, pt, ja, ko, zh) Cleaned unused imports (Link, Input, Upload, usePathname) 4:07 AM · ZRosserMcIntosh
Design Your Forever: Add pavé bands, increase stone size 15%, fix translations 11:33 AM · ZRosserMcIntosh
Update developer page: Chapter 2 & 4 improvements Remove darkening on unselected ring designs Only selected rings show scale effect Cleaner visual presentation Remove emojis from origin selection cards Remove duplicate ring visualization below carat slider Reduce max carat from 20 to 12 Update slider label to show 12 CT max 11:01 AM · ZRosserMcIntosh
Add developer page styling to header and update dependencies Dark background (#0a0a0f) and white text/borders on developer page Header inverts logo with filter on developer page Updated dependencies: framer-motion, @dnd-kit, web-push, @types/web-push 10:58 AM · ZRosserMcIntosh
Fix stone centering on band: always exactly centered at band opening Stone positioned at 49.02% from top (502/1024 of original image) CSS translate(-50%, -50%) ensures center-point anchoring at all sizes Smooth transition when carat slider changes stone size Stone scales uniformly from center in all directions 10:02 AM · ZRosserMcIntosh
Fix metal spheres, 4-col layout, remove prongs Force replace metal images with correct Sphere PNGs Metal grid: 4 columns on desktop, 2x2 on mobile Remove prong line animations from ring visualization Add sizes prop to Image for proper optimization 9:31 AM · ZRosserMcIntosh
Update to correct metal sphere images (Sphere versions) Replace with Platinum Sphere, White Gold Sphere, Rose Sphere, Yellow Sphere Optimized from ~1.5MB to ~160KB each (512px) These are the newer glossy sphere renders from Feb 7 8:46 AM · ZRosserMcIntosh
Fix sitemap generation: add database connection checks Wrap all Prisma queries in DATABASE_URL checks to prevent build errors Only log errors in development mode to reduce noise in production builds Sitemap will gracefully skip database-driven URLs if DB is unavailable Fixes 'Error fetching jobs for sitemap' Prisma errors during Vercel builds 8:39 AM · ZRosserMcIntosh
Fix ring visualization: realistic stone-to-band proportions Rework RingVisualization to use proportional SVG-based sizing Stone size now calculated relative to band using real mm ratios: band ≈ 2mm, ring ≈ 17mm inner diameter, stone scales by carat (7ct ≈ 12.4mm → ~80 SVG units vs 6-unit band stroke = realistic ~6:1 ratio) Thinner band (strokeWidth 5-6 vs 8-10) matches real ring proportions Stone positioned to sit naturally above the band Container enlarged to w-56/w-64 for better visual clarity Prongs scale dynamically with stone size Halo/three-stone/pavé accents use percentage-based positioning Matches reference photo proportions (large stone, thin delicate band) 8:28 AM · ZRosserMcIntosh
Update metal sphere images, remove darkening on unselected metals, optimize all images Replace metal sphere images with new 18K Yellow, 18K Rose, 18K White, 950 Platinum Remove opacity-70 darkening on unselected metal cards (full brightness always) Compress HD diamond images from ~1.7MB to ~200KB each (512px max) Compress metal sphere images to ~160KB each (512px max) Fix Vercel 'Missing files' deployment error caused by oversized uploads 7:55 AM · ZRosserMcIntosh
Fix developer page: consistent diamond card sizing, metal sphere images, realistic carat & ring sizes Fix diamond shape cards: use aspect-square container with 75% centered image so all 9 shapes have identical card dimensions (no more squished round diamond) Reduce card padding (p-3/p-5) for tighter, more uniform grid Replace metal chapter images with HD metal sphere photos (platinum, yellow gold, rose gold, white gold) using object-contain for clean presentation Add realistic diamond diameter scaling using cube-root formula: mm = 6.5 × carat^(1/3), matching GIA face-up measurements (2ct ≈ 8.2mm, 7ct ≈ 12.4mm, 14ct ≈ 15.7mm — non-linear, realistic) Show actual mm diameter below carat comparison stones Ring size circles now use real inner diameters based on US sizing standard (size 3 = 14.0mm, +0.8mm per full size) converted to screen px at 96 PPI Show mm measurement below each ring size number Add mmToPx(), diamondDiameterMM(), ringSizeToDiameterMM() utility functions Metal sphere images stored in /public/metals/ 7:23 AM · ZRosserMcIntosh
Upgrade developer page: HD diamond images, artisan storytelling, prismatic effects Replace all diamond images with HD versions from /diamonds/hd/ Remove ASSCHER jpg exception (all PNG now) Add artisan process timeline with 5-step scroll reveal (Vision → Stone → Casting → Finishing → One of One) Add typewriter text effect for immersive intro quotes Add animated counter stats banner (40+ hours, 97% rejection rate, zero machines) Add philosophy manifesto section with blockquote Add 'What Happens Next' delivery timeline on completion screen New DiamondSpotlight component with spotlight glow, refraction rays, prismatic rainbow rotation Larger HD diamond display (80-96px vs 56-64px) Enhanced copy throughout emphasizing handcrafted, one-of-one nature Landing page now scrolls to reveal full artisan philosophy below fold Second CTA at bottom of landing after artisan process Feature 3:07 AM · ZRosserMcIntosh
add immersive Developer ring design experience page Create /developer page as an animated, artistic reimagining of the ring design wizard Full cinematic dark-mode experience with framer-motion animations throughout Interactive 'Design Your Forever' journey told as 7 narrative chapters: Ch1: Diamond Shape selection with sparkle burst animations Ch2: Setting Style gallery with hover zoom effects Ch3: Metal selection with live SVG ring preview visualization Ch4: Diamond preferences with animated carat size comparison Ch5: Ring size selector with visual ring circles Ch6: Timeline picker with poetic 'When Does Forever Begin?' framing Ch7: Contact form with full ring summary recap Live ring preview in header that builds as you make selections SVG-rendered ring visualization with metal gradients, prong details, halo stones, pavé dots, and three-stone side stones Floating particle system that changes color with metal selection Mouse-tracking radial glow on landing page Corner ornaments and cinematic title sequence on intro Submits to existing /api/engagement-design endpoint Add 'Developer' link to footer bottom bar across all 9 locale files Install framer-motion v12.33.0 for rich animation support Feature multi-currency 2:27 AM · ZRosserMcIntosh
complete multi-currency system + checkout fixes Add 14-currency support (USD, EUR, GBP, BRL, JPY, KRW, CNY, CAD, AUD, MXN, AED, INR, SAR, PLN) Integrate Stripe exchange rates API with 24h caching Smart price rounding for foreign currencies (e.g., ¥9,980 not ¥9,977.23) Currency selector in footer with real-time conversion Database migration for currency tracking on orders Add complete i18n translations for all 9 locales (70+ keys) Fix Pix payment method not appearing (locale mapping pt→pt-BR) Fix R$ 179K display bug (double currency conversion on payment step) Fix lead time notice layout (responsive flex issues) Display shipping prices in customer's currency All prices stored in USD, converted at display time Zero-decimal currency support (JPY, KRW) Server/client boundary handling for currency context Dynamic payment method ordering based on currency Currency-specific Stripe locale mapping for regional payment methods 9 translation files updated with checkoutPage section 15+ customer-facing pages updated for currency display 5 new currency system modules Checkout page and payment form fully translated Stripe provider enhanced with locale support
Add CustomerLinkedPerson model (Prisma schema + SQL migration)
Full CRUD API for linked people (/api/admin/customers/[id]/linked-people)
Customer linked people card component with add/edit/delete
Integrated into customer detail page after preferences card
Fix 9th segment (All Buyers) in /api/admin/segments using actual Order table
Add Create Segment dialog to segments page for custom segments
Custom segments stored in MarketingSegment table with dynamic counts
Delete support for custom segments (OWNER/MANAGER only)