From ac0ac456d9a483c7bc5eb368a8d45dfc47eb3ff8 Mon Sep 17 00:00:00 2001 From: Omair Saleh Date: Wed, 29 Apr 2026 00:43:43 +0800 Subject: [PATCH] feat: add Competitor Analysis view with 6 scraped competitors MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - New CompetitorAnalysis.vue with position summary cards, competitor table (click to expand), strengths/weaknesses, JV learning callout, gaps & opportunities panels - competitor-analysis.json for JV-TURMERIC500 with 6 competitors: Ethical Nutrition (direct), DIRTEA, Wild Nutrition, Ancient+Brave, Heights, Purolabs — all scraped from pi-fresh-foundation - Add route /product/:sku/competitor-analysis to router - Add 'Competitor Analysis' nav item under Optimize Marketing in sidebar - Register competitor-analysis in server.ts all-views list Co-Authored-By: Claude Sonnet 4.6 --- ...4bae7914-9326-440b-89bc-283136679e6c.jsonl | 3 + .omc/state/hud-stdin-cache.json | 2 +- .omc/state/idle-notif-cooldown.json | 2 +- .omc/state/subagent-tracking.json | 2 +- api/server.ts | 2 +- .../JV-TURMERIC500/competitor-analysis.json | 220 ++++++++++++++ src/components/layout/Sidebar.vue | 1 + src/components/views/CompetitorAnalysis.vue | 279 ++++++++++++++++++ src/components/views/ImageAudit.vue | 2 +- src/main.js | 2 + 10 files changed, 510 insertions(+), 5 deletions(-) create mode 100644 data/intelligence/JV-TURMERIC500/competitor-analysis.json create mode 100644 src/components/views/CompetitorAnalysis.vue diff --git a/.omc/state/agent-replay-4bae7914-9326-440b-89bc-283136679e6c.jsonl b/.omc/state/agent-replay-4bae7914-9326-440b-89bc-283136679e6c.jsonl index 9850691..b3d23ed 100644 --- a/.omc/state/agent-replay-4bae7914-9326-440b-89bc-283136679e6c.jsonl +++ b/.omc/state/agent-replay-4bae7914-9326-440b-89bc-283136679e6c.jsonl @@ -3,3 +3,6 @@ {"t":0,"agent":"a9ea0ff","agent_type":"unknown","event":"agent_stop","success":true} {"t":0,"agent":"aa6d52f","agent_type":"unknown","event":"agent_stop","success":true} {"t":0,"agent":"a2d1e4b","agent_type":"unknown","event":"agent_stop","success":true} +{"t":0,"agent":"ad3e9af","agent_type":"unknown","event":"agent_stop","success":true} +{"t":0,"agent":"a61ca95","agent_type":"unknown","event":"agent_stop","success":true} +{"t":0,"agent":"a3d8225","agent_type":"unknown","event":"agent_stop","success":true} diff --git a/.omc/state/hud-stdin-cache.json b/.omc/state/hud-stdin-cache.json index 2b8b4da..7850b84 100644 --- a/.omc/state/hud-stdin-cache.json +++ b/.omc/state/hud-stdin-cache.json @@ -1 +1 @@ -{"session_id":"4bae7914-9326-440b-89bc-283136679e6c","transcript_path":"C:\\Users\\uldvs\\.claude\\projects\\C--Users-uldvs-OneDrive-Desktop-Work-2-0-cabinet4u\\4bae7914-9326-440b-89bc-283136679e6c.jsonl","cwd":"C:\\Users\\uldvs\\OneDrive\\Desktop\\Work 2.0\\cabinet4u\\jv-dashboard","model":{"id":"claude-sonnet-4-6","display_name":"Sonnet 4.6"},"workspace":{"current_dir":"C:\\Users\\uldvs\\OneDrive\\Desktop\\Work 2.0\\cabinet4u\\jv-dashboard","project_dir":"C:\\Users\\uldvs\\OneDrive\\Desktop\\Work 2.0\\cabinet4u","added_dirs":["C:/Users/uldvs/OneDrive/Desktop/Work 2.0/cabinet4u","C:\\Users\\uldvs\\.claude\\projects\\C--Users-uldvs-OneDrive-Desktop-Work-2-0-cabinet4u"]},"version":"2.1.112","output_style":{"name":"default"},"cost":{"total_cost_usd":14.750393099999995,"total_duration_ms":32105284,"total_api_duration_ms":3306186,"total_lines_added":4172,"total_lines_removed":696},"context_window":{"total_input_tokens":3290,"total_output_tokens":194372,"context_window_size":200000,"current_usage":{"input_tokens":3,"output_tokens":152,"cache_creation_input_tokens":1352,"cache_read_input_tokens":159480},"used_percentage":80,"remaining_percentage":20},"exceeds_200k_tokens":false,"rate_limits":{"five_hour":{"used_percentage":16,"resets_at":1777380000},"seven_day":{"used_percentage":14.000000000000002,"resets_at":1777388400}}} \ No newline at end of file +{"session_id":"4bae7914-9326-440b-89bc-283136679e6c","transcript_path":"C:\\Users\\uldvs\\.claude\\projects\\C--Users-uldvs-OneDrive-Desktop-Work-2-0-cabinet4u\\4bae7914-9326-440b-89bc-283136679e6c.jsonl","cwd":"C:\\Users\\uldvs\\OneDrive\\Desktop\\Work 2.0\\cabinet4u\\jv-dashboard","model":{"id":"claude-sonnet-4-6","display_name":"Sonnet 4.6"},"workspace":{"current_dir":"C:\\Users\\uldvs\\OneDrive\\Desktop\\Work 2.0\\cabinet4u\\jv-dashboard","project_dir":"C:\\Users\\uldvs\\OneDrive\\Desktop\\Work 2.0\\cabinet4u","added_dirs":["C:/Users/uldvs/OneDrive/Desktop/Work 2.0/cabinet4u","C:\\Users\\uldvs\\.claude\\projects\\C--Users-uldvs-OneDrive-Desktop-Work-2-0-cabinet4u"]},"version":"2.1.112","output_style":{"name":"default"},"cost":{"total_cost_usd":17.633284500000002,"total_duration_ms":50898415,"total_api_duration_ms":3870877,"total_lines_added":4776,"total_lines_removed":709},"context_window":{"total_input_tokens":6244,"total_output_tokens":224096,"context_window_size":200000,"current_usage":{"input_tokens":3,"output_tokens":319,"cache_creation_input_tokens":518,"cache_read_input_tokens":103412},"used_percentage":52,"remaining_percentage":48},"exceeds_200k_tokens":false,"rate_limits":{"five_hour":{"used_percentage":20,"resets_at":1777398000},"seven_day":{"used_percentage":1,"resets_at":1777993200}}} \ No newline at end of file diff --git a/.omc/state/idle-notif-cooldown.json b/.omc/state/idle-notif-cooldown.json index 8e73ba5..3607af1 100644 --- a/.omc/state/idle-notif-cooldown.json +++ b/.omc/state/idle-notif-cooldown.json @@ -1,3 +1,3 @@ { - "lastSentAt": "2026-04-28T10:19:26.772Z" + "lastSentAt": "2026-04-28T16:38:14.521Z" } \ No newline at end of file diff --git a/.omc/state/subagent-tracking.json b/.omc/state/subagent-tracking.json index 7954aa8..b003074 100644 --- a/.omc/state/subagent-tracking.json +++ b/.omc/state/subagent-tracking.json @@ -3,5 +3,5 @@ "total_spawned": 0, "total_completed": 0, "total_failed": 0, - "last_updated": "2026-04-28T10:22:31.960Z" + "last_updated": "2026-04-28T16:26:46.051Z" } \ No newline at end of file diff --git a/api/server.ts b/api/server.ts index 2fdaee9..f5f0b88 100644 --- a/api/server.ts +++ b/api/server.ts @@ -105,7 +105,7 @@ const server = Bun.serve({ if (intelMatch) { const [, sku, view] = intelMatch if (view === 'all') { - const views = ['review-aspects', 'conversion-driver', 'strengths-weaknesses', 'conversion-blockers', 'improvements', 'image-audit', 'photo-brief'] + const views = ['review-aspects', 'conversion-driver', 'strengths-weaknesses', 'conversion-blockers', 'improvements', 'image-audit', 'photo-brief', 'competitor-analysis'] const result: Record = {} for (const v of views) { const data = await readJson(join(INTEL_ROOT, sku, `${v}.json`)) diff --git a/data/intelligence/JV-TURMERIC500/competitor-analysis.json b/data/intelligence/JV-TURMERIC500/competitor-analysis.json new file mode 100644 index 0000000..5a567e3 --- /dev/null +++ b/data/intelligence/JV-TURMERIC500/competitor-analysis.json @@ -0,0 +1,220 @@ +{ + "sku": "JV-TURMERIC500", + "name": "Turmeric with BioPerine & Vitamin C 95% Curcuminoids", + "generatedAt": "2026-04-29", + "generatedBy": "claude-code-in-session", + "scrapedAt": "2026-03-26", + "category": "Turmeric & Joint Health", + "competitors": [ + { + "rank": 1, + "brand": "Ethical Nutrition", + "product": "Turmeric Curcumin", + "type": "direct", + "price": "£23.99", + "pricePerDay": "£0.20", + "rating": 4.7, + "reviews": 191, + "supplyDays": 60, + "format": "Capsule", + "headline": "Get to the root of inflammation with 100% organically grown turmeric and curcumin.", + "differentiators": [ + "100% organic certified ingredients", + "175mg active curcumin per capsule + ginger + black pepper", + "Third-party batch tested — results published online", + "BRCGS Grade AA certified manufacturing", + "Plastic-free, family-owned UK business" + ], + "strengths": [ + "Organic certification is a credible premium signal JV lacks", + "Ginger added as anti-inflammatory synergy ingredient", + "Full batch transparency page builds trust", + "Plastic-free packaging and family-owned story resonate with eco buyers" + ], + "weaknesses": [ + "Only 4% curcuminoids in root (vs JV's 95% curcuminoids)", + "Uses generic black pepper, not BioPerine® branded extract", + "191 reviews vs JV's 2,195 — significantly lower social proof", + "Lower 4.7 star distribution (2.6% 1-star vs JV's cleaner profile)" + ], + "jvLearning": "Ethical Nutrition's batch transparency page is a strong trust tactic. Customers who care about organic will question JV's formula. JV should address this with a 'Why we use conventional turmeric — and why it outperforms organic' explainer in PDP copy." + }, + { + "rank": 2, + "brand": "DIRTEA", + "product": "Focus Powder (Lion's Mane)", + "type": "category-leader", + "price": "£38.00", + "pricePerDay": "£1.26", + "rating": 4.9, + "reviews": 22448, + "supplyDays": 30, + "format": "Powder", + "headline": "Feel the DIRTEA difference. Kickstart your mornings, sharpen your mind, and enjoy sustained energy naturally.", + "differentiators": [ + "22,448 reviews — dominant social proof in UK supplement market", + "Research data: 77% cognitive improvement in 30 days (1,500 participant survey)", + "100% organic dual-extracted fruiting bodies with >40% beta-glucans guarantee", + "BRCGS + Soil Association + Organic Food Federation certified", + "Ritual positioning: 'add to morning coffee' — habit formation marketing" + ], + "strengths": [ + "22k+ reviews create category authority at scale JV cannot match in supplements", + "Lifestyle ritual positioning ('morning coffee') vs functional supplement framing", + "Guaranteed potency metric (>40% beta-glucans) — specific and verifiable claim", + "High subscription rate via ritual/routine messaging" + ], + "weaknesses": [ + "Lion's Mane is a different category — no direct overlap with joint pain buyers", + "Powder format requires preparation vs JV's convenient tablet", + "£38 for 30 days vs JV's higher value-per-serving" + ], + "jvLearning": "DIRTEA's ritual positioning ('add to morning coffee') drives habit formation and subscription stickiness. JV should test 'make it part of your morning routine' messaging. Their survey-based outcome stats (77%, 82%, 91%) are also a tactic JV could replicate with its 2,195 reviews." + }, + { + "rank": 3, + "brand": "Wild Nutrition", + "product": "Food-Grown® Magnesium", + "type": "premium-segment", + "price": "£20.50", + "pricePerDay": "£0.68", + "rating": 4.74, + "reviews": 392, + "supplyDays": 30, + "format": "Capsule", + "headline": "Scientifically shown to improve sleep quality by 32% and increase sleep 42 minutes each night.", + "differentiators": [ + "Published clinical study: Briskey et al. 2024 (Food and Nutrition Sciences)", + "Specific outcome claim: +42 minutes sleep, +32% sleep quality", + "Food-Grown® proprietary process — absorbed like food", + "Refillable glass jar + refill pouches — premium sustainability", + "Founder-led brand with expert quote from formulator Henrietta Norton" + ], + "strengths": [ + "Peer-reviewed published study is the strongest evidence standard in the category", + "Specific measurable outcome (42 minutes) is far more persuasive than vague benefit claims", + "Glass refillable jar reads as significantly more premium than JV's pouch", + "Founder story + formulator quote builds personal trust" + ], + "weaknesses": [ + "Different category (sleep/magnesium) vs JV's joint/inflammation", + "Only 30-day supply at £20.50 — lower value vs JV", + "392 reviews is relatively low for the premium price point" + ], + "jvLearning": "Wild Nutrition proves that a specific, measurable claim ('42 minutes more sleep') converts far better than generic benefit statements. JV should adapt this: 'X% of customers reported reduced joint pain within 8 weeks' drawn from its 2,195 reviews. Also note: glass packaging read 0.8 points higher on perceivedValue than JV's pouch in our image audit." + }, + { + "rank": 4, + "brand": "Ancient + Brave", + "product": "True Collagen", + "type": "premium-segment", + "price": "£32.00", + "pricePerDay": "£0.80", + "rating": 4.9, + "reviews": 5725, + "supplyDays": 40, + "format": "Powder", + "headline": "Easily digestible, highly absorbable and clinically researched Type I hydrolysed bovine collagen peptides.", + "differentiators": [ + "5,725 reviews at 4.9 stars — highest rating density in the data set", + "1,436 additional Trustpilot reviews (independent verification)", + "Subscription saves 20% — strong retention mechanism", + "Klarna 3-payment option — reduces price barrier for premium product", + "Clinical research backing on specific collagen type" + ], + "strengths": [ + "4.9 stars at 5,725 reviews is exceptional — trust floor is very high", + "Dual social proof (on-site + Trustpilot) is harder to dismiss than either alone", + "Subscription + Klarna combination maximises both acquisition and retention" + ], + "weaknesses": [ + "Collagen category has no overlap with joint/inflammation buyers", + "Powder format less convenient than JV tablets", + "Premium price point (£32) without a subscription" + ], + "jvLearning": "Ancient + Brave's dual review stack (on-site + Trustpilot) is worth replicating. JV already has Feefo — surfacing it more prominently in PDP and considering Trustpilot as a second layer would mirror this approach. Their subscription + Klarna pairing is also worth testing for retention." + }, + { + "rank": 5, + "brand": "Heights", + "product": "Vitals⁺", + "type": "category-leader", + "price": "£40.00", + "pricePerDay": "£1.33", + "rating": 4.7, + "reviews": 5328, + "supplyDays": 30, + "format": "Capsule", + "headline": "Feel like your best self again — 20 vital nutrients, backed by 330+ scientific studies.", + "differentiators": [ + "330+ scientific studies cited in formulation", + "Clinical study: 75% felt better overall, 59% noticed higher focus", + "Delayed-release capsule technology for enhanced absorption", + "Media coverage: Sunday Times, Vogue, GQ", + "Celebrity endorsements: Stephen Fry, Carol Vorderman, Matt Willis" + ], + "strengths": [ + "Celebrity endorsements drive mass awareness and aspirational appeal", + "Delayed-release technology is a concrete format differentiator", + "Study-backed outcome percentages (75%, 59%) are highly persuasive", + "Premium brand positioning allows £40/month pricing in multivitamin category" + ], + "weaknesses": [ + "Multivitamin — no overlap with joint/inflammation specific buyers", + "£40/month is 3x higher price than category average" + ], + "jvLearning": "Heights proves media coverage and celebrity endorsement can justify premium pricing in the supplement category. For JV, NHS or GP endorsement (already mentioned in reviews — 98 cite doctor recommendation) is a stronger and more relevant trust signal. Quote a GP in the PDP: 'As recommended by healthcare professionals.'" + }, + { + "rank": 6, + "brand": "Purolabs", + "product": "Menopause Complex", + "type": "adjacent", + "price": "£34.99", + "pricePerDay": "£1.17", + "rating": 4.5, + "reviews": 1468, + "supplyDays": 30, + "format": "Capsule", + "headline": "14 science-backed ingredients to help get you back to your best self in 60 days or less.", + "differentiators": [ + "'Trusted by 80,000 women & counting' — community scale claim", + "60-day money-back guarantee (vs industry standard 30 days)", + "Letterbox-friendly packaging — reduces friction in delivery", + "Media coverage: Top Santé, Good Housekeeping, Expert Reviews", + "Same-day dispatch before 2pm" + ], + "strengths": [ + "'80,000 women' community claim creates FOMO and belonging signal", + "60-day guarantee doubles the risk-free window — strong for hesitant buyers", + "Media logos (Good Housekeeping, Top Santé) are credible for target demographic", + "Subscribe & Save 20% is same as JV but prominently displayed" + ], + "weaknesses": [ + "Menopause category — no overlap with joint/turmeric buyers", + "4.5 stars is lower than most competitors in this set", + "Soy isoflavones ingredient may put off buyers avoiding phytoestrogens" + ], + "jvLearning": "Purolabs' 60-day guarantee is a meaningful upgrade over the standard 30-day JV offers. Given that turmeric reviewers typically note effects after 8-12 weeks, a 60-day guarantee would directly address the 'hasn't worked yet' drop-off period and align with the timeline customers actually need." + } + ], + "jvPosition": { + "reviewsRank": 1, + "reviewsNote": "JV's 2,195 reviews leads direct category peers. Only DIRTEA (22k) and Ancient+Brave (5.7k) have more — both in different supplement categories.", + "formulaAdvantage": "95% curcuminoids + BioPerine® is the strongest formula in the turmeric category. Ethical Nutrition (the only direct competitor) uses 4% curcuminoids without BioPerine®.", + "pricePosition": "Mid-market. Undercuts premium players (Heights £40, DIRTEA £38) while outperforming on formula vs budget alternatives.", + "gaps": [ + "No organic certification — Ethical Nutrition's organic positioning appeals to a segment JV cannot currently claim", + "30-day guarantee vs Purolabs' 60-day — a gap that matters given turmeric's 8-12 week effectiveness window", + "Pouch format reads less premium than glass bottles (Wild Nutrition, Ancient+Brave) — perceivedValue disadvantage of ~0.8 points", + "No lifestyle imagery — every premium competitor uses outcome-led photography that JV's current image set completely lacks", + "No specific measurable outcome claim — Wild Nutrition's '42 minutes more sleep' shows what's possible with review data analysis" + ], + "opportunities": [ + "Extract a measurable outcome claim from 2,195 reviews: 'X% of customers reported less joint pain within 8 weeks'", + "Extend guarantee to 60 days to match turmeric's real effectiveness timeline", + "Surface the 98 GP-recommendation reviews as a credibility signal: 'As recommended by healthcare professionals'", + "Add Trustpilot as a second review layer alongside Feefo for dual-channel social proof" + ] + } +} diff --git a/src/components/layout/Sidebar.vue b/src/components/layout/Sidebar.vue index eff898e..d3721e6 100644 --- a/src/components/layout/Sidebar.vue +++ b/src/components/layout/Sidebar.vue @@ -39,6 +39,7 @@ const nav = [ items: [ { view: 'image-audit', icon: '▣', label: 'Image Audit' }, { view: 'conversion-blockers', icon: '⊘', label: 'Conversion Blockers' }, + { view: 'competitor-analysis', icon: '◈', label: 'Competitor Analysis' }, ] } ] diff --git a/src/components/views/CompetitorAnalysis.vue b/src/components/views/CompetitorAnalysis.vue new file mode 100644 index 0000000..5794bc2 --- /dev/null +++ b/src/components/views/CompetitorAnalysis.vue @@ -0,0 +1,279 @@ + + + + + diff --git a/src/components/views/ImageAudit.vue b/src/components/views/ImageAudit.vue index 2d61f41..43606f7 100644 --- a/src/components/views/ImageAudit.vue +++ b/src/components/views/ImageAudit.vue @@ -3,7 +3,7 @@
Image Audit

Objective feedback on your images

-

Scores across all {{ data?.imageCount || 0 }} product images — design quality, perceived value, message clarity and strength.

+

Scores across all {{ galleryUrls.length || data?.imageCount || 0 }} product images — design quality, perceived value, message clarity and strength.

Loading…
diff --git a/src/main.js b/src/main.js index af63bf3..d55a282 100644 --- a/src/main.js +++ b/src/main.js @@ -10,6 +10,7 @@ import ProductImprovements from './components/views/ProductImprovements.vue' import ImageAudit from './components/views/ImageAudit.vue' import ConversionBlockers from './components/views/ConversionBlockers.vue' import CatalogOverview from './components/views/CatalogOverview.vue' +import CompetitorAnalysis from './components/views/CompetitorAnalysis.vue' const router = createRouter({ history: createWebHashHistory(), @@ -22,6 +23,7 @@ const router = createRouter({ { path: '/product/:sku/improvements', component: ProductImprovements }, { path: '/product/:sku/image-audit', component: ImageAudit }, { path: '/product/:sku/conversion-blockers', component: ConversionBlockers }, + { path: '/product/:sku/competitor-analysis', component: CompetitorAnalysis }, ] })