[dotenv@17.2.3] injecting env (156) from .env -- tip: ≡ƒöÉ prevent committing .env to code: https://dotenvx.com/precommit
[dotenv@17.2.3] injecting env (0) from .env -- tip: ≡ƒùé∩╕Å backup and recover secrets: https://dotenvx.com/ops
[protected-image] IMAGE_ROOTS = [ 'C:\\Bordales Projects\\giftwrap - Copy\\protected\\images' ]
[protected-image] IMAGE_ROOT = /home/bordales/public_html/v1/protected/images
[protected-image] SKU fallback enabled
node : [STS] Private key not loaded: ENOENT: no such file or directory, open 'C:\Bordales Projects\giftwrap - 
Copy\keys\gate-private.pem'
At line:1 char:54
+ ... es Projects\giftwrap - Copy'; node server.js *> 'tmp_server_live.log'
+                                   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: ([STS] Private k...te-private.pem':String) [], RemoteException
    + FullyQualifiedErrorId : NativeCommandError
 
[Server] Γ£à Real-Time Monitor: Initialized
[protected-image] Cache initialized with 9640 files
[Schema] PRICE_HAS_COST_MARKUP = true
Γ£à Database synced ΓÇô tables are ready
[Server] Running on port 3000 in development mode
[Server] Health check: http://localhost:3000/healthz
[Server] Ready check: http://localhost:3000/readyz
[Server] Γ£à WhatsApp Service: Loaded
[Server] Γ£à AI Assistant: Loaded
[Server] Γ£à Gate System: Loaded
{"t":"2026-03-11T16:26:15.032Z","event":"tenancy.host","rid":"9785599b-d986-4199-84cc-a19795cb993d","raw":"localhost","norm":"localhost"}
{"t":"2026-03-11T16:26:15.052Z","event":"tenants.lookup.localhost.ok","rid":"9785599b-d986-4199-84cc-a19795cb993d","ms":19.0694,"sql":"SELECT id, name, domain, base_currency, timezone, recaptcha_secret, recaptcha_site_key, theme, email, phone, address, company_name FROM tenants WHERE id = 1 LIMIT 1","params":[],"rows":1}
{"t":"2026-03-11T16:26:15.079Z","event":"tenants.profile.ok","rid":"9785599b-d986-4199-84cc-a19795cb993d","ms":23.517,"sql":"SELECT logo_path, trading_name, phone_main, phone_alt, support_email, website_url FROM tenant_company_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T16:26:15.095Z","event":"tenants.brand.ok","rid":"9785599b-d986-4199-84cc-a19795cb993d","ms":15.765,"sql":"SELECT brand_name, brand_tagline, voice_tone, guidelines FROM tenant_brand_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T16:26:15.096Z","event":"tenancy.recaptcha","rid":"9785599b-d986-4199-84cc-a19795cb993d","tenant":"Giftwrap Trading (Pty) Ltd","has_recaptcha_secret":true,"has_recaptcha_key":true}
{"t":"2026-03-11T16:26:15.097Z","event":"tenancy.ok","rid":"9785599b-d986-4199-84cc-a19795cb993d","ms":67,"hostRaw":"localhost:3000","hostNorm":"localhost","matched":true,"tenant":{"id":1,"domain":"giftwrap.co.za"},"hdrs":{"host":"localhost:3000","xfh":null,"xoh":null}}
{"t":"2026-03-11T16:26:15.191Z","event":"tenancy.host","rid":"f3d1f36c-c9e9-4dfc-9d94-2a0c45257afa","raw":"localhost","norm":"localhost"}
{"t":"2026-03-11T16:26:15.223Z","event":"tenants.lookup.localhost.ok","rid":"f3d1f36c-c9e9-4dfc-9d94-2a0c45257afa","ms":31.6336,"sql":"SELECT id, name, domain, base_currency, timezone, recaptcha_secret, recaptcha_site_key, theme, email, phone, address, company_name FROM tenants WHERE id = 1 LIMIT 1","params":[],"rows":1}
{"t":"2026-03-11T16:26:15.246Z","event":"tenants.profile.ok","rid":"f3d1f36c-c9e9-4dfc-9d94-2a0c45257afa","ms":23.2742,"sql":"SELECT logo_path, trading_name, phone_main, phone_alt, support_email, website_url FROM tenant_company_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T16:26:15.266Z","event":"tenants.brand.ok","rid":"f3d1f36c-c9e9-4dfc-9d94-2a0c45257afa","ms":18.9617,"sql":"SELECT brand_name, brand_tagline, voice_tone, guidelines FROM tenant_brand_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T16:26:15.268Z","event":"tenancy.recaptcha","rid":"f3d1f36c-c9e9-4dfc-9d94-2a0c45257afa","tenant":"Giftwrap Trading (Pty) Ltd","has_recaptcha_secret":true,"has_recaptcha_key":true}
{"t":"2026-03-11T16:26:15.273Z","event":"tenancy.ok","rid":"f3d1f36c-c9e9-4dfc-9d94-2a0c45257afa","ms":82,"hostRaw":"localhost:3000","hostNorm":"localhost","matched":true,"tenant":{"id":1,"domain":"giftwrap.co.za"},"hdrs":{"host":"localhost:3000","xfh":null,"xoh":null}}
{"t":"2026-03-11T16:26:15.331Z","event":"tenancy.host","rid":"be8eb565-428b-4b09-999c-26a491f3d928","raw":"localhost","norm":"localhost"}
{"t":"2026-03-11T16:26:15.373Z","event":"tenants.lookup.localhost.ok","rid":"be8eb565-428b-4b09-999c-26a491f3d928","ms":41.1833,"sql":"SELECT id, name, domain, base_currency, timezone, recaptcha_secret, recaptcha_site_key, theme, email, phone, address, company_name FROM tenants WHERE id = 1 LIMIT 1","params":[],"rows":1}
{"t":"2026-03-11T16:26:15.414Z","event":"tenants.profile.ok","rid":"be8eb565-428b-4b09-999c-26a491f3d928","ms":40.2139,"sql":"SELECT logo_path, trading_name, phone_main, phone_alt, support_email, website_url FROM tenant_company_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T16:26:15.432Z","event":"tenants.brand.ok","rid":"be8eb565-428b-4b09-999c-26a491f3d928","ms":17.8655,"sql":"SELECT brand_name, brand_tagline, voice_tone, guidelines FROM tenant_brand_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T16:26:15.432Z","event":"tenancy.recaptcha","rid":"be8eb565-428b-4b09-999c-26a491f3d928","tenant":"Giftwrap Trading (Pty) Ltd","has_recaptcha_secret":true,"has_recaptcha_key":true}
{"t":"2026-03-11T16:26:15.433Z","event":"tenancy.ok","rid":"be8eb565-428b-4b09-999c-26a491f3d928","ms":102,"hostRaw":"localhost:3000","hostNorm":"localhost","matched":true,"tenant":{"id":1,"domain":"giftwrap.co.za"},"hdrs":{"host":"localhost:3000","xfh":null,"xoh":null}}
{"t":"2026-03-11T16:26:15.481Z","event":"tenancy.host","rid":"db0c8f1d-c79b-4056-a482-e8222c5a4ac7","raw":"localhost","norm":"localhost"}
{"t":"2026-03-11T16:26:15.511Z","event":"tenants.lookup.localhost.ok","rid":"db0c8f1d-c79b-4056-a482-e8222c5a4ac7","ms":29.7609,"sql":"SELECT id, name, domain, base_currency, timezone, recaptcha_secret, recaptcha_site_key, theme, email, phone, address, company_name FROM tenants WHERE id = 1 LIMIT 1","params":[],"rows":1}
{"t":"2026-03-11T16:26:15.515Z","event":"tenancy.host","rid":"a4caf341-ef0e-4d74-af7d-ca8dd58d5cea","raw":"localhost","norm":"localhost"}
{"t":"2026-03-11T16:26:15.540Z","event":"tenants.profile.ok","rid":"db0c8f1d-c79b-4056-a482-e8222c5a4ac7","ms":28.5756,"sql":"SELECT logo_path, trading_name, phone_main, phone_alt, support_email, website_url FROM tenant_company_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T16:26:15.542Z","event":"tenants.lookup.localhost.ok","rid":"a4caf341-ef0e-4d74-af7d-ca8dd58d5cea","ms":26.7378,"sql":"SELECT id, name, domain, base_currency, timezone, recaptcha_secret, recaptcha_site_key, theme, email, phone, address, company_name FROM tenants WHERE id = 1 LIMIT 1","params":[],"rows":1}
{"t":"2026-03-11T16:26:15.561Z","event":"tenants.brand.ok","rid":"db0c8f1d-c79b-4056-a482-e8222c5a4ac7","ms":19.7348,"sql":"SELECT brand_name, brand_tagline, voice_tone, guidelines FROM tenant_brand_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T16:26:15.561Z","event":"tenancy.recaptcha","rid":"db0c8f1d-c79b-4056-a482-e8222c5a4ac7","tenant":"Giftwrap Trading (Pty) Ltd","has_recaptcha_secret":true,"has_recaptcha_key":true}
{"t":"2026-03-11T16:26:15.561Z","event":"tenancy.ok","rid":"db0c8f1d-c79b-4056-a482-e8222c5a4ac7","ms":80,"hostRaw":"localhost:3000","hostNorm":"localhost","matched":true,"tenant":{"id":1,"domain":"giftwrap.co.za"},"hdrs":{"host":"localhost:3000","xfh":null,"xoh":null}}
{"t":"2026-03-11T16:26:15.571Z","event":"tenants.profile.ok","rid":"a4caf341-ef0e-4d74-af7d-ca8dd58d5cea","ms":24.8392,"sql":"SELECT logo_path, trading_name, phone_main, phone_alt, support_email, website_url FROM tenant_company_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T16:26:15.599Z","event":"tenants.brand.ok","rid":"a4caf341-ef0e-4d74-af7d-ca8dd58d5cea","ms":27.5233,"sql":"SELECT brand_name, brand_tagline, voice_tone, guidelines FROM tenant_brand_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T16:26:15.599Z","event":"tenancy.recaptcha","rid":"a4caf341-ef0e-4d74-af7d-ca8dd58d5cea","tenant":"Giftwrap Trading (Pty) Ltd","has_recaptcha_secret":true,"has_recaptcha_key":true}
{"t":"2026-03-11T16:26:15.601Z","event":"tenancy.ok","rid":"a4caf341-ef0e-4d74-af7d-ca8dd58d5cea","ms":85,"hostRaw":"localhost:3000","hostNorm":"localhost","matched":true,"tenant":{"id":1,"domain":"giftwrap.co.za"},"hdrs":{"host":"localhost:3000","xfh":null,"xoh":null}}
[DEBUG] [SPA] buildSpa called for path: /corporate-gifts
[SPA] Building for path: /corporate-gifts
[DEBUG] [SEO] applyThemeAndSeo called for path: /corporate-gifts
[DEBUG] [SEO] Fetching data...
[DEBUG] [SEO] fetchThemeVars for tenant: 1
[DEBUG] [SEO] fetchThemeVars done: 16 rows
[DEBUG] [SEO] fetchSeoMeta for tenant: 1, path: /corporate-gifts
{"t":"2026-03-11T16:26:15.692Z","event":"tenancy.host","rid":"9d952bfa-519d-4b02-a0c7-4d04272cc06e","raw":"localhost","norm":"localhost"}
{"t":"2026-03-11T16:26:15.712Z","event":"tenants.lookup.localhost.ok","rid":"9d952bfa-519d-4b02-a0c7-4d04272cc06e","ms":16.6491,"sql":"SELECT id, name, domain, base_currency, timezone, recaptcha_secret, recaptcha_site_key, theme, email, phone, address, company_name FROM tenants WHERE id = 1 LIMIT 1","params":[],"rows":1}
[DEBUG] [SEO] fetchSeoMeta done: meta=false, links=2
[DEBUG] [SEO] Data fetched.
[seoService] injectionBlock length: 2146
[seoService] Splitting HTML...
[seoService] headSplit parts: 2
[seoService] Injecting into </head> at segment 0
{"t":"2026-03-11T16:26:15.759Z","event":"tenants.profile.ok","rid":"9d952bfa-519d-4b02-a0c7-4d04272cc06e","ms":47.0077,"sql":"SELECT logo_path, trading_name, phone_main, phone_alt, support_email, website_url FROM tenant_company_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T16:26:15.781Z","event":"tenancy.host","rid":"a19fad91-cfb7-4e4b-a5e7-66639debdce0","raw":"localhost","norm":"localhost"}
{"t":"2026-03-11T16:26:15.792Z","event":"tenants.brand.ok","rid":"9d952bfa-519d-4b02-a0c7-4d04272cc06e","ms":32.1255,"sql":"SELECT brand_name, brand_tagline, voice_tone, guidelines FROM tenant_brand_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T16:26:15.792Z","event":"tenancy.recaptcha","rid":"9d952bfa-519d-4b02-a0c7-4d04272cc06e","tenant":"Giftwrap Trading (Pty) Ltd","has_recaptcha_secret":true,"has_recaptcha_key":true}
{"t":"2026-03-11T16:26:15.794Z","event":"tenancy.ok","rid":"9d952bfa-519d-4b02-a0c7-4d04272cc06e","ms":102,"hostRaw":"localhost:3000","hostNorm":"localhost","matched":true,"tenant":{"id":1,"domain":"giftwrap.co.za"},"hdrs":{"host":"localhost:3000","xfh":null,"xoh":null}}
=== SEARCH REQUEST ===
Processing search for: { q: 'GWBZZ003', tenantId: 1, limit: 3, offset: 0 }
SQL Query: 
                SELECT SQL_CALC_FOUND_ROWS
                    p.id,
                    p.sku,
                    p.name,
                    p.page_title,
                    p.meta_description,
                    p.slug,
                    p.short_description,
                    p.description as long_description,
                    p.supplier_code,
                    p.status,
                    p.selling_price,
                    p.base_price,
                    p.image_url,
      ...
Params: [
  '%GWBZZ003%', '%GWBZZ003%',
  '%GWBZZ003%', '%GWBZZ003%',
  '%GWBZZ003%', 1,
  '%GWBZZ003%', '%GWBZZ003%',
  '%GWBZZ003%', '%GWBZZ003%',
  '%GWBZZ003%', 'GWBZZ003',
  'GWBZZ003',   '%GWBZZ003%',
  3,            0
]
{"t":"2026-03-11T16:26:15.822Z","event":"tenants.lookup.localhost.ok","rid":"a19fad91-cfb7-4e4b-a5e7-66639debdce0","ms":36.3813,"sql":"SELECT id, name, domain, base_currency, timezone, recaptcha_secret, recaptcha_site_key, theme, email, phone, address, company_name FROM tenants WHERE id = 1 LIMIT 1","params":[],"rows":1}
{"t":"2026-03-11T16:26:15.844Z","event":"tenants.profile.ok","rid":"a19fad91-cfb7-4e4b-a5e7-66639debdce0","ms":21.1529,"sql":"SELECT logo_path, trading_name, phone_main, phone_alt, support_email, website_url FROM tenant_company_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T16:26:15.862Z","event":"tenants.brand.ok","rid":"a19fad91-cfb7-4e4b-a5e7-66639debdce0","ms":17.2464,"sql":"SELECT brand_name, brand_tagline, voice_tone, guidelines FROM tenant_brand_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T16:26:15.862Z","event":"tenancy.recaptcha","rid":"a19fad91-cfb7-4e4b-a5e7-66639debdce0","tenant":"Giftwrap Trading (Pty) Ltd","has_recaptcha_secret":true,"has_recaptcha_key":true}
{"t":"2026-03-11T16:26:15.862Z","event":"tenancy.ok","rid":"a19fad91-cfb7-4e4b-a5e7-66639debdce0","ms":81,"hostRaw":"localhost:3000","hostNorm":"localhost","matched":true,"tenant":{"id":1,"domain":"giftwrap.co.za"},"hdrs":{"host":"localhost:3000","xfh":null,"xoh":null}}
[DEBUG] [SPA] buildSpa called for path: /branding
[SPA] Building for path: /branding
[DEBUG] [SEO] applyThemeAndSeo called for path: /branding
[DEBUG] [SEO] Fetching data...
[DEBUG] [SEO] fetchThemeVars for tenant: 1
[DEBUG] [SEO] fetchThemeVars done: 16 rows
[DEBUG] [SEO] fetchSeoMeta for tenant: 1, path: /branding
[DEBUG] [SEO] fetchSeoMeta done: meta=false, links=2
[DEBUG] [SEO] Data fetched.
[seoService] injectionBlock length: 2125
[seoService] Splitting HTML...
[seoService] headSplit parts: 2
[seoService] Injecting into </head> at segment 0
{"t":"2026-03-11T16:26:15.936Z","event":"tenancy.host","rid":"2afa355a-2bdb-46f3-93bc-0404231ec385","raw":"localhost","norm":"localhost"}
{"t":"2026-03-11T16:26:15.947Z","event":"tenants.lookup.localhost.ok","rid":"2afa355a-2bdb-46f3-93bc-0404231ec385","ms":11.4217,"sql":"SELECT id, name, domain, base_currency, timezone, recaptcha_secret, recaptcha_site_key, theme, email, phone, address, company_name FROM tenants WHERE id = 1 LIMIT 1","params":[],"rows":1}
{"t":"2026-03-11T16:26:15.960Z","event":"tenants.profile.ok","rid":"2afa355a-2bdb-46f3-93bc-0404231ec385","ms":12.0078,"sql":"SELECT logo_path, trading_name, phone_main, phone_alt, support_email, website_url FROM tenant_company_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T16:26:15.974Z","event":"tenants.brand.ok","rid":"2afa355a-2bdb-46f3-93bc-0404231ec385","ms":13.6616,"sql":"SELECT brand_name, brand_tagline, voice_tone, guidelines FROM tenant_brand_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T16:26:15.974Z","event":"tenancy.recaptcha","rid":"2afa355a-2bdb-46f3-93bc-0404231ec385","tenant":"Giftwrap Trading (Pty) Ltd","has_recaptcha_secret":true,"has_recaptcha_key":true}
{"t":"2026-03-11T16:26:15.974Z","event":"tenancy.ok","rid":"2afa355a-2bdb-46f3-93bc-0404231ec385","ms":38,"hostRaw":"localhost:3000","hostNorm":"localhost","matched":true,"tenant":{"id":1,"domain":"giftwrap.co.za"},"hdrs":{"host":"localhost:3000","xfh":null,"xoh":null}}
[DEBUG] [SPA] buildSpa called for path: /blog
[SPA] Building for path: /blog
[DEBUG] [SEO] applyThemeAndSeo called for path: /blog
[DEBUG] [SEO] Fetching data...
[DEBUG] [SEO] fetchThemeVars for tenant: 1
[DEBUG] [SEO] fetchThemeVars done: 16 rows
[DEBUG] [SEO] fetchSeoMeta for tenant: 1, path: /blog
[DEBUG] [SEO] fetchSeoMeta done: meta=false, links=2
[DEBUG] [SEO] Data fetched.
[seoService] injectionBlock length: 2113
[seoService] Splitting HTML...
[seoService] headSplit parts: 2
[seoService] Injecting into </head> at segment 0
{"t":"2026-03-11T16:26:16.087Z","event":"tenancy.host","rid":"0c6bdb71-6800-49f7-b556-a35a2b291899","raw":"localhost","norm":"localhost"}
{"t":"2026-03-11T16:26:16.117Z","event":"tenants.lookup.localhost.ok","rid":"0c6bdb71-6800-49f7-b556-a35a2b291899","ms":29.796,"sql":"SELECT id, name, domain, base_currency, timezone, recaptcha_secret, recaptcha_site_key, theme, email, phone, address, company_name FROM tenants WHERE id = 1 LIMIT 1","params":[],"rows":1}
{"t":"2026-03-11T16:26:16.146Z","event":"tenants.profile.ok","rid":"0c6bdb71-6800-49f7-b556-a35a2b291899","ms":23.607,"sql":"SELECT logo_path, trading_name, phone_main, phone_alt, support_email, website_url FROM tenant_company_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T16:26:16.163Z","event":"tenants.brand.ok","rid":"0c6bdb71-6800-49f7-b556-a35a2b291899","ms":16.6361,"sql":"SELECT brand_name, brand_tagline, voice_tone, guidelines FROM tenant_brand_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T16:26:16.164Z","event":"tenancy.recaptcha","rid":"0c6bdb71-6800-49f7-b556-a35a2b291899","tenant":"Giftwrap Trading (Pty) Ltd","has_recaptcha_secret":true,"has_recaptcha_key":true}
{"t":"2026-03-11T16:26:16.165Z","event":"tenancy.ok","rid":"0c6bdb71-6800-49f7-b556-a35a2b291899","ms":79,"hostRaw":"localhost:3000","hostNorm":"localhost","matched":true,"tenant":{"id":1,"domain":"giftwrap.co.za"},"hdrs":{"host":"localhost:3000","xfh":null,"xoh":null}}
[DEBUG] [SPA] buildSpa called for path: /contact
[SPA] Building for path: /contact
[DEBUG] [SEO] applyThemeAndSeo called for path: /contact
[DEBUG] [SEO] Fetching data...
[DEBUG] [SEO] fetchThemeVars for tenant: 1
Product loaded: {
  id: 23261,
  sku: 'GWBZZ003',
  name: 'Zip Thru Sweat Jacket',
  final_image_url: '/protected-image/GWBZZ003b.jpg',
  categories_parsed: [ 'Corporate Clothing' ]
}
[TOP-DEBUG] Request: GET /api/v3/products?search=GWBZZ003&limit=3
[DEBUG] [SEO] fetchThemeVars done: 16 rows
[DEBUG] [SEO] fetchSeoMeta for tenant: 1, path: /contact
{"t":"2026-03-11T16:26:16.222Z","event":"tenancy.host","rid":"43532918-68be-4d90-8871-300b662b2d41","raw":"localhost","norm":"localhost"}
{"t":"2026-03-11T16:26:16.245Z","event":"tenants.lookup.localhost.ok","rid":"43532918-68be-4d90-8871-300b662b2d41","ms":22.6107,"sql":"SELECT id, name, domain, base_currency, timezone, recaptcha_secret, recaptcha_site_key, theme, email, phone, address, company_name FROM tenants WHERE id = 1 LIMIT 1","params":[],"rows":1}
[DEBUG] [SEO] fetchSeoMeta done: meta=true, links=2
[DEBUG] [SEO] Data fetched.
[seoService] injectionBlock length: 2145
[seoService] Splitting HTML...
[seoService] headSplit parts: 2
[seoService] Injecting into </head> at segment 0
{"t":"2026-03-11T16:26:16.273Z","event":"tenants.profile.ok","rid":"43532918-68be-4d90-8871-300b662b2d41","ms":28.3489,"sql":"SELECT logo_path, trading_name, phone_main, phone_alt, support_email, website_url FROM tenant_company_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T16:26:16.294Z","event":"tenancy.host","rid":"64d00cb2-3fb3-4943-b12e-26b4e9edb642","raw":"localhost","norm":"localhost"}
{"t":"2026-03-11T16:26:16.297Z","event":"tenants.brand.ok","rid":"43532918-68be-4d90-8871-300b662b2d41","ms":23.1641,"sql":"SELECT brand_name, brand_tagline, voice_tone, guidelines FROM tenant_brand_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T16:26:16.298Z","event":"tenancy.recaptcha","rid":"43532918-68be-4d90-8871-300b662b2d41","tenant":"Giftwrap Trading (Pty) Ltd","has_recaptcha_secret":true,"has_recaptcha_key":true}
{"t":"2026-03-11T16:26:16.298Z","event":"tenancy.ok","rid":"43532918-68be-4d90-8871-300b662b2d41","ms":76,"hostRaw":"localhost:3000","hostNorm":"localhost","matched":true,"tenant":{"id":1,"domain":"giftwrap.co.za"},"hdrs":{"host":"localhost:3000","xfh":null,"xoh":null}}
{"t":"2026-03-11T16:26:16.313Z","event":"tenants.lookup.localhost.ok","rid":"64d00cb2-3fb3-4943-b12e-26b4e9edb642","ms":17.745,"sql":"SELECT id, name, domain, base_currency, timezone, recaptcha_secret, recaptcha_site_key, theme, email, phone, address, company_name FROM tenants WHERE id = 1 LIMIT 1","params":[],"rows":1}
[V3-DEBUG] Request: GET /api/v3/products?search=GWBZZ003&limit=3 -> path inside router: /products
{"t":"2026-03-11T16:26:16.332Z","event":"tenants.profile.ok","rid":"64d00cb2-3fb3-4943-b12e-26b4e9edb642","ms":18.6962,"sql":"SELECT logo_path, trading_name, phone_main, phone_alt, support_email, website_url FROM tenant_company_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T16:26:16.347Z","event":"tenants.brand.ok","rid":"64d00cb2-3fb3-4943-b12e-26b4e9edb642","ms":15.456,"sql":"SELECT brand_name, brand_tagline, voice_tone, guidelines FROM tenant_brand_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T16:26:16.347Z","event":"tenancy.recaptcha","rid":"64d00cb2-3fb3-4943-b12e-26b4e9edb642","tenant":"Giftwrap Trading (Pty) Ltd","has_recaptcha_secret":true,"has_recaptcha_key":true}
{"t":"2026-03-11T16:26:16.348Z","event":"tenancy.ok","rid":"64d00cb2-3fb3-4943-b12e-26b4e9edb642","ms":54,"hostRaw":"localhost:3000","hostNorm":"localhost","matched":true,"tenant":{"id":1,"domain":"giftwrap.co.za"},"hdrs":{"host":"localhost:3000","xfh":null,"xoh":null}}
[DEBUG] [SPA] buildSpa called for path: /shop-by-price
[SPA] Building for path: /shop-by-price
[DEBUG] [SEO] applyThemeAndSeo called for path: /shop-by-price
[DEBUG] [SEO] Fetching data...
[DEBUG] [SEO] fetchThemeVars for tenant: 1
[DEBUG] [SEO] fetchThemeVars done: 16 rows
[DEBUG] [SEO] fetchSeoMeta for tenant: 1, path: /shop-by-price
[DEBUG] [SEO] fetchSeoMeta done: meta=false, links=2
[DEBUG] [SEO] Data fetched.
[seoService] injectionBlock length: 2140
[seoService] Splitting HTML...
[seoService] headSplit parts: 2
[seoService] Injecting into </head> at segment 0
[TOP-DEBUG] Request: GET /api/v3/products?search=SHOPIFY-44581809553570&limit=3
{"t":"2026-03-11T16:26:17.839Z","event":"tenancy.host","rid":"ecdc1df6-48d1-475f-85c1-78184b5c9674","raw":"localhost","norm":"localhost"}
{"t":"2026-03-11T16:26:17.856Z","event":"tenants.lookup.localhost.ok","rid":"ecdc1df6-48d1-475f-85c1-78184b5c9674","ms":15.6618,"sql":"SELECT id, name, domain, base_currency, timezone, recaptcha_secret, recaptcha_site_key, theme, email, phone, address, company_name FROM tenants WHERE id = 1 LIMIT 1","params":[],"rows":1}
{"t":"2026-03-11T16:26:17.880Z","event":"tenants.profile.ok","rid":"ecdc1df6-48d1-475f-85c1-78184b5c9674","ms":22.78,"sql":"SELECT logo_path, trading_name, phone_main, phone_alt, support_email, website_url FROM tenant_company_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T16:26:17.896Z","event":"tenants.brand.ok","rid":"ecdc1df6-48d1-475f-85c1-78184b5c9674","ms":15.5984,"sql":"SELECT brand_name, brand_tagline, voice_tone, guidelines FROM tenant_brand_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T16:26:17.896Z","event":"tenancy.recaptcha","rid":"ecdc1df6-48d1-475f-85c1-78184b5c9674","tenant":"Giftwrap Trading (Pty) Ltd","has_recaptcha_secret":true,"has_recaptcha_key":true}
{"t":"2026-03-11T16:26:17.896Z","event":"tenancy.ok","rid":"ecdc1df6-48d1-475f-85c1-78184b5c9674","ms":57,"hostRaw":"localhost:3000","hostNorm":"localhost","matched":true,"tenant":{"id":1,"domain":"giftwrap.co.za"},"hdrs":{"host":"localhost:3000","xfh":null,"xoh":null}}
[V3-DEBUG] Request: GET /api/v3/products?search=SHOPIFY-44581809553570&limit=3 -> path inside router: /products
[TOP-DEBUG] Request: GET /api/v3/products?limit=5&sortColumn=price&sortOrder=ASC
{"t":"2026-03-11T16:26:18.655Z","event":"tenancy.host","rid":"025ba35f-3f94-4436-a7ed-c798c5c7c145","raw":"localhost","norm":"localhost"}
{"t":"2026-03-11T16:26:18.687Z","event":"tenants.lookup.localhost.ok","rid":"025ba35f-3f94-4436-a7ed-c798c5c7c145","ms":28.7939,"sql":"SELECT id, name, domain, base_currency, timezone, recaptcha_secret, recaptcha_site_key, theme, email, phone, address, company_name FROM tenants WHERE id = 1 LIMIT 1","params":[],"rows":1}
{"t":"2026-03-11T16:26:18.710Z","event":"tenants.profile.ok","rid":"025ba35f-3f94-4436-a7ed-c798c5c7c145","ms":22.9497,"sql":"SELECT logo_path, trading_name, phone_main, phone_alt, support_email, website_url FROM tenant_company_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T16:26:18.744Z","event":"tenants.brand.ok","rid":"025ba35f-3f94-4436-a7ed-c798c5c7c145","ms":33.3668,"sql":"SELECT brand_name, brand_tagline, voice_tone, guidelines FROM tenant_brand_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T16:26:18.744Z","event":"tenancy.recaptcha","rid":"025ba35f-3f94-4436-a7ed-c798c5c7c145","tenant":"Giftwrap Trading (Pty) Ltd","has_recaptcha_secret":true,"has_recaptcha_key":true}
{"t":"2026-03-11T16:26:18.744Z","event":"tenancy.ok","rid":"025ba35f-3f94-4436-a7ed-c798c5c7c145","ms":89,"hostRaw":"localhost:3000","hostNorm":"localhost","matched":true,"tenant":{"id":1,"domain":"giftwrap.co.za"},"hdrs":{"host":"localhost:3000","xfh":null,"xoh":null}}
[V3-DEBUG] Request: GET /api/v3/products?limit=5&sortColumn=price&sortOrder=ASC -> path inside router: /products
{"t":"2026-03-11T16:26:55.729Z","event":"tenancy.host","rid":"76751b62-70eb-46b3-aab1-3dd602d8d1c6","raw":"localhost","norm":"localhost"}
{"t":"2026-03-11T16:26:55.749Z","event":"tenants.lookup.localhost.ok","rid":"76751b62-70eb-46b3-aab1-3dd602d8d1c6","ms":19.7519,"sql":"SELECT id, name, domain, base_currency, timezone, recaptcha_secret, recaptcha_site_key, theme, email, phone, address, company_name FROM tenants WHERE id = 1 LIMIT 1","params":[],"rows":1}
{"t":"2026-03-11T16:26:55.767Z","event":"tenants.profile.ok","rid":"76751b62-70eb-46b3-aab1-3dd602d8d1c6","ms":16.976,"sql":"SELECT logo_path, trading_name, phone_main, phone_alt, support_email, website_url FROM tenant_company_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T16:26:55.785Z","event":"tenants.brand.ok","rid":"76751b62-70eb-46b3-aab1-3dd602d8d1c6","ms":17.2981,"sql":"SELECT brand_name, brand_tagline, voice_tone, guidelines FROM tenant_brand_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T16:26:55.785Z","event":"tenancy.recaptcha","rid":"76751b62-70eb-46b3-aab1-3dd602d8d1c6","tenant":"Giftwrap Trading (Pty) Ltd","has_recaptcha_secret":true,"has_recaptcha_key":true}
{"t":"2026-03-11T16:26:55.785Z","event":"tenancy.ok","rid":"76751b62-70eb-46b3-aab1-3dd602d8d1c6","ms":56,"hostRaw":"localhost:3000","hostNorm":"localhost","matched":true,"tenant":{"id":1,"domain":"giftwrap.co.za"},"hdrs":{"host":"localhost:3000","xfh":null,"xoh":null}}
{"t":"2026-03-11T16:26:55.846Z","event":"tenancy.host","rid":"f3137ead-3101-4c58-9c5b-a32ca3146614","raw":"localhost","norm":"localhost"}
{"t":"2026-03-11T16:26:55.860Z","event":"tenants.lookup.localhost.ok","rid":"f3137ead-3101-4c58-9c5b-a32ca3146614","ms":13.4223,"sql":"SELECT id, name, domain, base_currency, timezone, recaptcha_secret, recaptcha_site_key, theme, email, phone, address, company_name FROM tenants WHERE id = 1 LIMIT 1","params":[],"rows":1}
{"t":"2026-03-11T16:26:55.885Z","event":"tenants.profile.ok","rid":"f3137ead-3101-4c58-9c5b-a32ca3146614","ms":24.4419,"sql":"SELECT logo_path, trading_name, phone_main, phone_alt, support_email, website_url FROM tenant_company_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T16:26:55.901Z","event":"tenants.brand.ok","rid":"f3137ead-3101-4c58-9c5b-a32ca3146614","ms":14.7263,"sql":"SELECT brand_name, brand_tagline, voice_tone, guidelines FROM tenant_brand_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T16:26:55.903Z","event":"tenancy.recaptcha","rid":"f3137ead-3101-4c58-9c5b-a32ca3146614","tenant":"Giftwrap Trading (Pty) Ltd","has_recaptcha_secret":true,"has_recaptcha_key":true}
{"t":"2026-03-11T16:26:55.905Z","event":"tenancy.ok","rid":"f3137ead-3101-4c58-9c5b-a32ca3146614","ms":59,"hostRaw":"localhost:3000","hostNorm":"localhost","matched":true,"tenant":{"id":1,"domain":"giftwrap.co.za"},"hdrs":{"host":"localhost:3000","xfh":null,"xoh":null}}
=== SEARCH REQUEST ===
Processing search for: { q: 'GWBZZ003', tenantId: 1, limit: 1, offset: 0 }
SQL Query: 
                SELECT SQL_CALC_FOUND_ROWS
                    p.id,
                    p.sku,
                    p.name,
                    p.page_title,
                    p.meta_description,
                    p.slug,
                    p.short_description,
                    p.description as long_description,
                    p.supplier_code,
                    p.status,
                    p.selling_price,
                    p.base_price,
                    p.image_url,
      ...
Params: [
  '%GWBZZ003%', '%GWBZZ003%',
  '%GWBZZ003%', '%GWBZZ003%',
  '%GWBZZ003%', 1,
  '%GWBZZ003%', '%GWBZZ003%',
  '%GWBZZ003%', '%GWBZZ003%',
  '%GWBZZ003%', 'GWBZZ003',
  'GWBZZ003',   '%GWBZZ003%',
  1,            0
]
Product loaded: {
  id: 23261,
  sku: 'GWBZZ003',
  name: 'Zip Thru Sweat Jacket',
  final_image_url: '/protected-image/GWBZZ003b.jpg',
  categories_parsed: [ 'Corporate Clothing' ]
}
[API] {
  id: '76751b62-70eb-46b3-aab1-3dd602d8d1c6',
  status: 200,
  ms: 673,
  method: 'GET',
  path: '/api/store/categories/corporate-gifts?include=products&product_search=SHOPIFY-44581809553570&product_limit=3&product_offset=0',
  origin: null,
  host: 'localhost:3000',
  tenantId: 1,
  authenticated: false
}
{"t":"2026-03-11T16:26:56.429Z","event":"tenancy.host","rid":"bc25e507-b1e8-47f2-a2e3-6ae63841372e","raw":"localhost","norm":"localhost"}
{"t":"2026-03-11T16:26:56.449Z","event":"tenants.lookup.localhost.ok","rid":"bc25e507-b1e8-47f2-a2e3-6ae63841372e","ms":19.609,"sql":"SELECT id, name, domain, base_currency, timezone, recaptcha_secret, recaptcha_site_key, theme, email, phone, address, company_name FROM tenants WHERE id = 1 LIMIT 1","params":[],"rows":1}
{"t":"2026-03-11T16:26:56.475Z","event":"tenants.profile.ok","rid":"bc25e507-b1e8-47f2-a2e3-6ae63841372e","ms":25.6807,"sql":"SELECT logo_path, trading_name, phone_main, phone_alt, support_email, website_url FROM tenant_company_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T16:26:56.489Z","event":"tenants.brand.ok","rid":"bc25e507-b1e8-47f2-a2e3-6ae63841372e","ms":13.6638,"sql":"SELECT brand_name, brand_tagline, voice_tone, guidelines FROM tenant_brand_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T16:26:56.490Z","event":"tenancy.recaptcha","rid":"bc25e507-b1e8-47f2-a2e3-6ae63841372e","tenant":"Giftwrap Trading (Pty) Ltd","has_recaptcha_secret":true,"has_recaptcha_key":true}
{"t":"2026-03-11T16:26:56.490Z","event":"tenancy.ok","rid":"bc25e507-b1e8-47f2-a2e3-6ae63841372e","ms":61,"hostRaw":"localhost:3000","hostNorm":"localhost","matched":true,"tenant":{"id":1,"domain":"giftwrap.co.za"},"hdrs":{"host":"localhost:3000","xfh":null,"xoh":null}}
[API] {
  id: 'bc25e507-b1e8-47f2-a2e3-6ae63841372e',
  status: 200,
  ms: 142,
  method: 'GET',
  path: '/api/store/categories/corporate-gifts?include=products&product_search=GWSN091&product_limit=3&product_offset=0',
  origin: null,
  host: 'localhost:3000',
  tenantId: 1,
  authenticated: false
}
{"t":"2026-03-11T16:26:56.590Z","event":"tenancy.host","rid":"d56a34c7-599d-4a74-b911-474a5f2cc898","raw":"localhost","norm":"localhost"}
{"t":"2026-03-11T16:26:56.603Z","event":"tenants.lookup.localhost.ok","rid":"d56a34c7-599d-4a74-b911-474a5f2cc898","ms":12.899,"sql":"SELECT id, name, domain, base_currency, timezone, recaptcha_secret, recaptcha_site_key, theme, email, phone, address, company_name FROM tenants WHERE id = 1 LIMIT 1","params":[],"rows":1}
{"t":"2026-03-11T16:26:56.618Z","event":"tenants.profile.ok","rid":"d56a34c7-599d-4a74-b911-474a5f2cc898","ms":14.7288,"sql":"SELECT logo_path, trading_name, phone_main, phone_alt, support_email, website_url FROM tenant_company_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T16:26:56.633Z","event":"tenants.brand.ok","rid":"d56a34c7-599d-4a74-b911-474a5f2cc898","ms":14.5329,"sql":"SELECT brand_name, brand_tagline, voice_tone, guidelines FROM tenant_brand_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T16:26:56.634Z","event":"tenancy.recaptcha","rid":"d56a34c7-599d-4a74-b911-474a5f2cc898","tenant":"Giftwrap Trading (Pty) Ltd","has_recaptcha_secret":true,"has_recaptcha_key":true}
{"t":"2026-03-11T16:26:56.634Z","event":"tenancy.ok","rid":"d56a34c7-599d-4a74-b911-474a5f2cc898","ms":44,"hostRaw":"localhost:3000","hostNorm":"localhost","matched":true,"tenant":{"id":1,"domain":"giftwrap.co.za"},"hdrs":{"host":"localhost:3000","xfh":null,"xoh":null}}
=== SEARCH REQUEST ===
Processing search for: { q: 'GWSN091', tenantId: 1, limit: 3, offset: 0 }
SQL Query: 
                SELECT SQL_CALC_FOUND_ROWS
                    p.id,
                    p.sku,
                    p.name,
                    p.page_title,
                    p.meta_description,
                    p.slug,
                    p.short_description,
                    p.description as long_description,
                    p.supplier_code,
                    p.status,
                    p.selling_price,
                    p.base_price,
                    p.image_url,
      ...
Params: [
  '%GWSN091%', '%GWSN091%',
  '%GWSN091%', '%GWSN091%',
  '%GWSN091%', 1,
  '%GWSN091%', '%GWSN091%',
  '%GWSN091%', '%GWSN091%',
  '%GWSN091%', 'GWSN091',
  'GWSN091',   '%GWSN091%',
  3,           0
]
Product loaded: {
  id: 35053,
  sku: 'GWSN091',
  name: '1 Colour Jelly Bean Bottle Hamper',
  final_image_url: '/protected-image/GWSN091b.jpg',
  categories_parsed: [ 'Sweet Hampers' ]
}
{"t":"2026-03-11T16:27:19.585Z","event":"tenancy.host","rid":"4998b4c7-3137-4dff-8d89-6a793207d511","raw":"localhost","norm":"localhost"}
{"t":"2026-03-11T16:27:19.598Z","event":"tenants.lookup.localhost.ok","rid":"4998b4c7-3137-4dff-8d89-6a793207d511","ms":12.4875,"sql":"SELECT id, name, domain, base_currency, timezone, recaptcha_secret, recaptcha_site_key, theme, email, phone, address, company_name FROM tenants WHERE id = 1 LIMIT 1","params":[],"rows":1}
{"t":"2026-03-11T16:27:19.610Z","event":"tenants.profile.ok","rid":"4998b4c7-3137-4dff-8d89-6a793207d511","ms":11.7272,"sql":"SELECT logo_path, trading_name, phone_main, phone_alt, support_email, website_url FROM tenant_company_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T16:27:19.623Z","event":"tenants.brand.ok","rid":"4998b4c7-3137-4dff-8d89-6a793207d511","ms":13.0177,"sql":"SELECT brand_name, brand_tagline, voice_tone, guidelines FROM tenant_brand_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T16:27:19.623Z","event":"tenancy.recaptcha","rid":"4998b4c7-3137-4dff-8d89-6a793207d511","tenant":"Giftwrap Trading (Pty) Ltd","has_recaptcha_secret":true,"has_recaptcha_key":true}
{"t":"2026-03-11T16:27:19.624Z","event":"tenancy.ok","rid":"4998b4c7-3137-4dff-8d89-6a793207d511","ms":39,"hostRaw":"localhost:3000","hostNorm":"localhost","matched":true,"tenant":{"id":1,"domain":"giftwrap.co.za"},"hdrs":{"host":"localhost:3000","xfh":null,"xoh":null}}
[API] {
  id: '4998b4c7-3137-4dff-8d89-6a793207d511',
  status: 200,
  ms: 87,
  method: 'GET',
  path: '/api/store/categories/10000-mah-powerbank?include=products&product_search=SHOPIFY-44581809553570&product_limit=3&product_offset=0',
  origin: null,
  host: 'localhost:3000',
  tenantId: 1,
  authenticated: false
}
{"t":"2026-03-11T16:27:41.605Z","event":"tenancy.host","rid":"aa85c95a-acf3-4241-b09d-e3d77306bacb","raw":"localhost","norm":"localhost"}
{"t":"2026-03-11T16:27:41.618Z","event":"tenants.lookup.localhost.ok","rid":"aa85c95a-acf3-4241-b09d-e3d77306bacb","ms":13.4096,"sql":"SELECT id, name, domain, base_currency, timezone, recaptcha_secret, recaptcha_site_key, theme, email, phone, address, company_name FROM tenants WHERE id = 1 LIMIT 1","params":[],"rows":1}
{"t":"2026-03-11T16:27:41.632Z","event":"tenants.profile.ok","rid":"aa85c95a-acf3-4241-b09d-e3d77306bacb","ms":13.0114,"sql":"SELECT logo_path, trading_name, phone_main, phone_alt, support_email, website_url FROM tenant_company_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T16:27:41.647Z","event":"tenants.brand.ok","rid":"aa85c95a-acf3-4241-b09d-e3d77306bacb","ms":14.7535,"sql":"SELECT brand_name, brand_tagline, voice_tone, guidelines FROM tenant_brand_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T16:27:41.647Z","event":"tenancy.recaptcha","rid":"aa85c95a-acf3-4241-b09d-e3d77306bacb","tenant":"Giftwrap Trading (Pty) Ltd","has_recaptcha_secret":true,"has_recaptcha_key":true}
{"t":"2026-03-11T16:27:41.648Z","event":"tenancy.ok","rid":"aa85c95a-acf3-4241-b09d-e3d77306bacb","ms":43,"hostRaw":"localhost:3000","hostNorm":"localhost","matched":true,"tenant":{"id":1,"domain":"giftwrap.co.za"},"hdrs":{"host":"localhost:3000","xfh":null,"xoh":null}}
=== SEARCH REQUEST ===
Processing search for: { q: 'SHOPIFY-44583071056034', tenantId: 1, limit: 1, offset: 0 }
SQL Query: 
                SELECT SQL_CALC_FOUND_ROWS
                    p.id,
                    p.sku,
                    p.name,
                    p.page_title,
                    p.meta_description,
                    p.slug,
                    p.short_description,
                    p.description as long_description,
                    p.supplier_code,
                    p.status,
                    p.selling_price,
                    p.base_price,
                    p.image_url,
      ...
Params: [
  '%SHOPIFY-44583071056034%',
  '%SHOPIFY-44583071056034%',
  '%SHOPIFY-44583071056034%',
  '%SHOPIFY-44583071056034%',
  '%SHOPIFY-44583071056034%',
  1,
  '%SHOPIFY-44583071056034%',
  '%SHOPIFY-44583071056034%',
  '%SHOPIFY-44583071056034%',
  '%SHOPIFY-44583071056034%',
  '%SHOPIFY-44583071056034%',
  'SHOPIFY-44583071056034',
  'SHOPIFY-44583071056034',
  '%SHOPIFY-44583071056034%',
  1,
  0
]
Product loaded: {
  id: 1089787,
  sku: 'SHOPIFY-44583071056034',
  name: 'Mens Yukon Micro Fleece Jacket - BLACK / S',
  final_image_url: 'https://cdn.shopify.com/s/files/1/0403/3544/2082/files/default_1024X1024_1af9a8f3-c489-409a-adcf-261d699dbeb4.jpg?v=1717160037',
  categories_parsed: [ 'Mens Jackets' ]
}
Running periodic AI performance monitoring...
Running periodic AI performance monitoring...
Running periodic AI performance monitoring...
Running periodic AI performance monitoring...
[2026-03-11T17:09:51.235Z] [PID: 136520] [32m[NODE-CRON][32m [33m[WARN][0m missed execution at Wed Mar 11 2026 
18:50:00 GMT+0200 (South Africa Standard Time)! Possible blocking IO or high CPU user at the same process used by 
node-cron.
[2026-03-11T17:09:51.344Z] [PID: 136520] [32m[NODE-CRON][32m [33m[WARN][0m missed execution at Wed Mar 11 2026 
18:55:00 GMT+0200 (South Africa Standard Time)! Possible blocking IO or high CPU user at the same process used by 
node-cron.
[2026-03-11T17:09:51.448Z] [PID: 136520] [32m[NODE-CRON][32m [33m[WARN][0m missed execution at Wed Mar 11 2026 
19:00:00 GMT+0200 (South Africa Standard Time)! Possible blocking IO or high CPU user at the same process used by 
node-cron.
[2026-03-11T17:09:51.473Z] [PID: 136520] [32m[NODE-CRON][32m [33m[WARN][0m missed execution at Wed Mar 11 2026 
19:05:00 GMT+0200 (South Africa Standard Time)! Possible blocking IO or high CPU user at the same process used by 
node-cron.
[2026-03-11T17:17:02.685Z] [PID: 136520] [32m[NODE-CRON][32m [33m[WARN][0m missed execution at Wed Mar 11 2026 
19:10:00 GMT+0200 (South Africa Standard Time)! Possible blocking IO or high CPU user at the same process used by 
node-cron.
[2026-03-11T17:17:02.715Z] [PID: 136520] [32m[NODE-CRON][32m [33m[WARN][0m missed execution at Wed Mar 11 2026 
19:15:00 GMT+0200 (South Africa Standard Time)! Possible blocking IO or high CPU user at the same process used by 
node-cron.
Running periodic AI performance monitoring...
[2026-03-11T17:43:17.207Z] [PID: 136520] [32m[NODE-CRON][32m [33m[WARN][0m missed execution at Wed Mar 11 2026 
19:25:00 GMT+0200 (South Africa Standard Time)! Possible blocking IO or high CPU user at the same process used by 
node-cron.
[2026-03-11T17:43:17.348Z] [PID: 136520] [32m[NODE-CRON][32m [33m[WARN][0m missed execution at Wed Mar 11 2026 
19:30:00 GMT+0200 (South Africa Standard Time)! Possible blocking IO or high CPU user at the same process used by 
node-cron.
[2026-03-11T17:43:17.598Z] [PID: 136520] [32m[NODE-CRON][32m [33m[WARN][0m missed execution at Wed Mar 11 2026 
19:35:00 GMT+0200 (South Africa Standard Time)! Possible blocking IO or high CPU user at the same process used by 
node-cron.
[2026-03-11T17:43:17.751Z] [PID: 136520] [32m[NODE-CRON][32m [33m[WARN][0m missed execution at Wed Mar 11 2026 
19:40:00 GMT+0200 (South Africa Standard Time)! Possible blocking IO or high CPU user at the same process used by 
node-cron.
[2026-03-11T18:11:01.095Z] [PID: 136520] [32m[NODE-CRON][32m [33m[WARN][0m missed execution at Wed Mar 11 2026 
19:45:00 GMT+0200 (South Africa Standard Time)! Possible blocking IO or high CPU user at the same process used by 
node-cron.
[2026-03-11T18:11:01.110Z] [PID: 136520] [32m[NODE-CRON][32m [33m[WARN][0m missed execution at Wed Mar 11 2026 
19:50:00 GMT+0200 (South Africa Standard Time)! Possible blocking IO or high CPU user at the same process used by 
node-cron.
[2026-03-11T18:11:01.136Z] [PID: 136520] [32m[NODE-CRON][32m [33m[WARN][0m missed execution at Wed Mar 11 2026 
19:55:00 GMT+0200 (South Africa Standard Time)! Possible blocking IO or high CPU user at the same process used by 
node-cron.
[2026-03-11T18:11:01.169Z] [PID: 136520] [32m[NODE-CRON][32m [33m[WARN][0m missed execution at Wed Mar 11 2026 
20:00:00 GMT+0200 (South Africa Standard Time)! Possible blocking IO or high CPU user at the same process used by 
node-cron.
[2026-03-11T18:11:01.197Z] [PID: 136520] [32m[NODE-CRON][32m [33m[WARN][0m missed execution at Wed Mar 11 2026 
20:05:00 GMT+0200 (South Africa Standard Time)! Possible blocking IO or high CPU user at the same process used by 
node-cron.
[2026-03-11T18:11:01.233Z] [PID: 136520] [32m[NODE-CRON][32m [33m[WARN][0m missed execution at Wed Mar 11 2026 
20:10:00 GMT+0200 (South Africa Standard Time)! Possible blocking IO or high CPU user at the same process used by 
node-cron.
Running periodic AI performance monitoring...
Running periodic AI performance monitoring...
[2026-03-11T18:35:25.911Z] [PID: 136520] [32m[NODE-CRON][32m [33m[WARN][0m missed execution at Wed Mar 11 2026 
20:25:00 GMT+0200 (South Africa Standard Time)! Possible blocking IO or high CPU user at the same process used by 
node-cron.
[2026-03-11T18:35:25.993Z] [PID: 136520] [32m[NODE-CRON][32m [33m[WARN][0m missed execution at Wed Mar 11 2026 
20:30:00 GMT+0200 (South Africa Standard Time)! Possible blocking IO or high CPU user at the same process used by 
node-cron.
[2026-03-11T18:35:26.060Z] [PID: 136520] [32m[NODE-CRON][32m [33m[WARN][0m missed execution at Wed Mar 11 2026 
20:35:00 GMT+0200 (South Africa Standard Time)! Possible blocking IO or high CPU user at the same process used by 
node-cron.
[2026-03-11T19:48:09.015Z] [PID: 136520] [32m[NODE-CRON][32m [33m[WARN][0m missed execution at Wed Mar 11 2026 
20:40:00 GMT+0200 (South Africa Standard Time)! Possible blocking IO or high CPU user at the same process used by 
node-cron.
[2026-03-11T19:48:09.020Z] [PID: 136520] [32m[NODE-CRON][32m [33m[WARN][0m missed execution at Wed Mar 11 2026 
20:45:00 GMT+0200 (South Africa Standard Time)! Possible blocking IO or high CPU user at the same process used by 
node-cron.
[2026-03-11T19:48:09.025Z] [PID: 136520] [32m[NODE-CRON][32m [33m[WARN][0m missed execution at Wed Mar 11 2026 
20:50:00 GMT+0200 (South Africa Standard Time)! Possible blocking IO or high CPU user at the same process used by 
node-cron.
[2026-03-11T19:48:09.030Z] [PID: 136520] [32m[NODE-CRON][32m [33m[WARN][0m missed execution at Wed Mar 11 2026 
20:55:00 GMT+0200 (South Africa Standard Time)! Possible blocking IO or high CPU user at the same process used by 
node-cron.
[2026-03-11T19:48:09.039Z] [PID: 136520] [32m[NODE-CRON][32m [33m[WARN][0m missed execution at Wed Mar 11 2026 
21:00:00 GMT+0200 (South Africa Standard Time)! Possible blocking IO or high CPU user at the same process used by 
node-cron.
[2026-03-11T19:48:09.044Z] [PID: 136520] [32m[NODE-CRON][32m [33m[WARN][0m missed execution at Wed Mar 11 2026 
21:05:00 GMT+0200 (South Africa Standard Time)! Possible blocking IO or high CPU user at the same process used by 
node-cron.
[2026-03-11T19:48:09.050Z] [PID: 136520] [32m[NODE-CRON][32m [33m[WARN][0m missed execution at Wed Mar 11 2026 
21:10:00 GMT+0200 (South Africa Standard Time)! Possible blocking IO or high CPU user at the same process used by 
node-cron.
[2026-03-11T19:48:09.056Z] [PID: 136520] [32m[NODE-CRON][32m [33m[WARN][0m missed execution at Wed Mar 11 2026 
21:15:00 GMT+0200 (South Africa Standard Time)! Possible blocking IO or high CPU user at the same process used by 
node-cron.
[2026-03-11T19:48:09.062Z] [PID: 136520] [32m[NODE-CRON][32m [33m[WARN][0m missed execution at Wed Mar 11 2026 
21:20:00 GMT+0200 (South Africa Standard Time)! Possible blocking IO or high CPU user at the same process used by 
node-cron.
[2026-03-11T19:48:09.066Z] [PID: 136520] [32m[NODE-CRON][32m [33m[WARN][0m missed execution at Wed Mar 11 2026 
21:25:00 GMT+0200 (South Africa Standard Time)! Possible blocking IO or high CPU user at the same process used by 
node-cron.
[2026-03-11T19:48:09.071Z] [PID: 136520] [32m[NODE-CRON][32m [33m[WARN][0m missed execution at Wed Mar 11 2026 
21:30:00 GMT+0200 (South Africa Standard Time)! Possible blocking IO or high CPU user at the same process used by 
node-cron.
[2026-03-11T19:48:09.075Z] [PID: 136520] [32m[NODE-CRON][32m [33m[WARN][0m missed execution at Wed Mar 11 2026 
21:35:00 GMT+0200 (South Africa Standard Time)! Possible blocking IO or high CPU user at the same process used by 
node-cron.
[2026-03-11T19:48:09.080Z] [PID: 136520] [32m[NODE-CRON][32m [33m[WARN][0m missed execution at Wed Mar 11 2026 
21:40:00 GMT+0200 (South Africa Standard Time)! Possible blocking IO or high CPU user at the same process used by 
node-cron.
[2026-03-11T19:48:09.084Z] [PID: 136520] [32m[NODE-CRON][32m [33m[WARN][0m missed execution at Wed Mar 11 2026 
21:45:00 GMT+0200 (South Africa Standard Time)! Possible blocking IO or high CPU user at the same process used by 
node-cron.
Running periodic AI performance monitoring...
{"t":"2026-03-11T19:52:35.756Z","event":"tenancy.host","rid":"25dae359-a47a-42f1-ade7-e5a0de80c218","raw":"localhost","norm":"localhost"}
{"t":"2026-03-11T19:52:35.784Z","event":"tenants.lookup.localhost.ok","rid":"25dae359-a47a-42f1-ade7-e5a0de80c218","ms":27.7145,"sql":"SELECT id, name, domain, base_currency, timezone, recaptcha_secret, recaptcha_site_key, theme, email, phone, address, company_name FROM tenants WHERE id = 1 LIMIT 1","params":[],"rows":1}
{"t":"2026-03-11T19:52:35.817Z","event":"tenants.profile.ok","rid":"25dae359-a47a-42f1-ade7-e5a0de80c218","ms":32.7503,"sql":"SELECT logo_path, trading_name, phone_main, phone_alt, support_email, website_url FROM tenant_company_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T19:52:35.846Z","event":"tenants.brand.ok","rid":"25dae359-a47a-42f1-ade7-e5a0de80c218","ms":29.1873,"sql":"SELECT brand_name, brand_tagline, voice_tone, guidelines FROM tenant_brand_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T19:52:35.847Z","event":"tenancy.recaptcha","rid":"25dae359-a47a-42f1-ade7-e5a0de80c218","tenant":"Giftwrap Trading (Pty) Ltd","has_recaptcha_secret":true,"has_recaptcha_key":true}
{"t":"2026-03-11T19:52:35.847Z","event":"tenancy.ok","rid":"25dae359-a47a-42f1-ade7-e5a0de80c218","ms":91,"hostRaw":"localhost:3000","hostNorm":"localhost","matched":true,"tenant":{"id":1,"domain":"giftwrap.co.za"},"hdrs":{"host":"localhost:3000","xfh":null,"xoh":null}}
[Branding] GET /theme called for host: localhost:3000
[Branding] Processing theme for tenant 1 (Giftwrap Trading (Pty) Ltd)
[Branding] Fetching reCAPTCHA config for tenant 1
[Branding] Using reCAPTCHA keys from database
[Branding] reCAPTCHA config: {
  hasSiteKey: true,
  hasSecret: true,
  source: 'database',
  enabled: true,
  isTestKey: false
}
why ufike late?? 6LdWOkUsAAAAAGmpRzggKFYxM18PQ3RVzzqA99ck
[Branding] GET /theme response prepared {
  tenant: 'Giftwrap Trading (Pty) Ltd',
  hasRecaptchaKey: true,
  recaptchaSource: 'database',
  themeVarsCount: 16
}
{"t":"2026-03-11T19:52:35.967Z","event":"tenancy.host","rid":"6d4871c1-a43d-48ad-b491-1ac1da05d872","raw":"localhost","norm":"localhost"}
{"t":"2026-03-11T19:52:35.976Z","event":"tenancy.host","rid":"c5966f88-b18f-477c-b50f-1dfaa6e7fcfd","raw":"localhost","norm":"localhost"}
{"t":"2026-03-11T19:52:36.011Z","event":"tenants.lookup.localhost.ok","rid":"6d4871c1-a43d-48ad-b491-1ac1da05d872","ms":43.4252,"sql":"SELECT id, name, domain, base_currency, timezone, recaptcha_secret, recaptcha_site_key, theme, email, phone, address, company_name FROM tenants WHERE id = 1 LIMIT 1","params":[],"rows":1}
{"t":"2026-03-11T19:52:36.022Z","event":"tenants.lookup.localhost.ok","rid":"c5966f88-b18f-477c-b50f-1dfaa6e7fcfd","ms":45.0982,"sql":"SELECT id, name, domain, base_currency, timezone, recaptcha_secret, recaptcha_site_key, theme, email, phone, address, company_name FROM tenants WHERE id = 1 LIMIT 1","params":[],"rows":1}
{"t":"2026-03-11T19:52:36.050Z","event":"tenants.profile.ok","rid":"6d4871c1-a43d-48ad-b491-1ac1da05d872","ms":38.2202,"sql":"SELECT logo_path, trading_name, phone_main, phone_alt, support_email, website_url FROM tenant_company_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T19:52:36.052Z","event":"tenants.profile.ok","rid":"c5966f88-b18f-477c-b50f-1dfaa6e7fcfd","ms":29.1719,"sql":"SELECT logo_path, trading_name, phone_main, phone_alt, support_email, website_url FROM tenant_company_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T19:52:36.084Z","event":"tenants.brand.ok","rid":"6d4871c1-a43d-48ad-b491-1ac1da05d872","ms":33.2428,"sql":"SELECT brand_name, brand_tagline, voice_tone, guidelines FROM tenant_brand_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T19:52:36.084Z","event":"tenancy.recaptcha","rid":"6d4871c1-a43d-48ad-b491-1ac1da05d872","tenant":"Giftwrap Trading (Pty) Ltd","has_recaptcha_secret":true,"has_recaptcha_key":true}
{"t":"2026-03-11T19:52:36.085Z","event":"tenancy.ok","rid":"6d4871c1-a43d-48ad-b491-1ac1da05d872","ms":118,"hostRaw":"localhost:3000","hostNorm":"localhost","matched":true,"tenant":{"id":1,"domain":"giftwrap.co.za"},"hdrs":{"host":"localhost:3000","xfh":null,"xoh":null}}
[API] {
  id: '6d4871c1-a43d-48ad-b491-1ac1da05d872',
  status: 304,
  ms: 155,
  method: 'GET',
  path: '/api/tenants/resolve?domain=localhost',
  origin: null,
  host: 'localhost:3000',
  tenantId: 1,
  authenticated: false
}
{"t":"2026-03-11T19:52:36.096Z","event":"tenants.brand.ok","rid":"c5966f88-b18f-477c-b50f-1dfaa6e7fcfd","ms":43.777,"sql":"SELECT brand_name, brand_tagline, voice_tone, guidelines FROM tenant_brand_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T19:52:36.096Z","event":"tenancy.recaptcha","rid":"c5966f88-b18f-477c-b50f-1dfaa6e7fcfd","tenant":"Giftwrap Trading (Pty) Ltd","has_recaptcha_secret":true,"has_recaptcha_key":true}
{"t":"2026-03-11T19:52:36.097Z","event":"tenancy.ok","rid":"c5966f88-b18f-477c-b50f-1dfaa6e7fcfd","ms":121,"hostRaw":"localhost:3000","hostNorm":"localhost","matched":true,"tenant":{"id":1,"domain":"giftwrap.co.za"},"hdrs":{"host":"localhost:3000","xfh":null,"xoh":null}}
{"t":"2026-03-11T19:52:36.153Z","event":"tenancy.host","rid":"req_1773258756055_3a8xo1q4c","raw":"localhost","norm":"localhost"}
{"t":"2026-03-11T19:52:36.188Z","event":"tenants.lookup.localhost.ok","rid":"req_1773258756055_3a8xo1q4c","ms":34.5769,"sql":"SELECT id, name, domain, base_currency, timezone, recaptcha_secret, recaptcha_site_key, theme, email, phone, address, company_name FROM tenants WHERE id = 1 LIMIT 1","params":[],"rows":1}
{"t":"2026-03-11T19:52:36.228Z","event":"tenants.profile.ok","rid":"req_1773258756055_3a8xo1q4c","ms":39.4566,"sql":"SELECT logo_path, trading_name, phone_main, phone_alt, support_email, website_url FROM tenant_company_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T19:52:36.266Z","event":"tenants.brand.ok","rid":"req_1773258756055_3a8xo1q4c","ms":37.4021,"sql":"SELECT brand_name, brand_tagline, voice_tone, guidelines FROM tenant_brand_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T19:52:36.266Z","event":"tenancy.recaptcha","rid":"req_1773258756055_3a8xo1q4c","tenant":"Giftwrap Trading (Pty) Ltd","has_recaptcha_secret":true,"has_recaptcha_key":true}
{"t":"2026-03-11T19:52:36.266Z","event":"tenancy.ok","rid":"req_1773258756055_3a8xo1q4c","ms":113,"hostRaw":"localhost:3000","hostNorm":"localhost","matched":true,"tenant":{"id":1,"domain":"giftwrap.co.za"},"hdrs":{"host":"localhost:3000","xfh":null,"xoh":null}}
{"t":"2026-03-11T19:52:36.389Z","event":"tenancy.host","rid":"e5055f88-b080-4668-b0d8-2a04f9c02e0a","raw":"localhost","norm":"localhost"}
{"t":"2026-03-11T19:52:36.415Z","event":"tenants.lookup.localhost.ok","rid":"e5055f88-b080-4668-b0d8-2a04f9c02e0a","ms":25.5073,"sql":"SELECT id, name, domain, base_currency, timezone, recaptcha_secret, recaptcha_site_key, theme, email, phone, address, company_name FROM tenants WHERE id = 1 LIMIT 1","params":[],"rows":1}
{"t":"2026-03-11T19:52:36.445Z","event":"tenants.profile.ok","rid":"e5055f88-b080-4668-b0d8-2a04f9c02e0a","ms":29.5111,"sql":"SELECT logo_path, trading_name, phone_main, phone_alt, support_email, website_url FROM tenant_company_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T19:52:36.476Z","event":"tenants.brand.ok","rid":"e5055f88-b080-4668-b0d8-2a04f9c02e0a","ms":30.9767,"sql":"SELECT brand_name, brand_tagline, voice_tone, guidelines FROM tenant_brand_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T19:52:36.477Z","event":"tenancy.recaptcha","rid":"e5055f88-b080-4668-b0d8-2a04f9c02e0a","tenant":"Giftwrap Trading (Pty) Ltd","has_recaptcha_secret":true,"has_recaptcha_key":true}
{"t":"2026-03-11T19:52:36.477Z","event":"tenancy.ok","rid":"e5055f88-b080-4668-b0d8-2a04f9c02e0a","ms":88,"hostRaw":"localhost:3000","hostNorm":"localhost","matched":true,"tenant":{"id":1,"domain":"giftwrap.co.za"},"hdrs":{"host":"localhost:3000","xfh":null,"xoh":null}}
[TOP-DEBUG] Request: GET /api/v3/products?limit=8&sort=newest
[TOP-DEBUG] Request: GET /api/v3/collections?limit=8&active_only=true&include_counts=true&nocache=1&_ts=1773258756498
{"t":"2026-03-11T19:52:36.514Z","event":"tenancy.host","rid":"adb6876a-69a4-42b6-966a-e69ad9fbafbb","raw":"localhost","norm":"localhost"}
{"t":"2026-03-11T19:52:36.516Z","event":"tenancy.host","rid":"4e897062-3379-4156-b3f2-538fb9f0c7c8","raw":"localhost","norm":"localhost"}
{"t":"2026-03-11T19:52:36.517Z","event":"tenancy.host","rid":"6815d069-8fe8-4f3f-b9c4-cf05ed85191e","raw":"localhost","norm":"localhost"}
{"t":"2026-03-11T19:52:36.545Z","event":"tenants.lookup.localhost.ok","rid":"adb6876a-69a4-42b6-966a-e69ad9fbafbb","ms":30.0443,"sql":"SELECT id, name, domain, base_currency, timezone, recaptcha_secret, recaptcha_site_key, theme, email, phone, address, company_name FROM tenants WHERE id = 1 LIMIT 1","params":[],"rows":1}
{"t":"2026-03-11T19:52:36.546Z","event":"tenants.lookup.localhost.ok","rid":"4e897062-3379-4156-b3f2-538fb9f0c7c8","ms":29.9092,"sql":"SELECT id, name, domain, base_currency, timezone, recaptcha_secret, recaptcha_site_key, theme, email, phone, address, company_name FROM tenants WHERE id = 1 LIMIT 1","params":[],"rows":1}
{"t":"2026-03-11T19:52:36.550Z","event":"tenants.lookup.localhost.ok","rid":"6815d069-8fe8-4f3f-b9c4-cf05ed85191e","ms":32.2674,"sql":"SELECT id, name, domain, base_currency, timezone, recaptcha_secret, recaptcha_site_key, theme, email, phone, address, company_name FROM tenants WHERE id = 1 LIMIT 1","params":[],"rows":1}
{"t":"2026-03-11T19:52:36.598Z","event":"tenants.profile.ok","rid":"adb6876a-69a4-42b6-966a-e69ad9fbafbb","ms":52.826,"sql":"SELECT logo_path, trading_name, phone_main, phone_alt, support_email, website_url FROM tenant_company_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T19:52:36.601Z","event":"tenants.profile.ok","rid":"4e897062-3379-4156-b3f2-538fb9f0c7c8","ms":55.0831,"sql":"SELECT logo_path, trading_name, phone_main, phone_alt, support_email, website_url FROM tenant_company_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T19:52:36.604Z","event":"tenants.profile.ok","rid":"6815d069-8fe8-4f3f-b9c4-cf05ed85191e","ms":53.9659,"sql":"SELECT logo_path, trading_name, phone_main, phone_alt, support_email, website_url FROM tenant_company_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T19:52:36.666Z","event":"tenants.brand.ok","rid":"adb6876a-69a4-42b6-966a-e69ad9fbafbb","ms":66.0683,"sql":"SELECT brand_name, brand_tagline, voice_tone, guidelines FROM tenant_brand_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T19:52:36.667Z","event":"tenancy.recaptcha","rid":"adb6876a-69a4-42b6-966a-e69ad9fbafbb","tenant":"Giftwrap Trading (Pty) Ltd","has_recaptcha_secret":true,"has_recaptcha_key":true}
{"t":"2026-03-11T19:52:36.667Z","event":"tenancy.ok","rid":"adb6876a-69a4-42b6-966a-e69ad9fbafbb","ms":153,"hostRaw":"localhost:3000","hostNorm":"localhost","matched":true,"tenant":{"id":1,"domain":"giftwrap.co.za"},"hdrs":{"host":"localhost:3000","xfh":null,"xoh":null}}
{"t":"2026-03-11T19:52:36.673Z","event":"tenants.brand.ok","rid":"4e897062-3379-4156-b3f2-538fb9f0c7c8","ms":71.0688,"sql":"SELECT brand_name, brand_tagline, voice_tone, guidelines FROM tenant_brand_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T19:52:36.679Z","event":"tenancy.recaptcha","rid":"4e897062-3379-4156-b3f2-538fb9f0c7c8","tenant":"Giftwrap Trading (Pty) Ltd","has_recaptcha_secret":true,"has_recaptcha_key":true}
{"t":"2026-03-11T19:52:36.680Z","event":"tenancy.ok","rid":"4e897062-3379-4156-b3f2-538fb9f0c7c8","ms":164,"hostRaw":"localhost:3000","hostNorm":"localhost","matched":true,"tenant":{"id":1,"domain":"giftwrap.co.za"},"hdrs":{"host":"localhost:3000","xfh":null,"xoh":null}}
{"t":"2026-03-11T19:52:36.696Z","event":"tenants.brand.ok","rid":"6815d069-8fe8-4f3f-b9c4-cf05ed85191e","ms":91.3781,"sql":"SELECT brand_name, brand_tagline, voice_tone, guidelines FROM tenant_brand_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T19:52:36.698Z","event":"tenancy.recaptcha","rid":"6815d069-8fe8-4f3f-b9c4-cf05ed85191e","tenant":"Giftwrap Trading (Pty) Ltd","has_recaptcha_secret":true,"has_recaptcha_key":true}
{"t":"2026-03-11T19:52:36.703Z","event":"tenancy.ok","rid":"6815d069-8fe8-4f3f-b9c4-cf05ed85191e","ms":186,"hostRaw":"localhost:3000","hostNorm":"localhost","matched":true,"tenant":{"id":1,"domain":"giftwrap.co.za"},"hdrs":{"host":"localhost:3000","xfh":null,"xoh":null}}
[V3-DEBUG] Request: GET /api/v3/products?limit=8&sort=newest -> path inside router: /products
[V3-DEBUG] Request: GET /api/v3/collections?limit=8&active_only=true&include_counts=true&nocache=1&_ts=1773258756498 -> path inside router: /collections
{"t":"2026-03-11T19:52:36.829Z","event":"tenancy.host","rid":"763f2a61-7a4a-42fd-ac73-358992a656c7","raw":"localhost","norm":"localhost"}
{"t":"2026-03-11T19:52:36.876Z","event":"tenants.lookup.localhost.ok","rid":"763f2a61-7a4a-42fd-ac73-358992a656c7","ms":46.3209,"sql":"SELECT id, name, domain, base_currency, timezone, recaptcha_secret, recaptcha_site_key, theme, email, phone, address, company_name FROM tenants WHERE id = 1 LIMIT 1","params":[],"rows":1}
{"t":"2026-03-11T19:52:36.921Z","event":"tenants.profile.ok","rid":"763f2a61-7a4a-42fd-ac73-358992a656c7","ms":44.3652,"sql":"SELECT logo_path, trading_name, phone_main, phone_alt, support_email, website_url FROM tenant_company_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T19:52:36.967Z","event":"tenants.brand.ok","rid":"763f2a61-7a4a-42fd-ac73-358992a656c7","ms":45.4712,"sql":"SELECT brand_name, brand_tagline, voice_tone, guidelines FROM tenant_brand_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T19:52:36.967Z","event":"tenancy.recaptcha","rid":"763f2a61-7a4a-42fd-ac73-358992a656c7","tenant":"Giftwrap Trading (Pty) Ltd","has_recaptcha_secret":true,"has_recaptcha_key":true}
{"t":"2026-03-11T19:52:36.967Z","event":"tenancy.ok","rid":"763f2a61-7a4a-42fd-ac73-358992a656c7","ms":138,"hostRaw":"localhost:3000","hostNorm":"localhost","matched":true,"tenant":{"id":1,"domain":"giftwrap.co.za"},"hdrs":{"host":"localhost:3000","xfh":null,"xoh":null}}
{"t":"2026-03-11T19:52:37.029Z","event":"tenancy.host","rid":"96eb8a4a-7a22-483b-8cfd-a3dd960be0ea","raw":"localhost","norm":"localhost"}
{"t":"2026-03-11T19:52:37.086Z","event":"tenants.lookup.localhost.ok","rid":"96eb8a4a-7a22-483b-8cfd-a3dd960be0ea","ms":53.1754,"sql":"SELECT id, name, domain, base_currency, timezone, recaptcha_secret, recaptcha_site_key, theme, email, phone, address, company_name FROM tenants WHERE id = 1 LIMIT 1","params":[],"rows":1}
{"t":"2026-03-11T19:52:37.174Z","event":"tenants.profile.ok","rid":"96eb8a4a-7a22-483b-8cfd-a3dd960be0ea","ms":88.1591,"sql":"SELECT logo_path, trading_name, phone_main, phone_alt, support_email, website_url FROM tenant_company_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
[API] {
  id: 'req_1773258756055_3a8xo1q4c',
  status: 304,
  ms: 1336,
  method: 'GET',
  path: '/api/categories',
  origin: null,
  host: 'localhost:3000',
  tenantId: 1,
  authenticated: false
}
{"t":"2026-03-11T19:52:37.494Z","event":"tenants.brand.ok","rid":"96eb8a4a-7a22-483b-8cfd-a3dd960be0ea","ms":319.6017,"sql":"SELECT brand_name, brand_tagline, voice_tone, guidelines FROM tenant_brand_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T19:52:37.495Z","event":"tenancy.recaptcha","rid":"96eb8a4a-7a22-483b-8cfd-a3dd960be0ea","tenant":"Giftwrap Trading (Pty) Ltd","has_recaptcha_secret":true,"has_recaptcha_key":true}
{"t":"2026-03-11T19:52:37.496Z","event":"tenancy.ok","rid":"96eb8a4a-7a22-483b-8cfd-a3dd960be0ea","ms":467,"hostRaw":"localhost:3000","hostNorm":"localhost","matched":true,"tenant":{"id":1,"domain":"giftwrap.co.za"},"hdrs":{"host":"localhost:3000","xfh":null,"xoh":null}}
{"t":"2026-03-11T19:52:37.498Z","event":"tenancy.host","rid":"7bcf872c-6274-4ac2-a493-5c28cbb4c4ae","raw":"localhost","norm":"localhost"}
{"t":"2026-03-11T19:52:37.602Z","event":"tenants.lookup.localhost.ok","rid":"7bcf872c-6274-4ac2-a493-5c28cbb4c4ae","ms":103.5975,"sql":"SELECT id, name, domain, base_currency, timezone, recaptcha_secret, recaptcha_site_key, theme, email, phone, address, company_name FROM tenants WHERE id = 1 LIMIT 1","params":[],"rows":1}
{"t":"2026-03-11T19:52:37.615Z","event":"tenancy.host","rid":"e3114246-7d31-4370-a56a-dde54884b42c","raw":"localhost","norm":"localhost"}
{"t":"2026-03-11T19:52:37.616Z","event":"tenancy.host","rid":"0b3b63a7-609e-4163-993c-f6941f06d1d3","raw":"localhost","norm":"localhost"}
{"t":"2026-03-11T19:52:37.655Z","event":"tenants.profile.ok","rid":"7bcf872c-6274-4ac2-a493-5c28cbb4c4ae","ms":52.5148,"sql":"SELECT logo_path, trading_name, phone_main, phone_alt, support_email, website_url FROM tenant_company_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T19:52:37.657Z","event":"tenants.lookup.localhost.ok","rid":"0b3b63a7-609e-4163-993c-f6941f06d1d3","ms":40.919,"sql":"SELECT id, name, domain, base_currency, timezone, recaptcha_secret, recaptcha_site_key, theme, email, phone, address, company_name FROM tenants WHERE id = 1 LIMIT 1","params":[],"rows":1}
{"t":"2026-03-11T19:52:37.662Z","event":"tenants.lookup.localhost.ok","rid":"e3114246-7d31-4370-a56a-dde54884b42c","ms":46.2556,"sql":"SELECT id, name, domain, base_currency, timezone, recaptcha_secret, recaptcha_site_key, theme, email, phone, address, company_name FROM tenants WHERE id = 1 LIMIT 1","params":[],"rows":1}
{"t":"2026-03-11T19:52:37.695Z","event":"tenants.brand.ok","rid":"7bcf872c-6274-4ac2-a493-5c28cbb4c4ae","ms":39.4326,"sql":"SELECT brand_name, brand_tagline, voice_tone, guidelines FROM tenant_brand_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T19:52:37.695Z","event":"tenancy.recaptcha","rid":"7bcf872c-6274-4ac2-a493-5c28cbb4c4ae","tenant":"Giftwrap Trading (Pty) Ltd","has_recaptcha_secret":true,"has_recaptcha_key":true}
{"t":"2026-03-11T19:52:37.695Z","event":"tenancy.ok","rid":"7bcf872c-6274-4ac2-a493-5c28cbb4c4ae","ms":197,"hostRaw":"localhost:3000","hostNorm":"localhost","matched":true,"tenant":{"id":1,"domain":"giftwrap.co.za"},"hdrs":{"host":"localhost:3000","xfh":null,"xoh":null}}
{"t":"2026-03-11T19:52:37.697Z","event":"tenants.profile.ok","rid":"0b3b63a7-609e-4163-993c-f6941f06d1d3","ms":39.4194,"sql":"SELECT logo_path, trading_name, phone_main, phone_alt, support_email, website_url FROM tenant_company_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T19:52:37.698Z","event":"tenants.profile.ok","rid":"e3114246-7d31-4370-a56a-dde54884b42c","ms":36.069,"sql":"SELECT logo_path, trading_name, phone_main, phone_alt, support_email, website_url FROM tenant_company_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T19:52:37.731Z","event":"tenants.brand.ok","rid":"0b3b63a7-609e-4163-993c-f6941f06d1d3","ms":33.7705,"sql":"SELECT brand_name, brand_tagline, voice_tone, guidelines FROM tenant_brand_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T19:52:37.731Z","event":"tenancy.recaptcha","rid":"0b3b63a7-609e-4163-993c-f6941f06d1d3","tenant":"Giftwrap Trading (Pty) Ltd","has_recaptcha_secret":true,"has_recaptcha_key":true}
{"t":"2026-03-11T19:52:37.732Z","event":"tenancy.ok","rid":"0b3b63a7-609e-4163-993c-f6941f06d1d3","ms":116,"hostRaw":"localhost:3000","hostNorm":"localhost","matched":true,"tenant":{"id":1,"domain":"giftwrap.co.za"},"hdrs":{"host":"localhost:3000","xfh":null,"xoh":null}}
{"t":"2026-03-11T19:52:37.737Z","event":"tenancy.host","rid":"07db483b-2aaf-4c9c-a135-8db71156d5e9","raw":"localhost","norm":"localhost"}
{"t":"2026-03-11T19:52:37.745Z","event":"tenants.brand.ok","rid":"e3114246-7d31-4370-a56a-dde54884b42c","ms":46.157,"sql":"SELECT brand_name, brand_tagline, voice_tone, guidelines FROM tenant_brand_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T19:52:37.745Z","event":"tenancy.recaptcha","rid":"e3114246-7d31-4370-a56a-dde54884b42c","tenant":"Giftwrap Trading (Pty) Ltd","has_recaptcha_secret":true,"has_recaptcha_key":true}
{"t":"2026-03-11T19:52:37.745Z","event":"tenancy.ok","rid":"e3114246-7d31-4370-a56a-dde54884b42c","ms":130,"hostRaw":"localhost:3000","hostNorm":"localhost","matched":true,"tenant":{"id":1,"domain":"giftwrap.co.za"},"hdrs":{"host":"localhost:3000","xfh":null,"xoh":null}}
{"t":"2026-03-11T19:52:37.780Z","event":"tenants.lookup.localhost.ok","rid":"07db483b-2aaf-4c9c-a135-8db71156d5e9","ms":42.4781,"sql":"SELECT id, name, domain, base_currency, timezone, recaptcha_secret, recaptcha_site_key, theme, email, phone, address, company_name FROM tenants WHERE id = 1 LIMIT 1","params":[],"rows":1}
{"t":"2026-03-11T19:52:37.830Z","event":"tenants.profile.ok","rid":"07db483b-2aaf-4c9c-a135-8db71156d5e9","ms":49.9341,"sql":"SELECT logo_path, trading_name, phone_main, phone_alt, support_email, website_url FROM tenant_company_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
[API] {
  id: 'e5055f88-b080-4668-b0d8-2a04f9c02e0a',
  status: 304,
  ms: 1819,
  method: 'GET',
  path: '/api/store/categories?nested=true',
  origin: null,
  host: 'localhost:3000',
  tenantId: 1,
  authenticated: false
}
{"t":"2026-03-11T19:52:38.213Z","event":"tenants.brand.ok","rid":"07db483b-2aaf-4c9c-a135-8db71156d5e9","ms":382.5913,"sql":"SELECT brand_name, brand_tagline, voice_tone, guidelines FROM tenant_brand_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T19:52:38.213Z","event":"tenancy.recaptcha","rid":"07db483b-2aaf-4c9c-a135-8db71156d5e9","tenant":"Giftwrap Trading (Pty) Ltd","has_recaptcha_secret":true,"has_recaptcha_key":true}
{"t":"2026-03-11T19:52:38.214Z","event":"tenancy.ok","rid":"07db483b-2aaf-4c9c-a135-8db71156d5e9","ms":477,"hostRaw":"localhost:3000","hostNorm":"localhost","matched":true,"tenant":{"id":1,"domain":"giftwrap.co.za"},"hdrs":{"host":"localhost:3000","xfh":null,"xoh":null}}
{"t":"2026-03-11T19:52:38.248Z","event":"tenancy.host","rid":"e5c2133d-3866-4bb4-a044-f1c10f4d4840","raw":"localhost","norm":"localhost"}
{"t":"2026-03-11T19:52:38.296Z","event":"tenants.lookup.localhost.ok","rid":"e5c2133d-3866-4bb4-a044-f1c10f4d4840","ms":47.4515,"sql":"SELECT id, name, domain, base_currency, timezone, recaptcha_secret, recaptcha_site_key, theme, email, phone, address, company_name FROM tenants WHERE id = 1 LIMIT 1","params":[],"rows":1}
{"t":"2026-03-11T19:52:38.330Z","event":"tenants.profile.ok","rid":"e5c2133d-3866-4bb4-a044-f1c10f4d4840","ms":34.0007,"sql":"SELECT logo_path, trading_name, phone_main, phone_alt, support_email, website_url FROM tenant_company_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T19:52:38.370Z","event":"tenants.brand.ok","rid":"e5c2133d-3866-4bb4-a044-f1c10f4d4840","ms":39.8155,"sql":"SELECT brand_name, brand_tagline, voice_tone, guidelines FROM tenant_brand_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T19:52:38.370Z","event":"tenancy.recaptcha","rid":"e5c2133d-3866-4bb4-a044-f1c10f4d4840","tenant":"Giftwrap Trading (Pty) Ltd","has_recaptcha_secret":true,"has_recaptcha_key":true}
{"t":"2026-03-11T19:52:38.371Z","event":"tenancy.ok","rid":"e5c2133d-3866-4bb4-a044-f1c10f4d4840","ms":123,"hostRaw":"localhost:3000","hostNorm":"localhost","matched":true,"tenant":{"id":1,"domain":"giftwrap.co.za"},"hdrs":{"host":"localhost:3000","xfh":null,"xoh":null}}
{"t":"2026-03-11T19:52:57.423Z","event":"tenancy.host","rid":"2d684ee3-56e3-4d35-b921-f219c86b8c45","raw":"localhost","norm":"localhost"}
{"t":"2026-03-11T19:52:57.452Z","event":"tenants.lookup.localhost.ok","rid":"2d684ee3-56e3-4d35-b921-f219c86b8c45","ms":28.5493,"sql":"SELECT id, name, domain, base_currency, timezone, recaptcha_secret, recaptcha_site_key, theme, email, phone, address, company_name FROM tenants WHERE id = 1 LIMIT 1","params":[],"rows":1}
{"t":"2026-03-11T19:52:57.479Z","event":"tenants.profile.ok","rid":"2d684ee3-56e3-4d35-b921-f219c86b8c45","ms":26.4806,"sql":"SELECT logo_path, trading_name, phone_main, phone_alt, support_email, website_url FROM tenant_company_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T19:52:57.515Z","event":"tenants.brand.ok","rid":"2d684ee3-56e3-4d35-b921-f219c86b8c45","ms":35.4862,"sql":"SELECT brand_name, brand_tagline, voice_tone, guidelines FROM tenant_brand_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T19:52:57.515Z","event":"tenancy.recaptcha","rid":"2d684ee3-56e3-4d35-b921-f219c86b8c45","tenant":"Giftwrap Trading (Pty) Ltd","has_recaptcha_secret":true,"has_recaptcha_key":true}
{"t":"2026-03-11T19:52:57.516Z","event":"tenancy.ok","rid":"2d684ee3-56e3-4d35-b921-f219c86b8c45","ms":93,"hostRaw":"localhost:3000","hostNorm":"localhost","matched":true,"tenant":{"id":1,"domain":"giftwrap.co.za"},"hdrs":{"host":"localhost:3000","xfh":null,"xoh":null}}
[API] {
  id: '2d684ee3-56e3-4d35-b921-f219c86b8c45',
  status: 200,
  ms: 141,
  method: 'GET',
  path: '/api/products/1089732',
  origin: null,
  host: 'localhost:3000',
  tenantId: 1,
  authenticated: false
}
{"t":"2026-03-11T19:52:57.585Z","event":"tenancy.host","rid":"e39a702c-537f-44b1-a025-ef8b920a6638","raw":"localhost","norm":"localhost"}
{"t":"2026-03-11T19:52:57.614Z","event":"tenants.lookup.localhost.ok","rid":"e39a702c-537f-44b1-a025-ef8b920a6638","ms":28.3549,"sql":"SELECT id, name, domain, base_currency, timezone, recaptcha_secret, recaptcha_site_key, theme, email, phone, address, company_name FROM tenants WHERE id = 1 LIMIT 1","params":[],"rows":1}
{"t":"2026-03-11T19:52:57.646Z","event":"tenants.profile.ok","rid":"e39a702c-537f-44b1-a025-ef8b920a6638","ms":31.3904,"sql":"SELECT logo_path, trading_name, phone_main, phone_alt, support_email, website_url FROM tenant_company_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T19:52:57.675Z","event":"tenants.brand.ok","rid":"e39a702c-537f-44b1-a025-ef8b920a6638","ms":28.2177,"sql":"SELECT brand_name, brand_tagline, voice_tone, guidelines FROM tenant_brand_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T19:52:57.675Z","event":"tenancy.recaptcha","rid":"e39a702c-537f-44b1-a025-ef8b920a6638","tenant":"Giftwrap Trading (Pty) Ltd","has_recaptcha_secret":true,"has_recaptcha_key":true}
{"t":"2026-03-11T19:52:57.675Z","event":"tenancy.ok","rid":"e39a702c-537f-44b1-a025-ef8b920a6638","ms":90,"hostRaw":"localhost:3000","hostNorm":"localhost","matched":true,"tenant":{"id":1,"domain":"giftwrap.co.za"},"hdrs":{"host":"localhost:3000","xfh":null,"xoh":null}}
=== SEARCH REQUEST ===
Processing search for: { q: 'SHOPIFY-44584200077474', tenantId: 1, limit: 5, offset: 0 }
SQL Query: 
                SELECT SQL_CALC_FOUND_ROWS
                    p.id,
                    p.sku,
                    p.name,
                    p.page_title,
                    p.meta_description,
                    p.slug,
                    p.short_description,
                    p.description as long_description,
                    p.supplier_code,
                    p.status,
                    p.selling_price,
                    p.base_price,
                    p.image_url,
      ...
Params: [
  '%SHOPIFY-44584200077474%',
  '%SHOPIFY-44584200077474%',
  '%SHOPIFY-44584200077474%',
  '%SHOPIFY-44584200077474%',
  '%SHOPIFY-44584200077474%',
  1,
  '%SHOPIFY-44584200077474%',
  '%SHOPIFY-44584200077474%',
  '%SHOPIFY-44584200077474%',
  '%SHOPIFY-44584200077474%',
  '%SHOPIFY-44584200077474%',
  'SHOPIFY-44584200077474',
  'SHOPIFY-44584200077474',
  '%SHOPIFY-44584200077474%',
  5,
  0
]
Product loaded: {
  id: 1089732,
  sku: 'SHOPIFY-44584200077474',
  name: 'Mens Montana Jacket - BLACK / S',
  final_image_url: 'https://cdn.shopify.com/s/files/1/0403/3544/2082/files/default_1024X1024_e5dbf7d8-cda3-495b-83ec-6dba49eb4245.jpg?v=1717166344',
  categories_parsed: []
}
{"t":"2026-03-11T19:53:34.982Z","event":"tenancy.host","rid":"bf836e0f-eb29-43b1-9f23-34308bdde94b","raw":"localhost","norm":"localhost"}
{"t":"2026-03-11T19:53:35.015Z","event":"tenants.lookup.localhost.ok","rid":"bf836e0f-eb29-43b1-9f23-34308bdde94b","ms":32.9701,"sql":"SELECT id, name, domain, base_currency, timezone, recaptcha_secret, recaptcha_site_key, theme, email, phone, address, company_name FROM tenants WHERE id = 1 LIMIT 1","params":[],"rows":1}
{"t":"2026-03-11T19:53:35.033Z","event":"tenants.profile.ok","rid":"bf836e0f-eb29-43b1-9f23-34308bdde94b","ms":17.5839,"sql":"SELECT logo_path, trading_name, phone_main, phone_alt, support_email, website_url FROM tenant_company_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T19:53:35.058Z","event":"tenants.brand.ok","rid":"bf836e0f-eb29-43b1-9f23-34308bdde94b","ms":25.3511,"sql":"SELECT brand_name, brand_tagline, voice_tone, guidelines FROM tenant_brand_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T19:53:35.058Z","event":"tenancy.recaptcha","rid":"bf836e0f-eb29-43b1-9f23-34308bdde94b","tenant":"Giftwrap Trading (Pty) Ltd","has_recaptcha_secret":true,"has_recaptcha_key":true}
{"t":"2026-03-11T19:53:35.059Z","event":"tenancy.ok","rid":"bf836e0f-eb29-43b1-9f23-34308bdde94b","ms":77,"hostRaw":"localhost:3000","hostNorm":"localhost","matched":true,"tenant":{"id":1,"domain":"giftwrap.co.za"},"hdrs":{"host":"localhost:3000","xfh":null,"xoh":null}}
[TOP-DEBUG] Request: GET /api/v3/products?limit=8&sort=newest
{"t":"2026-03-11T19:53:44.179Z","event":"tenancy.host","rid":"88b80d45-4a0f-45d6-aead-185cb3bc88b7","raw":"localhost","norm":"localhost"}
[TOP-DEBUG] Request: GET /api/v3/collections?limit=8&active_only=true&include_counts=true&nocache=1&_ts=1773258824164
{"t":"2026-03-11T19:53:44.193Z","event":"tenancy.host","rid":"efa087a3-eeae-430b-908e-d5f0ebb9ef72","raw":"localhost","norm":"localhost"}
{"t":"2026-03-11T19:53:44.194Z","event":"tenancy.host","rid":"fc967f93-8a18-4126-9748-969a40d3f354","raw":"localhost","norm":"localhost"}
{"t":"2026-03-11T19:53:44.221Z","event":"tenancy.host","rid":"ad71d3f5-46e0-4bcc-999b-e03028c6027a","raw":"localhost","norm":"localhost"}
{"t":"2026-03-11T19:53:44.226Z","event":"tenants.lookup.localhost.ok","rid":"88b80d45-4a0f-45d6-aead-185cb3bc88b7","ms":46.9257,"sql":"SELECT id, name, domain, base_currency, timezone, recaptcha_secret, recaptcha_site_key, theme, email, phone, address, company_name FROM tenants WHERE id = 1 LIMIT 1","params":[],"rows":1}
{"t":"2026-03-11T19:53:44.227Z","event":"tenants.lookup.localhost.ok","rid":"efa087a3-eeae-430b-908e-d5f0ebb9ef72","ms":34.0585,"sql":"SELECT id, name, domain, base_currency, timezone, recaptcha_secret, recaptcha_site_key, theme, email, phone, address, company_name FROM tenants WHERE id = 1 LIMIT 1","params":[],"rows":1}
{"t":"2026-03-11T19:53:44.228Z","event":"tenants.lookup.localhost.ok","rid":"fc967f93-8a18-4126-9748-969a40d3f354","ms":34.0326,"sql":"SELECT id, name, domain, base_currency, timezone, recaptcha_secret, recaptcha_site_key, theme, email, phone, address, company_name FROM tenants WHERE id = 1 LIMIT 1","params":[],"rows":1}
{"t":"2026-03-11T19:53:44.249Z","event":"tenants.lookup.localhost.ok","rid":"ad71d3f5-46e0-4bcc-999b-e03028c6027a","ms":28.3334,"sql":"SELECT id, name, domain, base_currency, timezone, recaptcha_secret, recaptcha_site_key, theme, email, phone, address, company_name FROM tenants WHERE id = 1 LIMIT 1","params":[],"rows":1}
{"t":"2026-03-11T19:53:44.277Z","event":"tenants.profile.ok","rid":"efa087a3-eeae-430b-908e-d5f0ebb9ef72","ms":49.4203,"sql":"SELECT logo_path, trading_name, phone_main, phone_alt, support_email, website_url FROM tenant_company_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T19:53:44.278Z","event":"tenants.profile.ok","rid":"fc967f93-8a18-4126-9748-969a40d3f354","ms":49.4347,"sql":"SELECT logo_path, trading_name, phone_main, phone_alt, support_email, website_url FROM tenant_company_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T19:53:44.278Z","event":"tenants.profile.ok","rid":"88b80d45-4a0f-45d6-aead-185cb3bc88b7","ms":51.8293,"sql":"SELECT logo_path, trading_name, phone_main, phone_alt, support_email, website_url FROM tenant_company_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T19:53:44.287Z","event":"tenants.profile.ok","rid":"ad71d3f5-46e0-4bcc-999b-e03028c6027a","ms":37.1105,"sql":"SELECT logo_path, trading_name, phone_main, phone_alt, support_email, website_url FROM tenant_company_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T19:53:44.305Z","event":"tenants.brand.ok","rid":"fc967f93-8a18-4126-9748-969a40d3f354","ms":27.5777,"sql":"SELECT brand_name, brand_tagline, voice_tone, guidelines FROM tenant_brand_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T19:53:44.306Z","event":"tenancy.recaptcha","rid":"fc967f93-8a18-4126-9748-969a40d3f354","tenant":"Giftwrap Trading (Pty) Ltd","has_recaptcha_secret":true,"has_recaptcha_key":true}
{"t":"2026-03-11T19:53:44.306Z","event":"tenancy.ok","rid":"fc967f93-8a18-4126-9748-969a40d3f354","ms":112,"hostRaw":"localhost:3000","hostNorm":"localhost","matched":true,"tenant":{"id":1,"domain":"giftwrap.co.za"},"hdrs":{"host":"localhost:3000","xfh":null,"xoh":null}}
{"t":"2026-03-11T19:53:44.307Z","event":"tenants.brand.ok","rid":"ad71d3f5-46e0-4bcc-999b-e03028c6027a","ms":19.8677,"sql":"SELECT brand_name, brand_tagline, voice_tone, guidelines FROM tenant_brand_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T19:53:44.308Z","event":"tenancy.recaptcha","rid":"ad71d3f5-46e0-4bcc-999b-e03028c6027a","tenant":"Giftwrap Trading (Pty) Ltd","has_recaptcha_secret":true,"has_recaptcha_key":true}
{"t":"2026-03-11T19:53:44.308Z","event":"tenancy.ok","rid":"ad71d3f5-46e0-4bcc-999b-e03028c6027a","ms":87,"hostRaw":"localhost:3000","hostNorm":"localhost","matched":true,"tenant":{"id":1,"domain":"giftwrap.co.za"},"hdrs":{"host":"localhost:3000","xfh":null,"xoh":null}}
{"t":"2026-03-11T19:53:44.310Z","event":"tenants.brand.ok","rid":"88b80d45-4a0f-45d6-aead-185cb3bc88b7","ms":31.2753,"sql":"SELECT brand_name, brand_tagline, voice_tone, guidelines FROM tenant_brand_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T19:53:44.310Z","event":"tenancy.recaptcha","rid":"88b80d45-4a0f-45d6-aead-185cb3bc88b7","tenant":"Giftwrap Trading (Pty) Ltd","has_recaptcha_secret":true,"has_recaptcha_key":true}
{"t":"2026-03-11T19:53:44.311Z","event":"tenancy.ok","rid":"88b80d45-4a0f-45d6-aead-185cb3bc88b7","ms":132,"hostRaw":"localhost:3000","hostNorm":"localhost","matched":true,"tenant":{"id":1,"domain":"giftwrap.co.za"},"hdrs":{"host":"localhost:3000","xfh":null,"xoh":null}}
{"t":"2026-03-11T19:53:44.312Z","event":"tenants.brand.ok","rid":"efa087a3-eeae-430b-908e-d5f0ebb9ef72","ms":35.0644,"sql":"SELECT brand_name, brand_tagline, voice_tone, guidelines FROM tenant_brand_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T19:53:44.312Z","event":"tenancy.recaptcha","rid":"efa087a3-eeae-430b-908e-d5f0ebb9ef72","tenant":"Giftwrap Trading (Pty) Ltd","has_recaptcha_secret":true,"has_recaptcha_key":true}
{"t":"2026-03-11T19:53:44.312Z","event":"tenancy.ok","rid":"efa087a3-eeae-430b-908e-d5f0ebb9ef72","ms":119,"hostRaw":"localhost:3000","hostNorm":"localhost","matched":true,"tenant":{"id":1,"domain":"giftwrap.co.za"},"hdrs":{"host":"localhost:3000","xfh":null,"xoh":null}}
[V3-DEBUG] Request: GET /api/v3/collections?limit=8&active_only=true&include_counts=true&nocache=1&_ts=1773258824164 -> path inside router: /collections
[V3-DEBUG] Request: GET /api/v3/products?limit=8&sort=newest -> path inside router: /products
Running periodic AI performance monitoring...
Running periodic AI performance monitoring...
Running periodic AI performance monitoring...
Running periodic AI performance monitoring...
Running periodic AI performance monitoring...
Running periodic AI performance monitoring...
Running periodic AI performance monitoring...
Running periodic AI performance monitoring...
Running periodic AI performance monitoring...
{"t":"2026-03-11T20:38:22.941Z","event":"tenancy.host","rid":"98629551-a9fb-4ca7-892f-109c4c9968ae","raw":"localhost","norm":"localhost"}
{"t":"2026-03-11T20:38:22.978Z","event":"tenants.lookup.localhost.ok","rid":"98629551-a9fb-4ca7-892f-109c4c9968ae","ms":36.0836,"sql":"SELECT id, name, domain, base_currency, timezone, recaptcha_secret, recaptcha_site_key, theme, email, phone, address, company_name FROM tenants WHERE id = 1 LIMIT 1","params":[],"rows":1}
{"t":"2026-03-11T20:38:23.001Z","event":"tenants.profile.ok","rid":"98629551-a9fb-4ca7-892f-109c4c9968ae","ms":22.9215,"sql":"SELECT logo_path, trading_name, phone_main, phone_alt, support_email, website_url FROM tenant_company_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T20:38:23.027Z","event":"tenants.brand.ok","rid":"98629551-a9fb-4ca7-892f-109c4c9968ae","ms":25.3084,"sql":"SELECT brand_name, brand_tagline, voice_tone, guidelines FROM tenant_brand_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T20:38:23.028Z","event":"tenancy.recaptcha","rid":"98629551-a9fb-4ca7-892f-109c4c9968ae","tenant":"Giftwrap Trading (Pty) Ltd","has_recaptcha_secret":true,"has_recaptcha_key":true}
{"t":"2026-03-11T20:38:23.028Z","event":"tenancy.ok","rid":"98629551-a9fb-4ca7-892f-109c4c9968ae","ms":87,"hostRaw":"localhost:3000","hostNorm":"localhost","matched":true,"tenant":{"id":1,"domain":"giftwrap.co.za"},"hdrs":{"host":"localhost:3000","xfh":null,"xoh":null}}
{"t":"2026-03-11T20:38:36.617Z","event":"tenancy.host","rid":"9ea82aad-5e32-4764-b9ab-ad2e59264d65","raw":"localhost","norm":"localhost"}
{"t":"2026-03-11T20:38:36.647Z","event":"tenants.lookup.localhost.ok","rid":"9ea82aad-5e32-4764-b9ab-ad2e59264d65","ms":29.769,"sql":"SELECT id, name, domain, base_currency, timezone, recaptcha_secret, recaptcha_site_key, theme, email, phone, address, company_name FROM tenants WHERE id = 1 LIMIT 1","params":[],"rows":1}
{"t":"2026-03-11T20:38:36.669Z","event":"tenants.profile.ok","rid":"9ea82aad-5e32-4764-b9ab-ad2e59264d65","ms":22.0307,"sql":"SELECT logo_path, trading_name, phone_main, phone_alt, support_email, website_url FROM tenant_company_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T20:38:36.720Z","event":"tenants.brand.ok","rid":"9ea82aad-5e32-4764-b9ab-ad2e59264d65","ms":48.865,"sql":"SELECT brand_name, brand_tagline, voice_tone, guidelines FROM tenant_brand_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T20:38:36.720Z","event":"tenancy.recaptcha","rid":"9ea82aad-5e32-4764-b9ab-ad2e59264d65","tenant":"Giftwrap Trading (Pty) Ltd","has_recaptcha_secret":true,"has_recaptcha_key":true}
{"t":"2026-03-11T20:38:36.721Z","event":"tenancy.ok","rid":"9ea82aad-5e32-4764-b9ab-ad2e59264d65","ms":104,"hostRaw":"localhost:3000","hostNorm":"localhost","matched":true,"tenant":{"id":1,"domain":"giftwrap.co.za"},"hdrs":{"host":"localhost:3000","xfh":null,"xoh":null}}
{"t":"2026-03-11T20:38:50.757Z","event":"tenancy.host","rid":"0b10a74d-b57d-46b3-95a7-f250eba8389d","raw":"localhost","norm":"localhost"}
{"t":"2026-03-11T20:38:50.799Z","event":"tenants.lookup.localhost.ok","rid":"0b10a74d-b57d-46b3-95a7-f250eba8389d","ms":38.683,"sql":"SELECT id, name, domain, base_currency, timezone, recaptcha_secret, recaptcha_site_key, theme, email, phone, address, company_name FROM tenants WHERE id = 1 LIMIT 1","params":[],"rows":1}
{"t":"2026-03-11T20:38:50.837Z","event":"tenants.profile.ok","rid":"0b10a74d-b57d-46b3-95a7-f250eba8389d","ms":36.8915,"sql":"SELECT logo_path, trading_name, phone_main, phone_alt, support_email, website_url FROM tenant_company_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T20:38:50.888Z","event":"tenants.brand.ok","rid":"0b10a74d-b57d-46b3-95a7-f250eba8389d","ms":50.6438,"sql":"SELECT brand_name, brand_tagline, voice_tone, guidelines FROM tenant_brand_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T20:38:50.889Z","event":"tenancy.recaptcha","rid":"0b10a74d-b57d-46b3-95a7-f250eba8389d","tenant":"Giftwrap Trading (Pty) Ltd","has_recaptcha_secret":true,"has_recaptcha_key":true}
{"t":"2026-03-11T20:38:50.889Z","event":"tenancy.ok","rid":"0b10a74d-b57d-46b3-95a7-f250eba8389d","ms":132,"hostRaw":"localhost:3000","hostNorm":"localhost","matched":true,"tenant":{"id":1,"domain":"giftwrap.co.za"},"hdrs":{"host":"localhost:3000","xfh":null,"xoh":null}}
[Branding] GET /theme called for host: localhost:3000
[Branding] Processing theme for tenant 1 (Giftwrap Trading (Pty) Ltd)
[Branding] Fetching reCAPTCHA config for tenant 1
[Branding] Using reCAPTCHA keys from database
[Branding] reCAPTCHA config: {
  hasSiteKey: true,
  hasSecret: true,
  source: 'database',
  enabled: true,
  isTestKey: false
}
why ufike late?? 6LdWOkUsAAAAAGmpRzggKFYxM18PQ3RVzzqA99ck
[Branding] GET /theme response prepared {
  tenant: 'Giftwrap Trading (Pty) Ltd',
  hasRecaptchaKey: true,
  recaptchaSource: 'database',
  themeVarsCount: 16
}
{"t":"2026-03-11T20:38:52.616Z","event":"tenancy.host","rid":"bc40a786-7d53-4069-a3a1-13b539828d27","raw":"localhost","norm":"localhost"}
{"t":"2026-03-11T20:38:52.654Z","event":"tenants.lookup.localhost.ok","rid":"bc40a786-7d53-4069-a3a1-13b539828d27","ms":36.6275,"sql":"SELECT id, name, domain, base_currency, timezone, recaptcha_secret, recaptcha_site_key, theme, email, phone, address, company_name FROM tenants WHERE id = 1 LIMIT 1","params":[],"rows":1}
{"t":"2026-03-11T20:38:52.700Z","event":"tenants.profile.ok","rid":"bc40a786-7d53-4069-a3a1-13b539828d27","ms":45.6819,"sql":"SELECT logo_path, trading_name, phone_main, phone_alt, support_email, website_url FROM tenant_company_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T20:38:52.732Z","event":"tenants.brand.ok","rid":"bc40a786-7d53-4069-a3a1-13b539828d27","ms":31.7907,"sql":"SELECT brand_name, brand_tagline, voice_tone, guidelines FROM tenant_brand_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T20:38:52.733Z","event":"tenancy.recaptcha","rid":"bc40a786-7d53-4069-a3a1-13b539828d27","tenant":"Giftwrap Trading (Pty) Ltd","has_recaptcha_secret":true,"has_recaptcha_key":true}
{"t":"2026-03-11T20:38:52.733Z","event":"tenancy.ok","rid":"bc40a786-7d53-4069-a3a1-13b539828d27","ms":117,"hostRaw":"localhost:3000","hostNorm":"localhost","matched":true,"tenant":{"id":1,"domain":"giftwrap.co.za"},"hdrs":{"host":"localhost:3000","xfh":null,"xoh":null}}
{"t":"2026-03-11T20:38:53.349Z","event":"tenancy.host","rid":"req_1773261532204_str8o04df","raw":"localhost","norm":"localhost"}
{"t":"2026-03-11T20:38:53.395Z","event":"tenants.lookup.localhost.ok","rid":"req_1773261532204_str8o04df","ms":45.2915,"sql":"SELECT id, name, domain, base_currency, timezone, recaptcha_secret, recaptcha_site_key, theme, email, phone, address, company_name FROM tenants WHERE id = 1 LIMIT 1","params":[],"rows":1}
{"t":"2026-03-11T20:38:53.431Z","event":"tenants.profile.ok","rid":"req_1773261532204_str8o04df","ms":36.1834,"sql":"SELECT logo_path, trading_name, phone_main, phone_alt, support_email, website_url FROM tenant_company_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T20:38:53.470Z","event":"tenants.brand.ok","rid":"req_1773261532204_str8o04df","ms":37.9385,"sql":"SELECT brand_name, brand_tagline, voice_tone, guidelines FROM tenant_brand_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T20:38:53.470Z","event":"tenancy.recaptcha","rid":"req_1773261532204_str8o04df","tenant":"Giftwrap Trading (Pty) Ltd","has_recaptcha_secret":true,"has_recaptcha_key":true}
{"t":"2026-03-11T20:38:53.470Z","event":"tenancy.ok","rid":"req_1773261532204_str8o04df","ms":121,"hostRaw":"localhost:3000","hostNorm":"localhost","matched":true,"tenant":{"id":1,"domain":"giftwrap.co.za"},"hdrs":{"host":"localhost:3000","xfh":null,"xoh":null}}
[TOP-DEBUG] Request: GET /api/v3/products?limit=8&sort=newest
{"t":"2026-03-11T20:38:53.933Z","event":"tenancy.host","rid":"83fb76d0-84ce-4345-96f4-14aa5db928f8","raw":"localhost","norm":"localhost"}
[TOP-DEBUG] Request: GET /api/v3/collections?limit=8&active_only=true&include_counts=true&nocache=1&_ts=1773261533817
{"t":"2026-03-11T20:38:53.969Z","event":"tenancy.host","rid":"62a74bb5-0900-4c3d-ae14-4a29748423e4","raw":"localhost","norm":"localhost"}
{"t":"2026-03-11T20:38:53.986Z","event":"tenancy.host","rid":"9ffb8521-a698-488b-b461-d01f0c3656be","raw":"localhost","norm":"localhost"}
{"t":"2026-03-11T20:38:54.141Z","event":"tenants.lookup.localhost.ok","rid":"83fb76d0-84ce-4345-96f4-14aa5db928f8","ms":206.869,"sql":"SELECT id, name, domain, base_currency, timezone, recaptcha_secret, recaptcha_site_key, theme, email, phone, address, company_name FROM tenants WHERE id = 1 LIMIT 1","params":[],"rows":1}
{"t":"2026-03-11T20:38:54.485Z","event":"tenancy.host","rid":"48b704f1-5906-4e66-b463-f6a2ca34063b","raw":"localhost","norm":"localhost"}
{"t":"2026-03-11T20:38:54.508Z","event":"tenants.lookup.localhost.ok","rid":"62a74bb5-0900-4c3d-ae14-4a29748423e4","ms":538.3083,"sql":"SELECT id, name, domain, base_currency, timezone, recaptcha_secret, recaptcha_site_key, theme, email, phone, address, company_name FROM tenants WHERE id = 1 LIMIT 1","params":[],"rows":1}
{"t":"2026-03-11T20:38:54.515Z","event":"tenants.lookup.localhost.ok","rid":"9ffb8521-a698-488b-b461-d01f0c3656be","ms":528.779,"sql":"SELECT id, name, domain, base_currency, timezone, recaptcha_secret, recaptcha_site_key, theme, email, phone, address, company_name FROM tenants WHERE id = 1 LIMIT 1","params":[],"rows":1}
{"t":"2026-03-11T20:38:54.519Z","event":"tenants.profile.ok","rid":"83fb76d0-84ce-4345-96f4-14aa5db928f8","ms":377.8476,"sql":"SELECT logo_path, trading_name, phone_main, phone_alt, support_email, website_url FROM tenant_company_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T20:38:54.572Z","event":"tenants.lookup.localhost.ok","rid":"48b704f1-5906-4e66-b463-f6a2ca34063b","ms":86.7547,"sql":"SELECT id, name, domain, base_currency, timezone, recaptcha_secret, recaptcha_site_key, theme, email, phone, address, company_name FROM tenants WHERE id = 1 LIMIT 1","params":[],"rows":1}
{"t":"2026-03-11T20:38:54.576Z","event":"tenants.brand.ok","rid":"83fb76d0-84ce-4345-96f4-14aa5db928f8","ms":55.8136,"sql":"SELECT brand_name, brand_tagline, voice_tone, guidelines FROM tenant_brand_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T20:38:54.576Z","event":"tenancy.recaptcha","rid":"83fb76d0-84ce-4345-96f4-14aa5db928f8","tenant":"Giftwrap Trading (Pty) Ltd","has_recaptcha_secret":true,"has_recaptcha_key":true}
{"t":"2026-03-11T20:38:54.577Z","event":"tenancy.ok","rid":"83fb76d0-84ce-4345-96f4-14aa5db928f8","ms":644,"hostRaw":"localhost:3000","hostNorm":"localhost","matched":true,"tenant":{"id":1,"domain":"giftwrap.co.za"},"hdrs":{"host":"localhost:3000","xfh":null,"xoh":null}}
{"t":"2026-03-11T20:38:54.579Z","event":"tenants.profile.ok","rid":"62a74bb5-0900-4c3d-ae14-4a29748423e4","ms":64.8634,"sql":"SELECT logo_path, trading_name, phone_main, phone_alt, support_email, website_url FROM tenant_company_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T20:38:54.584Z","event":"tenants.profile.ok","rid":"9ffb8521-a698-488b-b461-d01f0c3656be","ms":68.7936,"sql":"SELECT logo_path, trading_name, phone_main, phone_alt, support_email, website_url FROM tenant_company_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
[V3-DEBUG] Request: GET /api/v3/products?limit=8&sort=newest -> path inside router: /products
{"t":"2026-03-11T20:38:54.680Z","event":"tenants.profile.ok","rid":"48b704f1-5906-4e66-b463-f6a2ca34063b","ms":107.9371,"sql":"SELECT logo_path, trading_name, phone_main, phone_alt, support_email, website_url FROM tenant_company_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T20:38:54.682Z","event":"tenants.brand.ok","rid":"62a74bb5-0900-4c3d-ae14-4a29748423e4","ms":103.5906,"sql":"SELECT brand_name, brand_tagline, voice_tone, guidelines FROM tenant_brand_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T20:38:54.683Z","event":"tenancy.recaptcha","rid":"62a74bb5-0900-4c3d-ae14-4a29748423e4","tenant":"Giftwrap Trading (Pty) Ltd","has_recaptcha_secret":true,"has_recaptcha_key":true}
{"t":"2026-03-11T20:38:54.686Z","event":"tenancy.ok","rid":"62a74bb5-0900-4c3d-ae14-4a29748423e4","ms":717,"hostRaw":"localhost:3000","hostNorm":"localhost","matched":true,"tenant":{"id":1,"domain":"giftwrap.co.za"},"hdrs":{"host":"localhost:3000","xfh":null,"xoh":null}}
{"t":"2026-03-11T20:38:54.713Z","event":"tenants.brand.ok","rid":"9ffb8521-a698-488b-b461-d01f0c3656be","ms":127.7249,"sql":"SELECT brand_name, brand_tagline, voice_tone, guidelines FROM tenant_brand_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T20:38:54.735Z","event":"tenancy.recaptcha","rid":"9ffb8521-a698-488b-b461-d01f0c3656be","tenant":"Giftwrap Trading (Pty) Ltd","has_recaptcha_secret":true,"has_recaptcha_key":true}
{"t":"2026-03-11T20:38:54.735Z","event":"tenancy.ok","rid":"9ffb8521-a698-488b-b461-d01f0c3656be","ms":749,"hostRaw":"localhost:3000","hostNorm":"localhost","matched":true,"tenant":{"id":1,"domain":"giftwrap.co.za"},"hdrs":{"host":"localhost:3000","xfh":null,"xoh":null}}
{"t":"2026-03-11T20:38:54.867Z","event":"tenants.brand.ok","rid":"48b704f1-5906-4e66-b463-f6a2ca34063b","ms":185.7767,"sql":"SELECT brand_name, brand_tagline, voice_tone, guidelines FROM tenant_brand_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T20:38:54.881Z","event":"tenancy.recaptcha","rid":"48b704f1-5906-4e66-b463-f6a2ca34063b","tenant":"Giftwrap Trading (Pty) Ltd","has_recaptcha_secret":true,"has_recaptcha_key":true}
{"t":"2026-03-11T20:38:54.883Z","event":"tenancy.ok","rid":"48b704f1-5906-4e66-b463-f6a2ca34063b","ms":398,"hostRaw":"localhost:3000","hostNorm":"localhost","matched":true,"tenant":{"id":1,"domain":"giftwrap.co.za"},"hdrs":{"host":"localhost:3000","xfh":null,"xoh":null}}
[V3-DEBUG] Request: GET /api/v3/collections?limit=8&active_only=true&include_counts=true&nocache=1&_ts=1773261533817 -> path inside router: /collections
{"t":"2026-03-11T20:38:55.040Z","event":"tenancy.host","rid":"169912a0-8f2d-4a8b-9a98-156f5c8cf7b7","raw":"localhost","norm":"localhost"}
{"t":"2026-03-11T20:38:55.110Z","event":"tenants.lookup.localhost.ok","rid":"169912a0-8f2d-4a8b-9a98-156f5c8cf7b7","ms":66.9773,"sql":"SELECT id, name, domain, base_currency, timezone, recaptcha_secret, recaptcha_site_key, theme, email, phone, address, company_name FROM tenants WHERE id = 1 LIMIT 1","params":[],"rows":1}
{"t":"2026-03-11T20:38:55.181Z","event":"tenants.profile.ok","rid":"169912a0-8f2d-4a8b-9a98-156f5c8cf7b7","ms":67.3432,"sql":"SELECT logo_path, trading_name, phone_main, phone_alt, support_email, website_url FROM tenant_company_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T20:38:55.200Z","event":"tenancy.host","rid":"e04199ba-6b68-4392-b486-a43a5eccb5b1","raw":"localhost","norm":"localhost"}
{"t":"2026-03-11T20:38:55.678Z","event":"tenants.lookup.localhost.ok","rid":"e04199ba-6b68-4392-b486-a43a5eccb5b1","ms":477.786,"sql":"SELECT id, name, domain, base_currency, timezone, recaptcha_secret, recaptcha_site_key, theme, email, phone, address, company_name FROM tenants WHERE id = 1 LIMIT 1","params":[],"rows":1}
{"t":"2026-03-11T20:38:55.680Z","event":"tenants.brand.ok","rid":"169912a0-8f2d-4a8b-9a98-156f5c8cf7b7","ms":498.2936,"sql":"SELECT brand_name, brand_tagline, voice_tone, guidelines FROM tenant_brand_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T20:38:55.695Z","event":"tenancy.recaptcha","rid":"169912a0-8f2d-4a8b-9a98-156f5c8cf7b7","tenant":"Giftwrap Trading (Pty) Ltd","has_recaptcha_secret":true,"has_recaptcha_key":true}
{"t":"2026-03-11T20:38:55.696Z","event":"tenancy.ok","rid":"169912a0-8f2d-4a8b-9a98-156f5c8cf7b7","ms":656,"hostRaw":"localhost:3000","hostNorm":"localhost","matched":true,"tenant":{"id":1,"domain":"giftwrap.co.za"},"hdrs":{"host":"localhost:3000","xfh":null,"xoh":null}}
{"t":"2026-03-11T20:38:55.784Z","event":"tenants.profile.ok","rid":"e04199ba-6b68-4392-b486-a43a5eccb5b1","ms":105.0253,"sql":"SELECT logo_path, trading_name, phone_main, phone_alt, support_email, website_url FROM tenant_company_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T20:38:55.831Z","event":"tenants.brand.ok","rid":"e04199ba-6b68-4392-b486-a43a5eccb5b1","ms":41.944,"sql":"SELECT brand_name, brand_tagline, voice_tone, guidelines FROM tenant_brand_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T20:38:55.834Z","event":"tenancy.recaptcha","rid":"e04199ba-6b68-4392-b486-a43a5eccb5b1","tenant":"Giftwrap Trading (Pty) Ltd","has_recaptcha_secret":true,"has_recaptcha_key":true}
{"t":"2026-03-11T20:38:55.835Z","event":"tenancy.ok","rid":"e04199ba-6b68-4392-b486-a43a5eccb5b1","ms":635,"hostRaw":"localhost:3000","hostNorm":"localhost","matched":true,"tenant":{"id":1,"domain":"giftwrap.co.za"},"hdrs":{"host":"localhost:3000","xfh":null,"xoh":null}}
{"t":"2026-03-11T20:38:55.845Z","event":"tenancy.host","rid":"4e390775-cf08-489c-986b-0710186630c0","raw":"localhost","norm":"localhost"}
{"t":"2026-03-11T20:38:55.912Z","event":"tenants.lookup.localhost.ok","rid":"4e390775-cf08-489c-986b-0710186630c0","ms":66.4351,"sql":"SELECT id, name, domain, base_currency, timezone, recaptcha_secret, recaptcha_site_key, theme, email, phone, address, company_name FROM tenants WHERE id = 1 LIMIT 1","params":[],"rows":1}
{"t":"2026-03-11T20:38:55.979Z","event":"tenants.profile.ok","rid":"4e390775-cf08-489c-986b-0710186630c0","ms":66.3801,"sql":"SELECT logo_path, trading_name, phone_main, phone_alt, support_email, website_url FROM tenant_company_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T20:38:56.029Z","event":"tenancy.host","rid":"307243f2-dc44-4d85-bb0f-3c00dc461174","raw":"localhost","norm":"localhost"}
{"t":"2026-03-11T20:38:56.053Z","event":"tenants.brand.ok","rid":"4e390775-cf08-489c-986b-0710186630c0","ms":72.909,"sql":"SELECT brand_name, brand_tagline, voice_tone, guidelines FROM tenant_brand_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T20:38:56.063Z","event":"tenancy.recaptcha","rid":"4e390775-cf08-489c-986b-0710186630c0","tenant":"Giftwrap Trading (Pty) Ltd","has_recaptcha_secret":true,"has_recaptcha_key":true}
{"t":"2026-03-11T20:38:56.064Z","event":"tenancy.ok","rid":"4e390775-cf08-489c-986b-0710186630c0","ms":219,"hostRaw":"localhost:3000","hostNorm":"localhost","matched":true,"tenant":{"id":1,"domain":"giftwrap.co.za"},"hdrs":{"host":"localhost:3000","xfh":null,"xoh":null}}
{"t":"2026-03-11T20:38:56.110Z","event":"tenants.lookup.localhost.ok","rid":"307243f2-dc44-4d85-bb0f-3c00dc461174","ms":79.7878,"sql":"SELECT id, name, domain, base_currency, timezone, recaptcha_secret, recaptcha_site_key, theme, email, phone, address, company_name FROM tenants WHERE id = 1 LIMIT 1","params":[],"rows":1}
[API] {
  id: 'req_1773261532204_str8o04df',
  status: 304,
  ms: 4594,
  method: 'GET',
  path: '/api/categories',
  origin: null,
  host: 'localhost:3000',
  tenantId: 1,
  authenticated: false
}
{"t":"2026-03-11T20:38:57.930Z","event":"tenants.profile.ok","rid":"307243f2-dc44-4d85-bb0f-3c00dc461174","ms":1820.2676,"sql":"SELECT logo_path, trading_name, phone_main, phone_alt, support_email, website_url FROM tenant_company_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T20:38:57.938Z","event":"tenancy.host","rid":"5739da46-d34d-49d5-8137-85d7ae4c6321","raw":"localhost","norm":"localhost"}
{"t":"2026-03-11T20:38:57.973Z","event":"tenants.lookup.localhost.ok","rid":"5739da46-d34d-49d5-8137-85d7ae4c6321","ms":33.3554,"sql":"SELECT id, name, domain, base_currency, timezone, recaptcha_secret, recaptcha_site_key, theme, email, phone, address, company_name FROM tenants WHERE id = 1 LIMIT 1","params":[],"rows":1}
{"t":"2026-03-11T20:38:57.977Z","event":"tenants.brand.ok","rid":"307243f2-dc44-4d85-bb0f-3c00dc461174","ms":45.6608,"sql":"SELECT brand_name, brand_tagline, voice_tone, guidelines FROM tenant_brand_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T20:38:57.977Z","event":"tenancy.recaptcha","rid":"307243f2-dc44-4d85-bb0f-3c00dc461174","tenant":"Giftwrap Trading (Pty) Ltd","has_recaptcha_secret":true,"has_recaptcha_key":true}
{"t":"2026-03-11T20:38:57.979Z","event":"tenancy.ok","rid":"307243f2-dc44-4d85-bb0f-3c00dc461174","ms":1950,"hostRaw":"localhost:3000","hostNorm":"localhost","matched":true,"tenant":{"id":1,"domain":"giftwrap.co.za"},"hdrs":{"host":"localhost:3000","xfh":null,"xoh":null}}
{"t":"2026-03-11T20:38:58.000Z","event":"tenants.profile.ok","rid":"5739da46-d34d-49d5-8137-85d7ae4c6321","ms":25.2614,"sql":"SELECT logo_path, trading_name, phone_main, phone_alt, support_email, website_url FROM tenant_company_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T20:38:58.049Z","event":"tenants.brand.ok","rid":"5739da46-d34d-49d5-8137-85d7ae4c6321","ms":48.7933,"sql":"SELECT brand_name, brand_tagline, voice_tone, guidelines FROM tenant_brand_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T20:38:58.049Z","event":"tenancy.recaptcha","rid":"5739da46-d34d-49d5-8137-85d7ae4c6321","tenant":"Giftwrap Trading (Pty) Ltd","has_recaptcha_secret":true,"has_recaptcha_key":true}
{"t":"2026-03-11T20:38:58.050Z","event":"tenancy.ok","rid":"5739da46-d34d-49d5-8137-85d7ae4c6321","ms":112,"hostRaw":"localhost:3000","hostNorm":"localhost","matched":true,"tenant":{"id":1,"domain":"giftwrap.co.za"},"hdrs":{"host":"localhost:3000","xfh":null,"xoh":null}}
{"t":"2026-03-11T20:38:58.290Z","event":"tenancy.host","rid":"bb40c35c-8b4f-4a37-83c3-f37721308d27","raw":"localhost","norm":"localhost"}
{"t":"2026-03-11T20:38:58.332Z","event":"tenants.lookup.localhost.ok","rid":"bb40c35c-8b4f-4a37-83c3-f37721308d27","ms":37.6393,"sql":"SELECT id, name, domain, base_currency, timezone, recaptcha_secret, recaptcha_site_key, theme, email, phone, address, company_name FROM tenants WHERE id = 1 LIMIT 1","params":[],"rows":1}
[API] {
  id: '48b704f1-5906-4e66-b463-f6a2ca34063b',
  status: 304,
  ms: 5850,
  method: 'GET',
  path: '/api/store/categories?nested=true',
  origin: null,
  host: 'localhost:3000',
  tenantId: 1,
  authenticated: false
}
{"t":"2026-03-11T20:39:00.300Z","event":"tenants.profile.ok","rid":"bb40c35c-8b4f-4a37-83c3-f37721308d27","ms":1967.1742,"sql":"SELECT logo_path, trading_name, phone_main, phone_alt, support_email, website_url FROM tenant_company_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T20:39:00.345Z","event":"tenants.brand.ok","rid":"bb40c35c-8b4f-4a37-83c3-f37721308d27","ms":43.3092,"sql":"SELECT brand_name, brand_tagline, voice_tone, guidelines FROM tenant_brand_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T20:39:00.345Z","event":"tenancy.recaptcha","rid":"bb40c35c-8b4f-4a37-83c3-f37721308d27","tenant":"Giftwrap Trading (Pty) Ltd","has_recaptcha_secret":true,"has_recaptcha_key":true}
{"t":"2026-03-11T20:39:00.345Z","event":"tenancy.ok","rid":"bb40c35c-8b4f-4a37-83c3-f37721308d27","ms":2055,"hostRaw":"localhost:3000","hostNorm":"localhost","matched":true,"tenant":{"id":1,"domain":"giftwrap.co.za"},"hdrs":{"host":"localhost:3000","xfh":null,"xoh":null}}
{"t":"2026-03-11T20:39:01.544Z","event":"tenancy.host","rid":"77491c64-c5a7-4108-b08b-47122d304b63","raw":"localhost","norm":"localhost"}
{"t":"2026-03-11T20:39:01.548Z","event":"tenancy.host","rid":"a5855c04-5ed9-4a02-822a-4252ced9bfa8","raw":"localhost","norm":"localhost"}
{"t":"2026-03-11T20:39:01.559Z","event":"tenancy.host","rid":"965f54b4-e03d-4bda-9d4b-4697dd58357d","raw":"localhost","norm":"localhost"}
{"t":"2026-03-11T20:39:01.589Z","event":"tenants.lookup.localhost.ok","rid":"77491c64-c5a7-4108-b08b-47122d304b63","ms":44.6565,"sql":"SELECT id, name, domain, base_currency, timezone, recaptcha_secret, recaptcha_site_key, theme, email, phone, address, company_name FROM tenants WHERE id = 1 LIMIT 1","params":[],"rows":1}
{"t":"2026-03-11T20:39:01.605Z","event":"tenants.lookup.localhost.ok","rid":"a5855c04-5ed9-4a02-822a-4252ced9bfa8","ms":47.5118,"sql":"SELECT id, name, domain, base_currency, timezone, recaptcha_secret, recaptcha_site_key, theme, email, phone, address, company_name FROM tenants WHERE id = 1 LIMIT 1","params":[],"rows":1}
{"t":"2026-03-11T20:39:01.606Z","event":"tenants.lookup.localhost.ok","rid":"965f54b4-e03d-4bda-9d4b-4697dd58357d","ms":42.0517,"sql":"SELECT id, name, domain, base_currency, timezone, recaptcha_secret, recaptcha_site_key, theme, email, phone, address, company_name FROM tenants WHERE id = 1 LIMIT 1","params":[],"rows":1}
{"t":"2026-03-11T20:39:01.648Z","event":"tenants.profile.ok","rid":"77491c64-c5a7-4108-b08b-47122d304b63","ms":57.8328,"sql":"SELECT logo_path, trading_name, phone_main, phone_alt, support_email, website_url FROM tenant_company_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T20:39:01.655Z","event":"tenants.profile.ok","rid":"a5855c04-5ed9-4a02-822a-4252ced9bfa8","ms":50.3188,"sql":"SELECT logo_path, trading_name, phone_main, phone_alt, support_email, website_url FROM tenant_company_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T20:39:01.673Z","event":"tenants.profile.ok","rid":"965f54b4-e03d-4bda-9d4b-4697dd58357d","ms":57.6203,"sql":"SELECT logo_path, trading_name, phone_main, phone_alt, support_email, website_url FROM tenant_company_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T20:39:01.708Z","event":"tenants.brand.ok","rid":"77491c64-c5a7-4108-b08b-47122d304b63","ms":54.092,"sql":"SELECT brand_name, brand_tagline, voice_tone, guidelines FROM tenant_brand_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T20:39:01.710Z","event":"tenancy.recaptcha","rid":"77491c64-c5a7-4108-b08b-47122d304b63","tenant":"Giftwrap Trading (Pty) Ltd","has_recaptcha_secret":true,"has_recaptcha_key":true}
{"t":"2026-03-11T20:39:01.711Z","event":"tenancy.ok","rid":"77491c64-c5a7-4108-b08b-47122d304b63","ms":167,"hostRaw":"localhost:3000","hostNorm":"localhost","matched":true,"tenant":{"id":1,"domain":"giftwrap.co.za"},"hdrs":{"host":"localhost:3000","xfh":null,"xoh":null}}
{"t":"2026-03-11T20:39:03.626Z","event":"tenants.brand.ok","rid":"965f54b4-e03d-4bda-9d4b-4697dd58357d","ms":1953.0036,"sql":"SELECT brand_name, brand_tagline, voice_tone, guidelines FROM tenant_brand_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T20:39:03.628Z","event":"tenancy.recaptcha","rid":"965f54b4-e03d-4bda-9d4b-4697dd58357d","tenant":"Giftwrap Trading (Pty) Ltd","has_recaptcha_secret":true,"has_recaptcha_key":true}
{"t":"2026-03-11T20:39:03.644Z","event":"tenancy.ok","rid":"965f54b4-e03d-4bda-9d4b-4697dd58357d","ms":2085,"hostRaw":"localhost:3000","hostNorm":"localhost","matched":true,"tenant":{"id":1,"domain":"giftwrap.co.za"},"hdrs":{"host":"localhost:3000","xfh":null,"xoh":null}}
{"t":"2026-03-11T20:39:03.673Z","event":"tenants.brand.ok","rid":"a5855c04-5ed9-4a02-822a-4252ced9bfa8","ms":2015.128,"sql":"SELECT brand_name, brand_tagline, voice_tone, guidelines FROM tenant_brand_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T20:39:03.674Z","event":"tenancy.recaptcha","rid":"a5855c04-5ed9-4a02-822a-4252ced9bfa8","tenant":"Giftwrap Trading (Pty) Ltd","has_recaptcha_secret":true,"has_recaptcha_key":true}
{"t":"2026-03-11T20:39:03.675Z","event":"tenancy.ok","rid":"a5855c04-5ed9-4a02-822a-4252ced9bfa8","ms":2127,"hostRaw":"localhost:3000","hostNorm":"localhost","matched":true,"tenant":{"id":1,"domain":"giftwrap.co.za"},"hdrs":{"host":"localhost:3000","xfh":null,"xoh":null}}
[API] {
  id: '77491c64-c5a7-4108-b08b-47122d304b63',
  status: 304,
  ms: 2164,
  method: 'GET',
  path: '/api/store/categories?format=hierarchical&include=children,product_count&limit=500',
  origin: null,
  host: 'localhost:3000',
  tenantId: 1,
  authenticated: false
}
[API] {
  id: 'a5855c04-5ed9-4a02-822a-4252ced9bfa8',
  status: 200,
  ms: 3210,
  method: 'GET',
  path: '/api/store/products?limit=10&sort=popular',
  origin: null,
  host: 'localhost:3000',
  tenantId: 1,
  authenticated: false
}
[API] {
  id: '965f54b4-e03d-4bda-9d4b-4697dd58357d',
  status: 200,
  ms: 4284,
  method: 'GET',
  path: '/api/store/categories/corporate-gifts?include=parent%2Cchildren%2Cproducts%2Cbreadcrumb&product_limit=12&product_offset=0&product_sort=name_asc&price_max=10000&product_price_max=10000',
  origin: null,
  host: 'localhost:3000',
  tenantId: 1,
  authenticated: false
}
{"t":"2026-03-11T20:39:13.049Z","event":"tenancy.host","rid":"5a1eada9-fb67-4ad7-87ab-209a32cb456d","raw":"localhost","norm":"localhost"}
{"t":"2026-03-11T20:39:13.571Z","event":"tenants.lookup.localhost.ok","rid":"5a1eada9-fb67-4ad7-87ab-209a32cb456d","ms":521.6669,"sql":"SELECT id, name, domain, base_currency, timezone, recaptcha_secret, recaptcha_site_key, theme, email, phone, address, company_name FROM tenants WHERE id = 1 LIMIT 1","params":[],"rows":1}
{"t":"2026-03-11T20:39:13.783Z","event":"tenants.profile.ok","rid":"5a1eada9-fb67-4ad7-87ab-209a32cb456d","ms":211.3586,"sql":"SELECT logo_path, trading_name, phone_main, phone_alt, support_email, website_url FROM tenant_company_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T20:39:13.868Z","event":"tenants.brand.ok","rid":"5a1eada9-fb67-4ad7-87ab-209a32cb456d","ms":84.6192,"sql":"SELECT brand_name, brand_tagline, voice_tone, guidelines FROM tenant_brand_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T20:39:13.875Z","event":"tenancy.recaptcha","rid":"5a1eada9-fb67-4ad7-87ab-209a32cb456d","tenant":"Giftwrap Trading (Pty) Ltd","has_recaptcha_secret":true,"has_recaptcha_key":true}
{"t":"2026-03-11T20:39:13.883Z","event":"tenancy.ok","rid":"5a1eada9-fb67-4ad7-87ab-209a32cb456d","ms":834,"hostRaw":"localhost:3000","hostNorm":"localhost","matched":true,"tenant":{"id":1,"domain":"giftwrap.co.za"},"hdrs":{"host":"localhost:3000","xfh":null,"xoh":null}}
[protected-image] serving: C:\Bordales Projects\giftwrap - Copy\protected\images\img.png
{"t":"2026-03-11T20:39:18.182Z","event":"tenancy.host","rid":"87ae5b62-689b-4209-9320-929fd3675be0","raw":"localhost","norm":"localhost"}
{"t":"2026-03-11T20:39:18.305Z","event":"tenancy.host","rid":"29b54a8b-9dee-428c-acb4-317eecdb7f72","raw":"localhost","norm":"localhost"}
{"t":"2026-03-11T20:39:18.308Z","event":"tenants.lookup.localhost.ok","rid":"87ae5b62-689b-4209-9320-929fd3675be0","ms":125.2104,"sql":"SELECT id, name, domain, base_currency, timezone, recaptcha_secret, recaptcha_site_key, theme, email, phone, address, company_name FROM tenants WHERE id = 1 LIMIT 1","params":[],"rows":1}
{"t":"2026-03-11T20:39:18.309Z","event":"tenancy.host","rid":"0d87b53c-365a-4e3e-b8e8-d5a5e2cdf3fc","raw":"localhost","norm":"localhost"}
{"t":"2026-03-11T20:39:18.341Z","event":"tenants.lookup.localhost.ok","rid":"29b54a8b-9dee-428c-acb4-317eecdb7f72","ms":35.9361,"sql":"SELECT id, name, domain, base_currency, timezone, recaptcha_secret, recaptcha_site_key, theme, email, phone, address, company_name FROM tenants WHERE id = 1 LIMIT 1","params":[],"rows":1}
{"t":"2026-03-11T20:39:18.342Z","event":"tenants.lookup.localhost.ok","rid":"0d87b53c-365a-4e3e-b8e8-d5a5e2cdf3fc","ms":33.1434,"sql":"SELECT id, name, domain, base_currency, timezone, recaptcha_secret, recaptcha_site_key, theme, email, phone, address, company_name FROM tenants WHERE id = 1 LIMIT 1","params":[],"rows":1}
{"t":"2026-03-11T20:39:18.346Z","event":"tenants.profile.ok","rid":"87ae5b62-689b-4209-9320-929fd3675be0","ms":37.6063,"sql":"SELECT logo_path, trading_name, phone_main, phone_alt, support_email, website_url FROM tenant_company_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T20:39:18.377Z","event":"tenants.profile.ok","rid":"29b54a8b-9dee-428c-acb4-317eecdb7f72","ms":35.6586,"sql":"SELECT logo_path, trading_name, phone_main, phone_alt, support_email, website_url FROM tenant_company_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T20:39:18.378Z","event":"tenants.profile.ok","rid":"0d87b53c-365a-4e3e-b8e8-d5a5e2cdf3fc","ms":35.3821,"sql":"SELECT logo_path, trading_name, phone_main, phone_alt, support_email, website_url FROM tenant_company_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T20:39:18.380Z","event":"tenants.brand.ok","rid":"87ae5b62-689b-4209-9320-929fd3675be0","ms":33.5433,"sql":"SELECT brand_name, brand_tagline, voice_tone, guidelines FROM tenant_brand_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T20:39:18.380Z","event":"tenancy.recaptcha","rid":"87ae5b62-689b-4209-9320-929fd3675be0","tenant":"Giftwrap Trading (Pty) Ltd","has_recaptcha_secret":true,"has_recaptcha_key":true}
{"t":"2026-03-11T20:39:18.380Z","event":"tenancy.ok","rid":"87ae5b62-689b-4209-9320-929fd3675be0","ms":198,"hostRaw":"localhost:3000","hostNorm":"localhost","matched":true,"tenant":{"id":1,"domain":"giftwrap.co.za"},"hdrs":{"host":"localhost:3000","xfh":null,"xoh":null}}
{"t":"2026-03-11T20:39:18.398Z","event":"tenants.brand.ok","rid":"29b54a8b-9dee-428c-acb4-317eecdb7f72","ms":20.34,"sql":"SELECT brand_name, brand_tagline, voice_tone, guidelines FROM tenant_brand_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T20:39:18.398Z","event":"tenancy.recaptcha","rid":"29b54a8b-9dee-428c-acb4-317eecdb7f72","tenant":"Giftwrap Trading (Pty) Ltd","has_recaptcha_secret":true,"has_recaptcha_key":true}
{"t":"2026-03-11T20:39:18.398Z","event":"tenancy.ok","rid":"29b54a8b-9dee-428c-acb4-317eecdb7f72","ms":93,"hostRaw":"localhost:3000","hostNorm":"localhost","matched":true,"tenant":{"id":1,"domain":"giftwrap.co.za"},"hdrs":{"host":"localhost:3000","xfh":null,"xoh":null}}
[API] {
  id: '29b54a8b-9dee-428c-acb4-317eecdb7f72',
  status: 304,
  ms: 934,
  method: 'GET',
  path: '/api/store/categories?format=hierarchical&include=children,product_count&limit=500',
  origin: null,
  host: 'localhost:3000',
  tenantId: 1,
  authenticated: false
}
{"t":"2026-03-11T20:39:19.217Z","event":"tenants.brand.ok","rid":"0d87b53c-365a-4e3e-b8e8-d5a5e2cdf3fc","ms":837.7509,"sql":"SELECT brand_name, brand_tagline, voice_tone, guidelines FROM tenant_brand_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T20:39:19.218Z","event":"tenancy.recaptcha","rid":"0d87b53c-365a-4e3e-b8e8-d5a5e2cdf3fc","tenant":"Giftwrap Trading (Pty) Ltd","has_recaptcha_secret":true,"has_recaptcha_key":true}
{"t":"2026-03-11T20:39:19.219Z","event":"tenancy.ok","rid":"0d87b53c-365a-4e3e-b8e8-d5a5e2cdf3fc","ms":910,"hostRaw":"localhost:3000","hostNorm":"localhost","matched":true,"tenant":{"id":1,"domain":"giftwrap.co.za"},"hdrs":{"host":"localhost:3000","xfh":null,"xoh":null}}
[API] {
  id: '0d87b53c-365a-4e3e-b8e8-d5a5e2cdf3fc',
  status: 304,
  ms: 1528,
  method: 'GET',
  path: '/api/store/products?limit=10&sort=popular',
  origin: null,
  host: 'localhost:3000',
  tenantId: 1,
  authenticated: false
}
[API] {
  id: '87ae5b62-689b-4209-9320-929fd3675be0',
  status: 200,
  ms: 1794,
  method: 'GET',
  path: '/api/store/categories/10000-mah-powerbank?include=parent%2Cchildren%2Cproducts%2Cbreadcrumb&product_limit=12&product_offset=0&product_sort=name_asc&price_max=10000&product_price_max=10000',
  origin: null,
  host: 'localhost:3000',
  tenantId: 1,
  authenticated: false
}
{"t":"2026-03-11T20:39:54.311Z","event":"tenancy.host","rid":"3c127388-e58a-4f0c-ab17-e60b69afdbbc","raw":"localhost","norm":"localhost"}
{"t":"2026-03-11T20:39:54.342Z","event":"tenants.lookup.localhost.ok","rid":"3c127388-e58a-4f0c-ab17-e60b69afdbbc","ms":30.3434,"sql":"SELECT id, name, domain, base_currency, timezone, recaptcha_secret, recaptcha_site_key, theme, email, phone, address, company_name FROM tenants WHERE id = 1 LIMIT 1","params":[],"rows":1}
{"t":"2026-03-11T20:39:54.363Z","event":"tenants.profile.ok","rid":"3c127388-e58a-4f0c-ab17-e60b69afdbbc","ms":20.6363,"sql":"SELECT logo_path, trading_name, phone_main, phone_alt, support_email, website_url FROM tenant_company_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T20:39:54.393Z","event":"tenants.brand.ok","rid":"3c127388-e58a-4f0c-ab17-e60b69afdbbc","ms":29.3011,"sql":"SELECT brand_name, brand_tagline, voice_tone, guidelines FROM tenant_brand_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T20:39:54.394Z","event":"tenancy.recaptcha","rid":"3c127388-e58a-4f0c-ab17-e60b69afdbbc","tenant":"Giftwrap Trading (Pty) Ltd","has_recaptcha_secret":true,"has_recaptcha_key":true}
{"t":"2026-03-11T20:39:54.394Z","event":"tenancy.ok","rid":"3c127388-e58a-4f0c-ab17-e60b69afdbbc","ms":83,"hostRaw":"localhost:3000","hostNorm":"localhost","matched":true,"tenant":{"id":1,"domain":"giftwrap.co.za"},"hdrs":{"host":"localhost:3000","xfh":null,"xoh":null}}
[Branding] GET /theme called for host: localhost:3000
[Branding] Processing theme for tenant 1 (Giftwrap Trading (Pty) Ltd)
[Branding] Fetching reCAPTCHA config for tenant 1
[Branding] Using reCAPTCHA keys from database
[Branding] reCAPTCHA config: {
  hasSiteKey: true,
  hasSecret: true,
  source: 'database',
  enabled: true,
  isTestKey: false
}
why ufike late?? 6LdWOkUsAAAAAGmpRzggKFYxM18PQ3RVzzqA99ck
[Branding] GET /theme response prepared {
  tenant: 'Giftwrap Trading (Pty) Ltd',
  hasRecaptchaKey: true,
  recaptchaSource: 'database',
  themeVarsCount: 16
}
{"t":"2026-03-11T20:39:54.506Z","event":"tenancy.host","rid":"7f0b43b7-8a11-4df4-ab09-8aa8951348f9","raw":"localhost","norm":"localhost"}
{"t":"2026-03-11T20:39:54.533Z","event":"tenants.lookup.localhost.ok","rid":"7f0b43b7-8a11-4df4-ab09-8aa8951348f9","ms":25.6864,"sql":"SELECT id, name, domain, base_currency, timezone, recaptcha_secret, recaptcha_site_key, theme, email, phone, address, company_name FROM tenants WHERE id = 1 LIMIT 1","params":[],"rows":1}
{"t":"2026-03-11T20:39:54.563Z","event":"tenants.profile.ok","rid":"7f0b43b7-8a11-4df4-ab09-8aa8951348f9","ms":29.6617,"sql":"SELECT logo_path, trading_name, phone_main, phone_alt, support_email, website_url FROM tenant_company_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T20:39:54.586Z","event":"tenants.brand.ok","rid":"7f0b43b7-8a11-4df4-ab09-8aa8951348f9","ms":23.3513,"sql":"SELECT brand_name, brand_tagline, voice_tone, guidelines FROM tenant_brand_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T20:39:54.587Z","event":"tenancy.recaptcha","rid":"7f0b43b7-8a11-4df4-ab09-8aa8951348f9","tenant":"Giftwrap Trading (Pty) Ltd","has_recaptcha_secret":true,"has_recaptcha_key":true}
{"t":"2026-03-11T20:39:54.587Z","event":"tenancy.ok","rid":"7f0b43b7-8a11-4df4-ab09-8aa8951348f9","ms":81,"hostRaw":"localhost:3000","hostNorm":"localhost","matched":true,"tenant":{"id":1,"domain":"giftwrap.co.za"},"hdrs":{"host":"localhost:3000","xfh":null,"xoh":null}}
Running periodic AI performance monitoring...
{"t":"2026-03-11T20:40:49.103Z","event":"tenancy.host","rid":"293735c2-ebf1-4d21-8518-fc585090c0b1","raw":"localhost","norm":"localhost"}
{"t":"2026-03-11T20:40:49.133Z","event":"tenants.lookup.localhost.ok","rid":"293735c2-ebf1-4d21-8518-fc585090c0b1","ms":30.559,"sql":"SELECT id, name, domain, base_currency, timezone, recaptcha_secret, recaptcha_site_key, theme, email, phone, address, company_name FROM tenants WHERE id = 1 LIMIT 1","params":[],"rows":1}
{"t":"2026-03-11T20:40:49.171Z","event":"tenants.profile.ok","rid":"293735c2-ebf1-4d21-8518-fc585090c0b1","ms":37.4898,"sql":"SELECT logo_path, trading_name, phone_main, phone_alt, support_email, website_url FROM tenant_company_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T20:40:49.196Z","event":"tenants.brand.ok","rid":"293735c2-ebf1-4d21-8518-fc585090c0b1","ms":24.5479,"sql":"SELECT brand_name, brand_tagline, voice_tone, guidelines FROM tenant_brand_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T20:40:49.196Z","event":"tenancy.recaptcha","rid":"293735c2-ebf1-4d21-8518-fc585090c0b1","tenant":"Giftwrap Trading (Pty) Ltd","has_recaptcha_secret":true,"has_recaptcha_key":true}
{"t":"2026-03-11T20:40:49.197Z","event":"tenancy.ok","rid":"293735c2-ebf1-4d21-8518-fc585090c0b1","ms":94,"hostRaw":"localhost:3000","hostNorm":"localhost","matched":true,"tenant":{"id":1,"domain":"giftwrap.co.za"},"hdrs":{"host":"localhost:3000","xfh":null,"xoh":null}}
[API] {
  id: '293735c2-ebf1-4d21-8518-fc585090c0b1',
  status: 401,
  ms: 98,
  method: 'GET',
  path: '/api/api/search/products?q=book&search=book&query=book&limit=12&per_page=12&page=1',
  origin: null,
  host: 'localhost:3000',
  tenantId: 1,
  authenticated: false
}
{"t":"2026-03-11T20:40:49.211Z","event":"tenancy.host","rid":"5a58302a-46d4-46a3-934d-66a3f1146749","raw":"localhost","norm":"localhost"}
{"t":"2026-03-11T20:40:49.236Z","event":"tenants.lookup.localhost.ok","rid":"5a58302a-46d4-46a3-934d-66a3f1146749","ms":24.2106,"sql":"SELECT id, name, domain, base_currency, timezone, recaptcha_secret, recaptcha_site_key, theme, email, phone, address, company_name FROM tenants WHERE id = 1 LIMIT 1","params":[],"rows":1}
{"t":"2026-03-11T20:40:49.257Z","event":"tenants.profile.ok","rid":"5a58302a-46d4-46a3-934d-66a3f1146749","ms":20.4929,"sql":"SELECT logo_path, trading_name, phone_main, phone_alt, support_email, website_url FROM tenant_company_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T20:40:49.278Z","event":"tenants.brand.ok","rid":"5a58302a-46d4-46a3-934d-66a3f1146749","ms":21.3884,"sql":"SELECT brand_name, brand_tagline, voice_tone, guidelines FROM tenant_brand_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T20:40:49.279Z","event":"tenancy.recaptcha","rid":"5a58302a-46d4-46a3-934d-66a3f1146749","tenant":"Giftwrap Trading (Pty) Ltd","has_recaptcha_secret":true,"has_recaptcha_key":true}
{"t":"2026-03-11T20:40:49.279Z","event":"tenancy.ok","rid":"5a58302a-46d4-46a3-934d-66a3f1146749","ms":68,"hostRaw":"localhost:3000","hostNorm":"localhost","matched":true,"tenant":{"id":1,"domain":"giftwrap.co.za"},"hdrs":{"host":"localhost:3000","xfh":null,"xoh":null}}
[API] {
  id: '5a58302a-46d4-46a3-934d-66a3f1146749',
  status: 401,
  ms: 71,
  method: 'GET',
  path: '/api/api/products/search?q=book&search=book&query=book&limit=12&per_page=12&page=1',
  origin: null,
  host: 'localhost:3000',
  tenantId: 1,
  authenticated: false
}
{"t":"2026-03-11T20:40:49.295Z","event":"tenancy.host","rid":"d47498e3-e92c-4ba5-aa63-756ecd51a97e","raw":"localhost","norm":"localhost"}
{"t":"2026-03-11T20:40:49.315Z","event":"tenants.lookup.localhost.ok","rid":"d47498e3-e92c-4ba5-aa63-756ecd51a97e","ms":19.8247,"sql":"SELECT id, name, domain, base_currency, timezone, recaptcha_secret, recaptcha_site_key, theme, email, phone, address, company_name FROM tenants WHERE id = 1 LIMIT 1","params":[],"rows":1}
{"t":"2026-03-11T20:40:49.341Z","event":"tenants.profile.ok","rid":"d47498e3-e92c-4ba5-aa63-756ecd51a97e","ms":25.673,"sql":"SELECT logo_path, trading_name, phone_main, phone_alt, support_email, website_url FROM tenant_company_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T20:40:49.357Z","event":"tenants.brand.ok","rid":"d47498e3-e92c-4ba5-aa63-756ecd51a97e","ms":15.4735,"sql":"SELECT brand_name, brand_tagline, voice_tone, guidelines FROM tenant_brand_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T20:40:49.357Z","event":"tenancy.recaptcha","rid":"d47498e3-e92c-4ba5-aa63-756ecd51a97e","tenant":"Giftwrap Trading (Pty) Ltd","has_recaptcha_secret":true,"has_recaptcha_key":true}
{"t":"2026-03-11T20:40:49.357Z","event":"tenancy.ok","rid":"d47498e3-e92c-4ba5-aa63-756ecd51a97e","ms":62,"hostRaw":"localhost:3000","hostNorm":"localhost","matched":true,"tenant":{"id":1,"domain":"giftwrap.co.za"},"hdrs":{"host":"localhost:3000","xfh":null,"xoh":null}}
[API] {
  id: 'd47498e3-e92c-4ba5-aa63-756ecd51a97e',
  status: 401,
  ms: 64,
  method: 'GET',
  path: '/api/api/products?q=book&search=book&query=book&limit=12&per_page=12&page=1',
  origin: null,
  host: 'localhost:3000',
  tenantId: 1,
  authenticated: false
}
{"t":"2026-03-11T20:40:49.366Z","event":"tenancy.host","rid":"16aff2d8-d0c4-40c8-b671-9edd31a6b756","raw":"localhost","norm":"localhost"}
{"t":"2026-03-11T20:40:49.397Z","event":"tenants.lookup.localhost.ok","rid":"16aff2d8-d0c4-40c8-b671-9edd31a6b756","ms":30.658,"sql":"SELECT id, name, domain, base_currency, timezone, recaptcha_secret, recaptcha_site_key, theme, email, phone, address, company_name FROM tenants WHERE id = 1 LIMIT 1","params":[],"rows":1}
{"t":"2026-03-11T20:40:49.416Z","event":"tenants.profile.ok","rid":"16aff2d8-d0c4-40c8-b671-9edd31a6b756","ms":19.1662,"sql":"SELECT logo_path, trading_name, phone_main, phone_alt, support_email, website_url FROM tenant_company_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T20:40:49.437Z","event":"tenants.brand.ok","rid":"16aff2d8-d0c4-40c8-b671-9edd31a6b756","ms":20.3781,"sql":"SELECT brand_name, brand_tagline, voice_tone, guidelines FROM tenant_brand_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T20:40:49.437Z","event":"tenancy.recaptcha","rid":"16aff2d8-d0c4-40c8-b671-9edd31a6b756","tenant":"Giftwrap Trading (Pty) Ltd","has_recaptcha_secret":true,"has_recaptcha_key":true}
{"t":"2026-03-11T20:40:49.438Z","event":"tenancy.ok","rid":"16aff2d8-d0c4-40c8-b671-9edd31a6b756","ms":72,"hostRaw":"localhost:3000","hostNorm":"localhost","matched":true,"tenant":{"id":1,"domain":"giftwrap.co.za"},"hdrs":{"host":"localhost:3000","xfh":null,"xoh":null}}
[API] {
  id: '16aff2d8-d0c4-40c8-b671-9edd31a6b756',
  status: 401,
  ms: 76,
  method: 'GET',
  path: '/api/api/catalog/products?q=book&search=book&query=book&limit=12&per_page=12&page=1',
  origin: null,
  host: 'localhost:3000',
  tenantId: 1,
  authenticated: false
}
{"t":"2026-03-11T20:40:49.453Z","event":"tenancy.host","rid":"9135798b-f43d-4489-9ec7-e5226f56cfd0","raw":"localhost","norm":"localhost"}
{"t":"2026-03-11T20:40:49.486Z","event":"tenants.lookup.localhost.ok","rid":"9135798b-f43d-4489-9ec7-e5226f56cfd0","ms":31.335,"sql":"SELECT id, name, domain, base_currency, timezone, recaptcha_secret, recaptcha_site_key, theme, email, phone, address, company_name FROM tenants WHERE id = 1 LIMIT 1","params":[],"rows":1}
{"t":"2026-03-11T20:40:49.513Z","event":"tenants.profile.ok","rid":"9135798b-f43d-4489-9ec7-e5226f56cfd0","ms":26.6884,"sql":"SELECT logo_path, trading_name, phone_main, phone_alt, support_email, website_url FROM tenant_company_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T20:40:49.536Z","event":"tenants.brand.ok","rid":"9135798b-f43d-4489-9ec7-e5226f56cfd0","ms":22.985,"sql":"SELECT brand_name, brand_tagline, voice_tone, guidelines FROM tenant_brand_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T20:40:49.536Z","event":"tenancy.recaptcha","rid":"9135798b-f43d-4489-9ec7-e5226f56cfd0","tenant":"Giftwrap Trading (Pty) Ltd","has_recaptcha_secret":true,"has_recaptcha_key":true}
{"t":"2026-03-11T20:40:49.536Z","event":"tenancy.ok","rid":"9135798b-f43d-4489-9ec7-e5226f56cfd0","ms":83,"hostRaw":"localhost:3000","hostNorm":"localhost","matched":true,"tenant":{"id":1,"domain":"giftwrap.co.za"},"hdrs":{"host":"localhost:3000","xfh":null,"xoh":null}}
{"t":"2026-03-11T20:41:44.490Z","event":"tenancy.host","rid":"b4bb98e5-18bb-4e0b-ada7-78b42acb9e34","raw":"localhost","norm":"localhost"}
{"t":"2026-03-11T20:41:44.527Z","event":"tenants.lookup.localhost.ok","rid":"b4bb98e5-18bb-4e0b-ada7-78b42acb9e34","ms":36.8414,"sql":"SELECT id, name, domain, base_currency, timezone, recaptcha_secret, recaptcha_site_key, theme, email, phone, address, company_name FROM tenants WHERE id = 1 LIMIT 1","params":[],"rows":1}
{"t":"2026-03-11T20:41:44.557Z","event":"tenants.profile.ok","rid":"b4bb98e5-18bb-4e0b-ada7-78b42acb9e34","ms":29.6541,"sql":"SELECT logo_path, trading_name, phone_main, phone_alt, support_email, website_url FROM tenant_company_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T20:41:44.586Z","event":"tenants.brand.ok","rid":"b4bb98e5-18bb-4e0b-ada7-78b42acb9e34","ms":28.9404,"sql":"SELECT brand_name, brand_tagline, voice_tone, guidelines FROM tenant_brand_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T20:41:44.586Z","event":"tenancy.recaptcha","rid":"b4bb98e5-18bb-4e0b-ada7-78b42acb9e34","tenant":"Giftwrap Trading (Pty) Ltd","has_recaptcha_secret":true,"has_recaptcha_key":true}
{"t":"2026-03-11T20:41:44.586Z","event":"tenancy.ok","rid":"b4bb98e5-18bb-4e0b-ada7-78b42acb9e34","ms":96,"hostRaw":"localhost:3000","hostNorm":"localhost","matched":true,"tenant":{"id":1,"domain":"giftwrap.co.za"},"hdrs":{"host":"localhost:3000","xfh":null,"xoh":null}}
{"t":"2026-03-11T20:41:53.240Z","event":"tenancy.host","rid":"6ed1c16f-60da-473d-a1da-d37afa124dd6","raw":"localhost","norm":"localhost"}
{"t":"2026-03-11T20:41:53.245Z","event":"tenancy.host","rid":"6ab78c45-05dd-4fc2-a46e-a12336326509","raw":"localhost","norm":"localhost"}
{"t":"2026-03-11T20:41:53.247Z","event":"tenancy.host","rid":"2d2206c8-eed7-417c-8b44-94680f60e9e9","raw":"localhost","norm":"localhost"}
{"t":"2026-03-11T20:41:53.280Z","event":"tenants.lookup.localhost.ok","rid":"2d2206c8-eed7-417c-8b44-94680f60e9e9","ms":33.1976,"sql":"SELECT id, name, domain, base_currency, timezone, recaptcha_secret, recaptcha_site_key, theme, email, phone, address, company_name FROM tenants WHERE id = 1 LIMIT 1","params":[],"rows":1}
{"t":"2026-03-11T20:41:53.283Z","event":"tenants.lookup.localhost.ok","rid":"6ed1c16f-60da-473d-a1da-d37afa124dd6","ms":41.6761,"sql":"SELECT id, name, domain, base_currency, timezone, recaptcha_secret, recaptcha_site_key, theme, email, phone, address, company_name FROM tenants WHERE id = 1 LIMIT 1","params":[],"rows":1}
{"t":"2026-03-11T20:41:53.290Z","event":"tenants.lookup.localhost.ok","rid":"6ab78c45-05dd-4fc2-a46e-a12336326509","ms":45.556,"sql":"SELECT id, name, domain, base_currency, timezone, recaptcha_secret, recaptcha_site_key, theme, email, phone, address, company_name FROM tenants WHERE id = 1 LIMIT 1","params":[],"rows":1}
{"t":"2026-03-11T20:41:53.326Z","event":"tenants.profile.ok","rid":"6ed1c16f-60da-473d-a1da-d37afa124dd6","ms":43.2891,"sql":"SELECT logo_path, trading_name, phone_main, phone_alt, support_email, website_url FROM tenant_company_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T20:41:53.328Z","event":"tenants.profile.ok","rid":"2d2206c8-eed7-417c-8b44-94680f60e9e9","ms":47.0248,"sql":"SELECT logo_path, trading_name, phone_main, phone_alt, support_email, website_url FROM tenant_company_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T20:41:53.329Z","event":"tenants.profile.ok","rid":"6ab78c45-05dd-4fc2-a46e-a12336326509","ms":37.8993,"sql":"SELECT logo_path, trading_name, phone_main, phone_alt, support_email, website_url FROM tenant_company_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T20:41:53.371Z","event":"tenants.brand.ok","rid":"6ed1c16f-60da-473d-a1da-d37afa124dd6","ms":44.6212,"sql":"SELECT brand_name, brand_tagline, voice_tone, guidelines FROM tenant_brand_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T20:41:53.372Z","event":"tenancy.recaptcha","rid":"6ed1c16f-60da-473d-a1da-d37afa124dd6","tenant":"Giftwrap Trading (Pty) Ltd","has_recaptcha_secret":true,"has_recaptcha_key":true}
{"t":"2026-03-11T20:41:53.372Z","event":"tenancy.ok","rid":"6ed1c16f-60da-473d-a1da-d37afa124dd6","ms":132,"hostRaw":"localhost:3000","hostNorm":"localhost","matched":true,"tenant":{"id":1,"domain":"giftwrap.co.za"},"hdrs":{"host":"localhost:3000","xfh":null,"xoh":null}}
{"t":"2026-03-11T20:41:53.374Z","event":"tenants.brand.ok","rid":"2d2206c8-eed7-417c-8b44-94680f60e9e9","ms":45.7356,"sql":"SELECT brand_name, brand_tagline, voice_tone, guidelines FROM tenant_brand_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T20:41:53.374Z","event":"tenancy.recaptcha","rid":"2d2206c8-eed7-417c-8b44-94680f60e9e9","tenant":"Giftwrap Trading (Pty) Ltd","has_recaptcha_secret":true,"has_recaptcha_key":true}
{"t":"2026-03-11T20:41:53.374Z","event":"tenancy.ok","rid":"2d2206c8-eed7-417c-8b44-94680f60e9e9","ms":127,"hostRaw":"localhost:3000","hostNorm":"localhost","matched":true,"tenant":{"id":1,"domain":"giftwrap.co.za"},"hdrs":{"host":"localhost:3000","xfh":null,"xoh":null}}
[Branding] GET /theme called for host: localhost:3000
[Branding] Processing theme for tenant 1 (Giftwrap Trading (Pty) Ltd)
[Branding] Fetching reCAPTCHA config for tenant 1
{"t":"2026-03-11T20:41:53.378Z","event":"tenants.brand.ok","rid":"6ab78c45-05dd-4fc2-a46e-a12336326509","ms":49.4521,"sql":"SELECT brand_name, brand_tagline, voice_tone, guidelines FROM tenant_brand_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T20:41:53.379Z","event":"tenancy.recaptcha","rid":"6ab78c45-05dd-4fc2-a46e-a12336326509","tenant":"Giftwrap Trading (Pty) Ltd","has_recaptcha_secret":true,"has_recaptcha_key":true}
{"t":"2026-03-11T20:41:53.379Z","event":"tenancy.ok","rid":"6ab78c45-05dd-4fc2-a46e-a12336326509","ms":134,"hostRaw":"localhost:3000","hostNorm":"localhost","matched":true,"tenant":{"id":1,"domain":"giftwrap.co.za"},"hdrs":{"host":"localhost:3000","xfh":null,"xoh":null}}
[Branding] Using reCAPTCHA keys from database
[Branding] reCAPTCHA config: {
  hasSiteKey: true,
  hasSecret: true,
  source: 'database',
  enabled: true,
  isTestKey: false
}
why ufike late?? 6LdWOkUsAAAAAGmpRzggKFYxM18PQ3RVzzqA99ck
[Branding] GET /theme response prepared {
  tenant: 'Giftwrap Trading (Pty) Ltd',
  hasRecaptchaKey: true,
  recaptchaSource: 'database',
  themeVarsCount: 16
}
{"t":"2026-03-11T20:42:31.404Z","event":"tenancy.host","rid":"156b784e-066c-4c64-9e58-ac82aa54c153","raw":"localhost","norm":"localhost"}
{"t":"2026-03-11T20:42:31.446Z","event":"tenants.lookup.localhost.ok","rid":"156b784e-066c-4c64-9e58-ac82aa54c153","ms":41.5778,"sql":"SELECT id, name, domain, base_currency, timezone, recaptcha_secret, recaptcha_site_key, theme, email, phone, address, company_name FROM tenants WHERE id = 1 LIMIT 1","params":[],"rows":1}
{"t":"2026-03-11T20:42:31.481Z","event":"tenants.profile.ok","rid":"156b784e-066c-4c64-9e58-ac82aa54c153","ms":34.2817,"sql":"SELECT logo_path, trading_name, phone_main, phone_alt, support_email, website_url FROM tenant_company_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T20:42:31.520Z","event":"tenants.brand.ok","rid":"156b784e-066c-4c64-9e58-ac82aa54c153","ms":39.0341,"sql":"SELECT brand_name, brand_tagline, voice_tone, guidelines FROM tenant_brand_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T20:42:31.521Z","event":"tenancy.recaptcha","rid":"156b784e-066c-4c64-9e58-ac82aa54c153","tenant":"Giftwrap Trading (Pty) Ltd","has_recaptcha_secret":true,"has_recaptcha_key":true}
{"t":"2026-03-11T20:42:31.522Z","event":"tenancy.ok","rid":"156b784e-066c-4c64-9e58-ac82aa54c153","ms":118,"hostRaw":"localhost:3000","hostNorm":"localhost","matched":true,"tenant":{"id":1,"domain":"giftwrap.co.za"},"hdrs":{"host":"localhost:3000","xfh":null,"xoh":null}}
[DEBUG] [SPA] buildSpa called for path: /blog
[SPA] Building for path: /blog
[DEBUG] [SEO] applyThemeAndSeo called for path: /blog
[DEBUG] [SEO] Fetching data...
[DEBUG] [SEO] fetchThemeVars for tenant: 1
[DEBUG] [SEO] fetchThemeVars done: 16 rows
[DEBUG] [SEO] fetchSeoMeta for tenant: 1, path: /blog
[DEBUG] [SEO] fetchSeoMeta done: meta=false, links=2
[DEBUG] [SEO] Data fetched.
[seoService] injectionBlock length: 2113
[seoService] Splitting HTML...
[seoService] headSplit parts: 2
[seoService] Injecting into </head> at segment 0
{"t":"2026-03-11T20:42:32.204Z","event":"tenancy.host","rid":"48215b46-db89-4056-861e-7659564ad8fa","raw":"localhost","norm":"localhost"}
{"t":"2026-03-11T20:42:32.229Z","event":"tenants.lookup.localhost.ok","rid":"48215b46-db89-4056-861e-7659564ad8fa","ms":23.8927,"sql":"SELECT id, name, domain, base_currency, timezone, recaptcha_secret, recaptcha_site_key, theme, email, phone, address, company_name FROM tenants WHERE id = 1 LIMIT 1","params":[],"rows":1}
{"t":"2026-03-11T20:42:32.271Z","event":"tenants.profile.ok","rid":"48215b46-db89-4056-861e-7659564ad8fa","ms":41.9811,"sql":"SELECT logo_path, trading_name, phone_main, phone_alt, support_email, website_url FROM tenant_company_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T20:42:32.291Z","event":"tenants.brand.ok","rid":"48215b46-db89-4056-861e-7659564ad8fa","ms":19.2306,"sql":"SELECT brand_name, brand_tagline, voice_tone, guidelines FROM tenant_brand_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T20:42:32.291Z","event":"tenancy.recaptcha","rid":"48215b46-db89-4056-861e-7659564ad8fa","tenant":"Giftwrap Trading (Pty) Ltd","has_recaptcha_secret":true,"has_recaptcha_key":true}
{"t":"2026-03-11T20:42:32.291Z","event":"tenancy.ok","rid":"48215b46-db89-4056-861e-7659564ad8fa","ms":87,"hostRaw":"localhost:3000","hostNorm":"localhost","matched":true,"tenant":{"id":1,"domain":"giftwrap.co.za"},"hdrs":{"host":"localhost:3000","xfh":null,"xoh":null}}
[Branding] GET /theme called for host: localhost:3000
[Branding] Processing theme for tenant 1 (Giftwrap Trading (Pty) Ltd)
[Branding] Fetching reCAPTCHA config for tenant 1
[Branding] Using reCAPTCHA keys from database
[Branding] reCAPTCHA config: {
  hasSiteKey: true,
  hasSecret: true,
  source: 'database',
  enabled: true,
  isTestKey: false
}
why ufike late?? 6LdWOkUsAAAAAGmpRzggKFYxM18PQ3RVzzqA99ck
[Branding] GET /theme response prepared {
  tenant: 'Giftwrap Trading (Pty) Ltd',
  hasRecaptchaKey: true,
  recaptchaSource: 'database',
  themeVarsCount: 16
}
{"t":"2026-03-11T20:42:32.486Z","event":"tenancy.host","rid":"350a1d2b-4b7a-456d-bc83-aabd4d1d0035","raw":"localhost","norm":"localhost"}
{"t":"2026-03-11T20:42:32.612Z","event":"tenants.lookup.localhost.ok","rid":"350a1d2b-4b7a-456d-bc83-aabd4d1d0035","ms":125.2726,"sql":"SELECT id, name, domain, base_currency, timezone, recaptcha_secret, recaptcha_site_key, theme, email, phone, address, company_name FROM tenants WHERE id = 1 LIMIT 1","params":[],"rows":1}
{"t":"2026-03-11T20:42:32.796Z","event":"tenants.profile.ok","rid":"350a1d2b-4b7a-456d-bc83-aabd4d1d0035","ms":183.2337,"sql":"SELECT logo_path, trading_name, phone_main, phone_alt, support_email, website_url FROM tenant_company_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T20:42:32.877Z","event":"tenants.brand.ok","rid":"350a1d2b-4b7a-456d-bc83-aabd4d1d0035","ms":80.3232,"sql":"SELECT brand_name, brand_tagline, voice_tone, guidelines FROM tenant_brand_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T20:42:32.878Z","event":"tenancy.recaptcha","rid":"350a1d2b-4b7a-456d-bc83-aabd4d1d0035","tenant":"Giftwrap Trading (Pty) Ltd","has_recaptcha_secret":true,"has_recaptcha_key":true}
{"t":"2026-03-11T20:42:32.878Z","event":"tenancy.ok","rid":"350a1d2b-4b7a-456d-bc83-aabd4d1d0035","ms":392,"hostRaw":"localhost:3000","hostNorm":"localhost","matched":true,"tenant":{"id":1,"domain":"giftwrap.co.za"},"hdrs":{"host":"localhost:3000","xfh":null,"xoh":null}}
{"t":"2026-03-11T20:42:32.988Z","event":"tenancy.host","rid":"req_1773261752673_uj54plqtm","raw":"localhost","norm":"localhost"}
{"t":"2026-03-11T20:42:33.028Z","event":"tenants.lookup.localhost.ok","rid":"req_1773261752673_uj54plqtm","ms":38.7524,"sql":"SELECT id, name, domain, base_currency, timezone, recaptcha_secret, recaptcha_site_key, theme, email, phone, address, company_name FROM tenants WHERE id = 1 LIMIT 1","params":[],"rows":1}
{"t":"2026-03-11T20:42:33.085Z","event":"tenants.profile.ok","rid":"req_1773261752673_uj54plqtm","ms":56.7381,"sql":"SELECT logo_path, trading_name, phone_main, phone_alt, support_email, website_url FROM tenant_company_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T20:42:33.171Z","event":"tenants.brand.ok","rid":"req_1773261752673_uj54plqtm","ms":85.9374,"sql":"SELECT brand_name, brand_tagline, voice_tone, guidelines FROM tenant_brand_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T20:42:33.172Z","event":"tenancy.recaptcha","rid":"req_1773261752673_uj54plqtm","tenant":"Giftwrap Trading (Pty) Ltd","has_recaptcha_secret":true,"has_recaptcha_key":true}
{"t":"2026-03-11T20:42:33.172Z","event":"tenancy.ok","rid":"req_1773261752673_uj54plqtm","ms":184,"hostRaw":"localhost:3000","hostNorm":"localhost","matched":true,"tenant":{"id":1,"domain":"giftwrap.co.za"},"hdrs":{"host":"localhost:3000","xfh":null,"xoh":null}}
[API] {
  id: 'req_1773261752673_uj54plqtm',
  status: 304,
  ms: 732,
  method: 'GET',
  path: '/api/categories',
  origin: null,
  host: 'localhost:3000',
  tenantId: 1,
  authenticated: false
}
{"t":"2026-03-11T20:42:34.207Z","event":"tenancy.host","rid":"d44bf27a-6a7d-45f7-a275-9fe9eba7ff85","raw":"localhost","norm":"localhost"}
{"t":"2026-03-11T20:42:34.209Z","event":"tenancy.host","rid":"9d07e9a8-665a-4a96-9445-752c3dc20c2a","raw":"localhost","norm":"localhost"}
{"t":"2026-03-11T20:42:34.215Z","event":"tenancy.host","rid":"58ad848f-61b4-4817-ba73-cb830e0d15c1","raw":"localhost","norm":"localhost"}
{"t":"2026-03-11T20:42:34.224Z","event":"tenancy.host","rid":"6b300307-1f1f-42af-8d13-3f8a9f3fa0c3","raw":"localhost","norm":"localhost"}
{"t":"2026-03-11T20:42:34.276Z","event":"tenants.lookup.localhost.ok","rid":"d44bf27a-6a7d-45f7-a275-9fe9eba7ff85","ms":68.0531,"sql":"SELECT id, name, domain, base_currency, timezone, recaptcha_secret, recaptcha_site_key, theme, email, phone, address, company_name FROM tenants WHERE id = 1 LIMIT 1","params":[],"rows":1}
{"t":"2026-03-11T20:42:34.277Z","event":"tenants.lookup.localhost.ok","rid":"9d07e9a8-665a-4a96-9445-752c3dc20c2a","ms":67.7054,"sql":"SELECT id, name, domain, base_currency, timezone, recaptcha_secret, recaptcha_site_key, theme, email, phone, address, company_name FROM tenants WHERE id = 1 LIMIT 1","params":[],"rows":1}
{"t":"2026-03-11T20:42:34.289Z","event":"tenants.lookup.localhost.ok","rid":"58ad848f-61b4-4817-ba73-cb830e0d15c1","ms":73.9857,"sql":"SELECT id, name, domain, base_currency, timezone, recaptcha_secret, recaptcha_site_key, theme, email, phone, address, company_name FROM tenants WHERE id = 1 LIMIT 1","params":[],"rows":1}
{"t":"2026-03-11T20:42:34.302Z","event":"tenants.lookup.localhost.ok","rid":"6b300307-1f1f-42af-8d13-3f8a9f3fa0c3","ms":73.7765,"sql":"SELECT id, name, domain, base_currency, timezone, recaptcha_secret, recaptcha_site_key, theme, email, phone, address, company_name FROM tenants WHERE id = 1 LIMIT 1","params":[],"rows":1}
{"t":"2026-03-11T20:42:34.337Z","event":"tenants.profile.ok","rid":"d44bf27a-6a7d-45f7-a275-9fe9eba7ff85","ms":60.434,"sql":"SELECT logo_path, trading_name, phone_main, phone_alt, support_email, website_url FROM tenant_company_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T20:42:34.340Z","event":"tenants.profile.ok","rid":"58ad848f-61b4-4817-ba73-cb830e0d15c1","ms":50.5992,"sql":"SELECT logo_path, trading_name, phone_main, phone_alt, support_email, website_url FROM tenant_company_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T20:42:34.342Z","event":"tenants.profile.ok","rid":"9d07e9a8-665a-4a96-9445-752c3dc20c2a","ms":64.5307,"sql":"SELECT logo_path, trading_name, phone_main, phone_alt, support_email, website_url FROM tenant_company_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T20:42:34.354Z","event":"tenants.profile.ok","rid":"6b300307-1f1f-42af-8d13-3f8a9f3fa0c3","ms":51.3595,"sql":"SELECT logo_path, trading_name, phone_main, phone_alt, support_email, website_url FROM tenant_company_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T20:42:34.375Z","event":"tenants.brand.ok","rid":"d44bf27a-6a7d-45f7-a275-9fe9eba7ff85","ms":38.3694,"sql":"SELECT brand_name, brand_tagline, voice_tone, guidelines FROM tenant_brand_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T20:42:34.376Z","event":"tenancy.recaptcha","rid":"d44bf27a-6a7d-45f7-a275-9fe9eba7ff85","tenant":"Giftwrap Trading (Pty) Ltd","has_recaptcha_secret":true,"has_recaptcha_key":true}
{"t":"2026-03-11T20:42:34.377Z","event":"tenancy.ok","rid":"d44bf27a-6a7d-45f7-a275-9fe9eba7ff85","ms":172,"hostRaw":"localhost:3000","hostNorm":"localhost","matched":true,"tenant":{"id":1,"domain":"giftwrap.co.za"},"hdrs":{"host":"localhost:3000","xfh":null,"xoh":null}}
[Branding] GET /theme called for host: localhost:3000
[Branding] Processing theme for tenant 1 (Giftwrap Trading (Pty) Ltd)
[Branding] Fetching reCAPTCHA config for tenant 1
{"t":"2026-03-11T20:42:34.392Z","event":"tenants.brand.ok","rid":"58ad848f-61b4-4817-ba73-cb830e0d15c1","ms":51.1264,"sql":"SELECT brand_name, brand_tagline, voice_tone, guidelines FROM tenant_brand_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T20:42:34.393Z","event":"tenancy.recaptcha","rid":"58ad848f-61b4-4817-ba73-cb830e0d15c1","tenant":"Giftwrap Trading (Pty) Ltd","has_recaptcha_secret":true,"has_recaptcha_key":true}
{"t":"2026-03-11T20:42:34.393Z","event":"tenancy.ok","rid":"58ad848f-61b4-4817-ba73-cb830e0d15c1","ms":178,"hostRaw":"localhost:3000","hostNorm":"localhost","matched":true,"tenant":{"id":1,"domain":"giftwrap.co.za"},"hdrs":{"host":"localhost:3000","xfh":null,"xoh":null}}
{"t":"2026-03-11T20:42:34.409Z","event":"tenants.brand.ok","rid":"6b300307-1f1f-42af-8d13-3f8a9f3fa0c3","ms":53.7111,"sql":"SELECT brand_name, brand_tagline, voice_tone, guidelines FROM tenant_brand_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T20:42:34.409Z","event":"tenancy.recaptcha","rid":"6b300307-1f1f-42af-8d13-3f8a9f3fa0c3","tenant":"Giftwrap Trading (Pty) Ltd","has_recaptcha_secret":true,"has_recaptcha_key":true}
{"t":"2026-03-11T20:42:34.411Z","event":"tenancy.ok","rid":"6b300307-1f1f-42af-8d13-3f8a9f3fa0c3","ms":187,"hostRaw":"localhost:3000","hostNorm":"localhost","matched":true,"tenant":{"id":1,"domain":"giftwrap.co.za"},"hdrs":{"host":"localhost:3000","xfh":null,"xoh":null}}
{"t":"2026-03-11T20:42:34.421Z","event":"tenants.brand.ok","rid":"9d07e9a8-665a-4a96-9445-752c3dc20c2a","ms":78.7844,"sql":"SELECT brand_name, brand_tagline, voice_tone, guidelines FROM tenant_brand_profiles WHERE tenant_id=? LIMIT 1","params":[1],"rows":1}
{"t":"2026-03-11T20:42:34.422Z","event":"tenancy.recaptcha","rid":"9d07e9a8-665a-4a96-9445-752c3dc20c2a","tenant":"Giftwrap Trading (Pty) Ltd","has_recaptcha_secret":true,"has_recaptcha_key":true}
{"t":"2026-03-11T20:42:34.422Z","event":"tenancy.ok","rid":"9d07e9a8-665a-4a96-9445-752c3dc20c2a","ms":213,"hostRaw":"localhost:3000","hostNorm":"localhost","matched":true,"tenant":{"id":1,"domain":"giftwrap.co.za"},"hdrs":{"host":"localhost:3000","xfh":null,"xoh":null}}
[API] {
  id: '9d07e9a8-665a-4a96-9445-752c3dc20c2a',
  status: 304,
  ms: 1050,
  method: 'GET',
  path: '/api/store/categories?nested=true',
  origin: null,
  host: 'localhost:3000',
  tenantId: 1,
  authenticated: false
}
[Branding] Using reCAPTCHA keys from database
[Branding] reCAPTCHA config: {
  hasSiteKey: true,
  hasSecret: true,
  source: 'database',
  enabled: true,
  isTestKey: false
}
why ufike late?? 6LdWOkUsAAAAAGmpRzggKFYxM18PQ3RVzzqA99ck
[Branding] GET /theme response prepared {
  tenant: 'Giftwrap Trading (Pty) Ltd',
  hasRecaptchaKey: true,
  recaptchaSource: 'database',
  themeVarsCount: 16
}
Running periodic AI performance monitoring...
Running periodic AI performance monitoring...
Running periodic AI performance monitoring...
Running periodic AI performance monitoring...
Running periodic AI performance monitoring...
Running periodic AI performance monitoring...
Running periodic AI performance monitoring...
Running periodic AI performance monitoring...
Running periodic AI performance monitoring...
Running periodic AI performance monitoring...
Running periodic AI performance monitoring...
Running periodic AI performance monitoring...
Running periodic AI performance monitoring...
Running periodic AI performance monitoring...
Running periodic AI performance monitoring...
Running daily log cleanup...
Running periodic AI performance monitoring...
Cleaned up old logs from ai_interaction_logs
Cleaned up old logs from user_behavior_logs
Cleaned up old logs from ai_performance_metrics
Cleaned up old logs from search_analytics
Cleaned up old logs from system_monitoring
Log cleanup completed: { success: true, message: 'Log cleanup completed' }
Running periodic AI performance monitoring...
Running periodic AI performance monitoring...
Running periodic AI performance monitoring...
Running periodic AI performance monitoring...
Running periodic AI performance monitoring...
Running periodic AI performance monitoring...
[2026-03-12T01:07:31.964Z] [PID: 136520] [32m[NODE-CRON][32m [33m[WARN][0m missed execution at Thu Mar 12 2026 
00:35:00 GMT+0200 (South Africa Standard Time)! Possible blocking IO or high CPU user at the same process used by 
node-cron.
[2026-03-12T01:07:32.013Z] [PID: 136520] [32m[NODE-CRON][32m [33m[WARN][0m missed execution at Thu Mar 12 2026 
00:40:00 GMT+0200 (South Africa Standard Time)! Possible blocking IO or high CPU user at the same process used by 
node-cron.
[2026-03-12T01:07:32.039Z] [PID: 136520] [32m[NODE-CRON][32m [33m[WARN][0m missed execution at Thu Mar 12 2026 
00:45:00 GMT+0200 (South Africa Standard Time)! Possible blocking IO or high CPU user at the same process used by 
node-cron.
[2026-03-12T01:07:32.084Z] [PID: 136520] [32m[NODE-CRON][32m [33m[WARN][0m missed execution at Thu Mar 12 2026 
00:50:00 GMT+0200 (South Africa Standard Time)! Possible blocking IO or high CPU user at the same process used by 
node-cron.
[2026-03-12T01:07:32.209Z] [PID: 136520] [32m[NODE-CRON][32m [33m[WARN][0m missed execution at Thu Mar 12 2026 
00:55:00 GMT+0200 (South Africa Standard Time)! Possible blocking IO or high CPU user at the same process used by 
node-cron.
[2026-03-12T01:07:32.335Z] [PID: 136520] [32m[NODE-CRON][32m [33m[WARN][0m missed execution at Thu Mar 12 2026 
01:00:00 GMT+0200 (South Africa Standard Time)! Possible blocking IO or high CPU user at the same process used by 
node-cron.
[2026-03-12T01:07:32.435Z] [PID: 136520] [32m[NODE-CRON][32m [33m[WARN][0m missed execution at Thu Mar 12 2026 
01:05:00 GMT+0200 (South Africa Standard Time)! Possible blocking IO or high CPU user at the same process used by 
node-cron.
[2026-03-12T01:07:32.580Z] [PID: 136520] [32m[NODE-CRON][32m [33m[WARN][0m missed execution at Thu Mar 12 2026 
01:10:00 GMT+0200 (South Africa Standard Time)! Possible blocking IO or high CPU user at the same process used by 
node-cron.
[2026-03-12T01:07:32.682Z] [PID: 136520] [32m[NODE-CRON][32m [33m[WARN][0m missed execution at Thu Mar 12 2026 
01:15:00 GMT+0200 (South Africa Standard Time)! Possible blocking IO or high CPU user at the same process used by 
node-cron.
[2026-03-12T01:07:32.787Z] [PID: 136520] [32m[NODE-CRON][32m [33m[WARN][0m missed execution at Thu Mar 12 2026 
01:20:00 GMT+0200 (South Africa Standard Time)! Possible blocking IO or high CPU user at the same process used by 
node-cron.
[2026-03-12T01:07:32.836Z] [PID: 136520] [32m[NODE-CRON][32m [33m[WARN][0m missed execution at Thu Mar 12 2026 
01:25:00 GMT+0200 (South Africa Standard Time)! Possible blocking IO or high CPU user at the same process used by 
node-cron.
[2026-03-12T01:07:32.949Z] [PID: 136520] [32m[NODE-CRON][32m [33m[WARN][0m missed execution at Thu Mar 12 2026 
01:30:00 GMT+0200 (South Africa Standard Time)! Possible blocking IO or high CPU user at the same process used by 
node-cron.
[2026-03-12T01:07:33.053Z] [PID: 136520] [32m[NODE-CRON][32m [33m[WARN][0m missed execution at Thu Mar 12 2026 
01:35:00 GMT+0200 (South Africa Standard Time)! Possible blocking IO or high CPU user at the same process used by 
node-cron.
[2026-03-12T01:07:33.167Z] [PID: 136520] [32m[NODE-CRON][32m [33m[WARN][0m missed execution at Thu Mar 12 2026 
01:40:00 GMT+0200 (South Africa Standard Time)! Possible blocking IO or high CPU user at the same process used by 
node-cron.
[2026-03-12T01:07:33.248Z] [PID: 136520] [32m[NODE-CRON][32m [33m[WARN][0m missed execution at Thu Mar 12 2026 
01:45:00 GMT+0200 (South Africa Standard Time)! Possible blocking IO or high CPU user at the same process used by 
node-cron.
[2026-03-12T01:07:33.321Z] [PID: 136520] [32m[NODE-CRON][32m [33m[WARN][0m missed execution at Thu Mar 12 2026 
01:50:00 GMT+0200 (South Africa Standard Time)! Possible blocking IO or high CPU user at the same process used by 
node-cron.
[2026-03-12T01:07:33.366Z] [PID: 136520] [32m[NODE-CRON][32m [33m[WARN][0m missed execution at Thu Mar 12 2026 
01:55:00 GMT+0200 (South Africa Standard Time)! Possible blocking IO or high CPU user at the same process used by 
node-cron.
[2026-03-12T01:07:33.405Z] [PID: 136520] [32m[NODE-CRON][32m [33m[WARN][0m missed execution at Thu Mar 12 2026 
02:00:00 GMT+0200 (South Africa Standard Time)! Possible blocking IO or high CPU user at the same process used by 
node-cron.
[2026-03-12T01:07:33.424Z] [PID: 136520] [32m[NODE-CRON][32m [33m[WARN][0m missed execution at Thu Mar 12 2026 
02:05:00 GMT+0200 (South Africa Standard Time)! Possible blocking IO or high CPU user at the same process used by 
node-cron.
[2026-03-12T01:07:33.483Z] [PID: 136520] [32m[NODE-CRON][32m [33m[WARN][0m missed execution at Thu Mar 12 2026 
02:10:00 GMT+0200 (South Africa Standard Time)! Possible blocking IO or high CPU user at the same process used by 
node-cron.
[2026-03-12T01:07:33.571Z] [PID: 136520] [32m[NODE-CRON][32m [33m[WARN][0m missed execution at Thu Mar 12 2026 
02:15:00 GMT+0200 (South Africa Standard Time)! Possible blocking IO or high CPU user at the same process used by 
node-cron.
[2026-03-12T01:07:33.647Z] [PID: 136520] [32m[NODE-CRON][32m [33m[WARN][0m missed execution at Thu Mar 12 2026 
02:20:00 GMT+0200 (South Africa Standard Time)! Possible blocking IO or high CPU user at the same process used by 
node-cron.
[2026-03-12T01:07:33.684Z] [PID: 136520] [32m[NODE-CRON][32m [33m[WARN][0m missed execution at Thu Mar 12 2026 
02:25:00 GMT+0200 (South Africa Standard Time)! Possible blocking IO or high CPU user at the same process used by 
node-cron.
[2026-03-12T01:07:33.700Z] [PID: 136520] [32m[NODE-CRON][32m [33m[WARN][0m missed execution at Thu Mar 12 2026 
02:30:00 GMT+0200 (South Africa Standard Time)! Possible blocking IO or high CPU user at the same process used by 
node-cron.
[2026-03-12T01:07:33.743Z] [PID: 136520] [32m[NODE-CRON][32m [33m[WARN][0m missed execution at Thu Mar 12 2026 
02:35:00 GMT+0200 (South Africa Standard Time)! Possible blocking IO or high CPU user at the same process used by 
node-cron.
[2026-03-12T01:07:33.803Z] [PID: 136520] [32m[NODE-CRON][32m [33m[WARN][0m missed execution at Thu Mar 12 2026 
02:40:00 GMT+0200 (South Africa Standard Time)! Possible blocking IO or high CPU user at the same process used by 
node-cron.
[2026-03-12T01:07:33.816Z] [PID: 136520] [32m[NODE-CRON][32m [33m[WARN][0m missed execution at Thu Mar 12 2026 
02:45:00 GMT+0200 (South Africa Standard Time)! Possible blocking IO or high CPU user at the same process used by 
node-cron.
[2026-03-12T01:07:33.840Z] [PID: 136520] [32m[NODE-CRON][32m [33m[WARN][0m missed execution at Thu Mar 12 2026 
02:50:00 GMT+0200 (South Africa Standard Time)! Possible blocking IO or high CPU user at the same process used by 
node-cron.
[2026-03-12T01:07:33.876Z] [PID: 136520] [32m[NODE-CRON][32m [33m[WARN][0m missed execution at Thu Mar 12 2026 
02:55:00 GMT+0200 (South Africa Standard Time)! Possible blocking IO or high CPU user at the same process used by 
node-cron.
[2026-03-12T01:07:33.925Z] [PID: 136520] [32m[NODE-CRON][32m [33m[WARN][0m missed execution at Thu Mar 12 2026 
03:00:00 GMT+0200 (South Africa Standard Time)! Possible blocking IO or high CPU user at the same process used by 
node-cron.
[2026-03-12T01:07:33.928Z] [PID: 136520] [32m[NODE-CRON][32m [33m[WARN][0m missed execution at Thu Mar 12 2026 
03:05:00 GMT+0200 (South Africa Standard Time)! Possible blocking IO or high CPU user at the same process used by 
node-cron.
[2026-03-12T03:15:37.178Z] [PID: 136520] [32m[NODE-CRON][32m [33m[WARN][0m missed execution at Thu Mar 12 2026 
03:10:00 GMT+0200 (South Africa Standard Time)! Possible blocking IO or high CPU user at the same process used by 
node-cron.
[2026-03-12T03:15:37.363Z] [PID: 136520] [32m[NODE-CRON][32m [33m[WARN][0m missed execution at Thu Mar 12 2026 
03:15:00 GMT+0200 (South Africa Standard Time)! Possible blocking IO or high CPU user at the same process used by 
node-cron.
[2026-03-12T03:15:37.478Z] [PID: 136520] [32m[NODE-CRON][32m [33m[WARN][0m missed execution at Thu Mar 12 2026 
03:20:00 GMT+0200 (South Africa Standard Time)! Possible blocking IO or high CPU user at the same process used by 
node-cron.
[2026-03-12T03:15:37.587Z] [PID: 136520] [32m[NODE-CRON][32m [33m[WARN][0m missed execution at Thu Mar 12 2026 
03:25:00 GMT+0200 (South Africa Standard Time)! Possible blocking IO or high CPU user at the same process used by 
node-cron.
[2026-03-12T03:15:37.675Z] [PID: 136520] [32m[NODE-CRON][32m [33m[WARN][0m missed execution at Thu Mar 12 2026 
03:30:00 GMT+0200 (South Africa Standard Time)! Possible blocking IO or high CPU user at the same process used by 
node-cron.
[2026-03-12T03:15:37.814Z] [PID: 136520] [32m[NODE-CRON][32m [33m[WARN][0m missed execution at Thu Mar 12 2026 
03:35:00 GMT+0200 (South Africa Standard Time)! Possible blocking IO or high CPU user at the same process used by 
node-cron.
[2026-03-12T03:15:37.963Z] [PID: 136520] [32m[NODE-CRON][32m [33m[WARN][0m missed execution at Thu Mar 12 2026 
03:40:00 GMT+0200 (South Africa Standard Time)! Possible blocking IO or high CPU user at the same process used by 
node-cron.
[2026-03-12T03:15:38.073Z] [PID: 136520] [32m[NODE-CRON][32m [33m[WARN][0m missed execution at Thu Mar 12 2026 
03:45:00 GMT+0200 (South Africa Standard Time)! Possible blocking IO or high CPU user at the same process used by 
node-cron.
[2026-03-12T03:15:38.075Z] [PID: 136520] [32m[NODE-CRON][32m [33m[WARN][0m missed execution at Thu Mar 12 2026 
03:50:00 GMT+0200 (South Africa Standard Time)! Possible blocking IO or high CPU user at the same process used by 
node-cron.
[2026-03-12T03:15:38.117Z] [PID: 136520] [32m[NODE-CRON][32m [33m[WARN][0m missed execution at Thu Mar 12 2026 
03:55:00 GMT+0200 (South Africa Standard Time)! Possible blocking IO or high CPU user at the same process used by 
node-cron.
[2026-03-12T03:15:38.170Z] [PID: 136520] [32m[NODE-CRON][32m [33m[WARN][0m missed execution at Thu Mar 12 2026 
04:00:00 GMT+0200 (South Africa Standard Time)! Possible blocking IO or high CPU user at the same process used by 
node-cron.
[2026-03-12T03:15:38.206Z] [PID: 136520] [32m[NODE-CRON][32m [33m[WARN][0m missed execution at Thu Mar 12 2026 
04:05:00 GMT+0200 (South Africa Standard Time)! Possible blocking IO or high CPU user at the same process used by 
node-cron.
[2026-03-12T03:15:38.288Z] [PID: 136520] [32m[NODE-CRON][32m [33m[WARN][0m missed execution at Thu Mar 12 2026 
04:10:00 GMT+0200 (South Africa Standard Time)! Possible blocking IO or high CPU user at the same process used by 
node-cron.
[2026-03-12T03:15:38.393Z] [PID: 136520] [32m[NODE-CRON][32m [33m[WARN][0m missed execution at Thu Mar 12 2026 
04:15:00 GMT+0200 (South Africa Standard Time)! Possible blocking IO or high CPU user at the same process used by 
node-cron.
[2026-03-12T03:15:38.475Z] [PID: 136520] [32m[NODE-CRON][32m [33m[WARN][0m missed execution at Thu Mar 12 2026 
04:20:00 GMT+0200 (South Africa Standard Time)! Possible blocking IO or high CPU user at the same process used by 
node-cron.
[2026-03-12T03:15:38.553Z] [PID: 136520] [32m[NODE-CRON][32m [33m[WARN][0m missed execution at Thu Mar 12 2026 
04:25:00 GMT+0200 (South Africa Standard Time)! Possible blocking IO or high CPU user at the same process used by 
node-cron.
[2026-03-12T03:15:38.602Z] [PID: 136520] [32m[NODE-CRON][32m [33m[WARN][0m missed execution at Thu Mar 12 2026 
04:30:00 GMT+0200 (South Africa Standard Time)! Possible blocking IO or high CPU user at the same process used by 
node-cron.
[2026-03-12T03:15:38.630Z] [PID: 136520] [32m[NODE-CRON][32m [33m[WARN][0m missed execution at Thu Mar 12 2026 
04:35:00 GMT+0200 (South Africa Standard Time)! Possible blocking IO or high CPU user at the same process used by 
node-cron.
[2026-03-12T03:15:38.655Z] [PID: 136520] [32m[NODE-CRON][32m [33m[WARN][0m missed execution at Thu Mar 12 2026 
04:40:00 GMT+0200 (South Africa Standard Time)! Possible blocking IO or high CPU user at the same process used by 
node-cron.
[2026-03-12T03:15:38.677Z] [PID: 136520] [32m[NODE-CRON][32m [33m[WARN][0m missed execution at Thu Mar 12 2026 
04:45:00 GMT+0200 (South Africa Standard Time)! Possible blocking IO or high CPU user at the same process used by 
node-cron.
[2026-03-12T03:15:38.717Z] [PID: 136520] [32m[NODE-CRON][32m [33m[WARN][0m missed execution at Thu Mar 12 2026 
04:50:00 GMT+0200 (South Africa Standard Time)! Possible blocking IO or high CPU user at the same process used by 
node-cron.
[2026-03-12T03:15:38.745Z] [PID: 136520] [32m[NODE-CRON][32m [33m[WARN][0m missed execution at Thu Mar 12 2026 
04:55:00 GMT+0200 (South Africa Standard Time)! Possible blocking IO or high CPU user at the same process used by 
node-cron.
[2026-03-12T03:15:38.760Z] [PID: 136520] [32m[NODE-CRON][32m [33m[WARN][0m missed execution at Thu Mar 12 2026 
05:00:00 GMT+0200 (South Africa Standard Time)! Possible blocking IO or high CPU user at the same process used by 
node-cron.
[2026-03-12T03:15:38.797Z] [PID: 136520] [32m[NODE-CRON][32m [33m[WARN][0m missed execution at Thu Mar 12 2026 
05:05:00 GMT+0200 (South Africa Standard Time)! Possible blocking IO or high CPU user at the same process used by 
node-cron.
[2026-03-12T03:15:38.817Z] [PID: 136520] [32m[NODE-CRON][32m [33m[WARN][0m missed execution at Thu Mar 12 2026 
05:10:00 GMT+0200 (South Africa Standard Time)! Possible blocking IO or high CPU user at the same process used by 
node-cron.
[2026-03-12T03:15:38.863Z] [PID: 136520] [32m[NODE-CRON][32m [33m[WARN][0m missed execution at Thu Mar 12 2026 
05:15:00 GMT+0200 (South Africa Standard Time)! Possible blocking IO or high CPU user at the same process used by 
node-cron.
