technical-reviewer
Technical review — PDP
Sonnet · phase 4 · 8 findings, schema: valid
← Back to run index
run · 2026-05-11-stage-5b-natural-harmony-pdp
generated · 2026-05-11 17:31 UTC
Warnings
Perf: tight A11y: concern Liquid: 6 extend-clean, 6 schema-adds Schema: valid — 0 violations

Performance

Metric Value
Budget status tight
Image count 14
Video count 0
Estimated LCP class needs-improvement

14 image shots across 12 sections; no video. Desktop renders 4 gallery images above the fold (main + 3 thumbnails in rail), pushing LCP to needs-improvement. All assets are photography-direction-only at this phase. Prototype-builder must apply loading='eager' to hero main-image only, loading='lazy' to all others, srcset at 400w/800w/1200w, and WebP/AVIF via Shopify CDN image_url filter.

Accessibility

Alt-text: 14/14 Tap targets: pass Heading hierarchy: OK

Alt-text: 14/14 image-bearing slots covered. No missing slots. Two badge slots (trust-strip.cert-logo-row, certifications.cert-detail-list) marked decorative=true with empty alt-text — correct when cert names are conveyed by adjacent text; must switch to descriptive if logos render without text labels (see tech-07).

Tap targets: All mobile sections explicitly meet ≥44×44 px threshold (hero, buy-box, sticky-ATC, FAQ accordion).

BRAND COLOR — LIVE REGRESSION (findings tech-01)

theme.json confirms the live ATC button ships #3A4F3C as resting background (hover/active-only per spec). All wireframe CTA slots mandate #537156 at rest. No #585048 surfaces detected anywhere in the spec bundle — all hero/CTA/band surfaces clean. Desktop in-page nav active state correctly uses #54412f warm brown.

Heading hierarchy: 1 H1 at hero.product-title (contains primary keyword 'natural mattress'). H2 at 7 sections. H3 at 4 materials-breakdown layer headings. No skip levels. All section_id values resolve to wireframe.sections[].

Liquid Feasibility

6 clean-extend 6 extend-with-schema-additions 0 new-section 0 blocked
Section Disposition Feasibility Metafields Notes
hero EXTEND schema-adds rating_value, rating_count ATC color fix (#537156); trust-triple ATF block addition
sticky-add-to-cart EXTEND schema-adds rating_value, rating_count Extends product-sticky-atc; new product-sticky-atc-top.liquid needed for desktop
gallery EXTEND clean-extend product-gallery-media-hux; 4 slots map to existing pattern exactly
buy-box EXTEND schema-adds show_certs, show_finance 8 protected snippets; ATC color correction; single-value variant suppression must survive
trust-strip EXTEND schema-adds Hardcoded CDN cert URLs must replace GOTS/RWS (audit-02 critical fix)
materials-breakdown EXTEND clean-extend icon-with-text-slider; 4 blocks map to existing pattern schema
comparison-table EXTEND schema-adds Section exists but NOT in template order array — must wire before prototype (tech-02)
certifications EXTEND clean-extend 5 cert items as inline block content; no new metafields
sleep-trial-and-warranty EXTEND clean-extend trial_nights, warranty_years Both blocks already metafield-gated; conditional render logic present
reviews EXTEND clean-extend rating_count custom-reviews CSV carousel; no AggregateRating JSON-LD
faq EXTEND clean-extend image-with-faq; 5 Q&A blocks; FAQPage JSON-LD emitted from schema.jsonld
related-products EXTEND clean-extend static-product-recommendations; re-enable via template JSON flag flip

Schema.org

Product Offer FAQPage BreadcrumbList
Attribute Value
Validation status valid
Claims shipped (verified) 9 of 9 verified claims
Violations 0 — no violations
AggregateRating emitted NO (brief.include_review_schema=false)
Review emitted NO (brief.include_review_schema=false)
FAQ questions in JSON-LD 8
Breadcrumb levels 4 (Home › Mattresses › Natural Harmony › Natural Harmony Select Mattress)
Offer price 5394 AED (180×200 cm reference per brief.size_selector_pattern)

Validated via bin/validate-schema-jsonld.py. Exit 0 — zero violations. Self-grep confirms zero matches for: AggregateRating, Review, {{ claim-needed, organic, GOLS, GOTS, RWS, Made in, Sharjah, UAE, United Arab Emirates, countryOfOrigin.

Findings (8 total — 0 critical, 3 high, 3 medium, 2 low)

HIGH brand-consistency · tech-01 · buy-box

Live ATC button ships #3A4F3C at rest — corrected in spec, must be enforced in implementation

theme.json confirms the live product-template.liquid renders the primary Add-to-Cart button with background-color #3A4F3C as its resting state. All six wireframe CTA slots mandate #537156 at rest; #3A4F3C is hover/active only per brief.brand_color_usage_notes.

Prototype-builder must override resting ATC background from #3A4F3C to #537156 in product-template.liquid (or a scoped CSS rule for the nish-natural-wool template). Verify with a visual diff before launch. Single CSS change — do not restructure the form.

HIGH liquid · tech-02 · comparison-table

mattress-comparison section not yet wired into product.nish-natural-wool.json

sections/mattress-comparison.liquid is fully implemented but absent from templates/product.nish-natural-wool.json's order array. Without wiring, the comparison-table section will not render.

Add mattress-comparison to the template JSON order array (between icon-with-text-slider and image-with-faq). Configure exactly 3 mattress blocks (Essentia / Select / Reserve). Verify block count is exactly 3 before prototype QA.

HIGH liquid · tech-03 · trust-strip

product-trust-stack.liquid hardcoded cert URLs must replace GOTS/RWS with NHC-approved set

Snippets/product-trust-stack.liquid hardcodes CDN URLs for 5 cert logo assets including GOTS and RWS logos — live organic-certification assets that violate NHC positioning for this PDP (audit-02 critical finding).

Edit snippets/product-trust-stack.liquid to replace GOTS/RWS CDN URLs with NHC-approved cert assets (CertiPUR, B Corp, Land to Market, FernMark, OEKO-TEX Standard 100). Apply minimum change only — URL replacement per brief.buybox_pattern.permitted_changes.

MEDIUM liquid · tech-04 · sticky-add-to-cart

Desktop sticky-ATC top-bar requires new snippet file not yet present in theme

snippets/product-sticky-atc-top.liquid does not exist in patterns.html inventory. Must be authored from scratch. Must share variant state with inline buy-box and mobile sticky bar (cross-viewport binding).

Author snippets/product-sticky-atc-top.liquid per wireframe desktop-top-bar slot spec. Include from product-template.liquid at section end. Implement cross-viewport state binding via shared JS against main product form. Test: size pick in desktop sticky dropdown must update inline form and mobile chip.

MEDIUM performance · tech-05 · gallery

14 image shots without lazy-loading discipline risks over-budget LCP on mobile 4G

Desktop gallery renders 4 images above the fold. Without loading='lazy' on non-hero images, srcset, and WebP/AVIF, mobile 4G LCP may exceed 2.5 s.

Apply loading='eager' to gallery.main-image only; loading='lazy' to all others. Implement srcset at 400w/800w/1200w. Serve WebP/AVIF via Shopify CDN image_url filter. Confirm LCP with Lighthouse after prototype build.

MEDIUM claims · tech-06 · sleep-trial-and-warranty

trial-block and warranty-block placeholders must not reach production HTML

copy.html renders {{ claim-needed }} placeholders for trial/warranty. Both are metafield-gated; must degrade to empty HTML (not placeholder text) when metafields absent.

Verify product-buybox-enhancements.liquid conditionals render nothing when trial_nights/warranty_years metafields are absent. QA grep on prototype HTML for '{{ claim-needed' — zero matches required.

LOW accessibility · tech-07 · trust-strip

Decorative cert badge alt-text must switch to descriptive if logos render without adjacent text labels

trust-strip.cert-logo-row and certifications.cert-detail-list are marked decorative=true (alt_text=''). Correct when cert names are conveyed by adjacent text; must switch to descriptive if any rendering path shows logos without text labels (WCAG 1.1.1).

Confirm each cert logo is always accompanied by visible text label. If any rendering path shows logo-only, switch alt_text to descriptive (e.g., 'CertiPUR certified badge'). QA at 375 px mobile viewport.

LOW schema · tech-08 · materials-breakdown

Internal link target /blogs/sleep/wool-mattress-hot-climate-uae is an unconfirmed slug

seo.html flags this internal link target as target_slug_pending. If the blog post does not exist, it will 404 and create a Google Crawl Error.

Confirm whether /blogs/sleep/wool-mattress-hot-climate-uae exists. If not, either create the post, replace with a confirmed live slug, or remove the link. Do not ship a dead internal link.