Ships the second dashboard surface — a Pattern Library + Preview Theatre — that presents the 4-section PDP pilot batch back to Umar, compliance, and the board in an editorial format. Adds the full data layer that drives it: 5 source-backed per-SKU drafts at QA 100/100, 15 competitor PDP semantic extracts, PubMed evidence packs, EFSA claims library extension, JV brand voice guide, hand-curated product FAQs, and the Matrixify-ready CSV exports for Lewis. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
71 KiB
JV Shopify Content Population  Master Plan
Goal: the
jv-dashboardbecomes the central content production workspace for the Just Vitamins Shopify migration. All metaobject + product content is generated, reviewed, approved here, then exported as Matrixify CSVs and shipped to Lewis (Kubix) for import. Nothing goes direct-to-Shopify.
Continuation checkpoint - 20 May 2026
Current continuation status:
- DataForSEO has been re-checked with the real credentials loaded from
C:\Users\uldvs\OneDrive\Desktop\work\pi-fresh-foundation\.env;bun run dataforseo:live-asin-evidenceconfirms the account with20000 Ok, keepscredentialPrinted=false, rebuilds the ASIN evidence from saved live Product Search results, and leaves the paid Reviews pilot blocked until provider endpoint/support/spend gates are cleared. - A dated daily handoff snapshot is now available with
bun run handoff:daily-status; it writesdaily_status_<current Malaysia date>.md/csv/json, summarizes the live blockers, and repeats the no-fake-approval/no-fake-claim/no-guessed-credential guardrails. - A strict completion evidence dossier is available with
bun run handoff:evidence-dossier; it writeshandoff_evidence_dossier.md/csv/jsonand ties each master-plan requirement area to the current evidence file, proof, and remaining blocker before anyone can claim the goal is complete. - A reviewer decision workbook is available with
bun run handoff:reviewer-workbook; it writesreviewer_decision_workbook.md/csv/jsonplusreviewer_completion_commands.csvso compliance, Umar/JV, Lewis/Euan, and the provider-spend owner have exact editable files, required fields, commands, and guardrails. - The one-command handoff refresh has been expanded:
bun run refresh:packetnow regenerates the source-acquisition control packet, compliance/approval gates, reviewer workbook, reviewer input preflight, delivery indexes, verifier, evidence dossier, daily status, artifact freshness validation, and final delivery index while distinguishing expected blockers from actual refresh failures, so daily status reflects the latest verifier output and packet completeness is checked against current-run freshness. - A reviewer input preflight is now available with
bun run handoff:reviewer-preflight; it writesreviewer_input_preflight.md/csv/jsonand validates the human-editable compliance, product-approval, DataForSEO provider/spend, and staging evidence files before the heavier gates are rerun. - Owner handoff messages are now available with
bun run handoff:owner-messages; it writesowner_handoff_messages.md/csv/jsonwith copy-paste asks for compliance, product approval, Lewis/Euan staging, and DataForSEO provider/spend owners while preserving the no-fake-approval/no-paid-retry guardrails. - Owner response intake is now available with
bun run handoff:owner-responses; it writesowner_response_intake.md/csv/jsonand creates the editabledata/handoff/owner-response-intake.jsontracker so replies/evidence updates can be recorded before rerunning the authoritative gates. - A verifier gate dependency map is now available with
bun run handoff:gate-map; it writeshandoff_gate_dependency_map.md/csv/jsonplushandoff_gate_dependency_by_owner.csvso each blocked master verifier gate is tied to the exact owner input, evidence blocker, and rerun command. - Staging evidence intake is now available with
bun run staging:intake; it writesstaging_evidence_intake.md/csv/json, initializesdata/staging/cutover-approval.jsonas a pending editable tracker, and adds README instructions for real import-log/PDP-check folders without creating fake staging evidence. - A post-owner response rerun plan is now available with
bun run handoff:post-response-rerun; it writespost_owner_response_rerun_plan.md/csv/jsonand holds lane command sequences untilowner-response-intake.jsonrecords usable owner evidence, preventing blind reruns from being mistaken for approvals. - An owner evidence acceptance guide is now available with
bun run handoff:evidence-guide; it writesowner_evidence_acceptance_guide.md/csv/jsonand defines the valid fields, valid/invalid examples, guardrails, and validators for every owner-editable evidence file. - Export Console and
/api/export/statusnow expose the latestdailyStatusartifact beside the blocker burn-down, so the current operating status is discovered from the newestdaily_status_*.jsonfile instead of a hardcoded date. - This checkpoint does not mark the handoff complete: the goal remains blocked by 185 compliance blank/source-backed claim decisions, 190 product approvals, staging import logs, PDP spot checks, cutover approval, and DataForSEO Reviews endpoint availability.
Implementation checkpoint - 19 May 2026
Current dashboard build status:
- Content workspace is now in place for the full known catalogue: 190 product-content records under
data/content/products/and 190 workflow records underdata/content/workflow/. - Pilot content exists for
JV-D1000,JV-D4000, andJV-TURMERIC500; the remaining 187 catalogue records are intentionally markedpending_intelligence. - New dashboard surfaces are wired: Product Content Editor, Metaobject Editor, Approval Queue, Compliance Trail, Image Pipeline, Export Console, and the new market-intelligence views.
- Source Readiness is wired to show whether Feefo, competitor PDPs, Amazon, Trustpilot, Reddit, and clinical claims inputs are actually present before generated content is treated as handoff-ready.
- Matrixify preview/export tooling exists in both the dashboard and migration folder:
- dashboard:
bun run export:content - migration handoff:
py build_metaobjects_csv.py,py build_products_csv_v5.py,py build_smart_collections_csv.py,py validate_assets_manifest.py
- dashboard:
- Dashboard export now writes a handoff pack alongside the preview CSVs:
content_population_exports/handoff_manifest.jsoncontent_population_exports/handoff_summary.mdcontent_population_exports/export_blockers.csv
- External blocker work orders can now be generated with
bun run source:pack:content_population_exports/source_request_items.csv(raw evidence/source drops needed by lane)content_population_exports/clinical_claims_request.csv(VoC themes that require clinical/regulatory evidence before use inclinically_shown_to)content_population_exports/image_production_brief.csv(570 PDP image production rows)content_population_exports/source_request_pack.mdandsource_request_manifest.json
- Template schema validation is now available with
bun run validate:template, comparing dashboard + migration CSV headers againstC:\Users\uldvs\Downloads\Just Vitamins - Content Population Templates (1).xlsx. - Collection promo-card candidates can now be seeded with
bun run seed:promo-cards; it selects review-backed draft testimonials from existing Feefo raw reviews and maps the current Vitamin D and Joint Care smart collections to draftpromo_card.*metaobjects for human review. - Claims-library validation/template lane is available with
bun run validate:claims; it emitsclaims_library_template.json,claims_library_validation.json, andclaims_library_validation.csvso regulatory/compliance can filldata/sources/claims/claims-library.jsonin the required source-backed shape. - Raw Amazon/Trustpilot/Reddit drop validation is available with
bun run validate:sources; it creates JSON templates underdata/sources/_templates/and writessource_drop_validation.json/csvso incoming source files can be checked before extraction. - Deterministic PDP image filenames can now be assigned with
bun run assign:image-filenames; planned filenames are exported toplanned_image_filenames.json/csv, and export readiness now treats missing local/Shopify Files uploads asasset_uploadblockers rather than only checking whether a filename exists. Metaobject SVG assets can now be generated repeatably withbun run assets:metaobject-svgs; this writes the 16 required metaobject icon/ingredient SVG files intoC:\Users\uldvs\OneDrive\Desktop\jv-assetsand recordsmetaobject_svg_asset_generation.json/csv. Draft PDP PNG assets can now be generated repeatably withbun run assets:draft-pdp; this writes 570 review-marked draft PDP assets into the same asset root and recordsdraft_pdp_asset_generation.json/csvwhile keeping image approval blocked until human review. - Consolidated readiness audit is available with
bun run audit:content; it writescontent_population_readiness.json/csv/mdand fails until every gate in this plan is actually satisfied. - Export Console now surfaces the consolidated readiness audit and intelligence-generation workqueue from
/api/export/status, so Lewis/Euan handoff readiness is not hidden behind only product-level blockers. - Owner-facing handoff action plan is available with
bun run handoff:actions; it writeshandoff_action_plan.md/csv/jsonand now separates completed/covered lanes from active blockers: 6 accountable lanes total, currently 0 active P0, 1 active P1, 1 active P2, 3 Done/covered, and 1 Watch. Executive decision brief is available withbun run handoff:decision-brief; it writesexecutive_decision_brief.md/json,executive_decision_brief_decisions.csv, andexecutive_decision_brief_readiness.csvto assign the remaining compliance, approval, staging, and source-provider decisions without claiming them complete. Blocker burn-down is available withbun run handoff:burndown; it writesblocker_burndown.md/json/csvandblocker_burndown_next_actions.csvto track remaining evidence counts by lane. Export Console displays those actions and decisions from/api/export/status. - Staging import checklist is available with
bun run staging:checklist; it writesstaging_import_checklist.md/csv/jsonand separates preflight evidence from Lewis/Euan Matrixify import/PDP spot-check evidence. Lewis/Euan staging handoff packet is available withbun run staging:handoff-packet; it writesstaging_handoff_packet.md/json,staging_handoff_import_files.csv,staging_pdp_spot_check_queue.csv,staging_handoff_actions.csv, plus 10 queued PDP check templates underdata/staging/pdp-check-queue/. Export Console now displays the blocking checklist rows and handoff packet from/api/export/status. - Staging evidence validation is available with
bun run staging:evidence; it writes templates underdata/staging/_templates/plusstaging_evidence_validation.md/csv/json, and requires clean Matrixify import logs, 5+ passing PDP checks, and cutover approval before staging can be marked complete. Export Console now displays this evidence gate from/api/export/status. - Master handoff verification is available with
bun run verify:handoff; it runs all handoff gates in sequence, including compliance blank decisions, product approval decisions, executive decision brief, staging handoff packet, staging evidence, delivery index, and content audit, then writeshandoff_verification_run.md/csv/json. Export Console now displays the blocked verification checks from/api/export/status. - Delivery packet index is available with
bun run delivery:index; it writesdelivery_index.md/csv/jsonand maps 179 handoff, blocker, validation, source-request, source-acquisition, intelligence, staging, current daily-status, completion-evidence, reviewer-workbook, reviewer-preflight, owner-message/response-intake, owner-evidence-guide, post-response-rerun, gate-dependency, packet-refresh, artifact-freshness, and migration artifacts. Export Console now displays packet group coverage from/api/export/status. - Staged source acquisition plan is available with
bun run source:acquisition; it writessource_acquisition_plan.md/json,source_acquisition_stages.csv, andsource_acquisition_targets.csv. The plan recommends DataForSEO first for a capped structured pilot, with Apify reserved for targeted gap-fills after raw output inspection. Export Console now displays the staged provider plan from/api/export/status. - Latest verified counts:
- Dashboard export: 190 product records / 375 blockers.
- Migration product export: 350 product/variant rows / 375 blockers.
- Metaobjects: dashboard template export now includes source-backed
clinically_shown_torows; migration emitter writes 98 total metaobject rows, while dashboard Matrixify row shape expands to 118 rows. Do not treat those row counts as the same format. - Asset validation: 643 local files found after generating 16 metaobject SVGs and 570 draft PDP PNGs, 586 required filenames, 0 missing referenced uploads/files, and 0 missing filename refs.
- Handoff manifest: not ready for Lewis/Euan; current dashboard/migration exports report 375 blockers, now concentrated in 185 unmatched clinical-claim/compliance rows plus 190 human approval rows rather than missing asset files.
- Source request pack: 206 source request rows, 16 clinical-claim request rows, and 570 image-production rows.
- Template schema validation passes for dashboard products, migration products, dashboard/migration smart collections, dashboard metaobjects, and migration metaobjects.
- Promo cards: 2 draft Feefo-backed promo cards generated, 2/2 smart collections mapped; dashboard metaobject export includes promo cards and source-backed clinical-claim metaobjects, while migration metaobjects emit 14 promo-card rows inside the 98-row migration format.
- Claims validation now reports ready=true with 4 source-backed draft authorised nutrient/function claim entries in
data/sources/claims/claims-library.json;bun run claims:sync-contentmaps 5 products to source-backed draft clinical claim refs and deliberately leaves 185 unmatched SKUs blank for human compliance review. Final human compliance/content approval remains a separate blocker. - Editable CSV decision inputs now exist for human review:
data/content/compliance/clinical-blank-decisions.csvanddata/content/approvals/product-approval-decisions.csv. Scripts read these CSVs back into the JSON gates, so reviewers can work in spreadsheet form without the dashboard inventing approvals. - Compliance review packets:
bun run claims:unmatched-reviewwritesunmatched_claims_review_packet.md/csv/jsonfor the 185 SKUs with blank clinical-claim refs.bun run compliance:blank-decisionswritesclinical_blank_decision_template.md/csv/jsonplus editable decision inputsdata/content/compliance/clinical-blank-decisions.jsonanddata/content/compliance/clinical-blank-decisions.csv; a blank clinical-claim field is export-safe only if compliance recordsdecision=approved_blank, approver, timestamp, rationale, andconstraintsAcknowledged=true.bun run approval:review-packetwritesproduct_approval_review_packet.md/csv/jsonfor all 190 product approval decisions.bun run approval:decisionswritesproduct_approval_decision_gate.md/csv/jsonplus editable decision inputsdata/content/approvals/product-approval-decisions.jsonanddata/content/approvals/product-approval-decisions.csv; it applies approvals only when a human fillsdecision=approve_all, approver, timestamp, review evidence, all lane acknowledgements, and no-fake-evidence acknowledgement. These scripts fail by design while rows remain unresolved; they are review queues/gates, not approval bypasses. - Source-drop validation now reports ready=true with Amazon 1/1, Trustpilot 1/1, and Reddit 1/1. The Amazon file is a limited competitor/category Amazon UK public-snippet seed drop (
data/sources/amazon/amazon-uk-vitamin-d3-k2-public-snippet-2026-05-19.json), not a full catalogue Amazon export. - Image filenames/assets: 570 deterministic product image filenames assigned, 16/16 required metaobject SVG icon/image assets generated, 570/570 draft PDP PNG assets generated as review-marked placeholders, 0 missing filename refs, and 0 missing asset-upload/file blockers remain; image approval is still blocked because draft assets are not final human-approved creative.
- Migration handoff scripts now share the same asset gate as the dashboard:
validate_assets_manifest.pychecks 586 refs with 0 missing assets andbuild_products_csv_v5.pynow reports 375 blockers, no longer asset-upload blockers. - Readiness audit: 10/12 gates passing. Passing gates are catalogue content seeded, workflow seeded, template schema, asset filenames assigned, asset uploads ready, source request pack, source drops, claims library, promo cards seeded, and full intelligence coverage. Blocked gates are handoff readiness and human approval.
- Intelligence generation workqueue:
bun run intelligence:queuewritesintelligence_generation_workqueue.json/csv,intelligence_generation_by_sku.csv, andintelligence_generation_summary.csv; it now passes with 0 missing intelligence tasks across 190 products.bun run extract:claims,bun run scrape:amazon,bun run scrape:reddit,bun run extract:audience,bun run build:competitors,bun run extract:flavor, andbun run intelligence:catalog-queuesnow create catalogue-wide queue/evidence files for all 12 required intelligence views. Important caveat: many non-pilot files are clearly marked as queue scaffolds/source-seeded drafts, not final quote-level or human-approved evidence. - Handoff action plan:
bun run handoff:actionscurrently fails by design with ready=false, 6 owner-facing actions, 0 active P0 blockers, 2 active blocked actions, 375 export blockers, 0 missing assets, and 0 missing intelligence tasks. - Staging checklist:
bun run staging:checklistcurrently fails by design with ready=false, 18 checks, and 9 blocking checks because preflight blockers and Lewis/Euan staging evidence are still missing. - Staging evidence validation:
bun run staging:evidencecurrently fails by design with ready=false, 5/5 evidence gates blocking, 0 import logs, and 0 PDP spot checks; templates are written todata/staging/_templates/. - Master handoff verification:
bun run verify:handoffcurrently fails by design with ready=false, 8/17 checks passing, and 9 blocked checks (clinical_blank_decisions,product_approval_decisions,product_approval_review_packet,handoff:actions,executive_decision_brief,staging_handoff_packet,staging:evidence,staging:checklist,audit:content). - Delivery index:
bun run delivery:indexcurrently passes with 144/144 packet files present after adding the unmatched-claims, blank-decision, product-approval review, product-approval decision, staging-handoff, executive-decision, and blocker-burndown packets; this proves packet completeness only, not final handoff readiness. - Source acquisition plan:
bun run source:acquisitionwrites a 4-stage credit-controlled plan with 9 DataForSEO Stage 1 pilot targets and 7 Apify-only gap-fill competitor targets;bun run apify:gapfillwrites a no-spend Stage 2 packet with 3 first-batch targets, 4 held targets, and 7 existing PDP probes;bun run dataforseo:pilotwrites the Stage 1 ASIN intake/payload packet and currently reports 6 ready task rows / 3 missing ASINs after live DataForSEO product-result confirmation;bun run dataforseo:products-liveis the guarded repeatable live Amazon Products search runner (requiresJV_SOURCE_ALLOW_PAID=dataforseo-product-search), andbun run dataforseo:live-asin-evidencerefreshes the live account/evidence report fromdata/sources/dataforseo/products_raw/without printing credentials;bun run dataforseo:asin-candidateswritesdataforseo_asin_candidate_report.md/csv/jsonfrom the no-spend candidate log and currently reports 4 ASIN-shaped candidates, 0 Amazon-confirmed/high-confidence candidates, and 4 still requiring Amazon product-page confirmation;bun run dataforseo:asin-web-evidencewritesdataforseo_asin_web_evidence.md/csv/jsonfrom public no-spend lookup evidence and currently records 4 third-party lookup aids, 0 Amazon-confirmed exact matches, and 2 rejected not-target leads;bun run dataforseo:unresolved-asinswritesdataforseo_unresolved_asin_evidence.md/csv/jsonfrom the live DataForSEO product-result candidate export and currently inspects 212 candidate rows for the 3 unresolved SKUs, finds 0 exact matches, and keeps all 3 out of the paid payload;bun run dataforseo:asin-confirmationswrites the manual Amazon-page confirmation worksheet/report (data/sources/dataforseo/asin-confirmations.csv,dataforseo_asin_confirmation_report.md/csv/json) for all 9 Stage 1 targets and currently reports 0/9 confirmations ready for promotion (4 candidate rows, 5 manual-search rows);bun run dataforseo:promote-asinswritesdataforseo_asin_promotion_report.md/csv/json, safely promotes only Amazon-confirmed/high-confidence candidates intoasin-map.csv, and currently promotes 0 rows because the candidates are not confirmed;bun run dataforseo:asin-lookupwrites the ASIN lookup queue; the live DataForSEO product search now confirms 6 ASINs and leaves 3 exact JV ASINs unresolved;bun run dataforseo:task-preflightwritesdataforseo_task_preflight.md/csv/json;bun run dataforseo:reviews-liveis the guarded repeatable Amazon Reviews pilot runner/status artifact;bun run dataforseo:reviews-docs-statusfetches the official DataForSEO Amazon Reviews docs and currently detects the provider-published temporary-unavailable note with 2/3 docs checks passing;bun run dataforseo:support-escalationwrites a credential-free support packet for the archived 50304 Reviews endpoint failure;bun run dataforseo:support-responsewritesdataforseo_support_response_gate.md/csv/jsonplus the editable response trackerdata/sources/provider-responses/dataforseo-reviews-endpoint-response.jsonand currently has 3/6 checks passing while the provider response, endpoint/replacement path, and retry-safe confirmation are missing;bun run dataforseo:approval-requestwritesdataforseo_stage1_approval_request.md/csv/jsonas a project-owner approval packet for the one capped pilot and currently has 4/6 approval-prep checks ready (blocked by provider endpoint availability and unapproved local approval file);bun run amazon:manual-capturewritesmanual_amazon_review_capture.md/csv/jsonplusdata/sources/_templates/amazon-manual-review-capture-template.jsonas a no-spend fallback queue for the same 6 confirmed ASINs; DataForSEO paid task creation remains blocked with 6/10 preflight checks passing because the paid-run flag, official docs unavailable status, support-response clearance, and spend gate are still blocked;bun run dataforseo:ingestprepares the post-pilot raw-result normalization lane and currently reports 0 raw files / 0 converted reviews;bun run source:pricing-refswritessource_acquisition_pricing_references.md/csv/jsonfrom official provider pricing references and currently records 5 references across DataForSEO and Apify;bun run source:cost-scenarioswritessource_acquisition_cost_scenarios.md/csv/jsonand currently estimates the DataForSEO standard 9-ASIN/depth-10 pilot at $0.00675 while keeping spend blocked;bun run source:subscription-decisionwritessource_subscription_decision.md/csv/jsonand currently says do not subscribe/spend yet, DataForSEO is first once ASINs/gates are ready, and Apify stays held;bun run source:budgetwritessource_acquisition_budget_gate.md/csv/jsonplus the editable cap filedata/sources/budgets/source-acquisition-budget.jsonand currently records the DataForSEO Stage 1 local budget cap with 7/9 checks passing;bun run source:cost-planwritessource_acquisition_cost_plan.md/csv/jsonplusdata/sources/budgets/source-acquisition-cost-plan.jsonand currently records DataForSEO Stage 1 cost readiness with 8/12 cost checks passing; Apify cost remains blocked until a named gap/actor cost exists;bun run source:approvalswritessource_acquisition_approval_gate.md/csv/json, enriches local approval templates, and currently blocks paid usage with 0/23 approval checks passing;bun run source:spend-gatecurrently blocks DataForSEO and Apify spend with 6/14 gate checks passing; DataForSEO ASIN scope, 6-row task payload, budget cap, and cost plan are accepted, while valid approval and provider endpoint readiness still block spend;bun run dataforseo:reviewadds the post-pilot review/scale decision gate and currently reports 1/7 checks passing with decision pending;bun run source:next-actionswrites the ordered operating checklist and currently says do not subscribe/spend yet, resolve the 3 remaining ASINs or proceed with the 6 confirmed payload rows once budget/spend gates are intentionally opened;bun run source:refresh-packetnow regenerates the source-acquisition packet and currently reports 32/32 required packet steps passing; current source state is now Amazon 1, Trustpilot 1, Reddit 1 because the guarded DataForSEO Reviews pilot is blocked by approval/spend gates and the latest archived provider call returned50304 This function temporarily unavailablebefore any review task IDs were created.
- Latest technical verification:
bun run validate:assetspasses and writescontent_population_exports/asset_manifest_validation.*.bun run validate:sourcesnow passes with Amazon 1/1, Trustpilot 1/1, and Reddit 1/1.bun run scrape:amazonreports 1 Amazon source file and refreshes the 3 pilot Amazon review queues;bun run scrape:trustpilotreports 1 Trustpilot source file;bun run scrape:redditreports 1 Reddit source file and refreshes the 3 pilot Reddit pulse queues.bun run buildpasses.bun run audit:contentstill fails by design with 10/12 gates passing and 2 blocked.bun run handoff:actionsstill fails by design with ready=false and generates the current owner/action pack.bun run staging:checkliststill fails by design with ready=false and generates the current staging import/PDP spot-check checklist.bun run staging:evidencestill fails by design with ready=false and writes evidence templates plus validation outputs.bun run verify:handoffstill fails by design with ready=false, now 8/17 checks passing after adding explicit decision/staging gates to the verifier, and writes the master verification run outputs.bun run delivery:indexpasses and writes the consolidated packet map, now 144/144 files present after adding the metaobject SVG, draft PDP asset, clinical-claim mapping, unmatched-claims, blank-decision, approval review, approval-decision, staging-handoff, executive-decision, and blocker-burndown ledgers.bun run handoff:burndowncurrently tracks 384 remaining evidence items across compliance, approval, staging import, PDP checks, and cutover lanes and fails by design until those evidence files validate.bun run handoff:decision-briefcurrently generates 5 decision rows and fails by design while export blockers remain.bun run staging:handoff-packetcurrently generates 7/7 import/reference files present and a 10-SKU PDP spot-check queue, but fails by design while handoff blockers remain.bun run source:acquisitionpasses as a planning artifact and writes the staged provider/target plan.bun run source:refresh-packetpasses with 32/32 packet-generation steps and regenerates the staged source-acquisition packet end-to-end without spending provider credits.bun run source:pricing-refspasses and writes official pricing references for the cost-plan step.bun run source:cost-scenariospasses and writes 5 no-spend cost scenarios, including a DataForSEO standard queue estimate of $0.00675 for the 9-ASIN/depth-10 pilot.bun run source:subscription-decisionpasses and writes a plain-English subscribe/spend decision packet: do not subscribe/spend yet; DataForSEO first later; Apify held.bun run source:budgetpasses as a status artifact and writes explicit max-spend/task hard-stop checks.bun run source:cost-planpasses as a status artifact and now records official DataForSEO Stage 1 pricing in the cost-plan file, with 8/12 cost checks passing; Apify cost remains blocked until a named gap and actor-specific cost exist.bun run source:approvalspasses as a status artifact, enriches local approval templates, and currently records 0/23 approval checks passing so human approval cannot bypass cap/run-limit/no-secret acknowledgements.bun run source:next-actionspasses and writes the no-spend-first operating checklist (source_acquisition_next_actions.md/csv/json).bun run source:spend-gatepasses as a status artifact and writes explicit provider spend blockers/approval-file templates.bun run apify:gapfillpasses as a no-spend Stage 2 packet and writes the Apify first-batch/hold queue plus input template.bun run apify:task-preflightpasses as a no-spend paid-actor gate and writesapify_task_preflight.md/csv/jsonwith 2/8 checks passing and 3 first-batch targets still blocked from running.bun run dataforseo:pilotpasses and writes the ASIN intake, 6-row payload, manifest, plan, and curl template.bun run dataforseo:asin-candidatespasses as a no-spend candidate report and writes ASIN-shaped candidates for Turmeric, CoQ10, Visisoft, and Starflower while keeping all 4 blocked until Amazon confirmation.bun run dataforseo:asin-web-evidencepasses as a no-spend public evidence report with 4 third-party lookup aids, 0 Amazon-confirmed exact matches, and 2 rejected not-target search leads.bun run dataforseo:unresolved-asinspasses as no-spend negative evidence from live DataForSEO product results and records 3 unresolved targets, 212 inspected candidate rows, 0 exact matches, and 3 keep-out-of-paid-payload decisions.bun run dataforseo:asin-confirmationspasses as the manual Amazon-page confirmation worksheet/report and currently marks 0/9 confirmations ready for promotion.bun run dataforseo:promote-asinspasses as a no-spend promotion gate and currently promotes 0 rows because none of the candidates are Amazon-confirmed/high-confidence with confirmation evidence.bun run dataforseo:asin-lookuppasses as a no-spend manual lookup queue and writes Amazon search URLs/actions plus candidate hints.bun run dataforseo:products-livenow writes a blocked/no-spend run report unless the explicit product-search allow flag is set, preventing future one-off shell guessing;bun run dataforseo:live-asin-evidencepasses using the real DataForSEO credentials fromC:\Users\uldvs\OneDrive\Desktop\work\pi-fresh-foundation\.env, confirms the account with20000 Ok, and writesdataforseo_live_connection.md/json;bun run dataforseo:task-preflightpasses as a paid-run gate artifact and writesdataforseo_task_preflight.md/csv/jsonwith 6/10 checks passing after support-response clearance and official docs availability were added as hard retry gates (credentials, budget, and 6-row payload ready; paid-run flag, support-response clearance, and spend gate still blocked);bun run dataforseo:reviews-livewritesdataforseo_reviews_live_pilot.md/json/csv, refuses to post unless preflight is ready plus the explicit paid-run flag is set, and records the archived50304provider failure as the current endpoint blocker;bun run dataforseo:reviews-docs-statuswritesdataforseo_reviews_docs_status.md/json/csv, fetches the official DataForSEO docs without credentials, and currently reports endpointTemporarilyUnavailable=true with 2/3 docs checks passing;bun run dataforseo:support-escalationwritesdataforseo_support_escalation.md/json/csv, a send-ready support packet with endpoint, status code, official-docs unavailable evidence, payload shape, and proof that credentials/Product search work but no secrets;bun run dataforseo:support-responsewritesdataforseo_support_response_gate.md/json/csvand the local provider-response tracker so a support reply can unblock endpoint availability without guessing;bun run dataforseo:approval-requestwritesdataforseo_stage1_approval_request.md/json/csv, a non-approval project-owner packet with the exact capped approval values to use only after DataForSEO confirms Reviews endpoint availability;bun run amazon:manual-capturewritesmanual_amazon_review_capture.md/json/csv, a no-spend fallback capture queue for 6 confirmed ASINs and a source-drop template to use if the provider endpoint remains unavailable;bun run amazon:manual-capture-validatewritesmanual_amazon_review_capture_validation.md/json/csvand currently shows 0/6 source drops valid with 0 reviews captured becausedata/sources/amazon/has no completed manual source files;bun run dataforseo:ingestpasses while waiting for raw paid-pilot JSON and writes the ingest validation outputs plus an ignored raw-response example.bun run dataforseo:reviewpasses as a status artifact and writes the review decision template/gate.- Production smoke tests return 200 for
/product/JV-D1000/export-consoleand/api/export/status;/api/export/statusnow includesreadinessAudit,intelligenceWorkqueue,handoffActionPlan,stagingChecklist,stagingEvidence,handoffVerification,deliveryIndex,sourceAcquisitionPlan,apifyGapfill,dataforseoPilot,dataforseoAsinLookup,dataforseoAsinCandidates,dataforseoAsinConfirmations,dataforseoAsinPromotion,dataforseoIngest,sourcePricingReferences,sourceCostScenarios,sourceBudgetGate,sourceCostPlan,sourceApprovalGate,sourceSpendGate,dataforseoPilotReview,sourceAcquisitionControlRun,sourceSubscriptionDecision,sourceAcquisitionNextActions,dataforseoTaskPreflight,dataforseoReviewsLivePilot,dataforseoReviewsDocsStatus,dataforseoSupportEscalation,dataforseoSupportResponseGate,dataforseoApprovalRequest,manualAmazonReviewCaptureValidation,unmatchedClaimsReview,clinicalBlankDecisionTemplate,productApprovalReview,productApprovalDecisionGate,executiveDecisionBrief,blockerBurndown,stagingHandoffPacket,dataforseoLiveConnection,dataforseoProductsLiveRun,dataforseoAsinWebEvidence,dataforseoUnresolvedAsinEvidence, andapifyTaskPreflight, reports 190 products, 375 blockers, readinessAudit.ready=false, 0 missing intelligence tasks across 0 affected SKUs, 6 action-plan lanes, 0 active P0 actions, 2 active blocked actions, 0 missing asset uploads, unmatched-claims review 185/190, blank-decision gate 0 valid / 185 pending, product approval review 190 blocked products, product approval decision gate 0 valid / 190 pending, 18 staging checklist rows with 8 blocking, 5 staging evidence gates with 5 blocking, 8/17 master verification checks passing, 144/144 delivery packet files present, source acquisition control run 32/32 steps passing, source pricing references 5 rows across 2 providers, source cost scenarios 5 rows with DataForSEO standard pilot estimate $0.00675 and Apify still held for named gaps, source subscription decision says do not subscribe/spend yet, source acquisition budget gate 7/9 checks passing with the DataForSEO Stage 1 local budget cap enabled and Apify still blocked, source cost plan 8/12 checks passing with DataForSEO Stage 1 cost ready (GBP 0.00675 estimated / GBP 1 cap buffer) and Apify cost still blocked until a named gap/actor cost exists, source approval gate 0/23 checks passing with 0/2 approvals valid, DataForSEO task preflight 6/10 checks passing (credentials loaded from the real env file, DataForSEO budget cap and 6 task rows ready; explicit paid-run flag, official docs unavailable status, support-response clearance, and spend gate still blocked), DataForSEO Reviews official docs status 2/3 checks passing with endpointTemporarilyUnavailable=true, DataForSEO support response gate 3/6 checks passing with provider response/retry path still blocked, manual Amazon capture fallback 6 targets / 6 payload rows represented, manual capture validation 0/6 source drops valid with 0 reviews captured, DataForSEO approval request 4/6 approval-prep checks ready with endpoint availability and approval validity still blocked, Apify task preflight 2/8 checks passing with 3 first-batch targets blocked until DataForSEO review names a gap and spend/token gates are ready, 4 ASIN candidates with 0 Amazon-confirmed/high-confidence candidates, 4 public web lookup aids with 0 Amazon-confirmed exact matches and 2 rejected not-target leads, unresolved ASIN evidence 3 targets / 212 DataForSEO candidate rows / 0 exact matches / 3 kept out of the paid payload, 0/9 ASIN confirmations ready (4 candidate rows and 5 manual-search rows), 0 ASIN promotions and 3 ASINs still missing after 6 live-confirmed DataForSEO product matches, source acquisition next actions open with instruction not to broaden spend: 6 live-confirmed ASINs / 6 payload rows are ready and 3 ASINs remain unresolved/outside the payload, provider spend gate 6/14 checks passing with DataForSEO/Apify spend blocked; DataForSEO ASIN scope, 6-row task payload, budget cap, and cost plan are accepted, but official docs availability, support-response clearance, valid approval, and provider endpoint readiness still block spend, DataForSEO pilot review 1/7 checks passing with decision pending, 7 Apify gap-fill targets with 3 first-batch / 4 held and 7 existing PDP probes, 9 DataForSEO pilot targets, 6 ready DataForSEO payload rows, 6 ASINs present / 3 missing, and 0 DataForSEO review tasks posted by the guarded runner, 0 raw review result files converted, the latest archived provider task creation returned50304 temporarily unavailable, anddataforseo_support_escalation.mdis ready to send to DataForSEO support without credentials.
- Product editor/list metafields are normalized as arrays before saving/export so comma-edited
filter.dietary_tag,filter.health_goals, andpdp.product_benefitscannot corrupt Matrixify list output. - Approval Queue can now update per-SKU approval lanes through
POST /api/content/products/:sku/approval; updates persist to product content, workflow events, and the workflow index. The UI exposes guarded actions for content approval, image readiness, and export readiness without auto-approving blocked compliance/image work. - Compliance gate is now explicit in the dashboard:
/api/compliance/statusreports 190 SKUs checked, 3 source-blocked pilot SKUs, 187 pending-intelligence SKUs, 0 source-backed clinical claims, and 16 candidate VoC themes that are allowed for benefit copy but not clinical claims.
- Source readiness gate is now explicit:
/api/sources/statusreports Feefo ready for the 3 pilot SKUs and competitor PDP probes ready for all 7 configured competitors.- Amazon now has 1 source file (limited competitor/category public-snippet seed, not full 190-SKU Amazon coverage), Trustpilot is 1/1 from a public-snippet source drop, Reddit is 1/1 from a public-snippet source drop, and claims library is now 1/1 as a source-backed draft library.
- Intelligence file coverage is now complete at 190/190 for all 12 required views: review-aspects, strengths/weaknesses, conversion blockers, improvements, image audit, photo brief, competitor comparison, Amazon reviews, Reddit pulse, flavour intelligence, audience profile, and claims evidence. Non-pilot files remain queue scaffolds/source-seeded drafts until quote-level extraction, assets, and human approvals are complete.
- Claims evidence extraction:
bun run extract:claimsnow scans all 190 product content records, matches authorised claim-library entries only when the SKU/name/key-ingredient supports a Vitamin D/K/C match, writesdata/intelligence/<SKU>/claims-evidence.jsonfor every product, and marks unmatched products asno_source_backed_claim_matched_for_productrather than inventing claims. - Catalogue-wide source queue extraction:
bun run scrape:amazon,bun run scrape:reddit,bun run extract:audience,bun run build:competitors,bun run extract:flavor, andbun run intelligence:catalog-queuesnow scan all 190 product records. For non-pilot products they create source-seeded or queue-scaffold intelligence files and mark them as needing SKU/category validation, visual QA, quote-level extraction, or human approval instead of pretending final evidence is complete.
Current blockers before real handoff:
- Clinical claims library/regulatory input now exists as a 4-entry source-backed draft authorised-claim library, but final compliance/content approval and product mapping still remain blocked by design.
- Full-depth Amazon source drops are still incomplete, but the source-drop gate now has one real limited Amazon public-snippet seed; Trustpilot and Reddit also have limited public-snippet source drops; the claims library has 4 authorised-claim draft entries; remaining scripts still avoid synthetic evidence.
- Product image filenames are assigned for the full catalogue, and all required asset filenames now exist in
C:\Users\uldvs\OneDrive\Desktop\jv-assets(16 metaobject SVGs plus 570 draft PDP PNGs). The PDP PNGs are deliberately review-marked draft assets generated from dashboard evidence, so image approval remains blocked until human review/final creative replacement. - Human approval is still pending for generated product/metaobject content.
- Lewis/Euan staging import and PDP spot-checks have not happened yet.
Source-of-truth artefacts
| Thing | Location |
|---|---|
| Content population template (from Lewis/Euan, 15 May) | C:\Users\uldvs\Downloads\Just Vitamins - Content Population Templates (1).xlsx |
| Loom 1  Metaobjects (Euan) | https://www.loom.com/share/c20a24cdbdd84f6a80450dbbe2f37112 |
| Loom 2  Products & Collections (Euan) | https://www.loom.com/share/47efa12a45e64cfdbe30840037edaffa |
| Existing dashboard | C:\Users\uldvs\OneDrive\Desktop\Work 2.0\jv-dashboard\ |
| Existing migration scripts | C:\Users\uldvs\OneDrive\Desktop\Work 2.0\JV Migration to shopify\ |
| Image assets pipeline | C:\Users\uldvs\OneDrive\Desktop\jv-assets\ |
| Umar's Sublingual B12 worked example | https://docs.google.com/document/d/1lknZGQpAzIO3DW4Yn5piahu5OS_h1K7kwB3VjoGBk3Q |
| Umar's brand/positioning doc | https://docs.google.com/document/d/1p7kXT_JmM9s8VCK49IZZDo-PHudf_GYjim5XOjUntjg |
Umar's competitor list (WhatsApp, 13 Mar 2026)
- Feel  wearefeel.com
- Ancient & Brave  ancientandbrave.earth
- Heights  heights.com
- Wild Nutrition  wildnutrition.com
- Dirtea  dirteaworld.com
- Ethical Nutrition  ethical-nutrition.com (also PDP photography reference)
- Puro Labs  purolabs.com (also PDP styling reference)
Direct quotes from Umar (use as guiding principles)
- "Prioritize the research (product, competitor, Reddit, Amazon reviews) but can begin with our Feefo reviews  everything else stems from the research" (13 Mar)
- "Detailed reviews seems to be missing"  wants competitor coverage to be deep, not just JV (1 May)
- "Customer language from our original authentic reviews"  reviewable provenance for compliance (1 May)
- "Source is obviously our Feefo reviews"  Feefo = canonical first-party (1 May)
- Asked about RAG to connect LLMs to Feefo/DB and Predictive AI for shipping analysis (2 May)
- 6 May email  collagen NPD market intelligence brief is top priority, pause other JV work
Matrixify template schema (from the XLSX)
Metaobject sheets (long format: one row per Handle Ã Field Ã Value)
| Definition handle | Fields | Source data |
|---|---|---|
dietary_tag |
name, icon (svg filename) |
Tag taxonomy from existing products |
health_goals |
name, icon |
Tag taxonomy |
key_ingredients |
name, description, image (svg) |
Existing PDP ingredient panel + AI-rewritten description |
benefits |
name, description, icon |
Synthesised from strengths-weaknesses.json |
clinically_shown_to |
name_internal, heading, description, stat_1_value (num), stat_1_name, stat_2_value, stat_2_name, stat_3_value, stat_3_name, disclaimer |
Source-backed only  compliance gate. Pull from claims-evidence.json |
promo_card |
name, title (quote), subtitle (person+location), button_text, button_link, background_colour (hex), background_image |
Hand-picked testimonial from _raw_reviews.json |
Products sheet (wide format, one row per variant SKU; product-level fields filled only on first variant row)
Column order:
Handle
Metafield: filter.dietary_tag [list.metaobject_reference] e.g. "dietary_tag.vegan, dietary_tag.vegetarian"
Metafield: filter.health_goals [list.metaobject_reference]
Metafield: pdp.key_ingredients [metaobject_reference]
Metafield: pdp.benefits [metaobject_reference]
Metafield: pdp.clinically_shown_to [metaobject_reference]
Metafield: breadcrumb.primary_collection [collection_reference] collection handle
Metafield: filter.strength [single_line_text] e.g. "High Strength"
Metafield: pdp.who_its_for [single_line_text]
Metafield: pdp.product_benefits [list.single_line_text] JSON array
Metafield: pdp.key_features [multi_line_text] \n-separated
Metafield: pdp.results [file_reference] image filename
Metafield: pdp.results_mobile [file_reference]
Metafield: pdp.how_we_compare [file_reference]
Metafield: faq.heading_one / two / three [single_line_text]
Metafield: faq.answer_one / two / three [multi_line_text]
Variant SKU
Variant Metafield: pdp.tag [single_line_text] e.g. "Most Popular"
Variant Metafield: pdp.colour [color] hex
Variant Metafield: pdp.price_per [single_line_text] e.g. "12p per capsule"
Variant Metafield: pdp.strapline [single_line_text] only on larger variant
Smart Collections sheet
Two cols: Handle, Metafield: custom.promo_card [metaobject_reference] → links each collection to its promo card.
Critical Matrixify rules
- All referenced icons + images must be uploaded to Shopify Files BEFORE the CSV import (Matrixify looks up by filename).
- List metaobject refs: comma-separated
definition.handlepairs. - List text: valid JSON array.
- Multi-variant: 1 handle, N rows; only Row 1 has product-level metafields.
Dashboard audit  EXISTS vs MISSING
EXISTS (don't rebuild)
- App shell: Vue 3 + Vite + Vue Router (
src/main.js). Layout =TopBar+Sidebar+ProductHeader+<router-view>. - API (
api/server.ts, Bun, port 3456):GET /api/products catalog +hasIntelligenceflagGET /api/reviews/:sku raw reviewsGET /api/intelligence/:sku/:view auto-merges main + supporting JSONs viaenrichWithSupporting()(configurable map inSUPPORTING_VIEWS)
- Views (7): CatalogOverview, ReviewInsights, ConversionDriver, StrengthsWeaknesses, ProductImprovements, ImageAudit, ConversionBlockers
- Primitives: SentimentBadge, JourneyBadge, ClassificationBadge, DifficultyBadge, DotRating, SupportingReviews
- Composable:
useSupporting.js generic loader + expand/collapse + supporting-reviews drill. Any new aspect-style view plugs straight in. - Data convention  every intel file follows:
{ "sku", "name", "generatedAt", "generatedBy", "n", "<items>": [{ "rank", ... }] }- matching
<view>-supporting.jsonmappingrank → reviewIndices.
- matching
- Intelligence files per SKU:
_raw_reviews.json,review-aspects(+supporting).json,strengths-weaknesses(+supporting).json,conversion-blockers(+supporting).json,improvements(+supporting).json,image-audit.json,photo-brief.json - Pilot SKUs:
JV-D1000,JV-D4000,JV-TURMERIC500 - Scripts:
scripts/tag-reviews.ts(Gemini 2.5 Flash, 40/batch Ã 4 concurrent → emits<view>-supporting.json) - Migration scripts (in
JV Migration to shopify/):build_products_csv_v4.py(29-col Matrixify; does NOT yet cover the 19 new template metafields)
MISSING
Data sources: Amazon (JV), Amazon (7 competitors), Trustpilot, Reddit, competitor PDP crawl.
Intelligence files: flavor-intelligence.json (collagen NPD), competitor-comparison.json, audience-profile.json (feeds who_its_for), claims-evidence.json (compliance trail).
Views: CompetitorIntel, RedditPulse, AmazonReviews, FlavorIntelligence, MetaobjectEditor (Ãâ€â€Â6 types), ProductContentEditor (19 fields), ImagePipeline, ExportConsole, ApprovalQueue, ComplianceTrail.
Workflow: per-SKU status flags (stores/ empty  add Pinia), per-field review log, diff view on regenerate, field-level source-citation panel (extend existing review-level SupportingReviews).
Export emitters: build_metaobjects_csv.py (6 long-format sheets), build_products_csv_v5.py (+ 19 new metafields), build_smart_collections_csv.py, validate_assets_manifest.py.
Estimate: ~35–40% built. Architecture is clean  remaining work = data ingestion + new editor surfaces + export emitters. No re-architecture needed.
Reuse strategy
- Extend, don't reinvent the schema. Every new intel JSON follows existing convention → just add a line to
SUPPORTING_VIEWSinapi/server.tsand it works. - Clone existing views. CompetitorIntel / RedditPulse / FlavorIntelligence are ~70-line clones of
ReviewInsights.vueusinguseSupporting('<new-view>'). - Net-new view surfaces (need real design): MetaobjectEditor (Ãâ€â€Â6 tabs), ProductContentEditor (19 fields), ApprovalQueue, ExportConsole. ~5 net-new components.
- State: add Pinia â€â€ÂÂ
useProductsStore,useApprovalStore,useEditsStore. - New ingest scripts (under
scripts/):scrape-amazon.ts,scrape-trustpilot.ts,scrape-reddit.ts,scrape-competitor-pdps.ts,extract-claims.ts,extract-flavor-signal.ts,extract-audience.ts,build-competitor-comparison.ts. - New emitters (under
JV Migration to shopify/): see Export emitters above.
Build phases
Phase 0  call with Umar (scheduled 19 May 2026; follow-up status needs live confirmation)
- Confirm outcome/time from WAHA or calendar before claiming the meeting happened; the last recorded evidence only said it was scheduled for 19 May 2026 via WhatsApp.
- Walk dashboard demo
- Lock: competitor scope, SKU rollout order, clinical claims source, image production lane, icon set, RAG over Feefo (Umar asked 2 May), predictive shipping AI (defer), Reviews.io decision (Lewis blocked), Klaviyo vs Attentive, social warming
- Output: shared mini-roadmap to keep board informed
Phase 1  Collagen NPD market intelligence brief (Umar's top priority, blocks NPD)
- Inputs: Amazon + Trustpilot + Reddit on competitor collagens
- Outputs:
flavor-intelligence.json(chalkiness, sweetness, aftertaste, mixability sentiment)competitor-comparison.json(price, format, dose, claims, white space)audience-profile.json(skin/joint/hair/gut motivations)- PDF brief + dashboard view
- Recommend final 3–4 flavors + differentiation angle + subscription hook
Phase 2  Scale intel pipeline to full catalogue
- Extend Feefo ingest to all SKUs
- Add Amazon ingest (JV products)
- Re-run
tag-reviews.tsacross full set - Generate review-aspects / strengths / blockers / improvements / image-audit / photo-brief per SKU
Phase 3  New intelligence + competitor coverage
- Build
audience-profile.json,claims-evidence.jsonper SKU - Scrape & build competitor coverage (7 brands Ã Amazon + Trustpilot + PDPs)
- Build
competitor-comparison.jsonper JV SKU - New views: CompetitorIntel, RedditPulse, AmazonReviews, FlavorIntelligence
Phase 4  Metaobject library production
- Inventory pass on existing JV catalogue → unique tags / goals / ingredients / benefits / claim blocks / collections needing promo cards
- Icon production (commission or generate; upload to Shopify Files)
- AI copywriting pass + human QA
- Build
MetaobjectEditorview (6 tabs) - Build
build_metaobjects_csv.pyemitter
Phase 5  Product content production
- AI generation pass for:
who_its_for,product_benefits,key_features, FAQs,strapline using existing intel files - Image production for
results/results_mobile/how_we_compare(usingphoto-brief.jsonas input) - Variant maths:
price_per,tag,colour,strapline - Build
ProductContentEditorview - Build
build_products_csv_v5.pyemitter
Phase 6  Smart Collections + Approval + Export
- Collection → promo_card mapping
ApprovalQueueview (Umar reviews + signs off per SKU/field)ComplianceTrailview (citation chain for clinical claims)ImagePipelineview (production status)ExportConsole preview CSVs, validate refs, ship to Lewis/Euanvalidate_assets_manifest.py every referenced filename exists in Shopify Files
Phase 7  Delivery
- Hand-off CSV batch to Lewis/Euan for staging
- Spot-check 5–10 PDPs in staging
- Iterate on feedback
- Cut over to production
Open dependencies (require Umar/external input)
- Clinical claims library / regulatory contact  non-negotiable for
clinically_shown_tocontent - Icon set  JV brand icons or commission?
- Image production capacity  designer or generative pipeline at scale
- Final SKU count in scope  drives all timeline estimates
- Reviews platform decision  Reviews.io (Lewis blocked on this)
- Email platform  Klaviyo vs Attentive (Lewis sending rec)
- Trustpilot remap v3  Azreen's lane; flagged SKUs (Turmeric etc.) still mismatching
- Recharge GMV/forecast inputs  Umar's lane; Wed call with Hugh (Recharge)
Stretch / parallel asks from Umar
- RAG over Feefo + JV DB  spec it, plug into dashboard AI generation
- Predictive AI for shipping  net postage cost vs income, retention  defer to post-migration
- Subscribe & Save  possibly tiered: 10% commodity / 20–30% premium NPD (raised 16 Mar)
- Social media warming pre-rebrand (raised 15 May)
- Trustpilot Review Mapping v3 with Azreen (Apr)  still open
Quickstart for picking this up in a new session
- Read this file first (
CONTENT_POPULATION_PLAN.md) - Open the template:
C:\Users\uldvs\Downloads\Just Vitamins - Content Population Templates (1).xlsx - Confirm what's been added since last session:
git log,bun run handoff:daily-status, or checkdata/intelligence/for current SKU coverage. The older 19 May 2026 note was written when only the pilot set was established; current generated coverage is catalogue-wide but still contains queue/source-seeded drafts.rn4. WAHA chat with Umar: sessionomair_personal, chat id447835840569@c.us, group120363425912974765@g.us(JustVitamins x Quikcue)  seecabinet4u/waha-export/pull_messages.pyfor the read pattern - Last meeting status evidence: 19 May 2026 - meeting scheduled via WhatsApp, time being confirmed. On 20 May 2026, verify WAHA/live calendar before treating the call as completed
Source acquisition staging - DataForSEO first, Apify selective
Decision recorded 19 May 2026: use DataForSEO first for the paid review-source pilot because it gives a controlled Amazon Reviews task endpoint, predictable per-task payloads, and a hard stage gate before scaling. Use Apify selectively only after the DataForSEO pilot exposes gaps that need browser-style scraping, competitor PDP capture, Trustpilot actor coverage, or non-Amazon enrichment.
Stage 1 DataForSEO pilot packet
-
Command:
bun run source:acquisition,bun run dataforseo:pilot, optionallyJV_SOURCE_ALLOW_PAID=dataforseo-product-search bun run dataforseo:products-livefor a fresh paid product-search refresh, thenbun run dataforseo:live-asin-evidenceto refresh live account/product-result evidence from DataForSEO without printing credentials. Usebun run dataforseo:reviews-liveonly after local approval/spend gates are ready; it is the repeatable Reviews pilot runner and records provider unavailability without placing failed task-post JSON into the ingest queue. If the endpoint still returns 50304, sendcontent_population_exports/dataforseo_support_escalation.md. -
No credits are spent by the packet generator; it only creates intake and payload files.
-
Capped first pass: 9 JV priority SKUs, recommended depth 10 reviews per ASIN.
-
ASIN intake file:
data/sources/dataforseo/asin-map.csv. -
Paid-call payload:
content_population_exports/dataforseo_amazon_reviews_task_payload.json(currently 6 rows from live-confirmed ASINs; 3 Stage 1 targets remain unresolved). -
Credential-safe call template:
content_population_exports/dataforseo_amazon_reviews_curl_template.sh. -
Dashboard visibility: Export Console shows ready payload rows, missing ASINs, depth cap, target statuses, live DataForSEO connection status, confirmed ASINs, and review-endpoint blocker from
/api/export/status. -
ASIN lookup prep:
bun run dataforseo:asin-lookupwritesdataforseo_asin_lookup_queue.md/csv/jsonwith Amazon search URLs and manual confirmation actions. This is still a no-spend step and exists to filldata/sources/dataforseo/asin-map.csvbefore creating any paid task payload. -
ASIN candidate log:
bun run dataforseo:asin-candidateswritesdataforseo_asin_candidate_report.md/csv/jsonfromdata/sources/dataforseo/asin-candidates.csv. Candidate ASINs found from third-party evidence are shown in the lookup queue, but they do not unlock payload rows or provider spend until the Amazon product page is opened, exact Just Vitamins product/pack match is confirmed, and the ASIN is manually copied intoasin-map.csv. -
ASIN public web evidence:
bun run dataforseo:asin-web-evidencewritesdataforseo_asin_web_evidence.md/csv/jsonfromdata/sources/dataforseo/asin-web-evidence.csv. It records third-party ASIN hints and rejected not-target search leads so the team can avoid repeat checks while still keeping all non-Amazon-confirmed evidence out ofasin-map.csvand paid task payloads. -
Amazon-page ASIN confirmation:
bun run dataforseo:asin-confirmationswritesdataforseo_asin_confirmation_report.md/csv/jsonand maintainsdata/sources/dataforseo/asin-confirmations.csv. This is the reviewer worksheet for visible Amazon title, brand match, target-product match, pack-size match, reviewer, timestamp, and notes. Promotion remains blocked unless this report marks a candidateReadyForPromotion=yes. -
Confirmed ASIN promotion:
bun run dataforseo:promote-asinswritesdataforseo_asin_promotion_report.md/csv/jsonand copies only candidates withMatchStatus=amazon_confirmed_exact_match,Confidence=high, and a canonicalhttps://www.amazon.co.uk/dp/ASINURL intodata/sources/dataforseo/asin-map.csv. Existing ASIN values are never overwritten. This makes the manual confirmation step repeatable without letting low/medium-confidence candidates create paid task rows. -
Apify gap-fill prep:
bun run apify:gapfillwritesapify_gapfill_runbook.md,apify_gapfill_targets.csv/json, andapify_competitor_pdp_input_template.json. It keeps Apify behind the DataForSEO pilot review, limits any first run to 3 competitor domains, and holds the remaining 4 domains until dataset quality/cost is inspected.bun run apify:task-preflightwritesapify_task_preflight.md/csv/jsonas the final no-spend gate before any paid actor run; it requires APIFY_TOKEN,JV_SOURCE_ALLOW_PAID=apify-stage2, budget/spend gates, and a DataForSEO pilot review decision ofrun_apify_gapfillwith a named gap. -
Provider subscription decision:
bun run source:subscription-decisionwritessource_subscription_decision.md/csv/json, a plain-English decision packet that currently says not to subscribe/spend yet, to use DataForSEO first once ASINs and gates are ready, and to keep Apify held until a named post-pilot gap exists. -
Provider pricing references:
bun run source:pricing-refswritessource_acquisition_pricing_references.md/csv/jsonfrom official DataForSEO and Apify pricing references so cost planning starts from sourced pricing, not guesses. It does not unlock spend and still requires checking account billing pages before running providers. -
Provider cost scenarios:
bun run source:cost-scenarioswritessource_acquisition_cost_scenarios.md/csv/jsonfrom the pricing references and current Stage 1/2 caps. It estimates the DataForSEO standard queue 9-ASIN/depth-10 pilot at $0.00675 as a no-spend planning reference, keeps priority queue as reference-only, and keeps Apify as a held Stage 2 estimate until a named gap exists. -
Provider cost plan:
bun run source:cost-planwritessource_acquisition_cost_plan.md/csv/jsonplusdata/sources/budgets/source-acquisition-cost-plan.json. It requires current provider pricing source/timestamp, unit cost or expected actor-run cost, capped task/target assumptions, estimated total, and proof the estimate fits the max-spend budget before approvals or spend can unlock. -
Provider approval gate:
bun run source:approvalswritessource_acquisition_approval_gate.md/csv/jsonand enriches local approval templates indata/sources/approvals/. It requires approver, timestamp, matching budget cap, target/run/depth caps, hard-stop acknowledgement, no-credential-storage acknowledgement, and for Apify a named gap before approval can become valid. -
Provider spend gate:
bun run source:spend-gatewritessource_acquisition_spend_gate.md/csv/jsonand reads the approval gate rather than a bare approved flag. It blocks DataForSEO until the ASIN scope is explicit, the capped payload is ready, the budget cap is recorded, the cost plan is accepted, and valid approval is ready, and blocks Apify until DataForSEO output has been inspected, a named gap exists, caps are preserved, budget cap is valid, and approval is valid. -
Provider budget gate:
bun run source:budgetwritessource_acquisition_budget_gate.md/csv/jsonand creates the editable cap filedata/sources/budgets/source-acquisition-budget.json. It blocks provider spend until a max spend is enabled for the relevant lane, the task/actor caps stay within the staged plan, and the hard-stop flags remain true. This is separate from approvals so a human approval cannot accidentally bypass the credit cap. -
DataForSEO pilot review gate:
bun run dataforseo:reviewwritesdataforseo_pilot_review.md/csv/jsonand the decision templatedata/sources/reviews/dataforseo-stage1-review.json. It forces the review of raw output quality, evidence fields, cost, and the explicit scale/Apify/stop decision before any expansion. -
Source acquisition control run:
bun run source:refresh-packetregenerates the staged source packet (source:acquisition, DataForSEO prep/unresolved-ASIN evidence/official reviews docs status/support response/approval request/manual Amazon fallback/manual capture validation/ingest/review, Apify gap-fill prep/preflight, spend gate) and writessource_acquisition_control_run.md/csv/json. Runbun run delivery:indexafter it to refresh the overall handoff packet index. This proves source-packet freshness without implying provider spend or handoff readiness. -
Manual Amazon capture fallback:
bun run amazon:manual-capturewritesmanual_amazon_review_capture.md/csv/jsonanddata/sources/_templates/amazon-manual-review-capture-template.json. It gives a no-spend path to collect Amazon reviews for the 6 confirmed ASINs while DataForSEO Reviews remains blocked; completed JSON source drops must be saved intodata/sources/amazon/, validated first withbun run amazon:manual-capture-validate, then validated withbun run validate:sources. -
Manual Amazon capture completion gate:
bun run amazon:manual-capture-validatewritesmanual_amazon_review_capture_validation.md/csv/jsonand checks the queuedSourceDropPathfiles underdata/sources/amazon/for matching SKU/ASIN/product URL plus non-empty review text, 1-5 rating, and URL. It currently reports 0/6 files present/valid and 0 reviews captured, proving the fallback is queued but not completed source evidence. -
Support response gate:
bun run dataforseo:support-responsewritesdataforseo_support_response_gate.md/csv/jsonand createsdata/sources/provider-responses/dataforseo-reviews-endpoint-response.json. Fill that tracker only after DataForSEO replies; until it records endpoint availability or a replacement endpoint plus retry-safe confirmation, the Reviews pilot remains blocked. This same support-response clearance is now a hard prerequisite in bothbun run dataforseo:task-preflightandbun run source:spend-gate, so approval alone cannot trigger a retry while the 50304 path is unresolved. -
Official DataForSEO docs status gate:
bun run dataforseo:reviews-docs-statuswritesdataforseo_reviews_docs_status.md/csv/jsonby fetching the official Amazon Reviews Task POST documentation without credentials or paid calls. It currently detects the official temporary-unavailable note, so the docs gate is now a hard prerequisite in bothbun run dataforseo:task-preflightandbun run source:spend-gate, reinforcing the same no-retry/no-spend instruction as the archived 50304 provider response. -
Approval request packet:
bun run dataforseo:approval-requestwritesdataforseo_stage1_approval_request.md/csv/json. It pre-fills the exact capped Stage 1 approval values without marking anything approved; approval still requires the project owner to filldata/sources/approvals/dataforseo-stage1-approval.json, provider endpoint availability, and a passing approval/spend gate. -
Unresolved-ASIN evidence:
bun run dataforseo:unresolved-asinswritesdataforseo_unresolved_asin_evidence.md/csv/jsonfrom the saved live DataForSEO Amazon Products results. It is a no-spend anti-guessing report: unresolved SKUs stay out of the paid Reviews payload unless exact match evidence appears. -
Next-action control list:
bun run source:next-actionswritessource_acquisition_next_actions.md/csv/json. It turns the DataForSEO-vs-Apify decision into an ordered operating list: first keep the 6 confirmed ASINs as the capped pilot scope while continuing no-spend lookup for the 3 unresolved ASINs, then record explicit Stage 1 spend approval, then run exactly one paid pilot after the DataForSEO Reviews endpoint is available and review raw quality/cost before any scale-up or Apify actor run. Export Console shows this as the current provider-spend instruction from/api/export/status. -
Post-pilot normalization:
bun run dataforseo:ingestreads DataForSEO advanced Amazon Reviews task result JSON fromdata/sources/dataforseo/raw/, converts review items into the existingdata/sources/amazon/source-drop schema, and writesdataforseo_ingest_validation.md/csv/json. This keeps the paid-provider output on the same validation path as manual Amazon source drops (bun run validate:sources) instead of creating a parallel evidence standard.
Spend guardrail
Do not run broad catalogue scraping yet. Use the 6 confirmed ASINs as the capped pilot payload once the budget/spend gates are intentionally opened and the DataForSEO Reviews endpoint is available; keep the 3 unresolved ASINs out of the payload unless exact product evidence is found. Then inspect output quality/cost and decide whether to:
- scale DataForSEO to the next JV SKU batch,
- run Apify only for named competitor/Trustpilot/PDP gaps, or
- stop and adjust the source map before any further spend.