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,692
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 21 of 40 Β· 1,001β1,050 of 2,000 fetched
Sunday, March 1, 2026 1 update pushed
Refactor 12:23 PM Β· ZRosserMcIntosh
split monolithic schema.prisma into 31 domain files Split 7,249-line monolith into 31 domain-specific .prisma files 252 models + 106 enums across: analytics, assets, audit, auth, content, crm, customers, design-studio, engagement, expansion, finance, hr, integrations, inventory, marketing, notifications, orders, payroll, products, projects, promotions, saas-*, storefront, weddings, wholesale Updated prisma.config.ts to point to prisma/schema/ folder Prisma validate + generate confirmed working Zero TypeScript errors in source code Added split-schema.ts script for reproducibility Added SCHEMA_REFACTOR_PLAN.md documenting phases 1-6 Saturday, February 28, 2026 19 updates pushed
Feature 11:26 PM Β· ZRosserMcIntosh
design-process page theme update + carousel implementation + new Stella portfolio images Theme: Switch from green (emerald) to dark blue (sapphire) color scheme Updated hero, phases, cards, badges, stats, dividers across all sections Radial gradients, hover states, and accent colors now blue-based Carousels: Auto-rotating image galleries for Stella's portfolio AutoCarousel: Single image with crossfade, nav arrows, dot indicators MultiCarousel: 5-image sliding window with auto-advance (3.5s interval) All images pause on hover for better UX Images: Added 5 new Stella design work samples (jewelry/brand concepts) stella-work-6 through stella-work-10 now in rotation All 10 images display in auto-advancing multi-carousel Maintains Framer Motion animations, responsive layout, accessibility Update rsvp 8:18 PM Β· ZRosserMcIntosh
seamless auth flow for wedding RSVP Remove upfront 'Katura Account Required' banner from invite code step Add 'auth' step that appears only when RSVP submission returns 401 Store RSVP selections in localStorage before redirecting to auth Friday, February 27, 2026 10 updates pushed
Docs 8:58 PM Β· ZRosserMcIntosh
rewrite Stella strategy β 70/30 split, R$1M/year target, equity vesting, team hiring, physical stores 70% Stella / 30% Katura revenue split on all marketing services R$1,000,000 BRL/year personal income target (~$20K USD/month) Performance-based equity vesting: 1% β 7% over 2-3 years Path from Creative Director β Executive Director of Marketing β Shareholder Team hiring roadmap: 5 hires funded by revenue growth (BR-based) South American physical locations: SP popup β SP permanent β RJ β BH OpenClaw cost comparison: $430/month vs $28K-38K traditional agency 46x ROI on OpenClaw infrastructure spend Detailed service catalog with 70% take-home per deal 6-phase implementation timeline with equity milestone triggers Cap table integration at /admin/cap-table for equity tracking Feature openclaw 8:45 PM Β· ZRosserMcIntosh
individual experiment pages with guardrails, token limits & Stella marketing strategy Created docs/integrations/OPENCLAW_STELLA_MARKETING_STRATEGY.md Comprehensive strategy for using OpenClaw to promote Stella's marketing services (Meta ads, brand identity, cold outreach, follow-up sequences, portfolio-powered emails, spending limits) Thursday, February 26, 2026 2 updates pushed
Update 2:25 PM Β· ZRosserMcIntosh
match header bg to page deep blue (#030712) on dark-themed pages Fix header colour mismatch on /design-your-ring (#0a0a0f -> #030712) Also fixes all /developer/* sub-pages (includes() instead of endsWith()) Style 2:11 PM Β· ZRosserMcIntosh
match 'CRAFTING BEAUTY SINCE 1999' section bg to footer deep blue (#030712) Wednesday, February 25, 2026 1 update pushed
Feature 10:33 PM Β· ZRosserMcIntosh
add city carousel developer experiment New interactive experiment at /developer/city-carousel Rotating ticker of cities in footer display font (font-display serif, 0.15em tracking) Live controls: edit city list via drag-and-drop, adjust scroll speed with presets Preview matches "JOIN THE WORLD OF KATURA" styling Defaults to: ATLANTA, MIAMI, NEW YORK, LOS ANGELES, SΓO PAULO, RIO DE JANEIRO Pure CSS @keyframes animation with pause/resume and reset controls Includes implementation notes for production integration into footer.tsx Listed first in developer lab index with MapPin icon Monday, February 23, 2026 8 updates pushed
11:10 PM Β· ZRosserMcIntosh
Diamond Forge wireframe + dot-matrix rewrite & deep blue #030712 backgrounds Rewrite with wireframe + dot matrix dual-layer architecture Edge particles get 2.5x gravity, 1.8x settle rate, 1.3x size, 1.4x alpha Wireframe lines drawn after particles settle (25%+ threshold) Separate edge/surface spatial grids for particle targeting New Wireframe control panel: edge ratio, edge gravity, line opacity, line width Default 4000 particles, spawn rate 18 All presets updated with higher particle counts Footer: bg-primary β bg-[#030712] on all pages Design-your-ring: all 9 #0a0a0f β #030712 (body, html, canvas, bg classes) Design-your-ring layout: wrapper div updated Matches developer page deep navy color Update 2:17 PM Β· ZRosserMcIntosh
brighten side diamond images on design-your-ring + add diamond dimension controls to Diamond Forge Design-your-ring: side diamond opacity raised from [0.45,0.7] to [0.75,1.0] with brightness(1.1) filter so they match the hero round diamond Diamond Forge: added Table %, Crown Height, Pavilion Depth, Girdle Thickness sliders under Diamond Shape section New DiamondConfig fields: tablePercent, crownPercent, pavilionPercent, girdlePercent buildDiamondCloud() now accepts proportion parameters instead of hardcoded values Sunday, February 22, 2026 9 updates pushed
Chore 9:14 PM Β· ZRosserMcIntosh
major repo organization + Prisma fixes Fix directUrl in schema.prisma + prisma.config.ts (was hanging on db push) Fix DATABASE_URL_UNPOOLED to use direct host (db.<ref>.supabase.co) Add Sprint/SprintTask/SaasApiKey relations for MCP PR compatibility DB pushed and in sync 9,328 β 7,072 lines (removed unused/redundant models) Zero drift with production database Move 8 root .cjs scripts β scripts/translations/ Organize 80+ flat scripts into 12 categorized subdirectories Move root migrations/ β scripts/db-migrations/applied-sql/ Move pedro/ β docs/reference/pedro-analysis/ Remove tracked log files (already gitignored) Consolidate docs: 47 β 25 directories Exclude docs/** and scripts/** from TypeScript compilation Update package.json script paths Update README project structure Update docs/INDEX.md Update DEPLOYMENT_CHECKLIST.md migration paths Feature 7:13 PM Β· GepetoinTraining
MCP collaboration infrastructure (Phases 0-3) Added SprintStatus enum, Sprint model, SprintTask junction model Added userId field on SaasApiKey for developer identity attribution
On return from login/register, auto-submit stored RSVP data
Auth redirect uses callbackUrl pointing back to wedding site #rsvp
Register link includes wedding-guest promo for $100 gift card
Back button lets guests return to RSVP form from auth prompt
Cache siteId after first resolve to avoid redundant API calls Feature wedding 6:35 PM Β· ZRosserMcIntosh
invitation email management system Add inviteSentAt DateTime? field to WeddingGuest schema Create migration SQL for inviteSentAt column Create invitations API (GET status + POST send/resend/test) Actions: send, send-all, resend, test, test-reminder Supports personal message and email type (save-the-date vs reminder) Tracks inviteSentAt timestamp per guest Add Invitations tab to wedding dashboard Summary cards (total, have email, sent, pending, physical mail) Test email section with invitation and reminder preview Email settings (type selector, personal message) Guest table with checkboxes, invite codes, status, sent dates Bulk send, individual send, resend, select all controls Tips section for physical card workflow Fix venueAddress references to use venueCity/venueState Fix async state bug in individual send button Feature wedding 5:36 PM Β· ZRosserMcIntosh
editable invite codes, guest mailing addresses, CSV export, GoDaddy domain wiring Fix middleware: redirect /wedding-sites, /account, /wishlist from subdomains to main domain Add address fields to WeddingGuest schema (addressLine1, addressLine2, city, state, zipCode, country) Create migration SQL: prisma/add-guest-address-fields.sql Update guest PATCH API: allow inviteCode + address fields in allowedFields Update guest POST API: accept address fields and optional custom invite codes Add CSV export endpoint: GET /api/wedding-sites/[siteId]/guests/export Rewrite GuestListManager (builder): expandable detail rows, inline editable invite codes, address fields, CSV download Rewrite GuestsTab (dashboard): same features - editable codes, expandable address panel, CSV export Create GoDaddy domain reseller client: src/lib/domains/godaddy.ts (mock when no API keys) Create domain API route: GET/POST /api/wedding-sites/[siteId]/domain (check, suggest, purchase, DNS) Update 5:03 PM Β· ZRosserMcIntosh
share auth session cookie across *.katura1999.com subdomains sessionToken: __Secure-authjs.session-token with domain=.katura1999.com callbackUrl: __Secure-authjs.callback-url with domain=.katura1999.com csrfToken: __Host-authjs.csrf-token (no domain - __Host- prefix forbids it) Added trustHost: true for Vercel deployment Only applies in production (dev uses default localhost cookies) Update 4:51 PM Β· ZRosserMcIntosh
cross-origin callback loop after login on wedding subdomains Three root causes of the login loop on belvedere.katura1999.com: 1. NextAuth redirect callback blocked cross-origin callbackUrls by default. Added explicit redirect callback that allows *.katura1999.com and *.katura.com. 2. Login form used router.push(callbackUrl) which can't navigate cross-origin. Added navigateToCallback() helper: uses window.location.href for absolute URLs (https://...) and router.push for relative paths. 3. Register form had the same issue β fixed identically. Flow now works: subdomain β middleware redirects /login to katura1999.com/login β user signs in β window.location.href redirects back to subdomain/my-wedding Update 4:42 PM Β· ZRosserMcIntosh
redirect subdomain auth paths to main Katura login, add My Wedding Sites to account page Middleware: /login, /register, /signout on tenant subdomains (e.g. belvedere.katura1999.com/login) now redirect to katura1999.com/login with same query params (callbackUrl preserved) my-wedding dashboard: unauthenticated users redirect to full URL https://katura1999.com/login?callbackUrl=https://slug.katura1999.com/my-wedding Account page: new 'My Wedding Sites' card shows owned + shared sites with dashboard links and 'Create Another Site' button. Uses PartyPopper icon. Organizer sign-in links on Belvedere and Rex&Kate now use absolute subdomain URLs 4:30 PM Β· ZRosserMcIntosh
Wire wedding builder to API, add organizer sign-in boxes, fix dashboard stats Feature 4:09 PM Β· ZRosserMcIntosh
wedding photo uploads with public/private visibility Add WeddingPhoto model + WeddingPhotoVisibility enum to Prisma schema Add migration SQL (prisma/add-wedding-photos.sql) Create Supabase Storage helper (src/lib/storage/wedding-photos.ts) Uses 'weddings' bucket, path: {siteId}/photos/{uuid}_{filename} Supports upload, signed URLs, batch signed URLs, delete Max 10MB, JPEG/PNG/WebP/HEIC/AVIF allowed Create photos API route (GET/POST/DELETE /api/wedding-sites/[siteId]/photos) Auth required + must be RSVP'd guest or owner/admin Guests upload PUBLIC (all guests see/download) or PRIVATE (bride & groom only) Owner/admin can see all photos; guests see PUBLIC + their own Guests can delete own photos; owner/admin can delete any Add Photos tab to my-wedding dashboard with upload, filter, grid, delete Create standalone /t/[slug]/photos page with full gallery UI Upload with visibility toggle, caption support, multi-file upload Filter by all/public/private/mine Lightbox viewer with download Responsive grid layout Feature 3:52 PM Β· ZRosserMcIntosh
wedding auth flows, promos, custom domain upgrade, my-wedding dashboard Wire 'Get Started Free' CTA to /wedding-sites/build (auth-gated) Add ?promo=wedding-guest ( gift card) and ?promo=wedding registration flows Support ?callbackUrl= param in register form for post-signup redirect Add custom domain upgrade section in builder settings Update A&D site RSVP section with wedding-guest promo sign-up link Create /t/[slug]/my-wedding dashboard (auth-gated): Overview tab with stats, response rate, dietary summary, recent RSVPs Guest list tab with add/remove, filter by RSVP status Events tab with create/delete Settings tab with domain management and site details Feature wedding-sites 2:50 PM Β· ZRosserMcIntosh
belvedere.katura1999.com as canonical domain for A&D Add /t/belvedere route (re-exports anthonyanddelaney page) Add /t/belvedere/layout.tsx with correct metadata Update SITE_SLUG from 'anthonyanddelaney' β 'belvedere' Add 'belvedere' to RESERVED_SLUGS in wedding-sites API Add 301 redirects: /t/anthonyanddelaney β /t/belvedere in next.config.ts Middleware already handles *.katura1999.com β /t/[slug] rewrite Feature wedding-sites 2:44 PM Β· ZRosserMcIntosh
Brevo email notifications, OpenAI hotel suggestions, wire A&D RSVP Add wedding email templates (src/lib/email/wedding-emails.ts): 1. Editor/planner invitation email 2. RSVP acceptance/decline notification to couple & admins 3. RSVP confirmation to guest 4. Save the Date / Invitation with invite code 5. RSVP deadline reminder 6. Post-wedding thank you Add OpenAI hotel suggestion API (POST /api/wedding-sites/suggest-hotels): Uses gpt-4o-mini to recommend 5-6 hotels near venue address Returns name, description, price range, distance, amenities, tier Wire admin invite route to send Brevo invitation email on POST Wire RSVP route to send notification to couple/admins + confirmation to guest Update Anthony & Delaney page: RSVP section now verifies invite code via API, shows party members, collects per-guest attendance/dietary, song request, submits to API Travel section now has AI-powered hotel lookup by venue address with live OpenAI suggestions rendered in a card grid Feature wedding-sites 2:21 PM Β· ZRosserMcIntosh
Prisma schema, API routes, Michelin stars UI Add 5 Prisma models: WeddingSite, WeddingSiteAdmin, WeddingEvent, WeddingGuest, WeddingRSVP Add WeddingSiteRole enum (OWNER, EDITOR, VIEWER) Add migration SQL: prisma/add-wedding-sites.sql Add 10 API route files under /api/wedding-sites: CRUD for sites, admins, events, guests RSVP verify (public) + submit (auth required) Dashboard stats endpoint Public site data by slug Replace text '3 Michelin Stars' badge with actual michelin.avif star images linked to Michelin Guide on Rex & Kate reception card Copy michelin.avif to public/ Chore 1:39 PM Β· ZRosserMcIntosh
archive deprecated messenger pages Feature 1:37 PM Β· ZRosserMcIntosh
Katura Wedding Sites β marketing page, builder, Rex & Kate demo, Anthony & Delaney site /wedding-sites marketing landing page with interactive demo preview /wedding-sites/build auth-protected drag-and-drop site builder rexandkate.katura1999.com demo site (Rex & Kate, Napa Valley, sage/gold theme) anthonyanddelaney.katura1999.com site (Anthony & Delaney, Wisconsin, midnight blue theme) Wedding site builder: sections, themes, settings, guest list management RSVP with optional invite code + Katura account requirement Katura branding in footer: logo + 'Provided by Katura Luxury Jewelry' Footer link: 'Personal Wedding Site' in Love & Engagement column en.json translations for wedding sites feature Subdomain routing via existing middleware (*.katura1999.com β /t/[slug]) Feature 1:34 PM Β· ZRosserMcIntosh
notification bell, Messages label, @mention resolution, smart Slack integrations HeaderChat: replaced tiny chat bubble icon with labeled 'Messages' button with external link indicator (border-slate-300, proper dark mode support) NotificationBell: enabled in both desktop and mobile admin headers (was commented out with TODO, now wired to real Prisma Notification table) GET /api/admin/notifications: real Prisma queries with limit/unread filters POST /api/admin/notifications: create notification (internal use) POST /api/admin/notifications/[id]/read: mark single as read POST /api/admin/notifications/read-all: mark all as read for user Added User.slackUserId (String?, unique) for @mention resolution db push applied, Prisma client regenerated resolveSlackMention(): maps @Rosser/@Stella to <@UXXXX> Slack mentions (DB lookup first via User.slackUserId, then Slack API user list with cache) resolveAllMentions(): regex-based bulk @mention replacement in message text listSlackUsers(): returns all workspace members for admin UI autocomplete notify(): dual-write helper β posts to Slack AND creates in-app Notification records for multiple users (fire-and-forget Slack, await DB writes) NotificationType enum: 17 event types (order_placed, support_ticket, etc.) postDailySalesDigest(): EOD sales summary β #orders (for cron job) notifyLowStock(): inventory alerts β #alerts with product link notifyNewReview(): review posted β #general (celebrates 4-5β, flags 1-2β) notifyAppointmentBooked(): appointment β #general with @mention of assignee notifyDeployment(): deploy events β #engineering with commit info Feature 1:18 PM Β· ZRosserMcIntosh
Slack integration Phase 2 β utility lib, webhooks, tenant support src/lib/slack.ts β Full Slack Web API client with: Β· Channel management (create, find, archive, invite) Β· Message posting (channels, threads, ephemeral) Β· Tenant lifecycle hooks (onTenantCreated β #tenant-{slug}, onTenantDeactivated β archive) Β· Order notifications β #orders + #tenant-{slug} Β· Support ticket routing β #support + #tenant-{slug} with Block Kit cards Β· System alerts β #alerts Β· OpenClaw reports β #openclaw Β· Well-known channel constants (GENERAL, ENGINEERING, ORDERS, SUPPORT, etc.) src/app/api/webhooks/slack/route.ts β Incoming Slack events webhook Β· URL verification challenge Β· Signature verification via SLACK_SIGNING_SECRET Β· Event callback handler (ready for support reply sync) src/app/platform/admin/support/page.tsx β Tenant support form Β· Tenants submit tickets without needing Slack Β· Subject, body, priority, category fields Β· Response time guide sidebar Β· POST β creates SaasSupportTicket + routes to Slack src/app/api/saas/support/route.ts β Wired routeSupportTicket() into existing POST handler (fire-and-forget, non-blocking) src/lib/saas/constants.ts β Added SLACK_CONNECT feature flag .env.example β Added SLACK_BOT_TOKEN + SLACK_SIGNING_SECRET placeholders Feature 12:59 PM Β· ZRosserMcIntosh
replace internal messenger with Slack migration (Phase 1) What gets removed (~29 files, ~5,740 lines) Slack channel architecture OpenClaw integration points 5-phase migration timeline Cost comparison Update 12:13 PM Β· ZRosserMcIntosh
repair dead onboarding links on /platform/admin /admin/settings/branding β /platform/admin/settings /admin/products/new β /platform/admin/products /admin/collections β /platform/admin/collections /admin/settings/shipping β /platform/admin/settings /admin/settings/payments β /platform/admin/settings /admin/settings/domains β /platform/admin/settings /admin/customers/import β /platform/admin/customers /admin/marketing/campaigns/new β /platform/admin/marketing /admin/settings/reviews β /platform/admin/settings /admin/analytics β /platform/admin/analytics Added href for 'Preview your store' β /platform/admin/design
Extracted experiment data to experiments-data.ts (single source of truth) All 17 experiments now have: longDescription, setupSteps, guardrails, tokenLimits, whatItCanDo, whatItCannotDo, riskLevel, estimatedMonthlyCost, rollbackProcedure, and URL slug
Created /admin/openclaw/[slug] dynamic route with ExperimentDetail component Each experiment now has its own URL: /admin/openclaw/concierge /admin/openclaw/outreach /admin/openclaw/cart-recovery /admin/openclaw/trials /admin/openclaw/reviews /admin/openclaw/ads /admin/openclaw/revenue /admin/openclaw/referrals /admin/openclaw/health /admin/openclaw/trade-shows /admin/openclaw/support /admin/openclaw/seo /admin/openclaw/store /admin/openclaw/wholesale /admin/openclaw/content /admin/openclaw/sentry /admin/openclaw/deploy
Each experiment detail page has 4 tabs: 1. Overview: long description, can/cannot do lists, technical details 2. Setup Guide: step-by-step with terminal commands, env vars, verification 3. Guardrails: organized by severity (critical/high/medium/low) with type icons (rate-limit, approval-required, spending-cap, kill-switch, scope-restriction, data-boundary) 4. Token Limits: table with monthly/daily caps, alert thresholds, hard stops
Safety philosophy: 'machine gun to a chimpanzee' prevention 4 universal guardrails on ALL experiments: kill switch, token hard stop, audit log, no PII export. Critical-risk agents (outreach, ads, deploy, sentry) have extra guardrails and prominent risk banners.
Refactored dashboard to import from shared experiments-data.ts Added arrow-right link buttons on each card to navigate to detail pages Feature 8:14 PM Β· ZRosserMcIntosh
add 7 Growth & Revenue experiments to OpenClaw dashboard Jeweler Outreach (B2B Prospecting) β autonomous lead discovery, research, and personalized cold email sequences via Brevo for 4 segments: Platform SaaS, Stella marketing, Antar CAD, and wholesale Trial-to-Paid Conversion Agent β monitors trial tenants, identifies friction, sends personalized conversion nudges Google & Meta Ads Concierge β AI-managed ad campaigns for both B2C (jewelry buyers) and B2B (jeweler signups), auto-pauses low ROAS Referral & Affiliate Engine β jeweler-to-jeweler and customer affiliate programs with commission tracking and dormant re-engagement Trade Show Lead Capture β mobile-first lead capture at JCK, AGTA, Couture with auto-research and 5-minute personalized follow-up SEO Content Engine β long-tail content for Jewel Vox targeting both B2C buyers and B2B jewelers searching for platform alternatives Wholesale Pipeline Automation β application review, credential verification, line sheet generation, and dormant account reactivation New 'growth' category with rose-colored badges 9 new skills in the Growth & Revenue catalog column Simulation prompts and detailed mock responses for all 7 experiments Dashboard now shows 17 total experiments across 5 categories Feature 7:11 PM Β· ZRosserMcIntosh
OpenClaw experiments dashboard + admin sidebar entry Add OpenClaw admin page at /admin/openclaw with interactive experiments dashboard Implement 10 OpenClaw use cases across 4 categories (storefront, platform, tenant, engineering) Add chat simulator with 23 skills catalog and quick prompts for each experiment Wire up sidebar navigation entry with search keywords Add i18n translations (EN + PT) for OpenClaw nav entry Create ATTN-PEDRO.md status report documenting that pr-1 branch is fully superseded Experiments tab: 10 cards with status badges, expandable tech details, copy SKILL.md template Simulator tab: Chat interface with mock responses, quick prompts per experiment Skills Catalog tab: 23 Katura skills across 3 categories, infrastructure requirements Feature mcp 6:34 PM Β· ZRosserMcIntosh
complete 27-tool MCP infrastructure β Phase 1 done POST /api/mcp/tools/tasks/{id}/complete β mark task done GET /api/mcp/tools/tasks/search β full-text search GET /api/mcp/tools/tasks/mine β my assigned tasks GET /api/mcp/tools/tasks/blocked β blocked/critical tasks POST /api/mcp/tools/ideas β create idea POST /api/mcp/tools/ideas/{id}/convert β convert idea to task POST /api/mcp/tools/sprints/{id}/complete β close sprint w/velocity DELETE /api/mcp/tools/sprints/{id}/tasks/{taskId} β remove from sprint POST /api/mcp/tools/projects β create project w/default columns Wired dispatchWebhookEvent into all write operations (task.created/updated/completed/moved/commented, sprint.created/completed, idea.created/converted) All webhook calls are fire-and-forget (.catch(() => {})) 18 β 27 tools cataloged in /api/mcp/manifest New categories: complete_task, search_tasks, get_my_tasks, get_blocked_tasks, create_idea, convert_idea_to_task, complete_sprint, remove_task_from_sprint, create_project Perf 6:06 PM Β· ZRosserMcIntosh
switch to Turbopack + migrate Sentry to instrumentation pattern Roll back cpus: 2 β 1 (caused GC thrashing on 8GB Vercel, 2x slower) Migrate Sentry from deprecated sentry.*.config.ts files to: src/instrumentation.ts (server + edge init) src/instrumentation-client.ts (browser init) Remove --webpack flag, use Turbopack (compile: 111s β 43s) Add onRouterTransitionStart for Sentry navigation tracking Replace deprecated disableLogger with bundleSizeOptimizations Add import-in-the-middle/require-in-the-middle for OTel compat Update BUILD_OPTIMIZATION.md with results Perf build 5:43 PM Β· ZRosserMcIntosh
3 quick wins to reduce Vercel build time ~60s 1. Remove duplicate prisma generate β postinstall already handles it, no need to run it again in the build script (~7.5s saved) 2. Remove generateStaticParams from [locale]/layout.tsx β with localePrefix:'never', locale-prefixed URLs are never hit directly. Drops SSG from 2,074 β 370 pages (78Γ24 locales eliminated, ~20s saved) 3. Bump cpus: 1 β 2 β Vercel has 4 cores / 8GB, cpus:1 leaves 3 idle. Now uses 2 workers for SSG and compilation (~15-20s saved) Bonus: Remove deprecated eslint config from next.config.ts (Next.js 16 no longer supports it, was generating a warning every build) See docs/deployment/BUILD_OPTIMIZATION.md for full analysis. Feature builder 5:11 PM Β· ZRosserMcIntosh
resolve all 8 critical site builder issues src/app/api/saas/website/products/route.ts src/app/api/saas/website/form-submit/route.ts src/components/website-builder/media-picker.tsx prisma/schema.prisma (SaasFormSubmission model) src/components/website-builder/section-renderer.tsx src/app/platform/admin/design/builder/builder-client.tsx src/app/t/[slug]/[[...path]]/page.tsx (headerConfig/footerConfig/tenantSlug) src/lib/saas/website-builder.ts (instagram username prop) Feature platform 4:36 PM Β· ZRosserMcIntosh
promote Site Builder to top-level sidebar tab + comprehensive audit Added Site Builder as dedicated sidebar item under Store group (Globe icon) Created /platform/admin/site-builder as new top-level route Updated Design & Theme page to link to new route Updated builder back button to return to dashboard Created SITE_BUILDER_AUDIT.md documenting: All 26 sections and their status Competitive comparison vs Shopify and Weebly 21 broken/non-functional items categorized by severity Cross-contamination and route issues Prioritized roadmap (Phase 1-3) Update seo 2:31 PM Β· ZRosserMcIntosh
remove locale prefix from canonical URLs, block developer pages from indexing Fixed canonical URLs on 8 pages that incorrectly included locale prefix (e.g. /en/about β /about), which caused 'discovered but not indexed' in Google Search Console since localePrefix is set to 'never' Pages fixed: about, earrings, necklaces, rings, bracelets, faq, jewel-vox/[slug], trunkshow Added developer layout.tsx with noindex/nofollow robots metadata Added /developer to robots.txt disallow for both wildcard and Googlebot
3 new dimension presets: Deep Pavilion, Flat Table, Old Mine Cut
All presets and reset button pass dimension values correctly Feature developer 1:58 PM Β· ZRosserMcIntosh
Diamond Forge β round brilliant cut particle experiment Table: octagonal flat top (57% of girdle diameter) 8 star facets from table edge to crown break 8 bezel (kite) facets on the crown 16 upper girdle facets Girdle band: thin ring at widest point (2% thickness) 8 main pavilion facets (the fire) 16 lower girdle facets Culet: near-point at bottom cat-forge 2:12 AM Β· ZRosserMcIntosh
subtle whiskers, longer curvy tail, 10k max particles Whiskers: 3 per side β 2 per side, 10 pts each β 4 pts each, shorter length (35β22). Far fewer cloud points so particles don't clump on whiskers. Tail: single Bezier β two-segment S-curve. Extends much further back and arcs elegantly forward at the tip. 180 pts β 340 pts across both segments for a smooth flowing shape. MAX_PARTICLES: 6000 β 10000 Count slider max: 5000 β 10000 Particle buffers remain Float64Array (handles 10k fine) Update cat-forge 1:03 AM Β· ZRosserMcIntosh
redesign as elegant walking cat in profile Body: Catmull-Rom spline with natural arch from chest to hip Neck: tapered spline connecting body to head Head: refined oval tilted forward with muzzle and nose Ears: upright cones angled slightly outward Legs: four Bezier tubes in walking stride β front-left extended forward, front-right planted, rear-left pushing off behind, rear-right coming forward Tail: long flowing Bezier curve arcing gracefully upward Shoulder/hip muscle volume for natural anatomy Whiskers extending from muzzle in profile Feature developer 12:46 AM Β· ZRosserMcIntosh
Cat Forge β particles coalesce into a 3D cat Body, head, haunches: ellipsoid sampling (Fibonacci sphere) Ears: cone sampling with perpendicular basis vectors Tail: cubic Bezier tube with tapered radius Whiskers: linear point arrays Eyes, nose, muzzle, paws: small ellipsoids ~1800 point cloud with spatial grid (30-unit cells) 3Γ3Γ3 neighbor lookup for O(1) nearest-neighbor Float64Array struct-of-arrays (same as Ring Forge) Pre-rendered glow sprite cache (D3 color/gradients) Skip-frame depth sort (every 3rd frame) HiDPI canvas with ResizeObserver Perf 12:32 AM Β· ZRosserMcIntosh
rewrite Ring Forge with D3 + struct-of-arrays particle engine Replace object-array particles with Float64Array struct-of-arrays layout (better CPU cache locality, ~3x faster physics loop) Replace ctx.shadowBlur per particle with pre-rendered glow sprites (radial gradient baked into offscreen canvas, stamped with drawImage) This alone is ~100x faster β shadowBlur forces software compositing Skip-frame depth sort (every 3rd frame, imperceptible visual diff) Pre-compute trig once per frame instead of per-particle Inline all torus math (no function call overhead in hot loop) Quantized glow sprite cache to reduce canvas allocations HiDPI-aware canvas with ResizeObserver (was basic resize listener) D3 scaleLinear for depth-based fade calculation D3 color for proper alpha manipulation in glow gradients Reduced wireframe segments (48β36 ring, 24β18 tube) Added live FPS counter to stats overlay Max particle cap raised to 6000 (was unbounded) Added d3 (v7.9.0) + @types/d3 as dependencies Feature 12:17 AM Β· ZRosserMcIntosh
API keys management in Developer Dashboard + MCP in admin nav Add API Keys as 3rd tab in Developer Dashboard (Site Topology | Integration Testing | API Keys) Full CRUD: create with developer assignment, scope/rate config, revoke, delete Developer identity display ('Pedro's Claude') in key table Show-once key banner with copy-to-clipboard on creation Stats row: total keys, active, developer-assigned, revoked MCP API Quick Reference section with curl examples Extended createApiKey() to accept userId and rateLimit options Extended listAllApiKeys() to include user relation data API route POST now accepts userId and rateLimit fields Added MCP (Bot icon) to admin sidebar navigation Added mcp translation key to EN + PT locales MCP dashboard 'Manage API Keys' button links to /admin/developer?tab=api-keys Developer dashboard reads ?tab= URL param to auto-select tab Team members dropdown fetches from /api/admin/users Added scripts/test-mcp.sh for MCP endpoint testing
Added back-references on User, Task, Project, SaasTenant
Extended auth middleware (withApiAuth) with userId/userName on requests
Updated validateApiKey to include user relation for developer identity
Created Zod schemas for all MCP inputs/outputs (src/lib/validations/mcp.ts)
Created MCP utility layer (src/lib/mcp/index.ts) with response helpers, activity logging, and developer display name resolution
Created AI tools module (src/lib/mcp/ai-tools.ts) for prioritization, risk scoring, and subtask generation
GET projects, projects/[id], tasks, tasks/[id]
GET sprints, sprints/[id], ideas, columns
POST create_task, PATCH update_task, PUT move_task
POST add_comment, create_sprint, add_task_to_sprint
POST tasks/[id]/analyze, score, subtasks
GET /api/mcp/manifest β full 17-tool catalog for Claude auto-discovery
Added 10 board events (task.*, sprint.*, idea.*, project.created)
Added 'board' category to webhook event system
Updated webhook-events tests (90/90 pass)
Created slack-formatter.ts β Block Kit formatters for 10 event types with 4-channel routing (dev, sprint, claude, alerts)
Created slack.ts β Slack Bot API client, HMAC-SHA256 request verification, event dispatch
Created /api/integrations/slack/route.ts β slash command handler: /katura task create|list, /katura sprint status|velocity
Created /admin/mcp page β MCP Dashboard with tool catalog (reads from manifest endpoint), API key viewer, Slack status card, activity feed
Created /admin/board/sprints page β Sprint Board with expandable sprint cards, progress bars, velocity chart, summary stats
Both pages use existing shadcn/ui design system (Card, Badge, Tabs)
Created docs/mcp/MCP_INFRASTRUCTURE.md β technical reference
Created docs/mcp/API_REFERENCE.md β full endpoint documentation
Created docs/mcp/SLACK_INTEGRATION.md β setup checklist and config
Created docs/plans/mcp-collaboration-infrastructure.md β architecture plan
Updated docs/INDEX.md with MCP section Security 7:10 PM Β· ZRosserMcIntosh
P0 fixes β close 6 critical vulnerabilities 1. DELETE /api/debug/mw-check β publicly exposed tenant IDs and internal headers 2. FIX check-email PII leak β remove firstName and isReturningCustomer from response 3. ADD Zod validation to /api/checkout (503-line financial route) 4. ADD Zod validation to /api/create-payment-intent (880-line payment route) 5. ADD Zod validation to /api/gift-cards/purchase (gift card payment route) 6. FIX rate limiter fail-open β now fails CLOSED in production when Redis unavailable All three financial routes now validate request bodies through Zod schemas with typed constraints (email format, string lengths, number ranges, enums). Rate limiter denies requests in production if Redis is down instead of silently allowing unlimited throughput via ephemeral in-memory Map. Feature 6:43 PM Β· ZRosserMcIntosh
add Ring Forge experiment β particles coalesce onto 3D torus via gravitational attraction Full 3D toroidal physics: particles spawn from random spread, attract toward torus surface, settle and orbit Proper perspective projection with depth sorting and z-fade Wireframe torus overlay with major/minor ring circles Drag to rotate, auto-rotation controls, ring tilt Space to explode particles off the surface, R to reset 8 presets: Champagne Ring, Platinum Band, Rose Gold Shimmer, Diamond Dust, Nebula Forge, Ember Ring, Tight Band, Wide Orbit 8 color palettes matching Katura metals Settle tracking with glow intensifying as particles lock onto surface Trail rendering, turbulence, spawn rate, damping controls 10th experiment in developer library Feature 5:10 PM Β· ZRosserMcIntosh
add 6 developer experiments β blob playground, typography specimen, material explorer, color system, particle sandbox, cursor trails Blob Playground: animated gradient blobs with palette presets, blend modes, mouse attraction, live canvas Typography Specimen: interactive type tester with size/weight/tracking controls, Katura brand specimens, alphabet grid Material Explorer: precious metals selector with properties, diamond shape browser, composition preview Color System: champagne palette, metal gradients, surfaces, text opacity scale, WCAG contrast checker Particle Sandbox: canvas particle system with gravity, friction, connections, 8 presets (Star Field β Mouse Emit) Cursor Trails: mouse-following trails with 5 styles (ribbon/dots/glow/dashes/comet), sparkles, rainbow, 8 presets Updated developer library index with all 9 experiments Feature 4:51 PM Β· ZRosserMcIntosh
shooting stars lab, fix diamond visibility, fix product OG meta Add /developer/shooting-stars-lab with interactive controls: sliders for star count, speed, trail length, colors, nebula effects 7 presets (Deep Space, Meteor Shower, Aurora Night, etc) copy config JSON, reset, reshuffle, keyboard shortcut [H] Fix decorative diamonds on /design-your-ring hero: boost opacity from 0.15-0.3 to 0.45-0.7 raise z-index from z-0 to z-20 (above overlays) increase size from w-12/14 to w-14/16 add drop-shadow glow effect Fix product page OG metadata for social sharing: ensure absolute image URLs for og:image add width/height/siteName to openGraph images add twitter:card summary_large_image with product image fallback to katura-og.png when no product image Update developer library index with new experiment Update 4:12 PM Β· ZRosserMcIntosh
add seed to cap table initialization + reseed action Added seed_cap_table_katura.sql to the initialization flow Added 'reseed' POST action for re-running seed without full init Ran seed against production DB β cap table now populated: October Skies Benediction LLC (DBA Katura 1999) Class A Common: 10M authorized / 8.5M issued Preferred (Blank Check): 5M authorized / 0 issued 2026 Equity Incentive Plan: 1.5M reserved Lee Wiser McIntosh: 8.5M shares (100% founder) Feature 3:47 PM Β· ZRosserMcIntosh
developer lab + shooting stars + cap table initialization Developer Library: /developer is now a curated experiment index page moved existing ring builder to /developer/ring-builder created /developer/shooting-stars β full-screen constellation visual with twinkling stars and shooting star animations (adapted from Stella Real Estate ConstellationVisuals) Cap Table Initialization Fix: CapTableData.company type now allows null (matches API response) CapTableInner shows 'Initialize Cap Table' button when company is null or _migrationRequired is true (instead of crashing) Added initialize_tables POST action that reads migration SQL files from migrations/cap-table/ and executes them in order One-click initialization: creates all tables, enums, indexes, then creates the default company (October Skies Benediction LLC) Update 3:30 PM Β· ZRosserMcIntosh
data isolation & design-your-ring hero updates Data Isolation (Sprint 1 fixes): admin/team/company-structure: exclude platform tenant owners api/admin/audit: scope audit logs and filter dropdown to Katura only admin dashboard: storefront-scope all queries (orders, products) admin/services: scope service requests and team members admin/assets: exclude platform tenant owners from team members docs: add TENANT-DATA-ISOLATION-AUDIT.md documenting all 8 vectors Design-Your-Ring Hero Updates: remove Sparkles/star icon overlay behind round diamond add 8 diamond shapes in desktop-only zig-zag pattern (left/right flanking) update pricing translations to clarify band & metal setting included replace Image component with img tag in zig-zag for stability