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,810
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 23 of 40 Β· 1,101β1,150 of 2,000 fetched
Wednesday, February 18, 2026 1 update pushed
Feature 7:10 AM Β· ZRosserMcIntosh
security audit & fixes + QuickBooks integration plan Fix SQL injection in cap-table audit route (parameterized queries) Fix SQL injection in cap-table share class update (Prisma.sql COALESCE) Fix SQL interval injection in monitoring (make_interval) Add file type/size validation to upload endpoint Fix cron auth bypass - block unauthenticated in production Remove secret from query params in job-queue cron Add comprehensive SECURITY_AUDIT.md with all findings Add QUICKBOOKS_INTEGRATION_PLAN.md for accounting integration Tuesday, February 17, 2026 9 updates pushed
Feature 8:45 PM Β· ZRosserMcIntosh
discount fix in related products & cart/checkout + Wise API integration Related products ('You may also love') now shows sale prices with strikethrough Cart API applies promotion discounts via shared formatCartResponse utility Checkout applies promotion discounts to Stripe line items and order records Cart page shows 'On Sale' badge with strikethrough pricing 4 new Prisma models: WiseIntegration, WiseRecipient, WiseTransfer, WiseRateAlert Full library layer (11 files): client, rates, quotes, transfers, recipients, balances, batch payments, webhooks, tenant credential encryption 11 admin API routes under /api/admin/wise 6 admin Treasury pages: dashboard, transfers, rates, alerts, recipients, settings Admin nav: Treasury & FX group with 4 items (EN + PT translations) Exchange rate enhancement: Wise API -> Frankfurter -> fallback chain Rate limiting (12 calls/sec), retry with exponential backoff RSA-SHA256 webhook verification AES-256-GCM per-tenant token encryption Safe migration SQL with IF NOT EXISTS guards Update 6:04 PM Β· ZRosserMcIntosh
sync database schema with Prisma - add tenantId to 235 tables, create 10 missing tables Monday, February 16, 2026 23 updates pushed
7:28 PM Β· ZRosserMcIntosh
Add Shopify Master Audit status review 133/128 planned articles are implemented (104%) Full docs infrastructure built (sidebar, search, breadcrumbs, TOC, callouts, etc.) 10 docs-specific components, 3 locales (en/pt/es) All 19 sections from the audit have complete content Remaining work is content polish (screenshots, feedback widget) 6:54 PM Β· ZRosserMcIntosh
Add admin parity audit: /admin vs /platform/admin deep dive 20 pages with full parity 12 pages blocked by missing tenantId on models 14+ high-priority pages missing from platform admin Schema changes required to unblock restricted pages 4-phase action plan for achieving full parity 6:46 PM Β· ZRosserMcIntosh
Replace remaining emojis: SaaS sidebar, context-switcher, admin header Sunday, February 15, 2026 17 updates pushed
Update 11:50 PM Β· ZRosserMcIntosh
enable moddatetime extension and use extensions schema in engineering migration 11:46 PM Β· ZRosserMcIntosh
Phase 11: Redis caching, engineering services, admin context switcher Add Upstash Redis caching layer (src/lib/cache/redis.ts, tenant-cache.ts) Cache-through for tenant, plan, entitlement lookups (5-15 min TTL) API rate limiting via Redis counters Graceful fallback when Redis not configured Full invalidation API (per-tenant, per-plan, nuclear) Add Engineering Services (src/lib/saas/engineering.ts) 8 service types (custom feature, integration, hotfix, retainer, etc.) Hourly billing with time tracking per engineer Status flow: proposed β approved β in_progress β review β completed Enterprise custom feature catalog (10 pre-scoped features) Tenant extensions registry (foundation for custom code) Add Engineering API (src/app/api/admin/saas/engineering/route.ts) POST actions: create, list, get, update_status, add_entry, get_entries, catalog GET: Quick summary (active, proposed, completed, total billed) Auto-calculates total hours and billing on completion Add Engineering Dashboard (src/app/admin/saas/engineering/page.tsx) Engagements list with status cards and time entries New engagement dialog with tenant/type selection Time entry logging with git commit references
/creations showing 0 products
/admin/products/[id] returning 404
/creations/rings and all category pages empty
tenantId column (nullable) to 235 existing tables
10 new tables: StullerProduct, StullerCategory, StullerOrder, StullerOrderItem, StullerSyncLog, StullerPriceRule, AssetCategory, AssetAssignment, AssetDepreciation, Customer
New enum values: DiscountType, MarketingCampaignStatus, PaySchedule
AuditLog.tenantId + category NOT NULL
223 new indexes and foreign key constraints Update 3:27 PM Β· ZRosserMcIntosh
replace clerk auth with nextauth in 29 admin API routes, fix Nivoda schema mismatches - resolves build failure causing site-wide 404s Feature 2:27 PM Β· ZRosserMcIntosh
Nivoda API integration β schema, library, API routes, UI components, pages Schema: 3 models (NivodaIntegration, NivodaHold, NivodaOrder) + SaasTenant relations Migration: create_nivoda_tables.sql (3 tables, indexes, FKs, idempotent) Feature constants: NIVODA_INTEGRATION, DIAMOND_FEED, RING_BUILDER Library: types.ts, client.ts (GraphQL + auth + retry), markup.ts, queries.ts, tenant-credentials.ts, index.ts Admin API routes: 10 routes (settings, diamonds, gemstones, melee, holds, orders, stats) Platform API routes: 12 routes (full tenant-scoped parity + markup config) UI Components: 3 shared client components (DiamondSearchClient, HoldListClient, OrderListClient) Pages: 6 server components (admin + platform parity for diamonds, holds, orders) Feature 1:55 PM Β· ZRosserMcIntosh
Stuller API integration β schema, library, API routes, UI components, pages 7 new Prisma models (StullerIntegration, PurchaseOrder, PurchaseOrderItem, ReceivingLog, ReceivingLineItem, PurchaseOrderAttachment, MaterialInventory) 2 new enums (PurchaseOrderStatus, MaterialCategory) SQL migration: create_stuller_receiving_tables.sql Library layer: types, HTTP client with Basic Auth + retry, CRUD queries, barrel exports Tenant credential helper for platform-scoped Stuller API access Feature flags: STULLER_INTEGRATION + RECEIVING_MATERIALS in constants + plans Purchase Orders: CRUD + receive shipment + stats Materials: CRUD + adjust quantity + low-stock + valuation + stats Stuller catalog: products, product detail/configure, filters, gems, orders, invoices, shipments, settings Purchase Orders: CRUD + receive shipment + stats Materials: CRUD + adjust quantity + low-stock + valuation + stats Stuller catalog: products, configure, filters, gems, orders, invoices, shipments, settings POListClient: search, filters, sortable table, pagination, stats cards PODetailClient: full PO view, line items, receiving history, status actions MaterialListClient: search, category filters, low-stock alerts, valuation /admin/receiving, /admin/receiving/[id], /admin/materials /platform/admin/receiving, /platform/admin/receiving/[id], /platform/admin/materials Docs 12:46 PM Β· ZRosserMcIntosh
Wise API integration plan + add HKD & NZD currencies Exchange rate API (real-time mid-market rates) International supplier payments (HKD, NZD, BRL, etc.) Contractor/employee payroll in local currencies SaaS tenant payouts in preferred currency Multi-currency treasury management Rate alerts & auto-conversion Batch payments (up to 1,000 recipients) Schema: WiseIntegration, WiseTransfer, WiseRateAlert 16 API routes + platform parity HKD (Hong Kong Dollar) β HK$, οΏ½οΏ½π°, zh-HK locale NZD (New Zealand Dollar) β NZ$, π³πΏ, en-NZ locale Added to: SUPPORTED_CURRENCIES, ROUNDING_RULES, FALLBACK_RATES, CURRENCY_PAYMENT_METHODS, currency-selector regions, language-selector options Feature 12:36 PM Β· ZRosserMcIntosh
Asset Tracking β full implementation with admin + platform parity 5 new models: Asset, AssetAttachment, AssetActivity, AssetMaintenance, AssetCheckout 4 new enums: AssetCategory (17 values), AssetStatus (9), AssetCondition (7), AssetAttachmentType (7) Relations on SaasTenant, User, SaasStoreLocation src/lib/assets/ β types, queries (CRUD, assign, transfer, checkout/checkin, maintenance, activity log, stats, CSV export) Multi-tenant isolation via tenantId on every query 10 admin routes: /api/admin/assets/* 10 platform routes: /api/platform/assets/* (tenant-scoped via getPlatformAdminContext) asset-list-client: stats cards, search, filters, table with pagination asset-detail-client: full detail view with depreciation, activity log, photos, documents asset-form-client: create/edit form with all asset fields /admin/assets β list, detail, edit, new /platform/admin/assets β list, detail, edit, new (tenant-scoped parity) Docs 12:04 PM Β· ZRosserMcIntosh
Add integration plans β Asset Tracking, Stuller API, Nivoda API ASSET_TRACKING_PLAN.md: Equipment/asset management with employee assignment, multi-location tracking, photo/receipt uploads, depreciation, maintenance scheduling. Supabase bucket: asset-documents. 5 schema models (Asset, AssetAttachment, AssetActivity, AssetMaintenance, AssetCheckout). STULLER_INTEGRATION_PLAN.md: REST API integration for receiving/materials tracking. Product/Gem/Order/Invoice APIs. Purchase orders, receiving workflow, materials inventory with weight verification. 6 schema models (StullerIntegration, PurchaseOrder, PurchaseOrderItem, ReceivingLog, ReceivingLineItem, MaterialInventory). NIVODA_INTEGRATION_PLAN.md: GraphQL API integration for diamond/gemstone marketplace. 2M+ stones, search, holds, orders, feed sync. Markup engine, ring builder concept (Stuller mount + Nivoda stone). 3 schema models (NivodaIntegration, NivodaHold, NivodaOrder). 11:45 AM Β· ZRosserMcIntosh
Phase 0: Add tenantId to 163 models + 3 new service models Added tenantId (nullable) + SaasTenant relation + @@index to 163 models Covers all 14 domains: Commerce, Orders, Users, CRM, Wholesale, Marketing, Services, Analytics, Payroll/HR, Tasks, Content, Business Planning, Audit/Security, Integrations 5 junction tables inherit isolation from parent models 37 models correctly excluded (auth, reference data, SaaS platform) SaasDesignServiceRequest β CAD design, rendering, branding (Antar Hall) SaasMarketingServiceEngagement β retainers, campaigns (Stella Barbosa) SaasTenantLocaleConfig β per-tenant locale/translation settings scripts/add-tenant-isolation.ts β repeatable migration script migrations/backfill_tenant_isolation.sql β backfill to tenant zero saas-sidebar.tsx: All emoji nav icons replaced with Lucide icons (30+ items) context-switcher.tsx: πΆ/π£ badges replaced with styled CSS dots layout.tsx: π£ SaaS Platform links replaced with Landmark icon intelligence/page.tsx: π§ header/empty-state replaced with Brain icon imports-client.tsx: π₯ header removed webhooks-client.tsx: πͺ header removed 6:35 PM Β· ZRosserMcIntosh
Replace emojis with professional Lucide icons across /admin/saas page.tsx: MetricCard/QuickLink/StatusItem use Lucide icons (Building2, DollarSign, Globe, etc.) domains: StatCard icons, SSL status badges, verification messages messenger: StatCard icons (MessageSquare, CircleDot, Clock, CheckCircle2) services: Tab triggers, cards, empty states (Palette, Megaphone, ClipboardList) support: Priority badges use CSS dots instead of colored circle emojis intelligence: Tab triggers use Lucide icons (Sparkles, ClipboardList, CreditCard, BookOpen) migrations: Source indicators use colored dot spans instead of emoji circles imports: Removed emoji prefixes from import source labels locations: Removed emoji icons from location type selectors themes, website, api-keys, impersonation: Removed header/UI emojis Security 5:39 PM Β· ZRosserMcIntosh
fix tenant data isolation across 12 platform admin pages audit: now scoped by userId = tenant ownerUserId tasks: now scoped by creatorId/assigneeId = tenant ownerUserId wholesale, crm, engagement, custom-orders, promotions, payroll (2 pages), services: queries DISABLED (show empty state) until tenantId columns are added Update 4:18 PM Β· ZRosserMcIntosh
Ring size selection blocks add-to-bag when no DB variants exist Bug: On product pages for rings (e.g. 777-lucky-numbers-rose-gold-solitaire), selecting a ring size from the dropdown did nothing β the 'ADD TO BAG' button still showed 'Please select a size' error. Root cause: ProductActions fetches ProductVariant records from the DB to map the selected size string to a variant ID. If the product has no ring-size variant records in the DB, the variants array is empty, so selectedVariantId stays undefined. The AddToCartButton then blocks because requiresVariant=true && variantId=undefined. Fix: Only set requiresVariant=true when the product actually has ring-size variants in the database. Products without DB variants can be added to cart directly β the size selection is informational only. Affected: /components/product/product-actions.tsx (2 changes) 2:23 PM Β· ZRosserMcIntosh
Platform Admin Parity Batch 2: Search, Pagination, Editable Settings Created PATCH /api/platform/settings API route with validation (name, timezone, currency, locale, brandColor) Created SettingsForm client component with section-by-section inline editing (Edit/Cancel/Save per card) Settings page now uses real tenant data for localization fields instead of hardcoded values Added timezone, defaultCurrency, defaultLocale to PlatformAdminContext Updated findUserTenant select to include settings fields Created AdminPagination client component with prev/next + page numbers, smart ellipsis for >5 pages, URL param updates Wired into products, orders, customers list pages Reduced pageSize from 50 to 25 for better UX Created AdminSearch client component that pushes ?search= URL param on Enter/blur, resets pagination on new search Wired into products, orders, customers list pages Replaced static <input> elements with functional search 1:54 PM Β· ZRosserMcIntosh
Platform Admin Parity β Quick Wins batch 1 Fix critical layout bug: move marketing pages into (marketing) route group so /platform/admin no longer inherits header/footer chrome Add product detail page (/platform/admin/products/[id]) with images, variants, pricing, inventory, jewelry details, performance stats Add order detail page (/platform/admin/orders/[id]) with items, totals, payments, shipments, customer, addresses, notes Add customer detail page (/platform/admin/customers/[id]) with profile, order history, lifetime value, avg order value, timeline Add getTenantProduct, getTenantOrder, getTenantCustomer query functions to tenant-queries.ts with full Decimalβfloat serialization Make list page rows clickable with Link wrappers to detail pages 624 tests passing, 0 failures 1:18 PM Β· ZRosserMcIntosh
Phase 20: Background Job Queue β Redis-backed serverless job queue Core module (job-queue.ts, 1128 lines): Redis sorted-set backed queue with 7 named queues, 12 built-in job types, 4 priority levels, exponential-backoff retries, dead-letter queue, per-tenant concurrency limits, idempotency keys, and injectable Redis interface for testing Admin API (POST /api/admin/saas/job-queue): 12 actions for queue inspection, processing, retry, purge, and stale-job rescue Cron worker (GET /api/cron/job-queue): Processes all queues every 5 minutes via Vercel Cron, auto-rescues stale active jobs Barrel exports updated in src/lib/saas/index.ts Vercel cron entry added (*/5 * * * *) 60 tests with in-memory Redis mock (624 total, 0 failures) Phase 20 documentation and BUILD-STATUS.md updated Update 12:56 PM Β· ZRosserMcIntosh
use Prisma.InputJsonValue cast for Json fields in parallel-run.ts Replaces Record<string, unknown> and JSON.parse(JSON.stringify(...)) casts with Prisma.InputJsonValue to fix both the build type error and prevent TypeScript type-inference slowdowns on Vercel builds. 12:31 PM Β· ZRosserMcIntosh
Phase 18: Webhook Event Expansion + fix Prisma Json type error Expanded webhook events from 15 β 59 events across 14 categories New module: src/lib/saas/webhook-events.ts (963 lines) 14 event categories with metadata (name, description, icon, plan tier) 59 event definitions with typed example payloads Plan-based event filtering (Starter/Professional/Enterprise) Event validation (validateEvents, validateEventsForPlan) Exponential-backoff retry logic (5 attempts, 30s base β 4h cap) Test/ping payload builder (buildTestPayload, buildEventPayload) Category grouping helpers and catalog stats 90 new tests across 12 test groups (564 total, 0 failures) Updated barrel exports in src/lib/saas/index.ts Fixed Prisma Json type error in parallel-run.ts (Record<string,unknown> β JSON.parse(JSON.stringify(...))) that caused Vercel build failure Updated BUILD-STATUS.md with Phases 15-18 in tracking table Phase 18 documentation: docs/PHASE-18-WEBHOOK-EVENT-EXPANSION.md 12:09 PM Β· ZRosserMcIntosh
Phase 17: Parallel Run Mode β full lifecycle for side-by-side migration 8-state lifecycle: SETUP β SYNCING β VERIFYING β READY_FOR_CUTOVER β CUTTING_OVER β COMPLETED β ARCHIVED | CANCELLED State machine with validated transitions (no cancel during cutover) Sync schedule validation (5β1440 min interval, entity types) Config validation (source, URL, maxRunDays 1β90) Session CRUD: create, get, list, active (one per tenant) Data sync bridge: incremental sync from source platform Comparison engine: per-entity source vs Katura match rates Cutover orchestration: final sync β comparison β complete Session metrics: sync counts, errors, uptime, days remaining Expiry checks: run duration + 90-day archive retention Default config builder for Shopify/WooCommerce 9 actions: create, get, list, active, transition, sync, compare, cutover, metrics Partial indexes on SaasDataImport for parallel_run lookups Uses CREATE INDEX (not CONCURRENTLY) for Supabase transaction compat 3:23 AM Β· ZRosserMcIntosh
Phase 16: Platform Analytics Engine β real-time metrics, health scoring, alerts platform-analytics.ts: 6 functions (growth, revenue, operations, tenant health 0-100 scoring, alerts, combined snapshot) GET /api/saas/platform/analytics with ?section= filter support Tenant health: 5 signals (storefront, products, orders, activity, retention) Alerts: trial expiry, past-due payment, churn spikes, low health, new signups Revenue: MRR/ARR, per-plan breakdown, trial pipeline, NRR 15 new tests, 398 total across 20 files, 0 failures Documentation: PHASE-16-PLATFORM-ANALYTICS.md 2:59 AM Β· ZRosserMcIntosh
Phase 15: E2E Tenant Lifecycle Testing β 51 tests, 383 total 8 test suites covering full tenant journey: signup, onboarding (13 steps), website builder (26 section types), business operations (products/orders/ customers/dashboard), status lifecycle (5 states, 12 transitions), plan upgrades, platform constants integrity All 383 tests passing across 19 files, 0 failures Documentation: PHASE-15-E2E-TESTING.md Updated BUILD-STATUS.md: all 15 phases complete Perf 2:40 AM Β· ZRosserMcIntosh
fix Vercel build hanging on 'Running TypeScript...' Two optimizations that caused the build to jump from 4-5 min to 10-15 min: 1. Convert docs-content.tsx from a 235KB Record<string, ReactNode> object literal to a switch statement. TypeScript's type inference is dramatically faster with switch/case β each case is checked independently instead of inferring a single massive object expression type. This was the primary cause of the tsc hang. 2. Reduce generateStaticParams from 465 pages (3 locales Γ 155 routes) to just 3 hub pages. All article/category/search/changelog pages are now generated on-demand (ISR) on first visit then cached. The build no longer needs to pre-render every single docs page. Also: add YouTube/Vimeo to CSP frame-src for DocsVideo embeds. Update 2:37 AM Β· ZRosserMcIntosh
consistent solid black logo for OG social previews Fixed katura-logo.png: charcoal grey pixels (RGB 35,31,32) in 'KATURA EST 1999' text now solid black (RGB 0,0,0) to match the LWM monogram β no more inconsistent colors on dark backgrounds Created katura-og.png: properly sized 1200x630 OG image with solid black logo on white background for crisp social previews Updated defaultOgImage in SEO config to use new katura-og.png Updated hardcoded OG image refs in platform/docs and design-your-ring Update 2:25 AM Β· ZRosserMcIntosh
resolve TypeScript errors blocking Vercel deployment Fixed checkApiRateLimit mock return types in api-security.test.ts and load-testing.test.ts β added missing 'limit' and 'current' fields to match the real function signature Fixed Record<string, string> type cast in load-testing.test.ts Removed stale .next/types and .next/dev/types cache referencing deleted platform/docs page files 1:59 AM Β· ZRosserMcIntosh
Phase 14: Load Testing 14 load & performance tests (src/lib/__tests__/load-testing.test.ts) Concurrent API Authentication: 50-200 simultaneous requests Rate Limiting Under Load: burst traffic, multi-tenant isolation, fail-open Redis Cache Layer Performance: concurrent reads/writes, no thundering herd Latency Measurements: sequential auth, rejection short-circuit, memory pressure Scope Enforcement Under Load: read/write consistency, admin override at scale Confirmed: no race conditions, proper tenant isolation, fail-open rate limiting Full suite: 332 tests, 18 files, 0 failures Documentation: PHASE-14-LOAD-TESTING.md + BUILD-STATUS.md updated 1:54 AM Β· ZRosserMcIntosh
Phase 13: Security Audit & Hardening Created centralized API security middleware (src/lib/api-security.ts) withApiAuth(): combined auth + per-tenant rate limiting + scope enforcement authenticateApiKey(), requireScope(), checkTenantRateLimit() apiResponse(), apiError(), isErrorResponse() helpers Standardized error codes and security headers on all responses Fixed rate limiting gaps on 3 unprotected form endpoints: /api/consultation β added checkRateLimit('leads') /api/engagement-design β added checkRateLimit('leads') /api/bespoke/inquiry β added checkRateLimit('leads') Refactored 4 tenant API routes to use shared withApiAuth(): /api/tenant/v1/products (GET/POST) /api/tenant/v1/products/[id] (GET/PUT/DELETE) /api/tenant/v1/customers (GET) /api/tenant/v1/orders (GET) Eliminates duplicated authenticateApiKey() and adds per-tenant rate limiting 28 new security tests (src/lib/__tests__/api-security.test.ts) Full suite: 318 tests, 17 files, 0 failures Documentation: PHASE-13-SECURITY.md + BUILD-STATUS.md updated 1:26 AM Β· ZRosserMcIntosh
Phase 12: Comprehensive test suite β 290 tests, 0 failures constants.test.ts: 36 tests β tenant zero, plans, domains, roles, features, limits onboarding.test.ts: 31 tests β checklist integrity, completion, step management website-builder.test.ts: 37 tests β section CRUD, definitions, immutability feature-flags.test.ts: 19 tests β cascade logic, tenant zero bypass, admin ops plans.test.ts: 22 tests β lookups, entitlements, plan change validation tenant-queries.test.ts: 23 tests β storefront resolution, queries, dashboard data plans.ts: Added missing design-studio feature description 23 locale files: Added missing sanctions/capTable/docs translation keys middleware.test.ts: Updated from 10 to 24 locales, mocked next-intl safe-logger.test.ts: Removed broken Object.defineProperty on process.env topology-graph.test.tsx: Fixed ambiguous getByText β getAllByText translations.test.ts: Dynamic locale discovery, covers all 24 locales 1:02 AM Β· ZRosserMcIntosh
Comprehensive website builder documentation (6 new docs, ~2,500 lines) WEBSITE_BUILDER_ARCHITECTURE.md: Component tree, data flow, drag-and-drop engine, state management, theme resolution pipeline WEBSITE_BUILDER_SECTIONS.md: All 26 section types with complete props tables, defaults, rendering notes, extensibility guide WEBSITE_BUILDER_UX_GUIDE.md: End-to-end usage guide β adding sections, drag-and-drop, smart property editor, viewport preview, page management, undo/redo, keyboard shortcuts, plan gating WEBSITE_BUILDER_API.md: Full REST API reference with request/response examples for all 7 endpoints, error codes, data models WEBSITE_BUILDER_THEMES.md: 5 seeded themes documented, color/font/layout token system, three-layer merge resolution, custom overrides WEBSITE_BUILDER_DATA_MODEL.md: ERD, all 3 tables with column details, JSON schemas, indexes, constraints, query patterns Updated WEBSITE_BUILDER.md as central index linking to all detailed docs Updated BUILD-STATUS.md with current commit and corrected section count (26 types) 12:46 AM Β· ZRosserMcIntosh
Complete all 133 docs articles + match platform styling Write all 76 remaining documentation articles across 19 sections Restyle docs hub, sidebar, category, and article pages to match main Katura platform (stone palette + Playfair Display headings) Replace all purple accent colors with stone-based palette Add cross-links between related articles throughout Update shopify-parity README to reflect 133/133 completion Update 12:06 AM Β· ZRosserMcIntosh
platform sign-in flow β auto-sign-in after signup, login page, correct redirect auth.ts: Dynamic tenant resolution in authorize() β looks up SaasTenant by ownerUserId instead of hardcoding tenant_katura for all users signup-form: Auto signIn('credentials') after successful signup API call, redirect to /platform/admin instead of /admin New /platform/login page with dedicated tenant sign-in form Platform layout header: added 'Sign In' link platform-admin.ts: redirect unauthenticated users to /platform/login instead of /platform/signup
Service catalog and custom features browser
Add Admin Context Switcher (src/components/admin/context-switcher.tsx)
Visual toggle: Store Admin (gold) vs Platform Admin (purple)
Keyboard shortcut: ββ§P to toggle
Compact mode for mobile
Add Prisma models: SaasEngagement, SaasEngagementEntry
Relations on SaasTenant
SQL migration: add_engineering_services_tables.sql (idempotent)
Update SaaS sidebar: add Engineering under Services
Update barrel exports in src/lib/saas/index.ts
Install @upstash/redis dependency
All compiles clean (npx tsc --noEmit = 0 errors) Docs 11:16 PM Β· ZRosserMcIntosh
update BUILD-STATUS.md β mark Intelligence + Services as complete Feature 11:14 PM Β· ZRosserMcIntosh
Katura Intelligence (AI Translation) + Professional Services Portal GPT-4o/4o-mini powered content translation Jewelry-specific terminology dictionary (100+ terms, 10 languages) Credit-based billing (plan-included + add-on packs) Luxury brand voice preservation Human approval workflow 24 supported languages matching platform locale support Prisma models: SaasTranslation, SaasAiCreditUsage, SaasAiCreditPurchase Design Studio (Antar Hall): CAD, 3D rendering, sketches, packaging, brand identity Marketing Services (Stella Barbosa): SEO, social media, email, content, PPC, strategy Service request workflow: submitted β reviewing β quoted β approved β in_progress β completed Prisma models: SaasServiceRequest, SaasServiceEntry 8 design service types, 8 marketing service types with full pricing Feature 10:39 PM Β· ZRosserMcIntosh
full platform migration engine β Shopify & WooCommerce connectors migration-shopify.ts: Full Shopify Admin REST API connector Credential validation, paginated data fetching (products, customers, orders, collections) Data transformers (Shopify β Katura format) preserving source IDs for parallel run 301 redirect generator (Shopify URLs β Katura URLs) Export helpers: nginx, vercel.json, CSV formats Rate limit handling with retry logic migration-woocommerce.ts: Full WooCommerce REST API v3 connector HTTP Basic Auth, paginated fetching with X-WP-Total/X-WP-TotalPages headers Products (with variations), customers (billing/shipping), orders, categories Data transformers with stock status, order status, fulfillment status mapping 301 redirect generator (WooCommerce permalink patterns β Katura URLs) migration-engine.ts: Central orchestrator Credential validation β count estimation β sequential migration β redirect generation Entity-by-entity progress tracking via SaasDataImport records Options: skipExisting, mergeDuplicates, generateRedirects, parallelRunMode, dryRun Partial failure recovery β individual record errors don't stop the migration MigrationResult type with per-entity breakdown /api/admin/saas/migrations: POST endpoint with validate/estimate/start actions /admin/saas/migrations: Multi-step migration wizard UI Source selection (Shopify π’, WooCommerce π£) Credential entry with platform-specific fields Record count estimation with time estimate Data type selection + migration options Migration history with status tracking Added 'Migrations' entry to SaaS sidebar under Integrations (with 'New' badge) Docs 10:28 PM Β· ZRosserMcIntosh
Phase 9 admin parity documentation + build status + updated README & parity audit Created PHASE-9-ADMIN-PARITY.md with comprehensive details on all 4 features Created BUILD-STATUS.md with complete platform build overview Updated README.md β all 10 phases marked as β
Complete Updated ADMIN-FEATURE-PARITY.md β all 4 gaps marked as β
Built (commit a157335) Feature 3:30 PM Β· ZRosserMcIntosh
admin feature parity β feature flags, webhooks, data import, GDPR compliance Page: toggle, search, stats dashboard for SaasFeatureFlag records API: GET (list) + PATCH (toggle enabledForAll) Page: create/delete endpoints, event category selection, delivery history API: GET + POST + DELETE, scoped to TENANT_ZERO_ID Page: CSV upload with preview, field auto-mapping, import history API: GET (list jobs) + POST (upload & start), uses data-import.ts engine Page: create/manage data export, deletion, rectification requests API: GET + POST + PATCH, uses SaasComplianceRequest model admin-navigation.ts: added 4 nav items (ToggleRight, Webhook, Upload, Shield) admin-i18n-provider.tsx: added translation keys (EN + PT) Feature 2:47 PM Β· ZRosserMcIntosh
add Quick Discount UI to /admin/products and /admin/collections Add QuickDiscount reusable component with create/view/remove discount UI Add discount API routes for products (/api/admin/products/[id]/discount) Add discount API routes for collections (/api/admin/collections/[id]/discount) Both create Promotion records behind the scenes so discounts flow through the existing promotion system and appear on all storefront pages Discount card shows on product edit page (below Pricing section) Discount card shows in collection edit dialog Add getActiveProductDiscountsWithNative() that combines promotion-based discounts with the Product model's native salePrice field as fallback Update all storefront pages to use the combined discount resolver Feature 1:49 PM Β· ZRosserMcIntosh
display promotion sale prices on storefront Add getActiveProductDiscounts() utility that resolves active promotions (PERCENTAGE + FIXED_AMOUNT) to per-product sale prices via React.cache() Show sale price in red with original price strikethrough on: Category pages (ProductCardWithVideo via CategoryProducts) Collection pages (local ProductCard in CollectionProductsClient) Product detail pages (CurrencyPrice with promotion-aware display) Expand collection-targeted promotions to individual products Respect excludedProductIds and date ranges Deepest discount wins when multiple promotions apply Update MetaPixel tracker to report promotion sale price 5:25 AM Β· ZRosserMcIntosh
Phase 16: Design Studio -- tenant-scoped CAD files + Katura Studio delivery Add DesignFile model (Prisma): tenant-scoped file metadata with source enum (TENANT | KATURA_STUDIO), file type classification (CAD_3D, RENDER, SKETCH, TECHNICAL, OTHER), version tracking, designer notes, folder organization, and tag support Add DesignFileType, DesignFileSource, DesignFileStatus enums Add migration: migrations/add_design_file_table.sql Add design-studio feature key to FEATURES constants Create /platform/admin/design-studio page with: Feature gate (shows upgrade prompt when disabled) Summary cards: total files, storage used, your uploads, from Katura 'From Katura Studio' section: designs pushed by Antar's team with designer notes, version badges, file type labels, tags 'My Files' section: tenant uploads grouped by folder with download and metadata display Add Design Studio nav item (PenTool icon) to Services group in sidebar Update parity doc (CAD Design now scaffolded) and build tracker 4:38 AM Β· ZRosserMcIntosh
Phase 15: Tasks board, platform logo fix, chromeless auth pages Fix /platform header logo: swap katura-wordmark.svg for header-logo.png to match the main site header at katura1999.com Remove Header/Footer from /login, /register, /employee-login so the mosaic fills edge-to-edge (chromeless layout via x-pathname header) Add Tasks page at /platform/admin/tasks: kanban columns (Todo, In Progress, Review, Blocked, Done), summary cards, backlog list, priority badges, overdue indicators -- feature-gated on 'tasks' Add Tasks nav item (ListTodo icon) to platform admin sidebar Update build tracker (Phase 15 complete) and parity doc 4:23 AM Β· ZRosserMcIntosh
Phase 14: Parity push β Media Library, Team, Audit Log, Payroll hub Media Library: tenant-scoped product image grid with hover overlays Team: combined people/employee directory with role badges, contact info Audit Log: activity feed with category filtering, action verbs, IP tracking Payroll Hub: dashboard with summary cards, quick links to sub-pages Payroll Runs: list view with status badges (DRAFT through PAID/CLOSED) Payroll Invoices: scaffold with link back to runs Payroll Reports: 4 report type cards (summary, headcount, trends, tax) Store group: added Media Library Business group: added Payroll (feature-gated 'payroll') Settings group: added Team + Audit Log New icon imports: ImageIcon, UserPlus, ScrollText, DollarSign 4:10 AM Β· ZRosserMcIntosh
Phase 13: Admin feature parity β scaffold 6 missing tenant pages Promotions: discount code management with type/value/usage tracking Services: repair & service request list with status badges Custom Orders: bespoke inquiry pipeline (name, budget, stone, timeline) Engagement: engagement ring lead funnel with design count CRM: deal pipeline with stage summary cards, value tracking Wholesale: lead + account management with settings overview 3:52 AM Β· ZRosserMcIntosh
Phase 12: Integrations hub, Katura wordmark logo, Vercel build fix Created public/brand/katura-wordmark.svg (Playfair Display serif) Updated platform/layout.tsx header Updated platform-admin-sidebar.tsx fallback logo /platform/admin/integrations page with 4-tab interface: API Keys: Create, list, revoke, delete (CRUD via dialog) Webhooks: Create endpoints with event selection, pause/resume, delete Data Imports: Import history table with status badges API Reference: Authentication, rate limits, endpoint docs, webhook verification /api/platform/integrations/api-keys β Tenant-scoped CRUD /api/platform/integrations/webhooks β Tenant-scoped CRUD Feature-gated behind 'api-access' plan entitlement Added Integrations (Plug icon) to sidebar nav under Settings Updated SaaS build tracker: Phase 12 complete 3:32 AM Β· ZRosserMcIntosh
Phase 10-11: Billing & Stripe integration, marketing site emoji cleanup Add /api/saas/billing/checkout endpoint (Stripe Checkout session creation) Add /api/saas/billing/invoices endpoint (tenant invoice history) Extend Stripe webhook handler for SaaS subscription lifecycle events (subscription.created/updated/deleted/paused/resumed, invoice.paid/failed) Wire real invoice data into tenant billing page with status badges Fix Stripe SDK v2025 type compatibility across billing.ts Replace all emojis with Lucide React icons across 7 /platform pages platform/page.tsx: 9 Lucide icons for feature grid platform/features/page.tsx: 18 Lucide icons for categories & additional features platform/blog/page.tsx: Remove emoji thumbnails, use text category labels platform/docs/page.tsx: 6 Lucide icons for doc categories platform/demo/page.tsx: SVG checkmark + numbered highlights platform/signup/signup-form.tsx: Remove industry emojis and welcome emoji Fix MetricCard value type errors on admin dashboard Add OpenClaw integration research document Update SaaS build tracker: Phase 10 & 11 β complete 2:46 AM Β· ZRosserMcIntosh
Phase 9: Wire tenant admin pages with real tenant-scoped data Create tenant-queries.ts: full query library bridging SaasTenant β Storefront β Product/Order/Customer/Collection Dashboard: real metrics (orders, revenue, products, customers) via getTenantDashboardData() Products: full table with images, status badges, pricing, SKU, plan limit warnings Orders: full table with order number, customer, status/fulfillment badges, revenue summary Customers: table with avatars, email, phone, order count; summary cards (total, new, returning) Collections: grid cards with images, product counts, visibility badges Barrel exports in saas/index.ts for all tenant-queries functions/types Mark Phase 9 complete in build progress tracker (10 of 12 phases done) Feature saas 2:24 AM Β· ZRosserMcIntosh
storage & bandwidth metering with overage billing Add SaasStorageSnapshot, SaasBandwidthLog, SaasStorageOverage models Add bandwidth/overage fields to SaasPlan and SaasTenant Create storage-metering.ts (~890 lines): measure buckets, track bandwidth, calculate overages, bill via Stripe invoice items API routes: /api/saas/storage/{usage,meter,upload} Nightly cron (3:30 AM): measure all tenant storage Monthly cron (1st @ 1 AM): full billing cycle (measure + bill + reset + cleanup) Update billing page with storage bar, bandwidth stats, bucket breakdown, overage warnings, and per-plan pricing Plan tiers: Starter 5GB//bin/zsh.50, Pro 25GB//bin/zsh.40, Enterprise 100GB//bin/zsh.25 Upload endpoint: limit checks, file type validation, ingress recording SQL migration: saas_storage_metering.sql (not yet run)