VARNI STOREFRONTS · QUALITY AUDIT · 2026-07-12

Website-26 — myntra theme

Live site: https://website-26.varnijewels.com · Design reference: myntra.com

44/100 blockers 7 critical · 10 major · 10 medium · 21 minor

Audited across three dimensions: launch readiness (functionality, SEO, performance, security, accessibility, analytics, brand), mobile QA (real device emulation, touch), and desktop QA (1920/1440/1366, hover + keyboard). Report-only — no purchase was completed.

Category scores

Launch-readiness scoring. Infra-only items are marked MANUAL and left unscored.

CategoryScoreVerdictDefects
Functionality (guest journey) 40 fail 5
Performance (Lighthouse + CWV) 62 warn 3
SEO (technical) 35 fail 6
Security (headers + surface) 45 fail 4
Frontend & Accessibility 80 warn 4
Analytics & Tracking 0 fail 1
Brand Consistency & Originality 45 fail 5
Marketing Readiness 45 warn 3
Backend / Infra (MANUAL) manual 2
Monitoring & Maintenance (MANUAL) manual 1

Lighthouse & Core Web Vitals

Lighthouse CLI, mobile emulation defaults.

PageurlperformanceaccessibilitybestPracticesseoLCP_sCLSTBT_msFCP_sSI_s
homehttps://website-26.varnijewels.com/729296924.20.00104.26.2
pdphttps://website-26.varnijewels.com/products/033-carat-14k-rose-gold-igi-certified-lab-grown-princess-cut-diamond-solitaire-stud-earrings-for-women-pushback-closure-e-f-color-vs1-vs2-clarity6489961009.50.001203.74.8

Launch-readiness findings

34 findings across functionality, SEO, security, performance, accessibility, analytics and brand consistency.

critical All primary nav categories (Rings, Earrings, Necklaces, Bridal, Gifts) show 0 products Functionality (guest journey)

Clicking any of the 5 main header nav links (matching CLAUDE.md's bare-slug /<term> convention) lands on a 200-OK page with 'NO PRODUCTS FOUND' / '0 Products', while /products shows 403 products exist in the catalog. Verified for /rings, /earrings, /necklaces, /bridal, /gifts via Playwright render + curl (all HTTP 200, not 404s) -- so this is a category/search-index tagging bug, not a routing bug: products are not tagged with the category slugs the nav/Meilisearch filter expects.

Screenshot w26-04-plp-rings.png shows 'Rings — 0 Products / NO PRODUCTS FOUND'. JSON: w26-plp-category-check.json — earrings/necklaces/bridal/gifts all '0 Products'; /products = '403 Products'.

Fix: Fix product->category slug mapping in the Meilisearch index (categories field) so /rings, /earrings, /necklaces, /bridal, /gifts resolve the same 403-product catalog by category. This breaks the entire primary browsing path for every guest — launch blocker.

critical sitemap.xml is broken — returns a JSON error, not XML SEO (technical)

robots.txt correctly references https://website-26.varnijewels.com/sitemaps/website-26.varnijewels.com-sitemaps/sitemap_index.xml, but requesting /sitemap.xml returns {"message":"Sitemap not found, you can generate sitemap through the admin dashboard."} — no discoverable sitemap for crawlers.

curl https://website-26.varnijewels.com/sitemap.xml -> JSON error body

Fix: Generate/publish the sitemap via the admin dashboard (per the error's own instruction) before launch; verify the robots.txt-referenced sitemap_index.xml URL actually resolves.

critical Reference-brand identity leaks into every product's <title>, meta description, OG/Twitter tags, and visible body copy SEO (technical)

PDP <title> = '...(E-F Color, VS1-VS2 Clarity) | JewelWeSell'. og:title/og:description/twitter:description repeat 'JewelWeSell(s)'. The visible Product Description paragraph on the live page reads '...Presented in a JewelWeSell signature gift box...' — 12 occurrences of 'JewelWeSell' found in one PDP's raw HTML (title, 2x meta description, og:title, og:description, twitter:description, 2x rendered body text). Separately, og:site_name = 'Boris&Twins' (a second leaked reference brand), and JSON-LD Product schema sets "brand.name":"BorisAndTwins" / "manufacturer":"BorisAndTwins" on every listed product.

grep -c JewelWeSell w26-pdp.html = 12; <title> and og:site_name shown in w26-pdp.html; JSON-LD block 1 in w26-home.html has brand.name/manufacturer = BorisAndTwins.

Fix: Sanitize the product feed/import pipeline: strip source-brand name/copy ('JewelWeSell', 'BorisAndTwins') from title templates, meta description templates, OG/Twitter templates, JSON-LD brand/manufacturer fields, and the raw product description body copy across all 403 products before launch. This is a copyright/plagiarism and brand-consistency risk per CLAUDE.md, and it's crawlable/shareable (search snippets, social previews, schema) even though the on-page header/footer/sidenav chrome is correctly branded WEBSITE-26.

critical Reference-brand identity leaks outside visible chrome (see SEO category for full evidence) Brand Consistency & Originality

og:site_name='Boris&Twins', JSON-LD Organization/WebSite name='Boris&Twins', Product JSON-LD brand.name/manufacturer='BorisAndTwins', page <title> suffix '| JewelWeSell' on every product, and 'JewelWeSell' phrasing baked into the visible product description copy itself ('Presented in a JewelWeSell signature gift box').

See SEO category findings above; w26-home.html and w26-pdp.html greps

Fix: Same fix as SEO category: strip both leaked reference brands ('Boris&Twins'/'BorisAndTwins' and 'JewelWeSell') from schema, meta, and product copy across the catalog. This is the single biggest brand-consistency defect on the site — it undermines the entire rebrand even though the header/nav/footer are clean.

major PDP variant selected-state check: PASS Functionality (guest journey)

Clicked Carat Weight / Metal Color chips on PDP. Selected chip = 2px primary/pink border + bold dark text on white background; unselected chips = thin gray border + regular-weight dark text, same white background. Selected state is unmistakable and text is readable in every state.

w26-06-pdp-full.png (14K, Solitaire, 0.33 ct, 14K White Gold all show pink 2px border + bold text; 0.5ct/1ct/etc. and Yellow/Rose Gold show plain gray border).

Fix: None needed — meets the mandatory bar.

major PDP LCP is poor at 9.5s Performance (Lighthouse + CWV)

Lighthouse mobile-simulated PDP run: Performance score 64, LCP 9.5s (poor, threshold is <2.5s good / <4s needs-improvement). FCP 3.7s, Speed Index 4.8s, TBT 20ms, CLS 0.001 (excellent).

lh-website-26-pdp.json: largest-contentful-paint numericValue=9451ms

Fix: Investigate PDP hero image loading (preload the LCP image, serve responsive/next-gen formats, reduce render-blocking JS) — 9.5s LCP will fail Core Web Vitals in Search Console.

major Reference brand's real contact info leaked in Organization JSON-LD SEO (technical)

Home page Organization/JewelryStore schema contains a real-looking phone '(973) 399-9115', email '[email protected]', and street address '1060 Springfield Ave, Irvington Township, NJ 07111' — none of which belong to website-26/Varni. The logo URL filename is also 'boris-twins-zvmp0oimchiz.jpg'.

w26-home.html JSON-LD block 2 (Organization/JewelryStore type)

Fix: Replace contactPoint/address/logo in the Organization schema with the actual Website-26/Varni business details (or clearly-placeholder ones), not the reference site's real contact data.

major No CSP, X-Frame-Options, X-Content-Type-Options, Referrer-Policy, Permissions-Policy, or HSTS response headers Security (headers + surface)

curl -I on the homepage shows only Cloudflare/NEL/cache/cookie headers — none of the standard security headers are present.

curl -sS -D - -o /dev/null https://website-26.varnijewels.com/ — headers listed: access-control-allow-origin:*, report-to, nel, link(preload), set-cookie, x-sveltekit-page, cf-cache-status, vary, server:cloudflare, cf-ray. No strict-transport-security / x-frame-options / x-content-type-options / content-security-policy / referrer-policy / permissions-policy.

Fix: Add standard security headers at the SvelteKit/edge layer (or Cloudflare Transform Rules): HSTS, X-Frame-Options or frame-ancestors CSP, X-Content-Type-Options: nosniff, Referrer-Policy, Permissions-Policy. Likely a fleet-wide gap (shared backend/theme), worth fixing once and rolling out.

major No analytics/tag-manager/pixel installed Analytics & Tracking

Searched raw HTML of both home and PDP for gtag, dataLayer, googletagmanager.com, GTM-*, G-*, Facebook pixel (fbq/facebook.net/tr) — none found. No conversion tracking, no Enhanced Ecommerce events, no consent/cookie-banner script observed either.

grep -oE 'gtag|dataLayer|googletagmanager|G-[A-Z0-9]{6,}|GTM-[A-Z0-9]+|facebook\.net/tr|fbq\(' on w26-home.html and w26-pdp.html returned zero matches

Fix: Install GA4 (or GTM container) with Enhanced Ecommerce events (view_item, add_to_cart, begin_checkout, purchase, search) before launch — currently there is zero visibility into funnel drop-off or ad conversion.

major See Brand Consistency category for placeholder email/phone and generic social links Marketing Readiness

Duplicate cross-reference — [email protected], +91 00000 00000, and bare social homepage links block a credible marketing launch.

See Brand Consistency findings

Fix: Same fixes as above.

major No analytics installed (duplicate cross-reference) Marketing Readiness

No way to measure marketing campaign performance, UTM attribution, or conversion goals without GA4/GTM.

See Analytics & Tracking category

Fix: Same fix as above.

medium Home LCP borderline at 4.2s Performance (Lighthouse + CWV)

Lighthouse home run: Performance 72, LCP 4.2s (needs improvement), FCP 4.2s, Speed Index 6.2s, TBT 0ms, CLS 0.001 (excellent).

lh-website-26-home.json

Fix: Preload hero/LCP asset, reduce server response time (root doc took 870ms per Lighthouse), trim unused CSS (~26KiB estimated savings).

medium Organization JSON-LD @id is malformed (doubled protocol) SEO (technical)

"@id":"https://https://website-26.varnijewels.com/#organization" and "url":"https://https://website-26.varnijewels.com" — invalid URLs in structured data.

w26-home.html JSON-LD block 2

Fix: Fix the URL-building logic that's prefixing an already-absolute URL with an extra 'https://'.

medium No analytics tracking script found (also see Analytics category) SEO (technical)

No GA4/GTM/gtag/dataLayer/Facebook pixel script tags found in home or PDP HTML.

grep for gtag|dataLayer|googletagmanager|GTM-|fbq on both HTML dumps returned nothing

Fix: See Analytics & Tracking category.

medium litekart_store_id cookie has no Secure/HttpOnly/SameSite attributes Security (headers + surface)

Set-Cookie header shows only Max-Age and Path; no Secure, HttpOnly, or SameSite flags.

set-cookie: litekart_store_id=store_01KG2S7TF4HFHJQM0S3RYK73RM; Max-Age=31536000; Path=/

Fix: Add Secure; HttpOnly (if not read client-side); SameSite=Lax/Strict to this cookie.

medium Lighthouse accessibility: color-contrast failure Frontend & Accessibility

Category-tile meta text ('By Style · By Metal · By Stone') has contrast ratio 2.94 (needs 4.5:1) — foreground #94969f on white #ffffff, 12px normal weight.

lh-website-26-home.json audits['color-contrast'], selector 'ul.w26-cat-rail > li.w26-cat-item > a.w26-cat-tile > span.w26-cat-meta'

Fix: Darken the category-tile meta text color to reach at least 4.5:1 contrast against white.

medium The brand itself is just the internal site-id placeholder, not a real jewelry brand name Brand Consistency & Originality

'WEBSITE-26' reads as a technical identifier rather than a jewelry brand name (compare sibling stores' named brands). Consistent everywhere, but not a finished brand identity.

w26-01-home.png, w26-03-mobile-sidenav.png, footer copyright '© 2026 Website-26.'

Fix: Confirm with the business owner whether 'Website-26' is the final brand name for launch, or whether a real name/logo still needs to be assigned before go-live.

medium Support contact details are unresolvable placeholders Brand Consistency & Originality

Footer email is [email protected] (the .example TLD is reserved/non-resolvable — this can never be a real inbox), phone is +91 00000 00000.

footerLinks in w26-step1-results.json: 'mailto:[email protected]', 'tel:+910000000000'

Fix: Replace with a real, monitored support email and phone number before launch.

minor CLS and TBT are excellent on both pages Performance (Lighthouse + CWV)

CLS ~0.001 and TBT 0-20ms on both home and PDP — no layout shift or main-thread blocking issues.

lh-website-26-home.json / lh-website-26-pdp.json

Fix: None — keep as-is.

minor Lighthouse accessibility: touch target size Frontend & Accessibility

Footer contact links (e.g. support email link, 188.9x23.1px) are under the 24x24px minimum and lack spacing from neighbors.

lh-website-26-home.json audits['target-size'], selector footer contact list anchor

Fix: Increase footer link row height/padding to reach 24px minimum target size.

minor Social links are bare platform homepages, not the store's real profiles Brand Consistency & Originality

Footer Instagram/Facebook/YouTube icons link to https://instagram.com, https://facebook.com, https://youtube.com — generic homepages rather than @website-26 (or brand) profile pages.

footerLinks in w26-step1-results.json

Fix: Point social icons to the store's actual social profiles, or remove the icons until real profiles exist.

info Guest wishlist 422 'Invalid credentials' Functionality (guest journey)

Console shows 422 on /api/wishlists/me for guests. Per prior fix-list, this is expected behavior for unauthenticated users, not a bug.

console: 'While fetching wishlist {message: Invalid credentials., success: false}'

Fix: No action — expected.

info Cart -> Address checkout step works Functionality (guest journey)

Add-to-cart, cart quantity/subtotal display, and Proceed to Shipping -> /checkout/address (contact details form) all functioned correctly for the tested PDP.

w26-08-cart.png, w26-10-checkout-address.png, w26-step3-results.json

Fix: None — continues to work; payment step not attempted per instructions (no real purchase).

info No dead nav/footer links (404s) Functionality (guest journey)

Curl-checked all 25 header nav links and all footer links; every internal path returned HTTP 200 (only /my/wishlist returns 307, expected redirect for guests).

bash curl loop over 34 paths, all 200 except /my/wishlist=307

Fix: None.

info Canonical tag correct; robots.txt reachable SEO (technical)

PDP canonical matches its own URL. curl confirms robots.txt returns 200 with sensible disallow rules (Lighthouse's 'robots.txt is not valid' finding could not download it in-run — likely a transient headless-fetch timeout, not a real defect, since curl retrieves it fine).

curl robots.txt = 200 with full directive list; canonical link in w26-pdp.html matches request URL

Fix: Re-verify robots.txt fetch in a follow-up Lighthouse run to rule out a one-off network hiccup; not treated as a confirmed defect here.

info HTTPS + HTTP->HTTPS redirect verified Security (headers + surface)

http:// requests 301-redirect to https://; TLS served via Cloudflare (HTTP/2, valid cert implied by successful curl over https).

curl -o /dev/null -w on http:// -> 301 -> https://website-26.varnijewels.com/

Fix: None.

info SQLi/XSS/CSRF protection, rate limiting, CAPTCHA, admin-panel protection, MFA, password policy, session timeout Security (headers + surface)

Not externally verifiable from a guest browsing session without attempting exploit/attack traffic, which is out of scope.

N/A

Fix: Ops team to confirm via backend/infra review (shared api.varnijewels.com backend, likely identical across the fleet).

info Lighthouse accessibility scores otherwise strong Frontend & Accessibility

Accessibility 92/100 (home), 89/100 (PDP); Best Practices 96/100 on both.

lh-website-26-home.json / lh-website-26-pdp.json categories

Fix: Fix the two flagged issues above to push toward 95+.

info No horizontal scroll / layout breakage observed on mobile (390px) or desktop (1440px) Frontend & Accessibility

Mobile home, mobile sidenav, PLP, PDP, cart and checkout all rendered without visible overflow in captured screenshots.

w26-02-mobile-home.png, w26-03-mobile-sidenav.png, w26-08-cart.png, w26-10-checkout-address.png

Fix: None.

info Wordmark parity PASSES on all visible chrome Brand Consistency & Originality

Header, mobile hamburger/sidenav, and footer all show the same 'WEBSITE-26' brandName. No 'Boris & Twins'-style leak was found in the on-screen sidenav (confirmed false on the specific regex check).

w26-03-mobile-sidenav.png shows 'WEBSITE-26' wordmark + close button; w26-01-home.png header also 'WEBSITE-26'; footer 'Website-26' + '© 2026 Website-26.'

Fix: None for visible chrome.

info Trust badges present Marketing Readiness

Homepage/PDP/footer show 'Free insured shipping', '14-day returns', 'Certified diamonds (IGI/hallmarked)', '100% secure payments' trust rows.

w26-06-pdp-full.png footer trust row; w26-01-home.png announcement bar

Fix: None — good baseline trust signaling once contact/brand issues above are fixed.

info DB query optimization/indexing behind the broken category filter Backend / Infra (MANUAL)

The 0-products-per-category bug (Functionality category) is very likely a Meilisearch index/category-tagging issue on the backend (shared api.varnijewels.com) rather than a frontend routing bug, since all 5 category pages return HTTP 200 with an empty result set while /products lists 403 items.

N/A — requires backend/index access to confirm and fix

Fix: Ops/backend team to check Meilisearch product documents' `categories` field values against the storefront's category slugs (rings/earrings/necklaces/bridal/gifts) for store_01KG2S7TF4HFHJQM0S3RYK73RM.

info Memory leaks, background jobs/cron/queues, load balancing, autoscaling, backups, vulnerability scanning, plugin/software updates Backend / Infra (MANUAL)

Not observable from the outside.

N/A

Fix: Ops team to verify via infra dashboards / Dokploy / server monitoring.

info Uptime/error/performance/log/broken-link/SSL-expiry/backup/security/CDN/DB-health/CWV monitoring Monitoring & Maintenance (MANUAL)

No monitoring dashboards observable from a guest browser session.

N/A

Fix: Confirm with ops which of these are configured fleet-wide (Dokploy, Cloudflare analytics, etc.) vs. still recommended.

Mobile QA

Real mobile emulation (iPhone 13 (390x844, DPR3, touch, Mobile Safari UA) - Playwright headless Chromium, device descriptor devices['iPhone 13'], Pixel 7 (412x915, DPR2.625, touch, Chrome Mobile UA) - Playwright headless Chromium, device descriptor devices['Pixel 7'], Landscape spot-check on Home and Checkout (both profiles, rotated dimensions)), touch interaction, thumb-driven journey.

critical Every category-slug PLP route (/rings, /earrings, /necklaces, /engagement-rings, /bridal, /gifts, ...) renders "NO PRODUCTS FOUND" PLP / Navigation

The bare `[slug]` category route - which is the canonical link target for every header nav link, every megamenu flyout link, and every homepage category tile - shows an empty 'NO PRODUCTS FOUND / Clear all filters' state on both mobile profiles. Confirmed reproducible on /rings, /earrings, /necklaces, /engagement-rings, /bridal, and /gifts. A network trace during navigation to /rings shows only /api/menu, /api/categories/all, /api/wishlists/me, /api/ms-autocomplete/products?search=, and /api/categories/megamenu firing - there is no Meilisearch/product-search API call for the category at all, so the category-to-product query never executes. By contrast, the full catalogue route /products DOES render the same products correctly (2-column grid, 20 products, working filter/sort), and the same rings/earrings/necklaces products are visible in the homepage category rails. This is a functional regression in the slug-to-category resolution, not a mobile-only styling bug, but it directly blocks the required PLP step of the mobile shopping journey since every nav entry point routes through it.

On an iPhone 13 or Pixel 7 emulated profile, tap any header nav item (Rings, Earrings, Necklaces, Bridal, Gifts) or any megamenu/hamburger-drawer flyout link (Engagement Rings, Wedding Bands, 14K Gold, Lab Grown Diamond, Studs, Hoops, Solitaire Pendants, etc.), or a homepage category tile ('R Rings', 'E Earrings', etc.) - every one lands on an empty PLP. Directly loading https://website-26.varnijewels.com/products shows products fine.

Fix: Fix the bare-slug PLP route's category query (server load function) so it actually issues the Meilisewrch products search with categories:<slug> and returns the same results /products shows. This is the single highest-priority defect in this audit: it silently breaks essentially all category browsing/navigation on the storefront, on both mobile and (very likely) desktop.

major Two header icon buttons both carry aria-label="Toggle Cart" - the search-trigger button is mislabeled Header / Accessibility

document.querySelectorAll('button[aria-label="Toggle Cart"]') returns 2 elements on the homepage/every page. The first wraps a magnifying-glass (lucide-search) SVG and is the search trigger; the second wraps a shopping-bag (lucide-shopping-bag) SVG and is the real cart trigger. A screen-reader/assistive-tech user tapping the search icon would hear 'Toggle Cart', which is actively misleading, and any automated test or accessibility tooling targeting 'Toggle Cart' will hit the wrong control.

On any page, inspect the two header icon buttons next to the account icon; both report aria-label="Toggle Cart" despite rendering different icons (search vs. shopping-bag).

Fix: Give the search trigger its own accurate label, e.g. aria-label="Open search" / "Toggle Search", distinct from the cart button's label.

major Quantity +/- stepper buttons are only 28x28px - well under the 44px touch-target minimum Cart

button[aria-label="Decrease quantity"] and button[aria-label="Increase quantity"] on /checkout/cart both measure 28x28px on both iPhone 13 and Pixel 7 profiles. This is a primary, frequently-used cart interaction and is noticeably harder to hit precisely with a thumb than the surrounding UI (the Remove button is 30x30px, also small; the hamburger menu is 32x32px).

Open /checkout/cart with an item in cart on either mobile profile; inspect the '-' / '+' stepper buttons next to the quantity.

Fix: Increase the stepper buttons' hit area to at least 44x44px (padding can stay visually compact while the tappable area expands).

medium Add-to-cart feedback (mini-cart drawer + header badge) is slow and inconsistent - sometimes not visible even 2.7s after tapping PDP

Manual timing check (iPhone 13): the header cart badge and 'Your Cart' mini-drawer are both still absent at 500ms and 1000ms after tapping 'Add to Bag', and only appear around 1500ms. In the full automated run this passed on iPhone 13 (badge='1', drawer visible by ~2.7s) but the same check on the Pixel 7 profile found neither the badge count, a toast, nor the drawer present even 2.7s after the tap. The button itself does show a lighter/disabled-looking fill briefly (a loading-state color change), but there is no spinner and the delay before the cart visibly updates is long and inconsistent enough that a real shopper could reasonably tap 'Add to Bag' a second time or assume nothing happened.

On PDP, tap 'Add to Bag' and time how long until the header cart icon badge increments or the mini-cart drawer opens.

Fix: Add an immediate optimistic UI update (increment the badge and/or show a lightweight toast the instant the tap registers) while the add-to-cart network call resolves in the background, instead of waiting for the API round-trip to reflect any feedback.

minor Gallery next-image is blank/transparent for roughly 1-1.5s after a swipe, with no skeleton/placeholder PDP

Swiping the PDP gallery correctly advances the active-image indicator dot and the carousel logic is functionally correct, but the newly-active slide's <img> has loading="lazy" and is only requested at swipe time; until the network request completes (confirmed via a real 200 response) and its 300ms opacity fade-in finishes, the slide area shows a blank/empty frame. In a manual check the image was still not rendered at 800-1500ms after the swipe gesture and only settled in by ~2-3s total.

On PDP, drag/swipe the main product image from right to left; watch the newly-revealed slide for roughly the first 1-2 seconds.

Fix: Preload the adjacent gallery image(s) once the current image has loaded, or show a low-res blur/skeleton placeholder during the lazy-load + fade-in window so a swipe never reveals an empty frame, especially over slower connections.

minor Hamburger menu button is 32x32px, under the 44px touch-target guideline Nav

button[aria-label="Open menu"] measures 32x32px on both mobile profiles. It is tappable in practice (no false-negative taps observed) but sits below the recommended minimum for a primary, always-visible navigation control.

Inspect button[aria-label="Open menu"] in the top-left of the header on any page.

Fix: Increase the button's padding/hit-area toward 44x44px.

minor Ring-size / carat-weight variant chips are 36px tall (Tailwind h-9), below the 44px touch-target guideline PDP

The metal-color, carat-weight, and ring-size chip rows on PDP all use a shared 36px-tall button style with 12px gaps. This is borderline-acceptable given the spacing, but on a dense ring-size row (19 options: 4, 4.5, 5 ... 13) the small chip height makes precise tapping a bit fiddlier than ideal.

Inspect any option chip on PDP (e.g. under 'Ring Size') - computed height is 36px.

Fix: Consider bumping chip height toward 44px, particularly for the long ring-size row, for easier thumb tapping.

minor Duplicate zero-size interactive elements exist in the DOM (harmless to real users, but messy markup) PDP / Cart (dev hygiene)

The PDP 'Add to Bag' button and the cart page's quantity +/- steppers each appear twice in the DOM - one real, visible element plus a second element with an identical selector but a 0x0 bounding box (likely a hidden desktop/alternate-breakpoint variant that isn't display:none on its own element, just inside a hidden ancestor). This does not intercept real taps or cause any user-facing defect, but it does make any first-match querySelector/automation fragile and is worth cleaning up.

On PDP, document.querySelectorAll('button') filtered for text "Add to bag" returns 2 buttons, only one with a non-zero rect. On /checkout/cart, button[aria-label*="ncrease"] / [aria-label*="ecrease"] return 4 buttons total (2 real + 2 zero-size).

Fix: Low priority. Audit the responsive layout for these components and ensure hidden variants are fully removed from the DOM (or given display:none directly) rather than left as zero-size siblings.

Desktop QA

Desktop viewports (1920x1080, 1440x900, 1366x768), hover states, keyboard navigation, layout integrity.

critical Every category-slug PLP route (entire primary nav + megamenu) returns 0 products Nav / Megamenu / PLP

Clicking any top-nav item (Rings, Earrings, Necklaces, Bridal, Gifts) or any megamenu sub-link (Engagement Rings, Wedding Bands, Solitaire Rings, Halo Rings, 14K Gold, Rose Gold, White Gold, Lab Grown Diamond, Emerald Cut, Round Cut, Stud Earrings, Hoop Earrings, Drop Earrings, Diamond Earrings, Solitaire Studs, Solitaire Pendants, Diamond Pendants, Gold Chains, Tennis Necklaces) navigates to the bare-slug route (e.g. /rings) which renders 'NO PRODUCTS FOUND' / '0 Products'. Verified 15/15 sampled category slugs all return 0 products, at all 3 tested viewports. The full /products catalogue route (reached only by manually typing the URL, not linked from primary nav) correctly shows 403 real products. Network trace on /rings shows only api/menu, api/categories/all, api/categories/megamenu, and one api/ms-autocomplete/products?search= call (the header search-suggestions endpoint, called with an empty search string) — no category-scoped product-listing API call is fired at all, so the grid never even attempts to fetch matching products.

shots/w26d-1920x1080-BUG-category-slug-empty-rings.png,shots/w26d-1920x1080-products-catalogue-working.png,shots/w26d-1440x900-BUG-category-slug-empty-rings.png,shots/w26d-1366x768-BUG-category-slug-empty-rings.png

Fix: Fix the bare-slug '(www)/[slug]' route so it actually issues a Meilisearch/products query scoped to categories:<slug> (per the fleet link-convention contract) instead of only fetching menu/category metadata. This is the entire storefront's primary navigation — until fixed, a desktop shopper who uses the nav (rather than typing /products) sees zero products on every category page.

critical Reference/competitor brand name 'JewelWeSells' leaks into live PDP product description copy PDP / Brand & content integrity

Every product's description on the PDP begins with copy such as: "Say yes in unforgettable style with JewelWeSells 0.5 Carat Round Cut Diamond Engagement Ring, crafted in premium 14K Rose Gold...". 'JewelWeSell(s)' is the fleet's known reference/competitor brand name (explicitly called out as an example to flag) and must not appear on a client storefront. Confirmed present at all 3 tested viewports (visible in the main PDP description block, not just metadata).

shots/w26d-1920x1080-pdp-top.png,shots/w26d-1366x768-pdp-top.png

Fix: Find/replace 'JewelWeSell'/'JewelWeSells' out of the product-description content source (likely bulk-generated/seeded copy) across all 403 products, replacing with the theme's own brand name (Website-26) or a generic phrase, and audit for any other seeded reference-brand strings.

major Megamenu sub-links are all sequential Tab stops, burying real page content behind 90+ tab presses Keyboard accessibility / Focus order

Every nav category's hover-flyout sub-links (By Style / By Metal / By Stone etc., ~7-10 links per category x ~5-11 categories) are present in the DOM as regular focusable <a> tags in document order, ahead of the page's actual main content. Tabbing from page load (any page, including the checkout address form) goes: WEBSITE-26 logo -> RINGS -> Engagement Rings -> Wedding Bands -> Solitaire Rings -> Halo Rings -> 14K Gold -> Rose Gold -> White Gold -> Lab Grown Diamond -> Emerald Cut -> Round Cut -> EARRINGS -> Studs -> ... continuing through every category's full submenu. Automated trace confirmed 80 consecutive Tab presses were still inside header/megamenu links (reaching only as far as the cart-bag button), and the checkout page's email/phone input fields were NOT reached even after 90 Tab presses. There is no 'skip to content' link and no mechanism to bypass the megamenu via keyboard.

Automated Tab-trace script output (steps 1-80 all header/megamenu <a> links; input not reached by step 90) — logged in this run, not a screenshot,shots/w26d-1920x1080-checkout-address-keyboard-tab.png (shows focus ring correctly visible on a footer link reached via Tab, illustrating how far into the page one lands)

Fix: Either (a) only render megamenu flyout links in the tab order when the parent trigger is focused/expanded (roving tabindex / tabindex=-1 until opened), or (b) add a visible 'Skip to content' link as the very first focusable element, or (c) restructure the megamenu as a proper disclosure widget (button + aria-expanded, Enter/Space to open, Escape to close) so keyboard users aren't forced through the entire category taxonomy before reaching page content.

medium No hero banner, tagline, or primary CTA above the fold on desktop homepage Home / Layout integrity on wide screens

At 1920x1080, 1440x900, and 1366x768, the homepage's very first content block after the thin announcement bar and header is a small 'Shop by category' icon row ('Find your sparkle'), confirmed at scrollY=0 (not a scroll artifact). There is no full-bleed hero image, lifestyle photography, brand tagline, or primary CTA button anywhere above this — unusual for a diamond/fine-jewelry storefront and a weak first impression on a large screen, which a discerning desktop shopper would expect to open with sharp hero imagery and a clear value proposition.

shots/w26d-1920x1080-home-top.png,shots/w26d-1366x768-home-top-RETEST.png

Fix: Add a themed hero section (lifestyle image or product macro shot, headline, subhead, CTA) above the 'Shop by category' row, sized appropriately for wide desktop viewports.

medium Intermittent 'Error fetching menu' / 'Search error' console errors on page load Console / Network resilience

In 2 of 3 full test runs (1440x900 and 1366x768 passes), the browser console logged 'Error fetching menu: {message: Please check your internet connection and try again}' and 'Search error: {message: Please check your internet connection and try again}' during normal (non-throttled) navigation, even though the header nav and search box rendered and worked visually. This did not reproduce in the 1920x1080 run, suggesting an intermittent/flaky fetch (timeout, race condition, or transient backend hiccup) rather than a hard failure — but it is a recurring symptom worth investigating since it fires on the majority of fresh loads tested.

Captured via page.on('console') during automated runs — see w26d-results-1440x900.json / w26d-results-1366x768.json in scratchpad

Fix: Review timeout/retry behavior on the api/menu and search-suggestion fetches — add retry-with-backoff or increase timeout so a slow first response doesn't surface a user-facing-adjacent console error.

minor Generic automated variant-chip test reported a FAIL that is a test-script artifact, not a real bug — manual targeted test PASSES PDP / Variant selected-state (automated-probe false positive, documented for transparency)

The QA script's generic probe picked two already-selected, single-value option groups ('Prongs' setting and default '0.5 ct' carat) and compared their border styles — both showed the same 2px accent border because both were the (only) selected default, producing a misleading FAIL. A dedicated, targeted test on the real multi-option 'Metal Color' group (14K Rose Gold / 14K White Gold / 14K Yellow Gold) confirms the selected-state IS unambiguous: selected = 2px solid accent-pink border (rgb(255,63,108)) on a white background with dark readable text; unselected = 1px solid light-gray border (rgb(233,233,237)), same dark readable text. This is a clean PASS on the fleet's recurring 'invisible selected variant' bug pattern.

shots/w26d-1920x1080-pdp-variant-BEFORE-metalcolor.png,shots/w26d-1920x1080-pdp-variant-AFTER-metalcolor.png

Fix: No action needed on the real variant-selection UI. If desired, harden this pattern across ALL option groups (not just Metal Color) by giving every option a `:disabled`/single-value affordance so it's visually clear when a group has only one possible value (currently 'Prongs' and default carat both display a permanent selected-looking border because there's effectively no alternative to compare against).

Cross-check notes

The three dimensions were run independently, so some findings were corrected or contradicted by a later pass. Those disagreements are recorded here rather than silently resolved — a claim below is not firm until re-verified.

Retracted PDP variant chips fail the selected-state check

The automated desktop check compared two already-selected single-option chips and reported a false FAIL. A targeted manual recheck, plus the independent mobile pass, both confirm a clean PASS: 2px accent-pink border on the selected chip vs 1px gray unselected, with readable text in both states.

Action: None — the standing PDP selected-state requirement is met on this site.

← All storefronts