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,424
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 33 of 40 Β· 1,601β1,650 of 2,000 fetched
Sunday, January 18, 2026 1 update pushed
Update 5:39 AM Β· ZRosserMcIntosh
resolve TypeScript error in refund-policy page metadata Changed from dynamic getPageSEO() call (which expected 'refund-policy' key in SEO_TEMPLATES) To static Metadata export matching other policy pages (privacy, terms) Resolves type error: 'refund-policy' not a valid SEO_TEMPLATES key All TypeScript errors now resolved, code ready for deployment Saturday, January 17, 2026 6 updates pushed
Chore audit 9:43 PM Β· ZRosserMcIntosh
wire endpoints, add filters, SEO/meta fixes, share/newsletter, misc Feature 8:59 PM Β· ZRosserMcIntosh
add mosaic image editor to admin collections page Add 'Edit Mosaic Images' option in collection dropdown menu Create mosaic editor sheet with: 4-tile mosaic preview grid Product image selector from existing products Manual image URL input for discontinued products Remove/reorder images functionality Add API endpoint for saving mosaic images (/api/admin/collections/[id]/mosaic) Handle database migration gracefully with helpful error messages Preserve existing collection functionality Docs
Friday, January 16, 2026 1 update pushed
Feature 11:32 PM Β· ZRosserMcIntosh
Add automated Google Merchant Center product data fixes Added fix-google-merchant.ts script to intelligently fill missing required fields Automatically set googleGender, googleAgeGroup, googleCondition for all 61 products Extract jewelryColor from materials, product names, and gemstones Updated 61 active products with smart field inference Added manual SQL migration for 5 products requiring special color handling Documented complete plan and quick start guides for GMC compliance Product page unavailable (12 products) Missing product price (2 products) Missing age group (10 products) Missing color/gender (all products) Thursday, January 15, 2026 4 updates pushed
Style 8:47 PM Β· ZRosserMcIntosh
Remove trust signals bar from homepage COMPLIMENTARY SHIPPING SECURE CHECKOUT AUTHENTICITY GUARANTEED Truck, ShieldCheck icons tTrust translation getter Docs 6:18 PM Β· ZRosserMcIntosh
Add non-technical summary of security and checkout fixes Database Row Level Security (RLS) implementation Why 80+ security warnings are now resolved Gift card order finalization fix Guest checkout success page fix Inventory checking and payment failure fixes Impact on customers and staff Overview and summary tables What changed for customers (minimal) What changed behind the scenes FAQ section Insurance/compliance notes Monday, January 12, 2026 1 update pushed
Feature 7:08 PM Β· ZRosserMcIntosh
add employee management and notification API routes Saturday, January 10, 2026 2 updates pushed
Update 9:10 PM Β· ZRosserMcIntosh
add redirect from /shop/[id] to /creations/[id] for backward compatibility Docs ios 8:54 PM Β· ZRosserMcIntosh
add App Clips and Handoff guides; add ios README index Tuesday, January 6, 2026 3 updates pushed
Update 7:22 PM Β· ZRosserMcIntosh
use product slug instead of ID in compare view links Added slug field to CompareProduct interface Updated CompareButton to accept and pass slug Updated compare-view to use slug for product links (fallback to ID if slug missing) Added aria-label to remove button for accessibility Fixed 404 errors when clicking products in compare view Feature 3:42 PM Β· ZRosserMcIntosh
add priceOnRequest support to category and collection pages Added priceOnRequest field to category page product mapping Updated CategoryProducts component to pass priceOnRequest to ProductCardWithVideo Added priceOnRequest support to collections page Products with priceOnRequest now show 'Price on Request' instead of price on all listing pages Monday, January 5, 2026 9 updates pushed
Refactor 10:52 PM Β· ZRosserMcIntosh
Convert product details tabs to collapsible accordions Replaced Tabs UI with Accordion component for minimized copy Reordered sections: Details β Shipping & Returns β Care β Description Sections now collapse/expand on click instead of always being visible Maintains all existing product information and styling Docs 10:07 PM Β· ZRosserMcIntosh
Add repository status report clarifying all issues are resolved Docs 9:57 PM Β· ZRosserMcIntosh
Clean up Launch Audit Report formatting
Sunday, January 4, 2026 11 updates pushed
10:31 PM Β· ZRosserMcIntosh
Enable military/veteran discount feature: admin UI, API, and checkout integration 10:02 PM Β· ZRosserMcIntosh
Enable military/veteran discount feature - fully functional Regenerated Prisma client after database migration Added military status toggle to customer edit dialog Added military badge and status card to customer detail page Updated API to save military verification (timestamp + admin email) Military status now fully manageable from /admin/customers Shows military badge on customer profile Displays verification timestamp and admin who verified Records audit trail in database Ready for checkout integration (next step) 9:55 PM Β· ZRosserMcIntosh
Add military/veteran discount feature documentation and ready-to-enable code Saturday, January 3, 2026 9 updates pushed
9:39 PM Β· ZRosserMcIntosh
π Add collage API debug logging to diagnose empty products 9:07 PM Β· ZRosserMcIntosh
π Add ProductTile mount debug logging 8:54 PM Β· ZRosserMcIntosh
π Add debug logging for video playback issues 8:29 PM Β· ZRosserMcIntosh
π§ Add video playback diagnostic test page
Friday, January 2, 2026 3 updates pushed
Style 6:07 PM Β· ZRosserMcIntosh
Tighten up blog hero section - remove description and CTA button Remove lengthy description paragraph from hero Remove 'Ask Us Anything!' button and contact link Reduce padding (py-16 -> py-12) Keep #JEWELRYSPOKENHERE hashtag and title only Simplifies visual hierarchy and improves page load focus Docs 5:49 PM Β· ZRosserMcIntosh
Mark blog image migration as complete Docs 5:47 PM Β· ZRosserMcIntosh
Add SQL execution instructions for blog image migration
7:53 PM Β· ZRosserMcIntosh
add collections fix summary and usage guide Update 7:52 PM Β· ZRosserMcIntosh
remove duplicate collections and improve admin UI visibility Remove duplicate collections (Necklaces, Engagement Rings, Wedding Bands, Unique Pearls) Keep only 7 core collections: Rings, Earrings, Necklaces, Bracelets, Loose Diamonds, Bridal, Fine Watches Fix duplicate Necklaces collection with capital-case slug Move 'Manage Products' button to always-visible full-width button Add summary stats at top (total collections, total products, collections with products) Improve product count badge visibility Add cleanup helper scripts for future use Feature 7:29 PM Β· ZRosserMcIntosh
complete collections functionality implementation Add 4-tile collage display for collection previews with random image selection Implement manual product-to-collection assignment UI with searchable product list Fix cursor bug in collection edit form by refactoring form state Add new API endpoints for product-collection management Create intelligent auto-assign script for batch product categorization Add comprehensive documentation and implementation guide Collections page now displays 4-tile grid instead of single image Admin collections page with product management sheet Smart auto-assignment script with 7 default collections (rings, earrings, necklaces, bracelets, loose diamonds, bridal, watches) Checkbox-based product selection with visual feedback Responsive design for mobile/tablet/desktop Atomic database transactions for data consistency Docs 4:37 AM Β· ZRosserMcIntosh
Add GMC navigation guide and verification report Update 6:16 PM Β· ZRosserMcIntosh
Critical checkout flow issues (inventory, emails, guest access) Previously: Orders paid 100% with gift balance bypassed webhook, leaving inventory reserved and no emails sent Now: create-payment-intent directly finalizes inventory, sends customer confirmation, ops notification, and syncs to Brevo CRM Previously: /checkout/success?session_id=... would 401 for guests Now: Success page fetches access token first, then uses it in GET request Previously: Used non-existent 'available' field, causing NaN math Now: Correctly uses 'quantity - reserved' as per schema Previously: Catch blocks cancelled orders but never released stock Now: Both checkout routes release reserved inventory on failure src/app/api/create-payment-intent/route.ts src/app/api/checkout/route.ts src/app/[locale]/checkout/success/page.tsx Feature 5:46 PM Β· ZRosserMcIntosh
Enable Row Level Security (RLS) on all database tables Add enable_rls_all_tables_safe.sql: Safe migration that enables RLS on all 82 tables Creates appropriate policies for public reads (Products, Collections, Articles) Creates policies for authenticated user access (Orders, Cart, Wishlist, Addresses) Leaves sensitive tables (CRM, Analytics, Admin) with default DENY-ALL Uses conditional checks to skip non-existent tables Service role key in API routes continues to work normally (bypasses RLS) Resolves 80+ security warnings in Supabase dashboard Feature 4:24 AM Β· ZRosserMcIntosh
rename /shop routes to /creations and add priceOnRequest wishlist support Renamed src/app/[locale]/shop/ folder to src/app/[locale]/creations/ Updated all navigation config, headers, footers, and breadcrumbs Updated sitemap.ts and SEO structured data for new routes Updated product cards, variant selector, and category pages Updated search components and vector search bar Updated email templates and gift card references Updated API routes and merchant feeds Updated home page components and CTAs Updated compare, cart, checkout, and account pages Updated wholesale portal and bespoke inquiry Updated Brevo marketing automation events Added priceOnRequest support to wishlist page Shows 'Inquire' button instead of 'Add to Cart' for price-on-request items ae75a70
Docs 9:56 PM Β· ZRosserMcIntosh
Remove emojis and make documentation more professional Replaced emojis with text equivalents (DONE β Complete, WARNING β Warning, etc.) Changed status indicators to be more professional Removed overly enthusiastic AI-generated phrases Made language more neutral and human-written Affects 150+ markdown files across project documentation Feature 9:44 PM Β· ZRosserMcIntosh
Make collections page database-driven & add .env.production template Replaced hardcoded mock data in /collections/[id]/page.tsx with Prisma queries Added generateStaticParams() for build-time static generation Added generateMetadata() for dynamic SEO Added proper filter extraction from product data Created .env.production template with all required vars (secrets redacted) Updated .gitignore to allow .env.production for documentation Update 9:23 PM Β· ZRosserMcIntosh
Unify all URL fallbacks to katura1999.com Fixed brevo.ts email template URLs Fixed events.ts APP_URL fallback Fixed wholesale/apply admin link Fixed orders/ship account link Fixed Supabase confirm-signup.html footer URLs Updated README documentation Updated LAUNCH_AUDIT_REPORT to reflect all fixes 8:56 PM Β· ZRosserMcIntosh
Update audit report: mark password reset flow as fixed 8:41 PM Β· ZRosserMcIntosh
Launch audit: unify domain to katura1999.com, fix Vercel cron, merge cleanup into daily cron; add Mandarin locale (zh) and translations; update SEO currency mapping Feature 8:06 PM Β· ZRosserMcIntosh
Add comprehensive manual order creation and editing system Create manual orders for offline/phone sales with full customer and product selection Edit existing orders with pricing adjustments, address changes, and notes Auto-generate order numbers (ORD-YYYYMMDD-XXXX format) Support both registered customers and guest orders Real-time total calculation and validation Complete audit trail logging with timestamps Customer search endpoint with autocomplete Product search with variant support CreateOrderDialog: Full-featured order creation form EditOrderDialog: Streamlined order editing interface POST /api/admin/orders - Create manual orders (MANAGER/OWNER only) PATCH /api/admin/orders/[id] - Enhanced with comprehensive editing GET /api/admin/customers/search - Customer autocomplete src/components/admin/create-order-dialog.tsx (750 lines) src/components/admin/edit-order-dialog.tsx (350 lines) src/app/api/admin/customers/search/route.ts (new) docs/completed/MANUAL_ORDER_MANAGEMENT.md (complete guide)
Created MILITARY_DISCOUNT_SETUP.md with step-by-step SQL migration instructions
Created MILITARY_DISCOUNT_CODE.txt with all code ready to uncomment after migration
Documents how to: 1. Run SQL migration in Supabase dashboard (Prisma CLI has connectivity issues) 2. Regenerate Prisma client 3. Enable military discount code in payment processing 4. Add military status toggle to customer edit dialog 5. Display military status in admin customer detail page
Feature provides permanent 10% discount for military/veterans
Includes verification audit trail (who verified, when)
All utility functions already created in /src/lib/military-discount.ts
Schema already updated in prisma/schema.prisma
Just needs database columns added via SQL to activate 9:01 PM Β· ZRosserMcIntosh
Add admin customer detail and editing functionality Created /admin/customers/[id] detail page with comprehensive customer view Added CustomerEditDialog component for editing customer information Created API endpoint /api/admin/customers/[id] for PATCH updates Made customer table rows clickable to navigate to detail page Detail page includes: Contact information with email, phone, location Financial summary with total spent, orders, average order value Gift card balance display Marketing preferences (email/SMS) Customer tags and internal notes Birthday and anniversary dates Wholesale account information (if applicable) Recent orders table with links to order details Engagement ring inquiries Wishlist items with product images Shopify import data and external link Edit dialog allows updating: Name, phone, location Tags and internal notes Tax exempt status Marketing preferences Special dates (birthday, anniversary) Proper authorization (OWNER/MANAGER only for edits) Full responsive design 7:58 PM Β· ZRosserMcIntosh
Fix military discount implementation: temporary revert to resolve Prisma sync issues Removed military field references from customers/route.ts and create-payment-intent/route.ts Project builds successfully without military discount feature Military discount utility functions and schema changes remain in place Prisma client generation blocked on database connectivity - pending sync Next: Execute database migration and re-enable military discount logic once Prisma syncs Update 6:45 PM Β· ZRosserMcIntosh
issue welcome gift on registration with welcome50 promo code Add promoCode field to registration schema Create GiftCardIssuance when welcome50 code is used with newsletter signup Add backfill script for test account that was created before fix Gift is , expires in 30 days, type PROMOTIONAL Requires newsletter subscription to receive gift Update 6:45 PM Β· ZRosserMcIntosh
issue welcome gift on registration with welcome50 promo code Add promoCode field to registration schema Create GiftCardIssuance when welcome50 code is used with newsletter signup Add backfill script for test account that was created before fix Gift is , expires in 30 days, type PROMOTIONAL Requires newsletter subscription to receive gift Update 4:03 PM Β· ZRosserMcIntosh
resolve CSP video blocking and add cleanup for hover timeouts Add media-src directive to CSP in next.config.ts to allow Supabase, Shopify, and katura1999.com video sources Add useEffect cleanup to product-card-with-video.tsx to clear hover timeouts and pause video on unmount Add useEffect cleanup to product-image-gallery.tsx to prevent stuck videos Add useEffect cleanup to ProductTile in product-collage-hero.tsx for proper resource cleanup Gate /test-video page behind NODE_ENV === 'development' check to prevent exposing raw API responses in production 3:19 PM Β· ZRosserMcIntosh
β¬οΈ Downgrade Prisma CLI to match client version Downgrade prisma from ^7.2.0 to ^6.19.1 to match @prisma/client Restore 'url' property in schema.prisma (required for Prisma 6) Revert prisma.ts to original working configuration Build now succeeds without TypeScript errors Video playback functionality preserved and working 2:50 PM Β· ZRosserMcIntosh
π§ Fix Prisma 7 schema compatibility Remove deprecated 'url' property from datasource Prisma 7 requires connection URL in prisma.config.ts instead Update pnpm lockfile to match Prisma ^7.2.0 Prisma client successfully generated 2:48 PM Β· ZRosserMcIntosh
πΉ Complete video playback implementation documentation Add comprehensive VIDEO_IMPLEMENTATION_STATUS.md with full technical details Add VIDEO_FUNCTIONALITY_TEST.md with step-by-step testing checklist Document all components using ProductCardWithVideo Document API endpoints returning videoUrl Add troubleshooting guide and debug commands Ready for QA testing b535773
7:54 PM Β· ZRosserMcIntosh
π Fix remaining ProductCard instances in HomepageRecommendations Replace ProductCard with ProductCardWithVideo in all three sections 'Because You Purchased' section now supports video hover 'Based on Your Browsing' section now supports video hover 'Popular Right Now' section now supports video hover Properly pass videoUrl and show all required fields 7:49 PM Β· ZRosserMcIntosh
π¬ Fix missing videoUrl in product recommendations and collections Videos weren't playing on home page hero, recommended section, or shop hover Product recommendations API wasn't returning videoUrl field Missing from Recommendation types and formatRecommendations function src/lib/recommendations.ts (all recommendation functions) src/hooks/use-search.ts (Recommendation interface) src/components/recommendations/product-recommendations.tsx (now uses ProductCardWithVideo) 6:51 PM Β· ZRosserMcIntosh
β
Fix Weebly blog image migration - actually upload files to Supabase Database had Supabase URLs but files didn't exist in storage bucket Images were returning HTTP 400 errors Weebly server was rejecting downloads with HTTP 406 (missing User-Agent) Created upload-weebly-images.ts script Added proper browser headers (User-Agent, Accept, Referer) Downloaded all 21 Weebly blog images from original site Uploaded to Supabase storage bucket 'blog' 7800775.png, 799145.jpg, 1392129064.png (and 18 more) All verified working with HTTP 200 responses 6:12 PM Β· ZRosserMcIntosh
π Documentation reorganization and consolidation Created completed/ folder with categorized subfolders (security, blog, integrations, database, features, deployment) Created active/ folder for in-progress work Created reference/ folder for guides and how-tos Created archived/ folder for superseded documentation COMPLETED.md - Comprehensive list of all finished work with details active/ACTIVE_PROJECTS.md - Current priorities and planned features README.md - New navigation hub with quick links and common tasks Moved 9 completed security/blog/integration docs to completed/ Moved 8 reference guides to reference/ Moved 5 active projects to active/ Moved 11 archived/superseded docs to archived/ Created clear categorization and navigation 5:58 PM Β· ZRosserMcIntosh
Security audit fixes, Supabase SQL setup, blog sorting & image migration Fixed CRON endpoint authentication vulnerabilities (all 6 cron routes require CRON_SECRET) Added rate limiting to auth and form endpoints (rate-limit.ts with Redis/memory fallback) Added comprehensive security headers (CSP, HSTS, X-Frame-Options, etc.) Added inventory validation and atomic reservation in checkout Created environment variable validation system (env.ts with Zod) Linked Supabase project dpbrczhugdkvchigxxqs via CLI Created direct SQL execution via psql (sql-exec.sh) Added npm scripts for database operations (db:exec, db:sql, db:dashboard, etc.) Fixed blog chronological sorting (orderBy publishedAt DESC) Verified all blog images migrated to Supabase storage bucket 20 Weebly posts (2012-2014) with images 6 recent posts (2024-2025) with images Created comprehensive documentation for security, Supabase setup, and SQL access 9f03bae