Product page enrichment: destination PDPs for full catalog - #74
Conversation
Port Kyasi enrichment pattern: review snapshot, item blog, FAQ accordion, setup tips, and FAQPage JSON-LD via productSeo + routeMeta. All 64 curated SKUs covered in house Riviera voice. Original prose only.
Adversarial review — PR #74 (destination PDPs)Reviewed wiring, affiliate compliance, security, SEO/routeMeta, build, and spot-checked enrichment quality (CeraVe, Dyson Airwrap, AFFY/jewelry SKUs). Build / types / SEO wiring — PASS
Affiliate compliance — PASS
Security — PASS
Enrichment originality / quality — FAIL (blocking)Not Amazon paste (good), but the corpus is template-machined with catalog field injection. That violates this PR’s own rules in
1. Systemic FAQ grammar bug (64/64)Skip FAQ answers are missing separators:
Same join bug on Dyson, Olaplex, jewelry, etc. Ship-visible broken English on every PDP FAQ. 2. HTML entities left literal (
|
| SKU | Issue |
|---|---|
CeraVe (cerave-hydrating-facial-cleanser) |
Shared skincare shell; love chip "Highlight shoppers notice: …" is raw catalog glue; skip FAQ grammar break; generic bestFor/skipIf recycled with La Roche / Neutrogena |
Dyson Airwrap (dyson-airwrap-multi-styler) |
Flagship still gets generic tools template: “collecting bottles for the algorithm”, “humid bathrooms / skin or scalp”, no Coanda/weight/hair-type/attachment-kit specificity. Verdict is stock one-liner (“look considered, feel finished…”) |
| AFFY / Houston / CHOW jewelry | Full truncated Amazon titles repeated every section; beauty-counter metaphors on fine jewelry; love themes like "Big-ticket luxury jewelry" / "CHOW SANG SANG piece"; dek/title truncation with … |
Template phrase density (illustrative counts in productEnrichments.ts):
Also reconsider— 64Highlight shoppers notice:— 64beauty like wardrobe— 33In a category full of twins— 31crowded shelf of maybes— 25You are not collecting bottles for the algorithm— 31
4. Double-period / glue artifacts
Bodies like …A statement tool for the vanity.. (Dyson) show string-concatenation without cleanup.
Missing vs stated Kyasi / rules pattern — nits (non-blocking)
| Expected | Status |
|---|---|
| Review snapshot + bestFor/skipIf | Present |
| Item blog 3–5 sections | Present (structure OK; substance thin) |
| FAQ ≥4 + FAQPage JSON-LD | Present (64/64) |
| Setup tips | Present |
| Research notes (names only) | Present + UI disclosure |
| Mid-page Buy on Amazon | Present |
| Compared on this site (Prefer) | Not in enrichment type/UI — PDP still has similarProducts / also-like grids, so partial coverage |
| Fit-vs-sibling FAQ (rules) | Rare / mostly generic “check Amazon” FAQs |
Bundle note: main JS ~818 kB min (~170 kB gzip) after enrichment data — called out in Vite; acceptable for v1 but watch growth.
What to fix before merge
Must-fix (content gate):
- Repair FAQ skip answers globally — punctuation/conjunction between
skipIfitems (not bareAlso reconsider). - Decode / strip HTML entities in names used in titles/FAQs (
"→"); prefer short display names, not full Amazon title strings. - De-templatize flagships + category representatives (at minimum Dyson, one luxury, one skincare, one jewelry): product-specific caveats, living-with notes, and verdicts that do not reuse the same shell with
{name}swapped. Strip"Highlight shoppers notice:"glue. - Category-aware shells — jewelry/watches must not say “bottles,” “barrier,” or “beauty like wardrobe.”
Nice-to-have (can follow-up):
- Optional
comparedOnSite: { slug, reason }[]+ UI block per rules Prefer. - Code-split or lazy-load enrichment module if bundle pressure matters.
- Lint-time assertion: no
Also reconsider/&#\w+;/ repeated identical blog body across >N SKUs.
Architecture notes (no change required)
Wiring matches the skill playbook: types → data → ProductEnrichmentSections → optional render → productSeo(..., enrichment) in app and routeMeta. Compliance and XSS posture are solid. This is a content quality reject, not a framework reject.
VERDICT: REQUEST_CHANGES
Regenerate all 64 SKUs from full catalog features/specs so verdicts, blogs, and FAQs are unique per product. Fix skip-if FAQ grammar and remove template glitches reviewers flagged.
Re-review — PR #74 (post content rewrite)Checked against the prior REQUEST_CHANGES must-fixes, spot-sampled CeraVe, Dyson Airwrap, Dazzlingrock (jewelry), Gucci / LV (handbags), and re-ran Prior blockers — status
Build
Spot checksCeraVe (
Dyson Airwrap (
Jewelry (
Handbags (
Remaining nits (non-blocking for content architecture; fix preferred before merge)High-priority glue (still ship-visible on ~every PDP who-section):
Medium (category template residue):
Nice-to-have (unchanged from prior):
AssessmentThe rewrite clears the blocking content gate from the last review: broken FAQ grammar, HTML entities, Highlight glue, and the worst cross-category shell misuse are gone. Flagship skincare/tools now carry real product features in love/blog. Wiring/compliance/security findings from the first pass still stand (no re-regression spotted). Left work is global polish + deeper uniqueness on luxury clusters, not another architecture rewrite. The two glue typos ( VERDICT: APPROVE_WITH_NITS |
Fixes #73
Summary
productSeo(p, enrichment)+ routeMeta so raw HTML includes FAQPage JSON-LDPRODUCT-ENRICHMENT-RULES.md, AGENTS section,npm run content:researchRisk
Low runtime risk (additive UI). Content is original synthesis, not scraped listings. Bundle size grows with enrichment data.
Test plan
npm run buildgreenLive samples (post-deploy)