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.
The technology behind Katura is built in-house. K99 is our jewelry business platform β available to other jewelers.
Β© 2026 KATURA. All rights reserved.
πΊπΈ English EN πΊπΈ United States $
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
828,292
Web platform β TypeScript, React, Prisma, CSS
iOS
78,204
Swift + SwiftUI lines
Android
3,117
Kotlin + Jetpack Compose lines
All platforms
909,613
Web + iOS + Android combined (44.5Γ the King James Bible)
Characters written
35.04M
35,041,420 total characters
Updates pushed
1,893
exact commit count on main
Current version
v1.18.93
build 1893 Β· 1c76417
Database models
392
across 47 schema files β most SaaS platforms have 20β50
API endpoints
955
individually routed β Stripe's public API has ~400
Translated strings
82,512
every string, in 24 languages
System permutations
10^287
2^955 endpoint combinations β more than atoms in the observable universe (10^80)
Project age
6mo 15d
since Dec 14, 2025
Pre-AI dev hours
30.3K hrs
909,613 lines Γ· 30 LOC/hr β equivalent to 14.6 years (senior engineer, no AI)
With-AI dev hours
7.6K hrs
4Γ AI productivity multiplier (2024β2026 studies) β equivalent to 948 days
Equivalent firm cost
$7,859,317
live ticker Β· Katura rate: $60 USD/hr
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,893 updates pushed Showing page 15 of 40 Β· 701β750 of 2,000 fetched
Thursday, April 23, 2026 4 updates pushed
Feature 3d 2:33 AM Β· ZRosserMcIntosh
photoreal metals via studio HDRI + ACES tone mapping Add @react-three/drei <Environment preset='studio'> to both the single and assembly Canvas β high-metalness materials require an env map for reflections; without one, gold/platinum/silver render as a near-black diffuse colour (the 'yellowish-black' issue from the screenshot). Bump material colours slightly lighter (#FFE082 vs #FFD700 etc.) so the env-mapped highlights don't crush back to the diffuse base. Set metalness to 1.0 (true conductor) β values <0.9 fight the env map. Configure renderer with ACESFilmicToneMapping + sRGB output color space for filmic highlight rolloff that matches photography. Drop pointLight, lower ambient/hemisphere β env map is doing the work. envMapIntensity bumped to 1.6 for richer reflections. Update stripe-webhook 2:11 AM Β· ZRosserMcIntosh
hoist tenantPrisma to module scope + checkout audit CRITICAL: src/app/api/webhooks/stripe/route.ts had `const db = tenantPrisma(TENANT_ZERO_ID)` declared inside the POST handler, but the four event handlers β handleCheckoutSessionCompleted, handlePaymentSucceeded, handlePaymentFailed, handleCheckoutSessionExpired β are defined at module scope and reference `db.order.update`, `db.payment.update`, `db.orderItem.findMany`, `db.inventoryItem.update`, etc. Lexical scoping means those handlers never could see POST's local `db`, so every Stripe event would throw ReferenceError at runtime β orders never marked PAID, inventory never released, no confirmation emails, no ShipStation export, no Brevo/Meta CAPI side-effects. Move `const db = tenantPrisma(TENANT_ZERO_ID)` to module scope (safe; tenantPrisma is a pure factory) and remove the duplicate from POST. Phase 6: docs/CHECKOUT-AUDIT-2026-04-22.md captures the full audit β 1 critical fix (this commit) plus 9 prioritised recommendations covering the three parallel checkout endpoints, duplicate emails on hosted sessions, missing tax on iOS, idempotency, order-number collisions, card-only restriction on the legacy endpoint, console noise, and Stripe SDK init. Feature projects 1:56 AM Β· ZRosserMcIntosh
link CAD files from the global library into a project Phase 4: Adds a 'From library' button next to 'Browse' in the CAD tab of /admin/projects/:id. Opens a folder-aware picker that browses the existing 'cad' Supabase bucket via /api/admin/cad. Selecting a file hits the new POST /api/admin/jewelry-projects/:id/cad-files/from-library which downloads the source from the library bucket, copies it into the project's uploads/jewelry-projects/<id>/cad/ folder, and creates a JewelryProjectCadFile row. Provenance is captured in the existing notes column with a sentinel prefix '[Linked from library: <path>]\n<user notes>' so we can show a 'Library' badge on the file card without a schema migration. A new CAD_LINKED_FROM_LIBRARY activity event is logged for the audit trail. Feature cad 1:44 AM Β· ZRosserMcIntosh
shared casting calculator + reusable panel + STL viewer integration Phase 1: Fix STL preview modal sizing (96vw/92vh flex layout, truncating title) and volume computation (proper mergeVertices import, null guard). Remove rhodium from /developer/casting (UI, types, fallback prices). Phase 2: Extract WAX_TYPES, METALS, and casting math into shared src/lib/casting/calculator.ts. Refactor /developer/casting to import from the shared lib (single source of truth). Add reusable <CastingPanel> component (live metal prices, alloy comparison, optional save callback) for embedding in admin previews. Phase 3: Wire <CastingPanel> into <STLPreviewDialog> as a side panel that auto-populates volume from the loaded STL. In /admin/projects/:id CAD tab, the panel can save quotes to the existing /api/admin/jewelry-projects/:id/casting-quotes endpoint, persisting metal id, weight, spot price, and volume snapshot. Tuesday, April 21, 2026 2 updates pushed
Feature admin 10:35 PM Β· ZRosserMcIntosh
add STL mesh volume and casting weight calculator to CAD preview modal, improve modal layout Refactor 11:41 AM Β· ZRosserMcIntosh
polish homepage and footer copy for luxury brand tone (Tiffany/Graff/Cartier style) Hero, collections, bespoke, story, education, new arrivals, and footer sections rewritten for clarity, exclusivity, and emotional resonance. All duplicate keys removed. JSON validated. Thursday, April 16, 2026 1 update pushed
Feature 1:57 AM Β· ZRosserMcIntosh
add unsupported browser banner for legacy iPad/iOS devices React 19 + React Compiler fails to hydrate on very old iPads (iOS 12-14). This adds a lightweight fallback banner that shows after 4s if React never mounts, directing users to update their device. Modern browsers never see it. Tuesday, April 14, 2026 3 updates pushed
2:50 PM Β· ZRosserMcIntosh
Speed up interstitial animation to 1 second 2:43 PM Β· ZRosserMcIntosh
Add cinematic interstitial: 'Quando Desejar Desaparecer.' on high jewelry access 2:38 PM Β· ZRosserMcIntosh
Add 1115# access code to high jewelry gate Monday, April 13, 2026 1 update pushed
4:13 AM Β· ZRosserMcIntosh
Fix header disappearing after high-jewelry gate + swap hero image Access gate: Changed noise texture from fixed to absolute positioning (fixed inset-0 was persisting across SPA navigation, hiding the header) Access gate: Use calc(100vh - header) instead of min-h-screen Swapped hero image to new screenshot (compressed to 883KB JPEG) Updated OG image metadata reference Sunday, April 12, 2026 1 update pushed
5:43 AM Β· ZRosserMcIntosh
Mobile optimization (36 fixes across 26 admin pages) + High Jewelry fullscreen hero + email diagnostics Card-based layouts for mobile on all admin tables (orders, products, inventory, etc.) Responsive grids (grid-cols-1 β sm:grid-cols-N) on dashboards Snap-scroll kanban boards (careers, pipeline, draft orders) Touch-friendly 44px tap targets throughout Sidebar collapse and mobile-first navigation Documented audit in docs/fixes/ADMIN_MOBILE_OPTIMIZATION_AUDIT.md True fullscreen hero (h-screen, object-cover, negative margin behind header) Removed text overlay β image speaks for itself Access gate now flows below header (retains nav in dark navy) Added white diamond model image to 777 Carat section Added maxDuration=30 to inbound webhook (prevent Vercel timeout) Improved webhook error logging with stack traces Added GET diagnostic endpoint to webhook route Created /api/admin/email/diagnostics (MX check, account stats, test inbound) Added diagnostics panel to email settings UI Saturday, April 11, 2026 1 update pushed
6:31 PM Β· ZRosserMcIntosh
Fix hero image cutoff (object-contain, full photo visible), add White Diamond 777-carat collar section Friday, April 10, 2026 7 updates pushed
7:28 AM Β· ZRosserMcIntosh
High Jewelry page redesign: Remove all emoji/icon clutter, adopt Graff-inspired editorial approach. Strip deposit tier explanations for pure mysteryβ'if you have to ask, you can't afford it.' Update 6:48 AM Β· ZRosserMcIntosh
High Jewelry gate β fix Return link + apply Virgil's copy refinements Feature 6:32 AM Β· ZRosserMcIntosh
High Jewelry invitation gate β velvet rope experience Added 'High Jewelry' to header nav (first item, left of Jewelry) /high-jewelry is now chromeless (no header, no footer, no nothing) Navy blue gate page with Katura logo, 'Enter your invitation' Accepted codes: 'rosser', 'stella', 'stellerz' (case-insensitive) Every visit/refresh demands the invitation again (no session persistence) Thursday, April 9, 2026 5 updates pushed
Update 10:10 PM Β· ZRosserMcIntosh
products API 500 β variantPrice not price on ProductVariant model The variants select referenced a non-existent 'price' field. The actual field on ProductVariant is 'variantPrice'. Both the tenantPrisma and raw prisma fallback paths failed with the same schema error, causing all 10 product-related synthetic tests to fail. Update 9:23 PM Β· ZRosserMcIntosh
health check failures + comprehensive site hardening Feature 8:38 PM Β· ZRosserMcIntosh
add PageTransition animations to all admin pages + Google IndexNow integration Wednesday, April 8, 2026 2 updates pushed
4:19 PM Β· ZRosserMcIntosh
step-2 isolation β Image + Table + Badge + Button, NO client components (PageHeader/Filters/Actions/BulkSku) Feature 1:31 AM Β· ZRosserMcIntosh
rebuild products page β flat serialized data, images, full UI restored Flatten all nested Prisma data into primitive fields (imageUrl, totalStock, etc.) Wrap every value with String()/Number()/Boolean() to prevent RSC serialization crash No nested objects cross the RSC β client boundary Restored: PageHeader, ProductFilters, ProductActions, BulkSkuButton, Image, stats, mobile cards Cleaner code structure with separated types/data/helpers/page sections Tuesday, April 7, 2026 18 updates pushed
11:09 PM Β· ZRosserMcIntosh
nuclear minimal products page β zero client components, zero Image, plain HTML only Tests 11:00 PM Β· ZRosserMcIntosh
add minimal test-render page under /admin/products to isolate layout vs page error Update 10:42 PM Β· ZRosserMcIntosh
products page RSC serialization β explicit field mapping instead of Prisma spread Root cause: The ...p spread operator copied raw Prisma Decimal objects (constructor 'i' in minified builds) and Date instances from the query result into the RSC payload. These non-plain types fail React Server Component serialization in production builds. Fix: Replace spread with explicit field-by-field mapping that converts all Prisma types to plain JS primitives (Number, String, null). Monday, April 6, 2026 5 updates pushed
Feature 11:16 PM Β· ZRosserMcIntosh
admin gap-closing phase 2 β blog, CMS pages, nav editor, inventory, K99 POS + customer import Blog management page (CRUD, search, stats, SEO fields) CMS Pages management + API (create/edit/delete, slug uniqueness, publish toggle) Navigation editor + API (header/footer menus, sub-items, reorder, save to DB) Inventory dashboard (stock levels, low stock alerts, adjustments via existing API) Sidebar nav updated: 9 new items across 4 groups i18n translations added (EN + PT-BR) for all new nav items Fixed broken admin imports route (module-level await + missing function refs) New Order / POS page (product search, customer search, line items, custom items, discount, notes) Platform orders API (GET list + POST create with order number generation) Customer CSV import page (file upload, preview, progress, results) Customer import API (auto-detect columns, email dedup, bulk create) Orders page: Draft Order button β New Order button Customers page: added Import button Update 6:43 PM Β· ZRosserMcIntosh
Stella Marketing nav β direct link + CAD upload via signed URLs for large files New endpoint: /api/admin/cad/upload-url (returns signed URL)
'β Return to Katura' link top-left
'Invitation not recognized.' on wrong codes
1.2s deliberate delay before validation (luxury doesn't rush)
Barely-visible subtext: 'A member of our team may reach out regarding access.'
No mention of email anywhere β pure mystery
Signals hierarchy (not everyone gets in)
Creates curiosity pressure (what's behind the door?)
Makes the brand feel older, rarer, controlled
Even people who never get access assume there's a level above Update 5:44 AM Β· ZRosserMcIntosh
sharper high-jewelry hero image + reduce bottom blue overlay Replaced hero image with cleaner version (sharper, better contrast) Reduced bottom gradient from 70% to 50% opacity Reduced side gradients from 25% to 15% opacity Reduced bottom bar from h-32/90% to h-20/70% (much less blue wash) Bumped image quality from 90 to 95 for maximum sharpness Necklace collar area now much more visible and vibrant Update 5:29 AM Β· ZRosserMcIntosh
high-jewelry hero β show full collar/necklace, extend behind header Negative top margin pulls hero section under the header for true full-bleed effect (image extends behind the nav bar) Hero height now calc(100vh + header height) so the image has more vertical room β the collar/necklace no longer gets cropped Changed object-position from object-top to object-[center_25%] so the focal point is at 25% from top (face visible) while showing significantly more of the necklace area below Added z-20 to header so it stays above the hero when the section slides underneath it Feature 4:42 AM Β· ZRosserMcIntosh
Meta conversion optimization + SEO improvements Event deduplication (generateEventId) across all Meta Pixel + CAPI events Wire eventId through AddToCart (cart-context β /api/cart β CAPI) Wire eventId through Purchase (success page β /api/tracking/purchase β CAPI) Wire eventId through ViewContent (PDP tracker β /api/tracking/view-content β CAPI) Add AddPaymentInfo event on checkout payment step Build ExitIntentPopup for Meta traffic (10% off, Lead event, 7-day cooldown) Build RecentlyViewedProducts component (localStorage-based, on PDPs) Add auto-generated FAQ schema on product pages (metal, gemstone, lead time, etc.) Add Meta Product Catalog XML feed (/api/meta-catalog) for DPA/Collection Ads Add canonical URLs + hreflang to refund-policy and journeys Update sitemap STATIC_CONTENT_DATE to 2026-04-10 Change PDP OpenGraph type from article to product with price/brand meta Fix high-jewelry hero overlays (lighter gradients, collar visible) Dark navy header (#0B1527) on /high-jewelry page Add Meta Events section to Stella marketing admin dashboard Create comprehensive META_EVENTS_SETUP.md with baby-step walkthrough Export isMetaTraffic() for use in exit-intent popup Feature 2:52 AM Β· ZRosserMcIntosh
accessibility page beautification, GeorgiaβSC LLC fix, high-jewelry hero redesign Complete redesign matching /terms and /privacy page pattern Hero with breadcrumbs, badges (WCAG 2.2 AA Target), description Sticky sidebar navigation with 13 sections and icons 'Accessibility at a Glance' summary card with green checkmarks Expanded legal content: ADA, Section 508, EAA, AODA, UK Equality Act, SC Human Affairs Law WCAG 2.2 POUR principles with 4-card grid 8 detailed accessibility features with icons 8 assistive technologies tested list Testing & audits methodology section Known limitations with status badges 5-step remediation plan with timelines (3β30β90 day SLAs) Formal complaint process with escalation path Alternative access (phone orders, email, large print, personal shopping) Contact card with Accessibility Team, Client Care, Legal, response times Related policies footer links Legal entity: October Skies Benediction LLC (d/b/a Katura 1999) terms/page.tsx: 8 references updated (entity name, arbitration venue, governing law, mailing address) privacy/page.tsx: 3 references updated (entity intro, arbitration venue, mailing address) accessibility/page.tsx: New content uses correct SC entity throughout 18 translation files (messages/*.json): governing.description updated 3 script files: translation scripts + untranslated-keys updated All Fulton County, Georgia β Charleston County, South Carolina All State of Georgia β State of South Carolina Atlanta, GA addresses β South Carolina, United States Full-screen hero with Stella-Orange.png (new 2.6MB hero image) Cinematic multi-layer gradient overlays matching footer navy (#0B1527) Text anchored to bottom with drop shadows for readability Scroll indicator with pulse animation Diamond decorative dividers between sections All bg-black β bg-[#0B1527] for brand consistency Section pre-headers (Collections, Ownership, By Invitation) Graff Diamonds-level luxury spacing (py-24/py-32) Hover transitions on tier cards and icon circles CTA button with gradient and box shadow glow Kept citrine necklace as secondary feature image (21:9 cinematic) OG image updated to new hero
Added PageTransition + StaggerItem animations to 35 admin pages
Pages animate in with staggered fade+slide on load
Created Google IndexNow integration (src/lib/seo/google-indexing.ts)
Added IndexNow key verification route ([key].txt)
Product create/update/delete now notify search engines automatically
Fixed corrupted promotions/page.tsx and saas/page.tsx JSX nesting
Skipped redirect pages (appointments, marketing, media, stella, taxonomy)
Dashboard and projects already had animations via their client components Feature 6:55 PM Β· ZRosserMcIntosh
add animation system across admin pages PageTransition: framer-motion fade+slide with staggered children StaggerItem: child component for cascading entrance animations AnimatedCounter: count-up animation for KPI numbers AnimatedCurrency: formatted currency count-up AnimatedProgress: spring-animated progress bars AnimatedTableRow: staggered row entrance for tables HoverCard: lift + shadow on hover/tap EmptyState: bounce-in icon + cascading text SkeletonShimmer/TableSkeleton/StatCardSkeleton: loading states Dashboard: StaggerItem sections + AnimatedProgress on sales goals Orders: PageTransition + StaggerItem + AnimatedTableRow Customers: PageTransition + StaggerItem on stats/filters/table Products: PageTransition + StaggerItem on header/table Leads: PageTransition + StaggerItem on pipeline/kanban/list Inventory: PageTransition + StaggerItem on stats/content Collections: PageTransition + StaggerItem on header/stats Blog: PageTransition + StaggerItem on header/stats Settings: PageTransition + StaggerItem on header/tabs Diamonds: PageTransition + StaggerItem Wholesale: PageTransition + StaggerItem per section Draft Orders: PageTransition + StaggerItem on header/stats Feature 6:21 PM Β· ZRosserMcIntosh
beautify admin projects pages with animations + dark mode fixes + spellcheck Redesigned projects listing with gradient hero header, animated stat cards, card/table view toggle Converted project creation into 4-step animated wizard with progress bar Fixed dark mode on project detail page (status, note type, production type, variant colors) Added spellCheck to all text inputs on project creation form All product pages already covered via Input/Textarea component-level spellCheck
Also restores the full products page UI from diagnostic mode. 10:16 PM Β· ZRosserMcIntosh
products page diagnostic API endpoint Update 8:04 PM Β· ZRosserMcIntosh
wrap products page in try/catch to capture real error + prevent RSC crash The Server Components render keeps crashing but we can't see the actual error message in production. This wraps the entire page in try/catch so: 1. The real error gets logged to Vercel runtime logs (console.error) 2. A fallback UI renders instead of crashing the RSC stream 3. Step-by-step logging shows exactly where it fails Update 4:37 PM Β· ZRosserMcIntosh
resolve Prisma connection pool exhaustion crashing /admin/products Root cause found in Vercel logs: 'Timed out fetching a new connection from the connection pool' (connection_limit: 5, pool_timeout: 10) The production DATABASE_URL had no connection_limit or pool_timeout params, so Prisma defaulted to just 5 connections with a 10s timeout. Admin pages run auth + user settings + page data queries concurrently, easily exceeding 5 connections and causing pool exhaustion β SSR stream crash. Update 3:51 PM Β· ZRosserMcIntosh
parallelize products page queries + extend timeout to 30s Parallelize getProducts, getStorefrontProductCount, getTrunkShowProductCount using Promise.all() β cuts ~60% off total data fetch time Add maxDuration = 30 to give the serverless function enough headroom Remove all temporary debug artifacts (diag endpoint, error-log endpoint, test-render page, error boundary fetch) 3:32 PM Β· ZRosserMcIntosh
enhanced diag endpoint for bad product data + revert products page to clean state 2:43 PM Β· ZRosserMcIntosh
add error reporting from error boundary to API endpoint 2:36 PM Β· ZRosserMcIntosh
add test-render page to isolate products page SSR error 2:19 PM Β· ZRosserMcIntosh
add try/catch to products page to capture SSR render error 5:52 AM Β· ZRosserMcIntosh
make diag endpoint work without auth for remote testing 5:17 AM Β· ZRosserMcIntosh
add diagnostic endpoint to capture products page SSR error Update 3:58 AM Β· ZRosserMcIntosh
add Suspense boundaries for useSearchParams + clean up debug artifacts src/app/admin/products/page.tsx: wrap ProductFilters in Suspense src/app/admin/developer/page.tsx: wrap DeveloperDashboard in Suspense src/app/admin/customers/page.tsx: wrap CustomerSortFilter in Suspense src/app/layout.tsx: wrap PageViewTracker in Suspense src/app/[locale]/creations/page.tsx: wrap filter/sort components in Suspense src/components/shop/category-page.tsx: wrap FilterBar + SortDropdown in Suspense src/app/platform/admin/{orders,customers,products}/page.tsx: wrap AdminSearch + AdminPagination in Suspense Remove debug diagnostic endpoints (debug-products, debug-render routes) Remove scripts/test-products-query.ts diagnostic script Revert verbose error messages from admin/global error boundaries Remove debug console.log from admin layout and products page 2:47 AM Β· ZRosserMcIntosh
make error boundaries distinguishable + show full error message and digest 2:44 AM Β· ZRosserMcIntosh
add detailed logging to products page + admin layout for production error tracing 2:37 AM Β· ZRosserMcIntosh
add diagnostic endpoint for products page error 12:43 AM Β· ZRosserMcIntosh
fix 4 broken API routes causing build failure api/admin/compliance/route.ts api/admin/monitoring/route.ts api/admin/shipstation/route.ts api/admin/webhooks/route.ts
Browser uploads directly to Supabase Storage Feature 6:36 PM Β· ZRosserMcIntosh
back-port K99 exclusives to Katura admin β draft orders, abandoned carts, gift cards, shipping, taxes /api/admin/draft-orders (GET, POST) /api/admin/draft-orders/[id]/convert (POST) /api/admin/abandoned-carts (GET) /api/admin/gift-cards (GET, POST) /api/admin/gift-cards/[id] (GET, PATCH) /api/admin/shipping/zones (GET, POST) /api/admin/shipping/zones/[id] (GET, PATCH, DELETE) /api/admin/shipping/rates (POST) /api/admin/shipping/rates/[id] (PATCH, DELETE) /api/admin/tax/settings (GET, POST) /api/admin/tax/settings/[id] (PATCH, DELETE) /admin/draft-orders (list + new) /admin/abandoned-carts /admin/gift-cards /admin/settings/shipping (full zone/rate CRUD) /admin/settings/taxes (full tax rule CRUD) Chore 5:31 PM Β· ZRosserMcIntosh
remove stray empty file from codemod Security 5:30 PM Β· ZRosserMcIntosh
K99 tenant isolation β requireKaturaAdmin() on all 329 admin API routes + middleware block Added requireKaturaAdmin() helper to src/lib/auth.ts Checks session + role + tenantId === TENANT_ZERO_ID Added middleware defense-in-depth: /api/admin/* blocked from K99 subdomain Applied requireKaturaAdmin() to 324 admin API routes via codemod Manually secured 3 SaaS admin routes with TENANT_ZERO_ID check 2 webhook routes (Brevo, Wise) intentionally unauthenticated Created security audit doc: docs/security/K99-SECURITY-AUDIT-2026-04.md Added codemod scripts: scripts/codemod-admin-auth.cjs, scripts/fix-admin-imports.cjs