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 16d
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,860,364
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 32 of 40 · 1,551–1,600 of 2,000 fetched
Wednesday, January 21, 2026 27 updates pushed
Update email 7:15 AM · ZRosserMcIntosh
Remove emojis and improve logo display with inline styles for better email client compatibility Feature email 7:11 AM · ZRosserMcIntosh
Add branded magic link template for employee invitations Feature email 7:07 AM · ZRosserMcIntosh
Match website fonts - add Playfair Display for headings and brand Update email 7:04 AM · ZRosserMcIntosh
Update logo URLs to use simpler filename without spaces Chore i18n 7:00 AM · ZRosserMcIntosh
translate tasks TaskCard and fix imports 6:35 AM · ZRosserMcIntosh
Fix orders API syntax error - remove duplicate code sections 6:23 AM · ZRosserMcIntosh
Add manual migration instructions for source column 6:23 AM · ZRosserMcIntosh
Make orders API resilient to missing source/customOrderDate columns - use select instead of include 6:18 AM · ZRosserMcIntosh
Add migration for order.source and run migrations during vercel build 5:47 AM · ZRosserMcIntosh
Force Vercel rebuild to regenerate Prisma Client 5:46 AM · ZRosserMcIntosh
Add extensive logging to orders API to diagnose 500 error 5:39 AM · ZRosserMcIntosh
Fix TypeScript file input ref typing in order dialogs 5:36 AM · ZRosserMcIntosh
Add error handling for order transformation and fix paymentStatus type conversion 5:19 AM · ZRosserMcIntosh
Add debugging and error handling for order source updates 5:09 AM · ZRosserMcIntosh
Fix Prisma type issues in orders API - add type assertions for customOrderDate and source fields 4:58 AM · ZRosserMcIntosh
Fix orders API 500 error - add source field to response with fallback 4:54 AM · ZRosserMcIntosh
Add debug logging to orders page to diagnose empty orders issue 4:52 AM · ZRosserMcIntosh
Fix admin orders page to use AdminI18nProvider instead of next-intl Replaced useTranslations() from next-intl with useAdminTranslations() Updated translation calls to use admin translation structure (t.orders.title) Fixed runtime error: 'Failed to call useTranslations because context not found' Admin pages use custom AdminI18nProvider, not NextIntlClientProvider Kept English as fallback for labels not yet in admin translations Portuguese translations already exist in AdminI18nProvider for orders 4:45 AM · ZRosserMcIntosh
Add safer fallback for order source field If source is missing, infer from isShopifyImport Prevents errors on orders created before source field existed Production rebuild will regenerate Prisma types with source field 4:44 AM · ZRosserMcIntosh
Improve analytics error logging for debugging 500 error 4:36 AM · ZRosserMcIntosh
Add order source management and fix sorting by custom order date Orders now sort by customOrderDate (if set), then createdAt Added Order Source field with options: Katura Website (default) In Person Private Commission Shopify Other Changed 'Site' label to 'Katura Website' throughout Added Order Source card in order detail page with inline editing Updated orders API to include and update source field Updated Portuguese translations with new source options API already had correct sorting logic (customOrderDate nulls last, then createdAt) 4:24 AM · ZRosserMcIntosh
Add Portuguese translations for admin Orders page Added comprehensive admin translation section to messages/pt.json Includes translations for: Common admin UI elements (buttons, actions, loading states) Status labels (pending, paid, in_production, shipped, etc.) Dashboard stats and labels Orders page (titles, table headers, filters, actions) Updated /src/app/admin/orders/page.tsx to use translations: Added useTranslations() hook Replaced all hardcoded English text Updated status humanization to use translation keys Table headers, filters, and action buttons now in Portuguese Created reference document at docs/admin-translations-pt.json Update orders 4:08 AM · ZRosserMcIntosh
humanize status in list, include customOrderDate in API response Update customers 3:54 AM · ZRosserMcIntosh
use error.issues instead of error.errors for Zod validation Update order 3:48 AM · ZRosserMcIntosh
expose delete, humanize status, persist customOrderDate, show attachments & address lines Feature customers 1:55 AM · ZRosserMcIntosh
add founding client status and manual customer creation Add isFoundingClient, foundingClientVerifiedAt, foundingClientVerifiedBy fields to User model Create database migration for new fields with indexes Implement discount calculation in lib/military-discount.ts Apply founding client discount at checkout (stackable with military/gift balance) Store discount in Stripe payment intent metadata POST /api/admin/customers - Create customer without password Customers can register later and account is linked automatically Support for military and founding client flags during creation PATCH /api/admin/customers/:id now supports isFoundingClient toggle Tracks who verified and when Existing customers without passwords can register Password added to existing account Preserves all history, orders, and special statuses Feature analytics 1:13 AM · ZRosserMcIntosh
comprehensive audit, fixes, and new route scaffolding Fix: Remove double-fetch in products-tab.tsx Feat: Add SETTLED_ORDER_STATUSES constant and getAnalyticsOrderFilter() utility Feat: Scaffold 6 new analytics routes (funnel, attribution, search, retention, fulfillment, inventory) Docs: Add comprehensive audit and roadmap with findings, recommendations, and implementation plan Tuesday, January 20, 2026 14 updates pushed
Feature orders 11:45 PM · ZRosserMcIntosh
Add customOrderDate, photoAttachments fields and regenerate Prisma client Added customOrderDate and photoAttachments to Order model query Regenerated Prisma client to include new fields Created migration runner script for order customizations Ran migrations successfully Feature admin 11:24 PM · ZRosserMcIntosh
Add order deletion for owners and improve order list UX Only OWNER role can delete orders Only CANCELLED orders can be deleted Confirmation dialog before deletion Audit log entry created on deletion Cascades to delete related records (items, payments, etc.) Entire table row is now clickable Clicking row opens order detail page Better UX - no need to find the dropdown Hover effect shows row is interactive Shows customOrderDate if set, otherwise createdAt Label '(custom)' appears next to custom dates Orders sorted chronologically by display date Dropdown click events stop propagation (don't trigger row click) Monday, January 19, 2026 6 updates pushed
Feature 9:46 PM · ZRosserMcIntosh
add cancel order functionality to admin orders page Update 9:22 PM · ZRosserMcIntosh
convert Decimal to number and move components to client side Update 9:19 PM · ZRosserMcIntosh
move mapOrderStatusToStage to server-side in orders page Sunday, January 18, 2026 3 updates pushed
Chore 8:46 PM · ZRosserMcIntosh
checkout/payment/db fixes and orders card (2026-01-18) Docs 5:42 AM · ZRosserMcIntosh
add TypeScript fixes completion summary Document resolution of 3 TypeScript errors (collection import, refund-policy, returns) Explain root causes and solutions Provide patterns for future policy pages Confirm all compilation errors resolved ✅ Update 5:41 AM · ZRosserMcIntosh
resolve TypeScript error in returns page metadata Changed from dynamic getPageSEO() call (which expected 'returns' key in SEO_TEMPLATES)
All quick actions (Mark Processing, Shipped, Delivered) available
Delete option only shows for OWNER on CANCELLED orders
Red text for destructive delete action
Added DELETE /api/admin/orders/[id] endpoint
Validates OWNER role
Validates order status is CANCELLED
Creates audit log entry
Owner-only deletion via role check
Can only delete cancelled orders (safety measure)
Confirmation required in UI
Clean up cancelled test orders
Remove duplicate/erroneous orders
Maintain clean order history Feature admin 11:10 PM · ZRosserMcIntosh
Enhanced manual order creation with custom items, payment methods, and international support Add off-books/custom products without catalog entry Set custom name, price, SKU, and quantity Toggle between catalog products and custom items Custom items marked with badge in order All item prices can be edited after adding to order Useful for custom quotes, discounts, negotiations Real-time total calculation Card, Check, Wire Transfer, Zelle, Venmo, Wise, CashApp, Other Stored with payment record for tracking Useful for offline/phone orders Added 20 countries to address selectors Both shipping and billing addresses Includes: US, CA, GB, AU, FR, DE, IT, ES, JP, CN, BR, MX, IN, RU, KR, NL, SE, CH, BE, PT Added paymentMethod field to Payment model Default: 'CARD' Indexed for performance Updated POST /api/admin/orders to accept paymentMethod Support for null productId (custom items) CreateOrderDialog: Added custom item form, payment method, country selector Better UX with collapsible custom item form Price editing enabled on all items Bespoke jewelry orders not in catalog Special pricing for VIP customers International shipping Multiple payment method tracking Update video 10:47 PM · ZRosserMcIntosh
Add null check in video preload timeout to prevent TypeScript error Added conditional check for videoUrl before calling setVideoSrc in setTimeout Fixes TypeScript error: 'undefined' is not assignable to 'SetStateAction<string | null>' Applied to both ProductCardWithVideo and ProductTile components Feature admin 10:38 PM · ZRosserMcIntosh
Add manual order enhancements - custom dates, photo attachments, improved search Custom order date field for manually created/edited orders Photo attachment upload (multiple images per order) Enhanced customer search with console logging for debugging Visual photo grid with hover-to-delete functionality CreateOrderDialog: Added date picker and photo upload EditOrderDialog: Added date/photo editing capabilities Better UX with upload progress and validation New POST /api/upload for file uploads to Supabase Storage Updated orders API to handle customOrderDate and photoAttachments Enhanced customer search logging Added customOrderDate DateTime? field Added photoAttachments Json? field (array of URLs) order-attachments storage bucket created in Supabase Feature video 8:04 PM · ZRosserMcIntosh
Implement progressive video loading for instant hover playback Images load first (high priority) Videos preload in background after image loads (500ms delay) Changed from preload='none' to preload='auto' after image ready Videos now play instantly on hover (already buffered) Added comprehensive console logging for debugging Prevents wasted bandwidth (only loads videos after images) ProductCardWithVideo: Added imageLoaded state and progressive loading ProductTile (hero collage): Same progressive loading pattern Feature admin 7:52 PM · ZRosserMcIntosh
Convert language selector from dropdown to toggle buttons Changed from dropdown menu to side-by-side buttons Shows '🇺🇸 English' and '🇧🇷 Português' as clickable buttons Active button uses default variant (filled), inactive uses ghost variant Added pointer-events-none to active button for better UX Docs 7:47 PM · ZRosserMcIntosh
Add video hover implementation documentation Docs 7:42 PM · ZRosserMcIntosh
Add admin i18n section to performance optimizations doc Feature admin 7:41 PM · ZRosserMcIntosh
Add English/Portuguese language selector to admin panel Added AdminLanguageSelector component with 🇺🇸 EN / 🇧🇷 PT options Created AdminI18nProvider with complete EN/PT translations for: Dashboard (stats, quick actions, appointments, promotions, etc.) Navigation items Common UI elements (buttons, labels, statuses) Orders, Products, Customers, Settings sections Translated admin dashboard page using DashboardClient component Updated admin layout with i18n provider and locale detection Added /api/user/preferences endpoint for saving language preference Created SQL migration for adminLocale column (graceful fallback) Language persists via cookie and user database preference Auto-detects browser language preference (pt-BR -> Portuguese) Cleaned up unused product-collage-hero-new.tsx file Perf 6:55 PM · ZRosserMcIntosh
cache hero collage + defer video loads; add cached home data; optimize collage API 6:24 PM · ZRosserMcIntosh
Fix tax display on checkout page - show estimated 8% tax matching cart page Feature 6:09 PM · ZRosserMcIntosh
add Mark as Paid button for PENDING orders and expand status dropdown Update 6:04 PM · ZRosserMcIntosh
serialize dates properly for OrderProgressTracker client component Docs 9:13 PM · ZRosserMcIntosh
add checkout fixes and SQL migration for defaultRingSize Update 8:56 PM · ZRosserMcIntosh
pass billing address to Stripe when address collection disabled Update 8:46 PM · ZRosserMcIntosh
prevent nested forms in checkout (payment form hydration error)
To static Metadata export matching other policy pages
Resolves type error: 'returns' not a valid SEO_TEMPLATES key
All TypeScript compilation errors now resolved ✅