Jessar Website — Progress

RevShift Media × Jessar Industries · Shopify Migration & Brand Elevation
Last updated: 2026-08-11
Session: 59 (2026-08-12) — COLLECTION IMAGERY: all 58 sub-collection banners now live (3 corrections + 2 Xtricity-logo re-rolls applied) · 58 single-product “icon” packshots built for the collection cards, QA’d and staged at /collection_icons_58 — awaiting approval, nothing pushed
Prior session: 56 (2026-08-10) — 58 NEW SUB-COLLECTIONS: 13 under Electrical, 45 for Bulbs & Pendants — tag-driven views under parents that keep every product, each with a description, a 3-paragraph SEO blurb and interlinks, wired into the sub_collections tile families
Current phase
🟢 GO-LIVE RUNWAY (updated 2026-08-14). Corrections R1–R3 fully closed (545 instructions); R4 site-side done same-day — only its 12 re-rolls remain, with the imagery chat. The French store is live end-to-end: the Translate & Adapt run completed behind a 10,951-field pre-lock, then hand-finished (brands, DEL terminology, collection names, metaobjects, Bulbs 101, policies). Specs program step 1 live (certification logos + three new spec fields, populated where data exists); phases 2–4 gated on seven asks to Jessar. Lighting brand is Xtricity, validated against their own packaging. Remaining before cutover: R4 re-rolls · FR/spec audits · banners for the 58 new collections · §8.9 runway. Waiting on Jessar: per-item spec sheets · fixture item dimensions · certification data (1,368 products) · appliance wattage · type vocabulary · missing-product data (7-99592, 4 fans, 16 bulbs) · the VerAroma spelling split · the touch-lamp category call.
Today's focus
(2026-08-14) THE FRENCH FINISH + SPECS PROGRAM + FOURTH CORRECTIONS — the densest day of the engagement. ① French completed hand-to-hand after the T&A run: post-run audit (18,947 metafields; 0 structural breaks, all 10,951 locks held) → 8 real bugs fixed → LED→DEL store-wide (428 fields, English verified untouched) → 42 collection names + 19 nav labels corrected (Power Bars read “Barres énergétiques” = protein bars; the Limpus brand read “Mou”) → 1,531 invented product-type codes reset → all 13 brand/gallery metaobjects hand-written in French → Bulbs 101 refactored to locale files carrying Jessar's own French (DEL / AFC / culot, transcribed from their own artwork) → Terms of Service (88 blocks) + Contact policy translated, with a Bill 96 lawyer-review note on file. ② Specs program: certification logos LIVE (the cETLus mark lifted from Jessar's own box art after Intertek takedowns; marks normalized to equal optical mass; claims and ICES-005 correctly stay text) and three new fields — Type, Cord length, Bulb requirement — built, wired fail-closed, and populated where their old site held the data (Type 351 · Bulb 284 · Cord 119 active), French written at populate time. The 5-90147 dimension question is answered: it's the colour box from their own master file. ③ Fourth corrections, same-day: 20-SKU checklist deployed, all 10 lifestyle operations applied per Sean's per-position calls (11 deletions including a pixel-dupe the sheet never mentioned; 7-99635's two-pieces image restored full-res from Files — no re-shoot needed), 7-99049 title + What's-Included, 3 collection moves (the frother and mug-warmer had each other's tags). Only the 12 product-shot re-rolls remain, with the imagery chat. ④ Lighting brand = Xtricity — validated against their own packaging (“Thank you for selecting Xtricity…” printed on their own pendant box), 257 products flipped with vendor + brand block + sub-brand moving together, then 5 touch lamps reverted on their correction. All 12 brand-profile Explore links now carry their collection reference for Sean's editor rebind. ⑤ 24 new tags re-applied (the 30-day auto-expiry is intended — pre-launch re-add was right), the serveware family grouped 742→387→389, and the New-collection banner recopied in EN + FR.
Prior focus (08-13 PM · hero)
(2026-08-13 PM) HOMEPAGE HERO SLIDE 5 — LIGHTING — LIVE on both breakpoints. The slideshow ran four slides (kitchen · appliances · serveware · cast iron); Sean asked for a fifth on Lighting, focused on pendants. Six real SKUs from Pendant & Suspension — Waterloo rattan · Kampala seagrass · Beverly black + white · Steinway smoked glass · black-and-gold cage — each rendered from its own packshot on the same warm plaster the other four use, left of frame kept clear for the headline. Key finding: the generator supports 21:9, and at 2k that lands natively on 3168×1344 — the exact pixel size of the live heroes (and 9:16 at 2k lands on 1536×2752, the exact mobile size), so neither frame needed a crop or a resample. Five candidates deployed to lighting_hero_v1 with a headline-overlay toggle; Sean picked C over A ("too much blank space"). C came off a 16:9 roll so it did need a crop — the version on the page was bottom-anchored (5px of air above the seagrass, 271px of dead wall below), so the window was re-centred on the measured shade extents for 141px top and bottom. Also switched the slide from scheme-16 to scheme-9: scheme-16 renders the headline in cream over a dark radial pocket, but the mock Sean approved showed ink text — and his own slide-4 rule is that very pale banners take ink-text/no-pocket because the darkening "reads as a stain". Live as Lighting → "Made to hang." → Browse Lighting → /collections/lighting (751 products). Pull-before-push caught real parallel-chat drift — the live theme held 9 added partner logos, Rona removed and rewritten New-Arrivals copy that the repo did not; all edits were made on live truth and pushed --only templates/index.json. Verified by reading the asset back from the theme and pixel-checking the served image at dHash hamming 0 against the upload; the storefront visual check stays Sean's, as the password gate is his to cross. Housekeeping: the A frame is uploaded but now unreferenced — orphaned in Files, safe to delete whenever.
Prior focus (08-13 PM · nav)
(2026-08-13 PM) ELECTRICAL MEGA MENU — 3 levels, matching the sub-collections already built. Jessar's electrical (1).xlsx restructures Electrical from 6 flat links to 5 groups with 13 children, and the 13 level-3 names map one-to-one onto the sub-collections built 08-10 — so this was navigation only, no rebuild. Electrical was the last flat department; Kitchen & Dining, Storage & Home and Lighting already ran three levels and the theme renders a third, so the depth was proven before building. cords-adapters re-pointed from type-driven (43 products) to the tag union of its four children (52 active) and retitled Cords, Adapters & Power Bars — the merge that absorbs the former Power Bars & Surge top-level link (collection retained, just unlinked). Only two products left that collection and both sit correctly under Smart Switches, where the sheet files them. switches-receptacles retitled Receptacles, Switches & Dimmers. 19/19 menu-linked collections verified to exist and be published. Two gotchas banked: menuUpdate replaces the whole tree (full nav backup taken), and it rejects the entire write if one link fails — a single COLLECTION-type item lost its resourceId in my payload and blocked everything until restored. Also: 14 SKUs given the new tag — 5 needed it, 9 already had it, 14/14 verified. Still open: 4 fan SKUs on the sheet (4-80320 4-80322 4-80327 4-80303) do not exist in the store — the exact four Jessar was asked about on 08-10; listing them answers yes, but no data was ever supplied, so Fans shows 2 products. And 4 live SKUs are absent from the sheet — held in place pending Michael, since dropping a live product out of the nav on an inference is the riskier error. Plan page: electrical_menu_v2.
Prior focus (08-13)
(2026-08-13) FR TRANSLATION PRE-FLIGHT — 10,951 metafields locked before Translate & Adapt runs. The instruction was to disable Storefront API access on the risky metafields so they couldn't be translated. Tested it — that mechanism does not work. internal_clas_1 was already storefront NONE and still translatable; flipping product_line to NONE left it translatable; msrp_cad is exempt only because it is a number. The gate is the field TYPE, not access — and no translatable flag exists on MetafieldDefinition in API 2025-01, -07 or -10. Turning access off would have cost Storefront-API reads and bought zero protection, so product_line was reverted. Also corrected an earlier wrong claim: metafields ARE translatable — they are their own resource type and simply don't appear in the product's translatableContent. What works is pre-seeding the French value identical to the English one, because auto-translate only fills empty translations. Locked tier 1 = 9,479 (upc · sub_brand · product_line · color_finish · setup_guide · bulb_guide · base_type · bulb_shape · certifications · internal classes) and tier 2 = 1,472 (wattage · voltage · frequency · lumens · colour temperature · beam angle · master carton). 0 errors; 600/600 sampled instances re-read from Shopify confirm the lock, and the authored prose — romance, bullets, care, meta beam, materials, capacity — confirmed still open so it translates. Two keys were outright dangerous: color_finish is functional (the colour word maps to a swatch hex, so “Black”→“Noir” degrades every French swatch to a text chip) and setup_guide/bulb_guide hold URLs, so a translated value is a dead link on both new pages. Left deliberately translatable: life_hours, dimensions, weight_imperial, heat_resistance — with a retroactive lock ready if any come back mangled. Fixed a defect the audit surfaced: 4 products carried the same colour twice, once per language (['Amber','Ambre']) — deduped and re-locked. Open decision: exclude handles from the run — Bulbs 101 hardcodes 20 absolute collection links and translated handles add a redirect hop to each.
Prior focus (08-13 AM)
(2026-08-13) ALL THREE CORRECTIONS ROUNDS CLOSED ON OUR SIDE. One de-duplicated master checklist across all three Jessar files (Kitchen & Dining, Second Set, Third Set): 545 instructions addressed to us, categorised and each checked against what the store actually serves. Result: 432 done and verified live · 113 product-shot re-rolls carried by the imagery thread · 0 open. Jessar's own “Corrections for Jessar to Complete” column (92 items — Create lifestyle · Product with wrong colour · Is not on website, send to Sean) is their to-do list and is excluded from our count. Live at jessar.revshiftmedia.com/jessar_corrections_checklist_v1. Two findings worth keeping: 7-99819 was never asked to be 280 ml — that instruction sits on 7-99818's row and 7-99819 is a bare row beneath it, so a naive carry-down over-applies it; and 7-99592 genuinely does not exist in the store or in any supplied material — it appears once, as “Missing from site. Need to add”, with no content, images, UPC or deck, so it joins the 4 missing fan SKUs and 16 missing bulb/pendant SKUs as a Jessar data ask. Also flagged for Jessar: 7-99832 carries capacity “78 L”, near-certainly a decimal slip for 0.78 L on a saucepan.
Prior focus (08-11)
(2026-08-11) THIRD CORRECTIONS ROUND — everything not needing new imagery is DONE. Badges: 32 new + 14 Best Seller applied, verified 46/46; render path confirmed end-to-end. Data: 7 vendors → JS Gourmet; the capacity instruction turned out to be a mirror-swap between 7-99821 and 7-99818, baked into title/description/romance/bullets/metafield — all 10 fields corrected; 7-99648 swatch root-caused (missing color_finish); 6-00904 unpublished + archived. Ordering: all 6 jobs applied and contiguity-verified. Images: 5 lifestyles added (closing Q29), 8 duplicates removed, 11 hover fixes. Lesson banked: Jessar's sheets say “replace” when they mean “wrong-aspect duplicate” — all 8 supplied mill files were already live, so the right action was deletion with nothing uploaded; and hover filenames read _lifestyle_ but were feature cards with baked-in text. Perceptual dHash + crop-test, and a visual check, are now the default. Retailers: 9 logos sourced and uploaded; discovered five retailer surfaces, not three — all now agree at 15–16 with Rona removed per Jessar. Theme: promo-card hover bug fixed (my own 08-05 scheme-16 exemption misfiring on a card that sits on a photo).
Prior focus
(2026-08-05) LAUNCH-QA RUNWAY SET + TOASTER ROUND 2 LIVE. Sean triaged the open list ("most done or not important — keep in memory"); agreed sequence: FR run 08-06 → spec/metafield audit → the QA checklist below, top-down. Shipped: hover-invisible button text root-caused site-wide (Hyper's white hover sweep paints over bare labels — fixed by wrapping labels in .btn__text) · "Become a Partner" rename on PDP · Inquire-Now #apply jump fixed · toaster round 2 (Michael's logo'd re-renders, 16 overlay cards rebuilt) · homepage slide-3 matched to its serveware image · Xtricity photo round 2 (79 replacements) · full live-theme cold backup (537/537 assets).
Prior focus
(2026-08-03 → 04) MICHAEL'S CORRECTION ROUNDS EXECUTED + FRESH FAMILY AUDIT. ① Corrections round 2 (K&D update + new Storage & Home) parsed, diffed vs round 1 (69 new/changed K&D asks + 87 S&H): 17 products archived · 87 grouping blocks applied across the collection estate (atomic-unit reorder engine, every group contiguity-verified; 7-99388→after-7-99618 added on Michael's follow-up) · step-stool titles + cm→inch flip (4) · 39 LED touch lamps → Xtricity (Michael's section note) · 43 re-rolls handed to the imagery chat. ② Image removals, review-first: Sean's dupe-gallery list 79 images / 69 products (kettles held for Sean; 1-60201's featured image swapped before delete) · Michael's "repeated photo" rows 46 / 38 — resolved VISUALLY (his 'repeat' = same photo at two crops, hamming 40–90, invisible to hashing), approved on the review page, then re-removed after a restore detour · his description rows: 11 more removals + 7-99190 reordered (his note asked for grouping, not deletion). Hard lesson banked: deleted media's CDN urls 404 — Shopify keeps nothing. The July-29 Seagate snapshot is the only restore path (`scripts/restore_from_drive.py`); 4 post-snapshot images were pre-downloaded before deletion. 21 FAILED placeholder media from the bad CDN-restore found + cleared. ③ Missing Drinkware round BUILT: 9 new products (7-99771/73/74/75/76/77/78/79/80) to the 7-99772 template — published, supplied imagery + box renders attached, UPCs derived from the 621139+SKU-tail pattern and verified against the packaging artwork (6 read off the barcode; 7-99775/77/79 computed — Michael to confirm), 4 groupings live in glasses+drinkware, 3 clean design-line variant families. ④ New audits: off-square/plain-background image audit (61 findings/49 products; v2 without lighting brands = 33/24, at /aspect_bg_audit_v2, read-only) · variant-family deep audit RE-RUN (135 families, 1,997 products): every 08-03 defect still pending Sean's go, all deltas explained, 2 policy questions (design-line vs size-split for the new drinkware; the 07-29 no-Xtricity-families rule vs the lamp estate that just became Xtricity) — /vf_deep_audit_v2. ⑤ Also shipped: jessar.spec_sheet file metafield + conditional PDP link (dead-# fixed) · 335 Xtricity instruction manuals attached (27 oversized print masters rasterized under Shopify's 20 MB cap) · packaging-type spec row + 1,791 values from Type of Pack.xlsm · brand collection banners (V1 quiet) live on all 10 vendor collections · 13 iBake retail-packaging swaps · 7-99655 feature-slot fix · brand-tile click-through fixed (title link + capture-phase delegate) · dupe-gallery ranking corrected to square-first (41 of 79 targets flipped).
Prior focus
(2026-07-30) Imageless products archived. Jessar confirmed to Sean that anything without an image is discontinued — 17 archived, evidence checked first (all 17 zero-inventory; 9 marked “skip” in Jessar’s master and never on the old WP site). Catalogue now 1,728 active with zero imageless products. Open question: 7 more were imageless this morning and only have images because packshots turned up on the drive — all 7 are also zero-inventory, so they may fall under the same rule. Awaiting Sean.
Prior focus
(2026-07-30) Pre-launch defect sweep + fixes. Swept all 1,986 products for defects on no existing list. The image purge caused zero defects — all 24 imageless products were already imageless beforehand; 7 fixed from drive packshots, and an exhaustive re-validation (17,255 files incl. .tif/.psd/.pdf) confirmed nothing exists anywhere for the remaining 17. Fixed: 6-00800’s raw-HTML title, one live duplicate archived, and 16 identical product titles disambiguated from Jessar’s own master data (pack counts, model names, bulk-vs-retail) — including a factual correction where a GU24 bulb was labelled T2. Identical titles down from 37 products to 20, all now genuinely needing Michael. Two detector false-positive lessons logged (box-first 123→2 after visual review). Report at /prelaunch_sweep_v1.
Prior focus
(2026-07-30) Lamp brand correction. Lamps titled “Xtricity” were sitting on the Jessar Lighting vendor. Validated three ways (SKU-range convention — 5-9xxxx is 283 Jessar Lighting and zero Xtricity; the master brand column; old WP paths): 31 vendor flips to Xtricity (15 flagged + 16 found by follow-up sweep that don’t say Xtricity in the title at all) and 35 title strips (5-90xxx keep the vendor, lose the WordPress-era prefix). The brand card is per-product, so brand_profile + sub_brand moved with the vendor. 0 errors, every handle unchanged (301s intact), catalogue-wide scan of 1,746 products: 0 vendor/brand mismatches. Review at /lamp_brand_audit_v1; one-command revert saved.
Prior focus
(2026-07-29 → 30) Image program closed + client asks shipped. Image cleanup COMPLETE — 1,315 bad images deleted across 4 detector generations, every one byte-backed on the Seagate snapshot with undo logs, every candidate Sean-reviewed first · feature rollout executed (53 products, 118 section rows, 38 photographic cards; Michael loves them) · box images: 26 gallery→metafield assigns + 67 + 172 drive pushes — missing-box products 753 → 581 (now a Jessar photography ask) · lifestyle reconciliation: every drive file hash-matched vs snapshot + delete log + live — only ~13 genuine lifestyles ever went missing (3 repushed on Sean's pick); 385 never-on-site lifestyles pushed (280 SKUs, 0 errors) once the sync finished; scope audit: 325 products in K&D / S&H / portable lamps have no lifestyle anywhere · SEO blurbs 96/96 done · 26 taxonomy fixes · variant-family second pass (incl. image-swatch chips) · Corporate Gifting band LIVE (button awaits Michael's inbox) · catalogue download shipped (jessar.catalogue_pdf metafield, fail-closed toolbar link, demo on cookware-bakeware) · homepage: dept-tabs live, video play button restored, dealer-CTA restyle, topbar language selector on one line.
Prior focus
(2026-07-28 EVE) Collection content system complete. 85 short descriptions live · 46/86 SEO blurbs live · per-collection promo card (metaobject, fail-closed, demo on Drinkware) · footer pass (policies menu, Dealer Login, All Brands) · /pages/brands with all 12 wordmarks · 12 vendor collections · Option A banners (jessar.banner_image drives the hero; L2 cards back to product photos) · 17 duplicates renamed per Michael's file, 4 new families formed. SKU search + variant-family swatches verified live.
Prior focus
(2026-07-28 PM) Variant families executed — 65 pile-ups dissolved, 80 correct colour/size families created, 221 products linked, swatches (not text) verified live on the mug and toaster PDPs. Lighting/electrical parked per scope. Plus: 9 supplied images uploaded to the 4 image-less products (incl. box-image metafields).
Prior focus
(2026-07-28) Catalogue integrity pass. Michael's mapping applied — 174 archived (1,748 active), keeps validated 0 unclassified. Three defects found & fixed: 157 active products were never published to the storefront → all live, 0 remaining; 45 bulbs had no type collection → routed on measured efficacy + rated life (40 incandescent / 4 CFL / 1 LED); door hardware moved out of Electrical into Storage & Home › Home Deco. Open: 10 products in no collection; 3 collections emptied by the archive; Beauty Cover down to 9 from 84.
Prior focus
(2026-07-28) Michael's product mapping applied — 174 products archived; catalogue now 1,748 active. 342-row file marking what belongs on the site: 182 “N” verdicts → 174 archived (full revert saved), 5 already inactive, 4 absent — including the one ambiguous row, archived once Sean confirmed 0 inventory. Keeps validated: zero unclassified — the 84 he left blank (door hardware/electrical, outside his remit) already carry shelf tags, and all 75 he did map agree with our placement. Needs a call: 3 collections now empty on the storefront (table linens, doormats, home textiles) plus cleaning tools at 2 — all wired into the nav yesterday; and Beauty Cover is down to 9 active from 84.
Prior focus
(2026-07-28) Lifestyle feature system designed + live-tested on 3 products; awaiting Michael's design sign-off. Feature section capped at 3 (judged allocation: capabilities in section, how-to steps to gallery); overflow becomes adaptive-scrim photographic cards (baked files, zero runtime cost, {sku}-feature-{slug}-{locale} naming); 13 old baked-overlay images stay in gallery untouched; full revert rig. FR parked as the final step (playbook saved; auto-translate reserved for Sean's one-shot). Batch of remaining 59 on sign-off. Filter normalization dry-run: 93–100% auto-mappable per field — plan ready for Sean.
Prior focus (07-27 PM)
(2026-07-27 PM) Brand system end-to-end + PDP content sprint. ① Brand fixed at the data layer (291 corrections, evidence-ranked; JS Gourmet = cooking only) and consolidated: vendor IS the brand — one field, one filter (6 junk values → 12 real brands), PDP rendering proven byte-identical. 12 brand cards live on 1,922/1,922 products — zero without a brand section; Laguiole + Inspiration Italia lockups extracted from Jessar's own deck, parent Jessar mark for Lighting. ② RS meta beam on 1,710 products (was 6) — product-character facts only; 212 logistics-only products correctly hide it. ③ Gold pass validated intact; 275 authored descriptions replace the machine-composite blobs; 57 metafield migrations; 6 bullets now render (~2,100 recovered). ④ 34 bugged variant families deleted (the 32-mug 'Also available in' pile-up is gone). ⑤ Collection filters scroll in place — sticky sidebar capped at the viewport with its own scrollbar, checkbox-gated and verified live. ⑥ Floodlight specs fixed to catalogue truth; Inner Case renders N/A (real data ask shrank 1,192 → 53 rows).
Prior focus (07-27 AM)
(2026-07-23 → 27) Information architecture executed. ① Mega menu v2 rebuilt from Michael's FINAL HIERARCHY (2).xlsx and iterated through three rounds of Sean's batch edits. ② 58 smart collections live — one shelf: tag per product drives its leaf, L2 is an OR of its children, L1 keeps TYPE rules; canon in docs/COLLECTION-CANON.md. Rule engine tested empirically (TAG has no STARTS_WITH; 60-rule cap; no mixed AND/OR). ③ Two live faults caught by Sean and fixed: API-created collections are not auto-published (all 50 rendered empty until publishablePublish), and 186 products of taxonomy bleed at L2 → 5 L2s converted to tag rules → bleed 0. ④ Catalogue shelved: 1,088 tagged from Michael's sheet (0 unmapped) + a one-to-one pass on all 342 untouched products → genuine gaps 333 → 2. ⑤ PDP dynamic: new product_features metaobject drives "The details that matter" (4 slots, collapses, whole section hides when empty, scoped by checkbox); jessar.upc on 1,982 products. ⑥ Packing: master carton 1,855 → 1,912/1,923. Inner Case closed as a non-gap — master V2 stores a literal 0 and 0% of those SKUs have inner-box dimensions, so they have no inner pack; the field now prints N/A and the ask to Jessar shrank from 1,192 rows to 53.
Prior focus (07-23)
(2026-07-22 → 23, overnight) Compact single-row header — BUILT, LIVE & QA'D. Route A additive layout (logo-left-menu-inline + master checkbox, default off = inert): logo + nav + search + utilities on one row, header 202px → 130px, collapse-on-scroll OFF (no desktop hamburger), dropdown/mega panels anchor flush to the row (zero float) — and fixed a live stock bug: all 6 Kitchen & Dining children now render (old header clipped "Cookware & Bakeware"). Codex-built from a frozen spec, adversarially reviewed (2 findings refuted / 4 fixed), activated via Admin API, revert = one checkbox (proven live both directions). Incident caught + repaired same night: a stale-HEAD worktree push briefly erased uncommitted live content — restored from the cold backup; repo now committed in sync with live truth. Morning review: /header_overnight_report_v1. Flags: phone spot-check · FR /fr 404 pre-existing · icon-search one select away.

(2026-07-21) Jessar correction round 2 applied — 76 writes, 0 errors, 141/141 verified against live. Taniya's two workbooks read by formatting (yellow first column = corrected row, RED font = corrected cell). File 1 was a re-send — byte-identical to the 10 July Taniya file; its 24 titles + 41 certs were confirmed already live from the 07-11 sync, so only 1 new master-carton value came from it. File 2 was genuinely new: 16 EN titles + 19 certifications. Also registered 40 client-authored FR titles into a previously-empty French layer — these must not be overwritten by the planned bulk FR pass. Two of my own bugs caught + fixed (stale translation digest; FR already-applied check reading source instead of translations); script now idempotent, backups + --revert retained.

(2026-07-20) Information architecture FINALIZED · catalogue re-classified & pushed · ToS live. ① Full taxonomy re-validation vs the Shopify Standard Taxonomy, product-by-product (189 hand overrides): 32 → 175 nodes, avg depth 2.82 → 3.91. Snapshot-then-push → 1,304 updated / 619 unchanged / 0 errors, fully revertible. 11 held SKUs archived (7 non-products + 4 real-but-unclassifiable). ② Site architecture v6 → v8 — every "More in …" catch-all eliminated; every product resolves to a named shelf or a terminal "View all" collection (0 catch-alls · 6 depts · 43 cats · 1,923 placed). Kitchen Tools 28 → 6 super-shelves; Bath 12 → 5; Food Storage / "Trash Cans & Bins" / "Bar Stools" made terminal with filters inside; 3 mis-filed groups re-homed. Branching tree view is canonical + on the client portal (/site_architecture); chip view retired. Furniture parked for Jessar. Nav layer only — taxonomy untouched. ③ ToS replaced with Jessica Loutfi's revised doc — Privacy + ToS both live; Refund Policy still needed (the ToS links to it). ④ Image-ratio audit — 914 active products carry a non-square featured image (654 ≥20% off); 08–12 July lifestyle run = 299/1,028 non-square. CSVs on jessar-internal.
⏸ Parked — circle back
Paused 07-12 to preserve the weekly token window (Sean has other Jessar work). ① THE BIG ONE — image VISUAL verification wave 2: 4,108 of 5,847 images still need eyeball classification; wave 1 done → 1,349 corrections found but NOT applied (held for one consolidated pass; ~3.5–4M tokens). Resume doc: work/RESUME_image_verification.md. Store safe in validated first-pass order. Cheap fallback: apply wave-1's 1,349 corrections only. ② product_line ×11 (iBake titles live, metafield unset) + 40 dual-brand-ambiguous lamps (need wadad's call). ③ 11 REVIEW-grade EN content edits. ④ 833 artwork/ad renders → removal decision. ⑤ ~150 sub-1000px images → reshoot/upscale. ⑥ 19 imageless Xtricity photos · FR pass · bullet-shortening 1,125 · meta-beams 1,422 · Stanley handles 20. (Also still open: Michael's B2B homepage renders v3/v2/v1 + hero-20 picks.)
Next planned action
(2026-08-05 — Sean's triage) ① FR run 2026-08-06 (⛔ T&A auto-translate is the ONE-SHOT; 16 FR toaster cards staged in Files) ② Spec/metafield audit — the last major sweep ③ then the Launch QA Runway above, top-down.

Closed by Sean 08-05 (removed from the runway, no further input coming): 33 Cook & Fresca images · certifications + Xtricity manuals (~738 SKUs, done) · Inner Case 53 rows · 24 zero-inventory drafts · 7-99905 spice-rack go/no-go · About + Become-a-Dealer imagery (finished) · gifting inbox (routed to mhart@jessar.ca — a .com typo found and fixed live) · Q24 brand-page scope + Q27 sub-line treatment (keep current state: PDP shows the primary vendor section, not the sub-brand metafield).

New open item: 4 retractable-ceiling-fan install videos + revised instruction sheets (4-80331/32/33/34) — placement decision pending; 4-80334 is ARCHIVED and 4-80333's PDF exceeds Shopify's 20 MiB cap.
Waiting on Jessar (Michael)
Living list → /open_items. Headline: what-NOT-to-show-on-PDP · sub-line treatment TBD (Michael undecided — treat the 6 lines Beauty Cover/Veraroma/Inspiration Italia/Laguiole/iBake/Limpus as distinct, or fold under the vendor? jessar.product_line ready on 148 products, PDP display PARKED till he decides) · Refund Policy doc (the revised ToS links to it — needs Jessica) · Furniture nav direction (how they want that range to grow) · sub-brand mapping + marketing-tier confirm · certifications · Xtricity manuals · 33 Cook&Fresca images · Jessar Lighting logo · new products+data · box style · lifestyle images · 2-SKU reconcile · tea-thermos/casserole. (Resolved 07-20: revised ToS received from Jessica + pushed live. Resolved 07-03: pricing NOT on PDP → retires MSRP ask.)
Waiting on Sean (RevShift)
Review the pushed taxonomy classification for further edits (Sean said he would) · build the live mega-menu to match architecture v8 (menu still not built natively) · Greenlight image-verification wave 2 (or approve Option B = apply wave-1's 1,349 corrections only) · product_line push OK (11) · artwork-removal decision (833) · relay flagged-no-edit + dual-brand-lamp questions to Jessar reviewers · B2B renders verdict (v3/v2/v1 — parked for Michael) · 301 coverage sign-off (/redirects_review_v1 — 100% covered; optional: name high-traffic discontinued items to upgrade collection→product) · SEO Preferences 3 values (paste or authorize shared-Chrome) · electrical tile pick · morning review of the LIVE compact header (desktop + phone; report at /header_overnight_report_v1; worktree keep/remove call) (header one-row: DONE — live 07-23) · imagery boss-decision · bullet-shortening approval · send /jessar_image_request_v1 to Michael. (Dead-end rule resolved: no 404s → all → nearest collection.)
Phase 0
Foundation
100% · 9 of 9
Phase 1
Data Foundation
100% · unified DB + rebuilt gold dataset
Phase 2
Brand & IA
100% · IA + sitemap + taxonomy locked
Phase 3
Design System
Soft Modern locked · live + client-approved · brand-landing parked
Phase 4
Page Templates
Core templates LIVE · hero-20 + system pages left
Phase 5
Shopify Build
Site LIVE (1,681) · 301s ✅ · pricing/msrp ✅ · open: GA4/GSC · QA · train · launch
Phase 6
Brand Pilot
Not started · prep-in-advance now (SOW)

Launch QA Runway (§8.9 · set 2026-08-05 · work top-down)

Sean's list + Claude's additions, merged. Sequence: FR → spec/metafield → sweeps → full QA → mobile → cutover. Parked backlog lives in memory and does not block launch.

  • ☐ 1 · FR run (08-06) — ⛔ T&A auto-translate is a ONE-SHOT; 16 FR toaster cards already in Files
  • ☐ 2 · Spec/metafield audit — PDP spec fields vs master data; coverage, orphans, empty-state gating
  • ☐ 3 · Dealer→Partner site-wide sweep — done: PDP + homepage (0 refs); open: become-a-dealer page, About, contact, footer, FR strings, emails, meta titles
  • ☐ 4 · Link + redirect validation — zero dead links; ~1,113 WooCommerce 301s resolve (scripted)
  • ☐ 5 · Homepage banner text ↔ images — slides 1–3 + scrolling banners done 08-05; re-verify after imagery swaps
  • ☐ 6 · Forms end-to-end — Inquire Now + contact: submission, notification routing, reply-to
  • ☐ 7 · Price-leakage sweep — JSON-LD / OG meta / sitemap must not expose hidden B2B pricing
  • ☐ 8 · FAILED/broken media sweep — API pass over all ~1,700 products
  • ☐ 9 · Search verify — SKU search (dealer behaviour) + titles
  • ☐ 10 · Full desktop QA — ⚠ FOUND 08-05: /collections is Hyper's stock DEMO page, live and publicly reachable — a "20% OFF sitewide and all stores" countdown banner, cosmetics demo collections (Body Oil, Sunscreen, Makeup, Hair Care) and two "Example product title" placeholders. On a B2B site with hidden pricing a fake discount banner is the worst possible stray page. A /collections → / redirect exists but cannot fire — Shopify ignores redirects for valid routes, so the template itself must be rebuilt. The site's last "Shop …" CTAs live here too.
  • ☐ 10b · rest of desktop QA — bugs, broken elements, empty states, 404 page, cross-browser (Safari priority)
  • ☐ 11 · Mobile QA — real-phone pass incl. compact-header keyboard/scroll (open since 07-23)
  • ☐ 12 · SEO / cutover switches — robots, sitemap, noindex, favicon, OG cards; password-off checklist
  • ☐ 13 · Alt-text + a11y basics — alt coverage, mega-menu keyboard nav, contrast
  • ☐ 14 · Notification email branding — from-address + templates off Shopify defaults. ⚠ FOUND 08-05: shop sender + contact email are both seanzsegal@gmail.com — it sends every transactional email and is published in the live Privacy Policy (EN+FR) as the privacy-request address. Sean: Settings → Store details → change to info@jessar.ca (Admin-only, not API-changeable)
  • ☐ 15 · Analytics decision — GA4/pixels before launch? (Sean/Michael)
  • ☑ 16 · Legal pages — VALIDATED 08-05. Privacy + Terms + Contact Information live as Shopify shop policies (not Pages), published EN and FR, linked in the footer, zero "dealer" language. Terms fully Jessar-specific (NEQ, Saint-Eustache address, info@jessar.ca); Privacy is Shopify's template rendering correctly (updated July 15 2026). Refund/Shipping deliberately absent — correct for a no-cart B2B site. Fixed same pass: footer newsletter disclaimer shipped with Hyper's stock dead links (href="#") → now point at the real policies
  • ☐ 17 · Template cleanup — strip disabled leftover sections (become-a-dealer carries 6)
  • ☐ 18 · Final cold theme backup at cutover — theme_cold_backup.py (proven 08-05, 537/537)

Phase Checklists

Phase 0 — Foundation Complete 9 / 9
  • Read existing project brief and inventory
  • Confirm engagement approach (parallel tracks with gated renders)
  • Confirm tooling stack (Hyper, Shopify CLI, Python; migration tool TBD)
  • git init in project root
  • .gitignore for confidential + large files
  • Folder structure: /work/, /renders/, /decisions/, /raw/, /scripts/, /theme/
  • Write PROJECT.md
  • Initial commit + push to RevShiftMedia/jessar-website
  • Phase 1 kickoff confirmed
Sign-off gate met: Repo live, dashboard live, structure agreed.
Shopify Access Setup Complete 4 / 4
  • Custom app created in Shopify Partners (Sean)
  • Sean provided client_id + client_secret
  • Built install URL, completed OAuth flow, captured shpca_* access token
  • Token stored in .env (gitignored); ~70 admin scopes confirmed via API smoke test (see PROJECT.md decision log)
Cross-cutting setup met — Shopify Admin API ready for Phase 5 build.
Phase 1 — Data Foundation ✅ COMPLETE · rebuilt gold dataset 17 / 18
  • Profile Items-Jessar for Sean.xlsx → /work/items_jessar_call_brief_2026-04-27.md
  • Confirm authoritative source (Items-Jessar + Electrical/Beauty Cover Inventory = primary)
  • Orange-fill detection (Items-Jessar On Hand, #FFC000) → 119 excluded, 876 active
  • Profile Electrical/Beauty Cover Inventory + red-font detection → 41 excluded, 828 active
  • WP export delivered: wc-product-export-27-4-2026-1777321473954.csv (2,196 products live)
  • Profile WP export → SKUs in Name field; 41 cols incl. categories, descriptions, images, stock
  • Reconcile WP vs masters → see /work/wp_reconciliation.md
  • Build PDF extractor (catalogs) — 11 PDFs, 451 pages, 1,767 SKU rows, full text in /work/catalog_text/
  • Profile Master SKU xlsm — 1 sheet, 2,402 rows, 32 cols (subset of On Hand pattern). Gap-fill reference.
  • Box-artwork PDF extractor POC against 7-99191, 7-99506 → bilingual feature copy extractable. Scales when SSD mounted.
  • Reconcile xlsx + WordPress + catalog → unified rows. See /work/unified_product_database.csv + .json (3,211 unique SKUs).
  • Tentative sub-brand tagging by prefix (final mapping for 6-, 3- pending Jessar)
  • Completeness score per SKU; 1,614 SKUs at score ≥60 ready for content gen
  • Generate unified_product_database.csv + .json
  • Generate data_gap_report.html (visual coverage report)
  • Generate third_party_needs.md (photography, copy, partner logos)
  • Render: phase1_data_state_one_pager.html for Sean → Jessar review
  • Sign-off gate: Sean reviews /work/phase1_data_state_one_pager.html and accepts unified DB as canonical
Sign-off gate: Unified database accepted as the single source of truth.
Phase 2 — Brand & IA ✅ Complete · IA + sitemap locked 0 / 9
  • Synthesize brand architecture from Phase 1 + Jessar input
  • Decide sub-brand treatment (nav level / sections / filters / hybrid)
  • Draft 3 candidate site maps
  • Render 3 navigation prototypes (HTML mockups)
  • Define URL pattern
  • Define taxonomy (collections, tags, metafields)
  • Define filter/facet strategy per collection type
  • Sean reviews → 1 IA wins
  • Document final IA in PROJECT.md §6
Sign-off gate: Final IA approved by Sean.
Phase 3 — Design System ✅ Complete · Soft Modern locked · live + client-approved · brand-landing parked 12 / 14
  • Validate Hyper theme against criteria — VALIDATED 2026-04-27
  • Pull Hyper code into /theme/ via Shopify CLI (blocked: license not yet purchased)
  • Audit Hyper component library — done via reference copy on disk
  • Design + present 2–3 brand guide options (Jessar parent + sub-brand treatment, color, type, logo usage). Render as comparison deck for Sean → Jessar.
  • Lock final brand guide based on Jessar selection — Direction B (Soft Modern), default palette. Locked 2026-05-05.
  • Define color system — formal token spec doc (Direction B tokens need standalone spec doc)
  • Define type system (EN+FR pairing, web-font fallbacks, licensing)
  • Render hero patterns (3 layout variants)
  • Render product card variants — done: collection_page_v1.html (2026-05-05)
  • Render standard PDP template (dual-audience) — done: standard_pdp_sm_v1.html (2026-05-06) — proper Soft Modern from Direction B first principles. 55/45 gallery split, features open, meta strip, accent restraint. Also: standard_pdp_v2 (2026-05-05), standard_pdp_v3 + standard_pdp_v0_1_b (explorations 2026-05-06).
  • Render hero PDP template (Caraway-tier) — done: hero_pdp_sm_v2.html (2026-05-06, canonical) — 4:5 warm panel, meta-row beam, 4-col hairline build grid, oversized Cormorant sub-brand mark, warm use-tiles, centered story, accent-light CTA. Sean: "excellent." Also: hero_pdp_sm_v1 (2026-05-06), hero_pdp_v2 (2026-05-05).
  • Render collection grid + filters — done: collection_page_v1.html (2026-05-05)
  • Render homepage (Jessar parent brand) — done: home_sm_v6.html (2026-05-07, canonical) — six iterations same session. v6 flips bg so brand portfolio cards POP on canvas (white-ish), adds "In focus this season" editorial triptych (tabletop/bedroom/lighting) at position 5, renames catalogue eyebrow to "Browse by category" (paired with brand portfolio's "Our brands"), and removes the wordmark from nav (real logo stands alone, propagated across v1–v5). v1–v5 retained as comparison.
  • Render brand landing page template (sub-brand landing — JS Gourmet / Xtricity / Jessar Lighting)
Sign-off gate: Design system approved by Sean; shown to Jessar for tone reaction.
Phase 4 — Page Templates Core templates LIVE · hero-20 + system pages left 0 / 10
  • Home page render
  • Brand landing page render (1 per brand)
  • Collection page render (variants)
  • Standard PDP render (5 real products)
  • Hero PDP render (1 fully built)
  • Find a Retailer render
  • Become a Dealer render
  • Dealer login / portal entry render
  • Search results render
  • 404 / error states render
Sign-off gate: All templates approved by Sean. Jessar shown for final go.
Phase 5 — Shopify Build Site LIVE (1,681) · launch-prep 1 / 19
  • Set up Shopify dev + production stores
  • Install Hyper theme
  • Decide migration mechanism (Matrixify vs. direct Admin API bulk push)
  • Customize theme to match approved templates
  • Generate import payload from unified database — primary tier only (secondary CSV stays queue-ready)
  • Import products in sub-brand priority order
  • Migrate images (SKU-name match)
  • Set up bilingual storefront (EN/FR) — Shopify Translate & Adapt fallback
  • Populate msrp metafield from Items-Jessar col AO ("Selling Price")
  • Build "Partners" section (Costco, Linen Chest, Staples, etc. — Sean procures)
  • Add link to existing dealer portal + simple "Become a Dealer" contact form
  • Build 301 redirect map from WP slugs → Shopify URLs (source: WP export Permalink column)
  • Set up Google Search Console (verify ownership, sitemap, reindex) — confirm if Jessar has existing account first
  • Set up Google Analytics 4 — confirm existing account or create fresh
  • Privacy Policy + ToS drafted (Shopify template), emailed Jessar for legal confirmation. Required under PIPEDA / Quebec Law 25 since the site collects data via contact forms + dealer applications + analytics. Refund / Shipping policies skipped — no transactions, so they don't apply.
  • Privacy + ToS translated to FR via Shopify Translate & Adapt (after EN is Jessar-confirmed)
  • Footer policy links wired in Hyper theme (Privacy + ToS only)
  • QA pass: links, images, mobile, accessibility, EN/FR parity, redirect coverage
  • Train Jessar team
  • Launch
Sign-off gate: Site live, Jessar trained, monitoring in place.
Phase 6 — Brand Elevation Pilot Month 0 / 7
  • 4–6 AI-generated product videos (5–10 sec)
  • 4–6 AI-generated lifestyle product images
  • 4–6 LinkedIn posts drafted + scheduled
  • 4–6 Instagram posts drafted + scheduled
  • 1–2 influencer introductions
  • 1 initial launch strategy doc
  • Retainer conversation with Jessar
Sign-off gate: Pilot complete. Retainer SOW negotiated separately.

Open Questions for Jessar (4 open · 17 resolved)

  • 30
    Collection banners for 58 electrical & lighting sub-collections — DONE, all 58 live. Each built from that collection's real live products keyed onto a neutral reference plate, one styled scene per collection, set on both collection.image and jessar.banner_image. Your three corrections are in — Extension Cords now carry their real round foot switches, R14/R16 are solid frosted white reflectors, and Smart Switches are the real cone-shaped plug-in outdoor modules with the remote fob rather than wall plates. The two CFL shelves missing the Xtricity logo were re-rolled with the wordmark restored. Gallery: /collection_banners_58.
    Raised 2026-08-12 · Closed 2026-08-12
  • 31
    58 collection-card icons — approved and LIVE on all 58. One single product per collection, Morning Light, square, now showing on the collection cards. The wide 5-product banners are untouched and still drive the top of each collection page. You rejected one — the fan, hard white wedge across a top corner — which was re-rolled and pushed. Gallery: /collection_icons_58.
    Checked by image content rather than filename, because Shopify keeps serving collection images under the original file name even after the picture changes — all 58 confirmed as the square icon, all 58 banner fields confirmed unchanged.

    One thing still open: the homepage category showcase prefers the banner field, so it keeps showing banners rather than icons unless we flip that one preference. Say the word.
    Raised 2026-08-12 · Closed 2026-08-12
  • 32
    Imagery queue — 3 held re-rolls, parked to last. Round-2 page: /imagery_round2; the main review page is /packshot_rerolls_16.
    Still held after several passes: 7-99421 porcelain mini bowls — the ceramic tray keeps coming out wrong; it is a recessed well with a flat rim, not a board, and the July original was closest. 7-99906 stackable mixing bowls — the lid pull-tabs need to sit slightly proud. 7-99608 ceramic storage container — tab colour and texture, and the colour bleed.

    Cleared and live this round: 7-99760 · 7-99429 · 7-99521 · 7-99123 · 7-99909 · 7-99600 · 7-99533 · 7-99549, plus 7-99902 · 7-99240 · 7-99761 · 7-99459 · 7-98119 · 7-99550.
    Raised 2026-08-12 · Sean
  • 33
    Ten approved packshot corrections were never actually live — all ten now pushed and verified. Side by side: /failed_pushes_review. You caught this on 7-99838 — the store was still serving the July original even though the push had reported success.
    Why it happened: the working folder holds two files for each of these SKUs — the July render and the August correction saved under a different name — and the push script picked its file by wildcard, so it grabbed the July one. The filename and the exit code both looked clean; only comparing the actual pixels exposed it.

    Fixed: the script now requires an explicit file path and refuses an ambiguous match. Every push is checked against your approved image beforehand and against what Shopify actually serves afterwards.

    Live and verified: 7-99550 · 7-99635 · 7-99838 (12th) · 7-98119 · 7-99049 · 7-99240 · 7-99293 · 7-99459 · 7-99470 · 7-99902 (13th).
    One manual step left: the old July render now sits second in the gallery on all ten products, for you to delete.
    Not affected: the 8 sipper cups plus 7-99166 · 7-99505 · 7-99575 · 7-99761 — one file each, so there was nothing for the wildcard to get wrong.
    Raised 2026-08-12 · Closed 2026-08-13
  • 29
    2 images missing from the second corrections round. 7-99057 and 7-99046 (Gadgets & Tools) are instructed "Add provided lifestyle" but no file was included — every other referenced SKU had one. Action: request the two files from Jessar.
    Raised 2026-08-07
  • 1
    Sub-brand → prefix mapping — ✅ RESOLVED 2026-05-07. Jessar returned the completed mapping (work/sub_brand_mapping_RESOLVED_2026-05-07.csv, 154 groups, 2,560 SKUs, 100% assigned). Headline finding: at the data tier there are four sub-brands, not ten — JS Gourmet (7-, 1,264 SKUs), JS Maison (6-, 236), Jessar Lighting (5-, 358), Xtricity (1-+3-+4-, 702 combined). The other catalogue names (Beauty Cover, Cook & Fresca, IBake, Limpus, Pop Fluff, Veraroma) are marketing identities / product lines that roll up into the four data-tier brands. Action: Sean to review the implication for the homepage (home_sm_v6 currently shows 10-brand portfolio).
    Raised 2026-04-27 · Resolved 2026-05-07 by Jessar
  • 8
    Hero product narrowing — Michael picks 20 from 50. Sean delivered the curated list (50 unique product concepts / 88 SKUs); SOW caps full hero PDP treatment at 20. Action: Michael selects 20 at jessar-deliverables.vercel.app/hero_candidates_for_michael; output CSV drops at /work/hero_selections_michael.csv and the build pass flips them to tier=sow_hero. Also: confirm 4 hero SKUs missing from DB (7-99738, 7-98690, 7-99754, 7-99757).
    Raised 2026-04-27 · Intake closed 2026-04-28 · Awaiting Michael's narrowing

Resolved: Q2 eco-fees (orange = ignore) · Q3 discontinued (orange in Items-Jessar) · Q4 source-of-truth (Items-Jessar + Electrical/Beauty Cover Inventory) · Q5 On Hand gap (moot) · Q6 pricing (MSRP from Items-Jessar col AO "Selling Price" → metafield) · Q7 WP export (CSV delivered, REST API not needed) · Q9 tone POC (approved by Jessar) · Q10 FR review (we do the heavy lift; Shopify Translate & Adapt for fallback; cherry-pick human review) · Q11 store locator (replaced with Partners section) · Q12 dealer portal (out of scope, link to existing) · Q13 retailer application (out of scope) · Q14 Costco (live on site) · Q15 catalog versions (newer supersedes if same SKU) · Q16 SSD mount (completed — Seagate drive indexed 2026-05-03) · Q17 brand guidelines + partner logos (we design + procure ourselves).

Recent Decisions

  • Compact single-row header — Route A additive layout, LIVE (2026-07-22 → 23, overnight). Sean's design intent (no Michael sign-off needed): logo + nav + search + utilities on one row for a B2B header with no cart/checkout — the stock two-row read as bare. Implementation: new header_layout option logo-left-menu-inline gated behind an rs_enable_compact_single_row master checkbox (default off = stock output untouched); collapse-on-scroll forced OFF in compact (no desktop hamburger — nav always exposed); search = compact field with a field/icon schema select (icon style one click away); utility links stay in the topbar. Built by Codex (GPT-5.6) from a frozen spec in an isolated worktree, adversarially reviewed by a second hostile instance (6 findings: 2 refuted with evidence, 4 fixed — incl. restoring the dropdown padding-zeroing my own review had wrongly removed, which would have made panels float one nav-height low), activated via the Admin API, visually QA'd on the live storefront (header 202 → 130px; panels flush at the row bottom; fixed a live stock bug — all 6 Kitchen & Dining children now render). Revert = untick the checkbox (proven live both directions) or the verbatim cold backup backups/2026-07-22-compact-header-prechange/. Also locked: repo must be committed in sync with live truth before any worktree-based push (a stale-HEAD worktree briefly erased uncommitted live content — caught + restored same night; commit f6ec0aa8 closes it).
    2026-07-23 · Sean (design intent) / RevShift (execution)
  • Packshot backdrop v2 “Morning Light” LOCKED (2026-07-22). Michael chose option H from the on-site comparison at /backdrop_onsite_v2 — a luminous pale neutral seamless sweep, #F4F1EC in-prompt, renders landing around #EBE6E1, with soft directional daylight from the upper left and no horizon line. It answers both of his objections to v1 warm cream at once: the near-neutral luminous ground lets product colour read at full saturation, and the elongated directional shadow finally gives clear glass an edge to sit against. v1 (#EADDCC) is retained as the revert target, not deleted. The prompt clause was hardened after lock-in: the wording Michael approved from did not reproduce reliably — one of the four approved images rendered the key light from the wrong side with a hard beam across the backdrop, so light direction is now stated as a measurable consequence (upper-left = brightest) rather than a description. qa_gate.py reworked for a directional backdrop: tone measured at the sweep midpoint instead of the corners, a new machine check that fails inverted light, a batch-spread outlier check, and normalisation disabled — flattening a sweep would destroy the approved look, so off-tolerance now means re-roll. Gate verified 4/4 pass on approved work, 2/2 fail on known-bad. Accepted cost of this look: a wide falloff band (+3.9 to +40.4 across approved images) — not a defect to “fix”. Spec + failure modes in docs/BACKDROP-V2-LOCKED.md.
  • Gold-content gap found & synced to live (2026-07-11). Sean spot-checked 1-40231 (garbled title, wrong "fan blades" romance, missing FCC/ICES-005 certs) → a deterministic audit of all 1,667 gold-file SKUs (field-by-field classifier + a forensic push-history subagent, both agreeing) proved live carried v2 descriptions + bullets (pushed Jun 16) but v1 romance, raw master titles, and empty certifications — the v2 romance, titles, and certs were generated but NEVER pushed (the push script had no romance path; titles/certs were staged and gated, then missed). The review file Jessar edited was built from v2, so their edits and the canon agree — no script-flipping. Sean-approved gated sync, 0 errors, live-verified: certs 334 (PDF-sourced values + Taniya's UL→ETL ×40; metafield is list-typed), titles 1,635 (1,464 v2 canonical + 171 Jessar edits superseding; already-canonical live titles skipped, handles untouched), romance 1,666 (1,662 v2 + 4 Jessar edits; the 33 July-gold specials excluded as newer), sub-brand 158 (JS Maison + Pop Fluff, updating vendor and jessar.sub_brand). Full revert backups on disk (title/romance CSVs + push logs). Held/gated: product_line ×11, 40 dual-brand-ambiguous lamps (need wadad's clarification), 11 REVIEW content edits, FR pass, bullet-shortening 1,125, meta-beams 1,422. Deliverables: /jessar_review_comparison, /jessar_review_flagged_no_edit, /jessar_fullmonty_report. Scripts: pull_live_full · live_gap · push_certs · push_titles_v2 · push_romance_v2 · push_subbrand.
    2026-07-11 · Sean / RevShift
  • Xtricity 74 added + full-catalog image ordering + visual verification PAUSED (2026-07-11 → 07-12). Xtricity: created 74 missing items ALL ACTIVE with gold content parsed from WordPress spec tables + names (41 strong / 26 moderate / 7 thin), SKU+UPC, vendor Xtricity; 55 imaged, 19 need photos; the 20 at 40301–40320 are Stanley cabinet handles (not Xtricity) → parked. Lifestyle imagery matched to live products: gallery 1,260 + French 11, box_image 312 (28 already-set respected, never overwritten; dedup appends -2). Image-ordering pass: full-catalog re-sequence to product packshot → lifestyle → product+package → packaging/ad artwork last, with before/after snapshots for revert; classifier fixed for two traps (product titles poisoning alt-text like "Storage Box"; sibling-SKU shared packshots); a subagent visually classified all 52 box-candidates (36 = product+package combos that stay in gallery, only 16 = true box-only → jessar.box_image); 245 ops, 0 errors, validated 1,756 products / 0 failures. Flagged: 833 artwork/ad-render products for a removal decision, ~150 sub-1000px images. Second-pass VISUAL verification (Sean: SKU-only filenames could hide mis-tiered shots): full-catalog pixel audit + vision agents; wave 1 done (1,739 imgs; control sample confirmed a 24% filename-classification error rate — the concern was real; 1,349 corrections found but NOT applied, held for one consolidated pass); wave 2 (4,108 imgs, ~3.5–4M tokens) PAUSED to preserve the weekly token window. Resume doc: work/RESUME_image_verification.md; store safe in first-pass order. Report: /jessar_image_order_report. Scripts: xt_build/create/images · task3_images · media_snapshot/reorder_plan/apply/validate/report · media_pixel_audit.
    2026-07-12 · Sean / RevShift
  • Page-system native-vs-custom audit (2026-06-29). 6 core templates locked for client review. Contact kept RS (form functional). Dealer (4) + About (6) native Hyper parallels built alongside the RS versions for side-by-side review — nothing removed. Keep-custom: dealer form, About values + brands. Homepage finalized with real retailer logos. 404 branded; /collections hidden.
    2026-06-29 · Sean / RevShift
  • Master-carton correction — third source-reading fix (2026-06-03). Sean asked me to double-check that master carton was genuinely missing/unsourced. It was not. The On Hand sheet carries three (L)/(l)/(H) dimension blocks (unit · inner · master); the third (most-filled) block is the master-carton size — proven by the sheet's own per-unit-CBM formula (CBM ÷ Master). I had been counting only the 57 master cartons recovered from box-artwork OCR and missing the On Hand block entirely. build_product_data_supplement.py now picks the most-filled dimension triple and treats On Hand as the primary carton source. Master carton coverage 57 → 906 (54%); remaining genuine gap 1,610 → 761. Re-ran the full downstream chain (inject → aggregate → reviewer → content Excel → data-request) and redeployed both portals. Corrected live data-gap counts: inner 998 · master carton 761 · certs 1,373 (UPC 1,662 + master case 1,661 effectively complete). Third time Sean's instinct to re-check a "missing" claim was right — after the cert/UL-ETL sheet correction and the "~1,145 recoverable certs" overcount. Honest residual gap = inner-case (sparse at source) + certifications (their "To Check" column) + ~761 carton rows for catalog-only SKUs absent from On Hand. Shopify untouched.
    2026-06-03 · Session 21 · Sean / RevShift
  • Missing data surfaced + Jessar data-request built (2026-06-02). Client flagged inner case / master case / certifications / UPC as missing. Key correction: I'd been reading the wrong Items-Jessar sheet — the operational On Hand sheet holds UPC/Inner/Master + a UL/ETL cert column. Findings: UPC (1,662) + master case (1,661) we have → now surfaced into the v2 specs, the client reviewer, and a new packaging block in the content Excel. Inner case is genuinely sparse even in their source (669/1,667; many items have no inner pack). Certifications: the UL/ETL column exists but Jessar left it “🔴 To Check” for 812/876 — unfilled on their end; our honest extract is 294 (my earlier “~1,145 recoverable” was a bad estimate that matched the French word “ce”). Genuine gaps packaged into jessar_data_request_2026-06-02.xlsx (998 inner · 1,610 carton · 1,373 cert; amber = please fill, cream = we have, heaviest-gap first), linked from the client hub. New scripts: build_product_data_supplement, inject_supplement_to_v2, build_jessar_data_request_xlsx. Reframes the client conversation: the columns exist in their On Hand sheet — the cert one is still “To Check.”
    2026-06-02 · Session 20 · Sean / RevShift
  • Shopify metafield cleanup + content-push plan locked (2026-06-02). Audited the 48 live jessar.* metafield definitions + took a full rollback snapshot of all 1,668 live products. Deleted 10 internal/useless definitions (~6,177 stray values purged store-wide): migration_action, completeness_score, box_features (the noisy OCR field originally flagged — now gone from live), care_source, material_source, color_source, source_catalog, priority_tier, short_description, cord_length. Kept internal_clas_1/2 + future-use empties (certifications/upc/is_hero/catalog_pdf) + all customer-facing → 38 definitions remain. v2 content push plan (locked): wait for client edits → one clean push, EN+FR together, box_features already removed; scope set when edits return. Surfaced for later: store shows 1,668 products (one extra, likely test SKU — left for now) and product_line live 148 vs clean 149 (reconcile at push). Rollback: live snapshot + setup_shopify_phase5.py.
    2026-06-02 · Session 20 · Sean / RevShift
  • Client feedback channels for content review (2026-06-02). Two ways for Jessar to return copy changes, both batch-appliable: (1) inline editing in the v2 reviewer — a "✎ Suggest edit" control on every product opens editable fields (title/romance/description/features) + approve-as-is + notes, autosaves in-browser, and Export my changes downloads jessar_content_edits.json (built with safe DOM construction, no XSS). (2) A colour-coded Excel (jessar_content_review_2026-06-02.xlsx) mirroring the reviewer fields EN+FR — muted read-only source columns vs 3 green editable columns (Approve Y/N · Corrections · Revised copy), needs-verification rows amber + sorted to top, product-line tinted, README legend, frozen panes. Both linked from the client hub; client picks their preference, both return to us for batch apply.
    2026-06-02 · Session 20 · Sean / RevShift
  • Residual 16 majors cleared — 0 known factual errors (2026-06-02). Resolved the last 16 majors: 9 visible spec errors fixed against cited sources (7-99112 dropped an unsourced "13.7\" blade"; 7-99403 single→double-wall glass; 7-99696/697 wattage 1000→1500/1200W, honestly re-flagged for vendor confirmation; 7-99577/7-99687/1-60412 removed contradictory/unsupported claims) + 7 empty product_line fields populated from box/title (Veraroma, Beauty Cover, iBake), synced to the authoritative inferred_product_lines.csv. The fix→verify discipline paid off again: re-QA caught 2 self-inflicted mismatches (7-99851 left "Celebration Collection" in the description after the romance edit; 7-99913 set product_line=iBake but prose still said VerAroma) — both corrected and re-verified. Final independently-verified state: 0 major · 194 minor (11.6%) · 1,473 clean (88.4%); product_line clean across 6 lines; 0 integrity issues; 39 needs_human_review. Tone/descriptions/substance confirmed client-ready on a cross-tier read. Added a "Product Content — Review & Verify" card to the client hub. Both portals redeployed. Rollback 2026-06-02-pre-residualfix snapshot; Shopify untouched.
    2026-06-02 · Session 20 · Sean / RevShift
  • Fix + polish + verify — 694 flagged SKUs cleaned to top quality (2026-06-02). Fix workflow corrected every QA-flagged issue (120 major + 574 minor) with the locked brand voice applied (restrained/factual; banned-words list — no premium/curated/world-class/cutting-edge/discover). Root-cause rule: BOX/PRESENTATION authoritative over xlsx/catalog on physical specs. Wrote to a separate product_content_fixed/ namespace, then merged to v2. Independent re-QA verified the result — major 120→16 (7.2%→1.0%), minor 574→189 (34%→11%), clean 973→1,462 (58%→88%); ~99% publish-ready. Caught + fixed a fix-pass regression: agents had stuffed product_line with junk (model names Valerio/RIPPLE, a description string, VerAroma casing — 18 bad values) → re-asserted from the authoritative source to the clean 149 across 6 lines. Residual 16 majors are mostly product_line ATTRIBUTION edge cases (copy names a line but SKU not in canonical list; 7-99913 Veraroma-vs-AirPlus) + ~6 spec calls (7-99696/697 wattage, 7-99104 dims, 7-99112 blade) — the human/Jessar decision residue; 36 SKUs carry needs_human_review. Refreshed reports live: /jessar-qa-report + /jessar-pdp-v2-review. Rollback 2026-06-01-pre-fix intact; Shopify untouched.
    2026-06-02 · Session 19 · Sean / RevShift
  • Category mis-map fix — TAPS is electrical, not faucets (2026-06-02). 17 electrical outlet-tap/adapter SKUs (3-70611…3-70624, 3-70701/703/704) were mis-categorized "Kitchen — Faucets & Taps". Root cause: CATEGORY_MAP["TAPS"] in generate_product_content.py + fill_content_gaps.py mapped the electrical "TAPS" classification code to plumbing faucets, and also routed it to the kitchen writing voice. Fixed at source (4 spots, 2 scripts → "Electrical — Power" + electrical voice) and in derived data (product_content.csv, regen_input, content_batches). Verified: zero genuine faucet products exist in the catalog (nothing wrongly reclassified); v2 content was not voice-contaminated (gold-based regen produced correct electrical tone).
    2026-06-02 · Session 19 · Sean / RevShift
  • Adversarial QA of v2 PDP content — all 1,667 SKUs (2026-06-01). Independent QA workflow — 67 auditor agents that did NOT write the content (read-only, Max plan, zero API) — scrutinized every v2 block against its raw sources + old data, hunting source-priority violations, unverifiable claims, dropped features, spec conflicts, brand-line errors, FR quality. Survived a power-failure interruption (stalled at 318 → resumed via missing-only manifest + a durable scheduled task, now disabled). Result: 58.4% clean · 34.4% minor · 7.2% major (120 SKUs with customer-visible factual errors). Per-tier major rate: Jessar Lighting 13.0% (worst), JS Maison 11.1%, Xtricity 6.7%, JS Gourmet kitchen/home 6.0% (best substantive tier). Defect types: dropped_feature 367 · unverifiable_claim 253 · spec_conflict 161 · internal_inconsistency 124 · source_priority 74 · brand_line_error 31 · fr_quality 18. Systemic root cause for most majors: on lighting/bulbs the pipeline trusted xlsx/catalog over the BOX/PRESENTATION on physical specs (e.g. labeling a "DO NOT USE WITH DIMMER" bulb as dimmable; 1-year vs box's 3-year warranty). Self-grading had rated these needs_review=false, so the adversarial pass caught ~120 errors that would otherwise have shipped — vindicating the decision to QA rather than trust self-reports. Report (filterable major/minor, source-cited fixes) live at revshift-internal.vercel.app/jessar-qa-report. No content modified — verdicts in work/qa_findings/ only; rollback point pre-qa-2026-05-27 + data snapshot intact. New scripts: aggregate_qa.py, render_qa_report.py. Next: fix plan pending Sean's go.
    2026-06-01 · Session 18 · Sean / RevShift
  • v2 PDP content regeneration — all 1,667 SKUs (2026-05-27). Final assembly pass via background Workflow (56 + gap-fill batches, Max plan, zero API). For every SKU, regenerated the complete front-facing PDP block — title · romance EN/FR · description EN/FR · features EN/FR · specs — FROM the validated gold as atomic source of truth. Old v1 romance/description used as tone inspiration only, never copied; the pre-validation errors gold caught (cast-iron mislabeled "ceramic," carton dims as product size) do not reappear — verified on 7-99512 (enameled cast iron, correct specs). Hard namespace separation: writes only to work/product_content_v2/ → product_content_v2.csv; old product_content.csv is read-only reference (powers the viewer's Compare-with-v1 toggle), never written. Normalized product_line casing (VerAroma→Veraroma, IBake→iBake) + cleared a model-name false-positive (RIPPLE). Final: 1,667/1,667, 0 integrity issues, 149 brand-line SKUs (Beauty Cover 74 · Veraroma 29 · Inspiration Italia 25 · Laguiole 8 · iBake 7 · Limpus 6), 53 needs client verification (each carries its flag note). New scripts: build_regen_input.py, aggregate_pdp_v2.py, render_pdp_v2_review.py. v2 review viewer (per-SKU verify banner + note + Compare-with-v1 toggle + brand-line/needs-verification filters) live at revshift-internal.vercel.app/jessar-pdp-v2-review. Push-time freeze+guard deferred to export build. Shopify untouched — pending Sean review → client verification of the 53 → sync.
    2026-05-27 · Session 17 · Sean / RevShift
  • Second pass — brand-line identity + manuals + electrical xlsx (2026-05-27). Pre-review diligence found brand-line identity was barely surfaced — only 9 of 148 line-branded SKUs (~6%); the Laguiole knives worked only because "Laguiole" was incidentally printed on the box. Root cause: product_line was never fed into the feature bundles and sub_brand was the stale generic. Fixed by enhancing the bundle builder with product_line (inferred_product_lines.csv), corrected sub_brand (4-brand prefix map), manual OCR text (work/manual_ocr — 629 manuals extracted 2026-05-13 but never used; 392 primary SKUs), and the Electrical/Beauty Cover Inventory xlsx (newly mined → 863 rows). Re-enriched 196 priority SKUs (148 product-line + 85 JS Gourmet/Maison-with-manuals). Brand-line coverage now 148/148 (100%) — every Veraroma/Beauty Cover/IBake/Inspiration Italia/Limpus/Laguiole SKU surfaces its line as a dedicated brand_line feature. Accuracy guard: dropped false protected-origin claims (Laguiole/Inspiration Italia = style/collection, all made-in-China per box — no false France/Italy claims). Final gold: 9,370 features, 172 brand_line, 4,715 junk dropped, 796 OCR repairs, 59 needs_human_review. Flagged a few product_line mislabels (Veraroma vs Inspiration Italia) for Sean. Shopify untouched.
    2026-05-27 · Session 16 (2nd pass) · Sean / RevShift
  • Full LLM feature validation + enrichment pass — all 1,667 SKUs (2026-05-27). Ran entirely on the Max plan via batched general-purpose subagents (zero API spend). Synthesized one authoritative, bilingual (EN + Quebec FR), front-facing feature set per SKU from ALL sources — presentations = primary source of truth, Items-Jessar xlsx = authoritative for spec/material verification, plus catalogs, WooCommerce, and deterministically-cleaned box OCR. New sources mined this pass: 1,957 SSD presentation PDFs (653 primary SKUs), "Presentations for Sean" deck, xlsx desc-an/fr/description columns. Result: 9,304 features (5.6/SKU, 94% high-confidence), 4,727 junk lines removed, 794 OCR misreads repaired, 43 SKUs flagged needs_human_review. Subagents caught substantive errors that would have shipped to live PDPs: cast-iron mislabeled "ceramic," carton dims passed off as product size, "grounded 3-conductor" copy on an ungrounded cord (safety), AI features describing a glass jar on a cutting board, fabricated rated-life/warranty figures, wrong-market voltage specs. Pipeline scripts: extract_presentations.py, build_xlsx_descriptions.py, clean_box_features.py, build_feature_input_bundles.py, aggregate_gold_features.py, render_gold_features_review.py. Output: work/features_gold/*.json + work/features_gold.csv. Shopify NOT touched — Sean reviews the gold set first at revshift-internal.vercel.app/jessar-gold-features-review.
    2026-05-27 · Session 16 · Sean / RevShift
  • Product-line cleanup pass (2026-05-15). Three targeted corrections on the live dev store (78 products, 0 errors, all verified live). (1) Cleared jessar.product_line on 12 false positives — 5 Mason/Dublin ("Mason" = generic jar type + a bath pillow; "Dublin" = a Jessar Lighting drum-fixture model name + a glass-cup style — neither a marketing brand) and 7 "Beauty Cover" that were actually electrical junction boxes/covers (Xtricity), mis-tagged by an unreliable 'BC' supplier-code rule. (2) Rerouted 65 genuine Beauty Cover SKUs (prefix 7-) from vendor JS Gourmet → JS Maison — Beauty Cover is home/bath/decor, not kitchen. (3) Promoted 1 USB-touch-lamp outlier (7-99858 "Wooden Tripod Nightstand Lamp") JS Gourmet → Jessar Lighting to match the other 37. Findings: the original "81 Beauty Cover / 5 false positives" framing was off — actual was 74 genuine (65 prefix-7 to reroute + 9 prefix-6 already JS Maison) + 7 electrical false positives; and Shopify Standard Taxonomy has no "Table Lamps" leaf — hg-13-5 "Lighting > Lamps" is the most specific node and the 38 USB lamps were already there + already Jessar Lighting (37/38), so that task was effectively pre-satisfied by the 2026-05-13 vendor fix. Hardened scripts/extract_product_lines.py (dropped Mason/Dublin from KNOWN_LINES; removed the supplier-code source wholesale — 7/7 false positives); inferred lines 160 → 148. New scripts: clear_false_product_lines.py, reroute_vendors_2026-05-15.py. Resume-safe logs: work/product_line_clear_log.csv, work/vendor_reroute_log.csv.
    2026-05-15 · Session 15 · Sean / RevShift
  • Product-line discovery + push (2026-05-14). Sean spotted that JS Gourmet has sub-brands / marketing lines (Laguiole knives, Beauty Cover bedding, Veraroma drinkware, IBake bakeware, etc.) that we were flattening to a single sub-brand vendor. Built scripts/extract_product_lines.py to mine these from existing data: box artwork OCR text (90 SKUs detected), WordPress titles in wp_name (63), and supplier code prefix in master xlsx code-pro-frn (7). Discovered 160 SKUs (10% of primary) with identifiable brand lines — Beauty Cover (81), Veraroma (35), Inspiration Italia (18), Laguiole (8), IBake (7), Limpus (6), Mason (3), Dublin (2). Created jessar.product_line metafield definition (48 jessar.* defs total) and pushed all 160 values via batched metafieldsSet (scripts/push_product_lines.py) — 160/160 OK in 7 seconds. Live verified: 7-99096 = vendor JS Gourmet + product_line Laguiole; 7-10001 = vendor JS Gourmet + product_line Beauty Cover. Also rebuilt the Jessar-facing review file as .xlsx instead of CSV (work/jessar_review_2026-05-14.xlsx, scripts/build_jessar_review_xlsx.py) — 3 sheets (README, Products, Certifications), value-inclusive cells (shows the actual extracted value, not just ✓), color-coded green/amber/red for source-of-truth, low-intensity instructions, frozen header. Added 4 new columns Sean requested: warranty_period, certifications, heat_resistance, needs_review_or_correction, general_notes_from_jessar. Heroes sorted first. Product-line column added between sub_brand and category.
    2026-05-14 · Session 14 · RevShift
  • Shopify migration push complete + post-push refinement (2026-05-13). Full first-pass migration to Shopify dev store: 1,667 primary SKUs live as ACTIVE products. End-to-end pipeline ran across 4 stages: bulk image upload (1,735 OK + 29 failed at 87.9 min), product create (1,667 OK at ~70 min), Shopify Standard Taxonomy category assignment (1,665 OK at ~22 min), variant SKU/barcode fix (1,667 OK at ~36 min). Found two notable bugs mid-run: Shopify GraphQL 2025-01 moved variant.sku → inventoryItem.sku (the original push silently dropped SKUs — scripts/fix_variant_skus.py repaired all 1,667); and assign_product_categories.py needed resume-safe skip-done logic after parent-shell killed it at 941/1,667. Post-push refinement pass (per Sean): (a) Push errors validated — 0 real misses; the 6 "errors" were the same 3 SKUs from pre-fix API-version-discovery attempts that succeeded on retry. (b) 29 failed images recovered — failures were large Exif-laden JPEGs Shopify's image processor rejected; scripts/retry_failed_images.py re-encodes via sips (max 2048px, format=jpeg, options=85) before re-upload + attaches to products via productCreateMedia. 100% image coverage now. (c) Vendor fix (scripts/fix_vendor_to_subbrand.py) — replaced "Jessar Industries" parent vendor with actual sub-brand per SKU prefix (resolved 4-brand mapping from 2026-05-07): JS Gourmet (883), Xtricity (483), Jessar Lighting (254), JS Maison (18), Jessar Industries fallback for 2-prefix (29). Affects Shopify vendor filter, Search & Discovery facets, Google Merchant feed. (d) 20 metafields pinned at top of product editor (scripts/pin_metafields.py) — Shopify's hard 20-pin limit consumed by: sub_brand, msrp_cad, qty_per_package/container, dimensions (×2 unit systems), weight (×2 unit systems), capacity, set_count, master_carton_dimensions, materials, color_finish, lid_material, care_instructions, safety_claims, heat_resistance, warranty_period, certifications, feature_callouts. Lighting-specific fields (wattage/voltage/lumens/etc.) remain accessible under "View all metafields" but unpinned. (e) Taxonomy validated — distribution looks correct, 8 spot-flagged cases all checked out. Outputs: work/shopify_products_pushed.csv, work/category_assignment_log.csv, work/variant_fix_log.csv, work/vendor_fix_log.csv, work/sku_image_urls.csv, work/reencoded_images/. Commit da64e00 for the push, follow-ups in this session.
    2026-05-13 · Session 13 · RevShift
  • Apple Vision OCR pipeline + Jessar meeting brief (2026-05-12, overnight). Built and ran an OCR pipeline over 900 housewares-tier box-artwork PDFs that PyMuPDF couldn't fully read — rasterized/outlined text baked into artwork is invisible to text-layer extraction. Uses a tiny Swift CLI (scripts/ocr_image.swift → scripts/ocr_image) calling Apple Vision's VNRecognizeTextRequest with EN+FR language support — zero pip deps, on-device, no API tokens. Python orchestrator (scripts/ocr_box_artwork.py) renders each PDF page to 250 DPI PNG, batches through the Swift binary, filters print-production noise, saves to work/box_artwork/<sku>/<stem>.ocr.txt. Run completed in 57 min: 852/900 SKUs OCR'd, 940 PDFs, 31,883 lines recovered, zero errors. Pattern discovery on the full corpus surfaced missing patterns; added "Do not put in dishwasher or microwave", single-axis inline dims (w (width): 35 mm), master carton dims, standalone wattage. Re-extracted with --local --fresh. Housewares tier — the priority gap is now mostly closed: 7- JS Gourmet basic spec coverage (≥3 categories) jumped from 31% → 64% (+33pp); rich (≥5 categories) 9% → 24% (+15pp). 6- JS Maison basic 61% → 89%, rich 39% → 56%. Overall primary-tier: 1,667 SKUs, 1,489 (89%) with box-artwork features, 1,477 (89%) with any structured spec, 1,136 (68%) with usable spec table, 544 (33%) rich. made_in 36% → 59%, care (dishwasher/microwave/freezer) 14% → 21%, standalone width/height 6% → 30%+. Built scripts/render_jessar_meeting_brief.py — the Tuesday-call deliverable showing per-sub-brand coverage tables, per-spec-field × prefix heatmap, concrete ranked asks for Jessar (inserts/instructions, UPC list, certifications by family, spot-check on 900-row data request CSV, confirm 4 missing hero SKUs). Live at revshift-internal.vercel.app/jessar-meeting-brief. Companion work/jessar_data_request_2026-05-12.csv (900 rows of 6-/7-prefix housewares with we_have_X and NEED_X columns) attached to meeting prep. Retailer scraper stays parked — Linen Chest is JS-SPA, Amazon returns paid-placement noise; will rebuild as UPC-based once Jessar supplies UPC list.
    2026-05-12 · Session 12 · RevShift (overnight autonomous run)
  • Box artwork v2 extraction — structured spec coverage 34% → 96% (2026-05-11). Rebuilt the box-artwork spec extractor after surveying raw text dumps and confirming v1's KEY:VALUE regex was missing the bulk of real callouts. v1 required Material: / Voltage: / Wattage: prefixes but real artwork uses standalone callouts (2W, 120 VOLTS, 5000K, AMBER) plus multi-line dimension blocks (Beauty Cover layout where width: and 163.5 and cm end up on three separate lines after PyMuPDF text extraction). v2 adds a categorised rules table with 30+ patterns binned into 24 categories — wattage, voltage, color_temp, lumens, life_hours, beam_angle, base_type, bulb_shape, dimmable, dimensions, width/height/depth/length/diameter, weight_net/gross, capacity, set_count, made_in, color, care, usage_environment — plus a multi-line dimension recovery pass keyed on label lines (width: / largeur: etc.) that scans 4 lines ahead for numeric + unit. Added --local mode that re-extracts from the existing work/box_artwork/<sku>/*.txt dumps without needing the SSD remounted, and --fresh to truncate before writing (CSV schema changed: new structured_specs JSON column + structured_count). New CSV: 2,697 SKUs, 11,862 total structured values, 96% of SKUs have structured spec data (up from 34% KV-only). Top category coverage: dimensions 74.5%, made_in 65.3%, voltage 26.6%, base_type 26.5%, wattage/lumens/life_hours/color_temp each ~18–19% (lighting tier), capacity 14.5%, color 12.1%. render_product_content_review.py updated to render a structured spec table per card (two-column key/value grid in JetBrains Mono, ordered by spec category, deduped against the raw KV fallback). 87% of primary SKU cards now show structured specs in the dashboard. Live at revshift-internal.vercel.app/jessar-content-review. Practical implication: the PDP spec table on the new site can now be populated from box artwork for ~1,448 of 1,667 primary SKUs without retailer scraping — retailer scraper becomes a cross-validation source, not the primary source.
    2026-05-11 · Session 11 · RevShift
  • Sub-brand → prefix mapping RESOLVED by Jessar (2026-05-07). Jessar returned the completed mapping (work/sub_brand_mapping_RESOLVED_2026-05-07.csv): 154 groups across 2,560 SKUs, 100% assigned. Headline finding: at the data tier there are FOUR sub-brands, not ten. JS Gourmet (7-) = 1,264 SKUs; Jessar Lighting (5-) = 358; JS Maison (6-) = 236; Xtricity (combined 1- + 3- + 4-) = 702. The other catalogue names we'd been treating as sub-brands (Beauty Cover, Cook & Fresca, IBake, Limpus, Pop Fluff, Veraroma) do not have unique SKU prefixes — they are marketing identities / product lines that roll up into the four data-tier brands. Specifically: 6-CLEN-* groups (Limpus territory) all mapped to JS Maison, not Limpus. Implication for the homepage: home_sm_v6 currently frames the portfolio as "3 flagship + 7 specialty ribbon = 10 brands." This may need to be reframed as "4 house brands + product lines" to match data-tier reality — or kept as is if Sean decides the catalogue-tier identities (which appear on jessar.ca today) should remain as marketing labels. DECISION NEEDED from Sean. Sub-brand mapping was the single biggest unresolved data-foundation question; Phase 1 is now effectively unblocked.
    2026-05-07 · Session 10 · Jessar
  • home_sm_v6 deployed — homepage canonical (sixth iteration, same session). Four refinements vs v5 per Sean's review: (1) Background flip — brand portfolio now anchored on canvas (white-ish) so cards POP like in v3; markline flipped to canvas-warm to maintain alternating rhythm down the page. (2) "In focus this season" (NEW, position 5) — editorial seasonal moment extrapolated from the v4 spotlight idea, but spread across multiple brand domains rather than tied to a single product. 3-up triptych: tabletop (JS Gourmet) / bedroom (Beauty Cover) / living room (Jessar Lighting). Each tile is image placeholder + italic caption. Editorial breath between the two navigational moments (find by brand → editorial → find by category). Single CTA "See the seasonal feature" routes to a curated landing page. (3) Catalogue eyebrow renamed — "Browse by category" (was "Browse the catalogue") to make the by-category nav explicit. Pairs cleanly with the brand portfolio's "Our brands" eyebrow. (4) Wordmark text removed from the nav — real Jessar logo image stands alone. Cleanup propagated across all six versions: v1, v2, v3 had text-only wordmark replaced with logo image (CSS updated); v4, v5 had the wordmark span removed. Live at jessar.revshiftmedia.com/home_sm_v6.
    2026-05-07 · Session 10 (6th iteration) · RevShift
  • home_sm_v5 deployed — homepage (superseded by v6 same session). Three substantive changes vs v4 per Sean's review: (1) Flagship brand swap — Xtricity + Jessar Lighting moved to the specialty ribbon; JS Maison + Beauty Cover promoted to flagship. The homepage now leads with the consumer-housewares story (JS Gourmet kitchen / JS Maison home & furniture / Beauty Cover bedroom textiles). All three flagship cards now use real logos (Sean-supplied). (2) Featured product spotlight cut — Jessar isn't e-commerce. The website's job is to tell the brand story and route people into the catalogue, not to push individual products. (3) "Browse the catalogue" (NEW) at position 5 in the spotlight's place — five-tile category navigation moment. Top row: Kitchen + Home & Bath as 50/50 hero tiles (the consumer-everyday categories where the flagship brands live). Bottom row: Lighting + Electrical + Cleaning as third tiles. Each tile maps category → constituent brands so users route from category to brand seamlessly. Together with the brand portfolio above (find by brand), gives two clean entry paths into Jessar's offering. v1–v4 retained as comparison. Live at jessar.revshiftmedia.com/home_sm_v5.
    2026-05-07 · Session 10 (5th iteration) · RevShift
  • home_sm_v4 deployed — homepage (superseded by v5 same session). Corrects v3 across five axes: (1) magazine framing cut entirely — no Issue 01, no Spring '26 (this is a homepage, not a publication); (2) "in commission" copy stripped everywhere — clean Shopify-style image placeholder wireframes (line-art icon + dimension label only, no apologetic text); (3) real Jessar logo + Cormorant wordmark in nav; (4) real sub-brand logos for 5 of 10: JS Gourmet, Xtricity (flagship); JS Maison, Beauty Cover, Limpus (specialty). Clean placeholders for the remaining 5 (Jessar Lighting, Cook & Fresca, IBake, Pop Fluff, Veraroma) until logos supplied; (5) hero rebuilt as full-bleed image placeholder + overlay text — drops in any 1920×1080 lifestyle photo and the hero is finished. Structure rebuilt: markline moved from position 6 to position 3 (brand thesis primes the page); featured spotlight restored at position 5 (anchors the abstract "ten brands × ~2,000 SKUs" claim in one tangible product); banners moved from position 4 to position 8 (action surface comes after the page has earned attention); promise strip cut (redundant with credibility numbers); standalone lifestyle moment cut (its purpose absorbed into the image-led hero). Net: 11 sections + footer, down from 13. Narrative arc: Hook → Thesis → Show → Prove → Trust → Mood → Convert → Validate → Decide. Caraway-inspired bones; clean Shopify wireframe placeholders communicate intent without apologizing. Live at jessar.revshiftmedia.com/home_sm_v4.
    2026-05-07 · Session 10 (4th iteration) · RevShift
  • home_sm_v3 deployed — homepage (superseded by v4 same session). Corrects v2 across four axes per Sean's review: (1) width — bg full-bleed (canvas to screen edge), inner content max-width 1480px (v2's 1600px page-frame felt cramped); (2) brand count — TEN brands per PROJECT.md §6 architecture, not 3 (3 flagship cards: JS Gourmet sage / Xtricity dusty / Jessar Lighting terra, over a 7-card specialty ribbon: JS Maison · Beauty Cover · Limpus · Cook & Fresca · IBake · Pop Fluff · Veraroma); (3) hero — magazine-cover treatment, NOT PDP-shaped (full-bleed atmospheric bg with subtle texture grid, massive Cormorant headline "A Canadian story, in ten brands.", framing rules above and below carrying eyebrow + Issue tag and lede + CTA pair, source tag bottom-corner — totally different vocabulary from PDP); (4) banners — 3-up promotional row added per Month-2 SOW deliverable and client request (featured collection · accent-gradient dealer banner · dark-ink retailer banner). Plus: promise strip ribbon (mono-caps single-line credibility band below hero), 4-up reels grid (added Beauty Cover), approach narrative updated to ten-brand portfolio story. Bug fix: .footer class collision between page footer and brand-card footer resolved by renaming inner class to .brand-foot. Live at jessar.revshiftmedia.com/home_sm_v3.
    2026-05-07 · Session 10 (3rd iteration) · RevShift
  • home_sm_v2 deployed — homepage (superseded by v3). Corrects v1's positioning error: Jessar is a Canadian distributor, not a curator. All curation language stripped. New hero: "A Canadian story, in three brands." New markline: "Three brands. Thirty years. Ten provinces. One Canadian distributor — family-run since 1996, supplying retailers from coast to coast with housewares worth carrying." Net additions vs v1: width-contained 1600px page-frame (no sprawl on wide screens) · lifestyle photography moment (full-bleed, 21:9) · highlighted reels grid (3-up 9:16, in commission) · dedicated brands navigation (3 large interactive cards as primary nav moment, not just descriptive triptych links). PDP design vocabulary applied throughout: 4:5 warm panels with mix-blend-mode multiply, source tags, hairline meta-row beams, oversized Cormorant marks. Live at jessar.revshiftmedia.com/home_sm_v2.
    2026-05-07 · Session 10 cont'd · RevShift
  • home_sm_v1 deployed — Soft Modern homepage (superseded by v2). Editorial homepage in Direction B vocabulary, continuous with the PDP. Ten sections: nav · editorial hero ("Housewares, considered.") · 60-word manifesto · sub-brand triptych (JS Gourmet sage / Xtricity dusty / Jessar Lighting terra) · JS Gourmet spotlight · approach narrative ("Family-run. Canada-based. On a first-name basis…") · 4-cell hairline credibility row (3 brands · ~1,200 SKUs · 10 provinces · 30 yrs) · press placeholder (aspirational, dashed-border badge with pulsing dot) · two-paths CTA (Find a Retailer tagged "Decision Pending" per Sean) · footer. Strategy: brand elevation, not catalog port. Sub-brand portfolio treated as curated trio identity moments rather than 5–6 logo strip. Category tile section deliberately omitted (sub-brand triptych implies domain). Government sales section scrubbed (contamination from outdoors-gear reference). Live at jessar.revshiftmedia.com/home_sm_v1.
    2026-05-07 · Session 10 · RevShift
  • Migration scope confirmed: 1,667 SKUs (primary tier only). The 3,211 figure in reports is the full DB universe — not the migration scope. Rule: master files (Items-Jessar + Electrical/Beauty Cover) are source of truth. In masters → migrate. On site but not in masters (366 "investigate") → skip, low priority, already validated. Catalog/Master Sku xlsm only (1,018 secondary) → ignore for now. Eco-fees + discontinued (160 excluded) → never. Product content review showing 1,667 is correct.
    2026-05-07 · Sean
  • hero_pdp_sm_v2 approved — canonical Soft Modern hero render. Synthesizes Direction B palette/type with structural craft from v0_1_c (Direction C): 4:5 warm image panel (mix-blend-mode multiply), meta-row as hairline-bordered structural beam, 4-col hairline build grid with Cormorant Garamond values, oversized Cormorant sub-brand mark (clamp 54–84px), warm canvas-warm use-tiles, centered story (880px max-width), accent-light dealer CTA. "RECOVERY" annotation tag documents craft recovered from v0_1_c. Sean: "its excellent. Very happy. Ill be buying Hyper and we'll start diving in." Live at jessar.revshiftmedia.com/hero_pdp_sm_v2.
    2026-05-06 · Session 9 · Sean / RevShift
  • hero_pdp_sm_v1 deployed — hero PDP in proper Soft Modern. Extends standard_pdp_sm_v1 with 10 sections (vs standard's 7): hero split (romance lede + highlights strip), story (image + narrative, italic headline), pillars (3-col product truths, no italic), made for (full-bleed dark, italic on emotional line), specs (dark panel), full sub-brand block (image + narrative, italic on tagline), dealer CTA (dark panel, left CTA + right B2B data table), curated cross-sell ("Complete the set"). Section annotation drawer maps all metafield sources and hero-vs-standard delta. Live at jessar.revshiftmedia.com/hero_pdp_sm_v1.
    2026-05-06 · RevShift
  • standard_pdp_sm_v1 deployed — proper Soft Modern standard PDP. Built from Direction B design logic (not layout-adapted from prior explorations). 55/45 gallery-first hero grid (max-width 1340px), features shown openly (editorial clarity), accent (#C87A5E) limited to 5 places, meta strip understated at column bottom, gallery warm gradient. Italic rule applied throughout. Live at jessar.revshiftmedia.com/standard_pdp_sm_v1.
    2026-05-06 · RevShift
  • Italic rule formalized. Cormorant italic reserved for: section-level storytelling labels, brand names in prose paragraphs, and emotional lines within narrative sections (made-for, story, sub-brand tagline). Never on: product titles, navigational headings, pillar attribute names, spec data, or cross-sell headings. Applies across all sm_v1 renders and all future Soft Modern work.
    2026-05-06 · Sean / RevShift
  • Exploration renders produced (v3 + v0_1_b). standard_pdp_v3: merged v2 Direction B palette + v0.1a constrained grid, fixing screen-stretch (max-width: 1380px). standard_pdp_v0_1_b: v0.1a layout with Direction B colors replacing Fraunces/Warm Editorial treatment — confirmed doesn't work (palette mismatch; Cormorant Garamond doesn't do the tonal work Fraunces did). Conclusion: build Direction B from its own logic, not by translating from Direction A layouts.
    2026-05-06 · RevShift
  • revshift-internal.vercel.app established as RevShift agency-wide cross-client hub. Each client (Jessar, Corbeil, Decorolala, etc.) gets their own section. Future internal tools across all projects are centralised here, keeping client-facing deliverables sites (e.g., jessar-deliverables.vercel.app) clean. Index at /Users/macbookpro/Downloads/RevShift Media/revshift-internal/.
    2026-05-05 · Sean
  • Product content review added to deliverables hub. product_content_review.html (all 1,667 primary SKUs, searchable + filterable by category/status) live at jessar-deliverables.vercel.app/product_content_review. Internal RevShift tool — not Jessar-facing.
    2026-05-05 · RevShift
  • Direction B renders v2 deployed. Three full Direction B locked renders live at jessar-deliverables.vercel.app: hero_pdp_v2 (JS Gourmet steak knives — 11 sections: story, build, made-for, dark specs, sub-brand block, dealer CTA), standard_pdp_v2 (Xtricity LED — streamlined, 3 accordions, dusty-blue dot), collection_page_v1 (Kitchen & Dining — brand-pill filters, sticky toolbar, 3-col grid with 2-col hero card). RevShift Notes drawers document Hyper section mappings. Nothing touches Shopify until Sean approves.
    2026-05-05 · RevShift
  • Brand direction locked — Direction B (Soft Modern), default palette. Coral #C87A5E, off-white canvas #F8F5F0, Cormorant Garamond (display 300–500wt) + Inter (body 400/500) + Geist Mono (SKU/specs). Sub-brand dots: sage #7D9078 / dusty blue #7A8A9C / terracotta #B8755A. Italic-as-emphasis active. Unblocks hero PDP Liquid port, metaobject schema (sub_brand accent_color field), Phase 3 design system build. Walnut & Saffron ruled too close to Caraway; Stone & Plum too narrow for Jessar's product breadth. Decided by Jessar at 1pm meeting.
    2026-05-05 · Jessar
  • Certifications strategy pivoted. Vision extraction pass deprioritised. 234 SKUs already have cert data from text extraction. Remaining 1,433 active SKUs compiled into work/cert_request.csv (High/Med/Low priority by category) for Jessar to fill in directly. Faster and more reliable than image logo extraction. If Jessar cannot provide promptly, vision pass will run overnight.
    2026-05-05 · RevShift
  • Content generation complete. All 93 batches done. work/product_content.csv generated — 1,667 rows, 10 columns including certifications. 1,388 SKUs with AI-generated romance + description copy; 279 with extracted data only. Unblocks Phase 4 standard PDP population.
    2026-05-05 · RevShift
  • Content extraction pipeline complete. All 1,557 box artwork PDFs processed; 110 SKUs had no PDF (stubs written). 17 fields extracted per SKU from PDF text, WooCommerce spec tables, and name-embedded specs. Weight merged from Items-Jessar for Sean.xlsx (poid-stoc column): 2.2% → 60.3% coverage (969 fills). Dimensions: 75.9% → 94.2% (305 fills). Key output: work/extracted_content.json (1,667 records) + work/content_gaps.csv. Data gap report and phase1 one-pager updated. Certifications: logos are image-embedded in PDF artwork — 14% from text extraction; 1,343 SKUs queued for vision pass (scripts/extract_certifications_vision.py). Care instructions: not a universal gap — correctly null for lighting/electrical; real gap is KITCH category (32.9% coverage within 608 kitchen SKUs). Romance copy: 845 EN SKUs to generate using title + category + specs + POC voice rules.
    2026-05-03 · RevShift
  • SSD asset index complete. Seagate drive fully walked: 9,430 real files (5,740 box artwork PDFs, 3,679 studio photos from Quasimodo), covering 2,865 of 3,211 DB SKUs (89%). Primary-tier coverage: 99.8% (1,663 of 1,667 SKUs matched). Key gap confirmed: zero lifestyle photography exists for any hero candidate — needs commission or AI-generation decision before hero PDP build begins. 4 hero SKUs (7-99738, 7-98690, 7-99754, 7-99757) not in unified DB — Michael to confirm. 4 malformed primary SKUs (extension cords with product names in SKU field) flagged for manual cleanup. See ssd_asset_coverage.
    2026-05-03 · RevShift
  • Jessar-facing project hub shipped. Parallel landing page at jessar-deliverables.vercel.app/jessar_hub — only client-facing items, grouped by purpose: (1) Read first (Phase 1 one-pager), (2) Decision needed (customer-edition brand direction), (3) Tools for your team (Product DB Viewer + Data Gap Report), (4) Tasks for specific people (hero candidates for Michael + intern brief), (5) Coming with launch (draft management guide). Internal artifacts deliberately omitted: open items dashboard, project state snapshot, internal PDP renders with annotation drawers, site architecture, brand guide v0.x with internal pills, investigation reports, WP audit. Sean's existing internal index now carries a top-card link to the Jessar hub so he can find it. Audience-split is more reliable than relying on the client to ignore "For Sean" tags on a shared hub.
    2026-04-30 · Sean / RevShift
  • Standard PDP rendered alongside the 3 hero directions. Same product (7-99096) so the visual delta between hero and standard is unambiguous. Specs-forward, fast to scan, B2B-friendly — specs panel is the centerpiece (full B2B detail, dark inverse). No story / build / made-for sections (storytelling metafields skipped at render when jessar.is_hero is false). Sub-brand reduced to a single-line inline credit. Cross-sell uses Shopify auto-recs (vs hero's curated related_products). "Behind the page" drawer maps every section + flags hero-only metafields as "skipped" with explicit comparison notes vs the hero PDP. Direction-agnostic — B/C palette/typography swaps the same way the hero renders do. View →
    2026-04-30 · RevShift
  • Site architecture locked. PROJECT.md §6 placeholders (sitemap, URL/taxonomy, filter/facet strategy) all filled in. Working reference shipped at jessar-deliverables.vercel.app/site_architecture — 27 page specs, four fields each (Purpose · Sections · Data sources · Done criteria). Sitemap: home → 10 sub-brand pages → 5 cross-cutting category collections → product PDPs (hero + standard templates) → static (partners, about, become-a-dealer, contact) → policies → utility (search, 404). URL pattern: /brands/{handle}, /collections/{handle}, /products/{handle}, FR mirror via /fr/. Filter strategy: native Hyper UI, metafield-driven, no third-party app. Out of scope (locked): store locator, dealer portal, retailer application form, customer accounts, cart, blog, refund/shipping policy pages.
    2026-04-29 · RevShift
  • Hero PDP rendered in all 3 directions on real product 7-99096 (JS Gourmet steak knife set). Same EN+FR copy, same structure, same "Behind the page" metafield-map drawer; differs only in typography (Fraunces / Cormorant Garamond / Newsreader), palette (warm walnut / soft coral / acacia-sage), italic-emphasis treatment, and sub-brand expression (filled pill / 6px dot / bordered material card). Direction badge top-left for instant identification. A · B · C.
    2026-04-29 · RevShift
  • Shopify code commenting + change-log convention locked in. Every theme edit gets an inline RevShift - YYYY-MM-DD - What it is comment + a per-file change log at /docs/shopify_code_changes/<flattened-path>.md showing original + final only (no intermediates). Saved to memory so it persists across sessions. Required for client handoff: Jessar can grep "RevShift" to find every customization, and read a single change-log file per theme file to understand what we did.
    2026-04-29 · Sean
  • Client management how-to skeleton shipped at jessar-deliverables.vercel.app/management_guide_v0_1. Section-by-section reference mirroring the hero PDP exactly: what drives each section, where to edit in admin, bilingual flow, step-by-step. Skeleton level for now (screenshots get added once Hyper is live + metafields populated).
    2026-04-29 · RevShift
  • Asset indexer scaffolding ready (scripts/index_ssd_assets.py). Walks $JESSAR_ASSETS, extracts SKUs from filenames + parent folders, joins against unified DB + hero list, outputs per-SKU coverage report (HTML + CSV + JSON). Handles "volume not mounted" gracefully. The moment SSD finishes copying: one-command run produces a coverage report flagging which heroes need lifestyle imagery commissioned.
    2026-04-29 · RevShift
  • Hero candidates selection tool shipped to Vercel. jessar-deliverables.vercel.app/hero_candidates_for_michael — single self-contained HTML with all 50 unique product concepts as cards, grouped by category, live counter targeting 20. Output CSV drops at /work/hero_selections_michael.csv; the build pass flips Michael's picks to tier=sow_hero.
    2026-04-28 · RevShift
  • SOW hero cap = 20. 50 candidates from Sean's curated list are now scope-tiered: Michael picks 20 → tier=sow_hero (full Caraway-style PDP). Remaining 30 stay tier=candidate and either bump to featured_extra if effort allows once brand direction locks, or defer to retainer. Curating 50 ≠ committing 50; protecting the 20-cap protects margin and timeline. Selection tool also hands Michael the call on which 20 — he knows which sell, we don't.
    2026-04-28 · Sean
  • Master corrections pipeline live. work/master_corrections.csv is the canonical override list, applied last in build_unified_database.py so corrections always win regardless of source-master errors. First entry: 7-98211 flipped to primary/preserve (Sean confirmed misclassification in Electrical/Beauty Cover Inventory). Migration buckets shifted: preserve 1099→1100, skip 1098→1097, secondary 1385→1384. Pattern: Sean adds rows, re-run build, deliverables refresh.
    2026-04-28 · Sean / RevShift
  • Cross-reference flag — 15 missing hero SKUs. 7-99738 family (S&P), 7-9975x families (Tea), 7-98690. Cross-check against new data when SSD/updated Items-Jessar arrives. If they're still absent from the canonical master after that pull, they shouldn't be hero candidates — flag back to Sean.
    2026-04-28 · Sean / RevShift
  • Privacy Policy + ToS drafted on Shopify (template). Sean emailed Jessar for legal confirmation. Refund + Shipping policies skipped per Sean — no transactions, so they don't apply. Phase 5 net change: 17 → 19 items (added Privacy/ToS [done], FR translation pass, footer wiring).
    2026-04-28 · Sean
  • Hero list received from Sean — 50 products / 88 SKUs. Parsed into work/hero_products_assigned.csv across 21 categories. 73 of 88 SKUs validated against unified DB; 15 missing (clustered around newest variant families — Salt & Pepper, Tea, Over-the-Door Hanger — likely from recent catalogs). Scope concern: 2.5-3.3x the original 15-20 hero PDP scope. Recommend tiering: top 15-20 get TRUE hero PDP treatment (story, lifestyle imagery, custom layout), other ~30 get "featured" treatment (premium copy + home placement, standard PDP). Awaits Sean's call.
    2026-04-28 · Sean / RevShift
  • Metafield revision per Sean — 22 → 17 defs. Removed 8 (4 bilingual _fr dupes since Translate & Adapt handles them, 2 _en suffixes collapsed, why_stock as forward-leaning, original_wp_url as post-launch dead-weight). Added jessar.catalog_pdf (file_reference) for downloadable B2B sell sheet pattern.
    2026-04-28 · Sean / RevShift
  • Phase 5 setup pass — 3 of 4 punch-list warnings cleared. Location updated to Jessar HQ (341 Allée du Golf, Saint-Eustache, QC J7R 0L5) · FR locale enabled + published (hreflang auto-emitted; dev plan only accepts base fr not fr-CA, sufficient for Quebec content) · 17 jessar.* metafield definitions on PRODUCT owner (revised set). Only remaining warning: Hyper demo→main flip (awaits Sean's purchase). Settings → General "About this store" address is read-only via API — values printed for manual UI paste.
    2026-04-28 · RevShift
  • Afternoon batch (7 items shipped): test product live at admin/products/10306878865730 (10 metafields applied) · Hyper validation removed from public hub · customer-facing brand guide derivative built · public hub redesigned (left-bar accent removed per Sean, palette retained) · redirect map draft (2,172 rows) · brand voice skeleton · Phase 5 Shopify smoke test ran clean (3 warnings for punch list).
    2026-04-28 · RevShift
  • Project State snapshot shipped — comprehensive where-we-stand / where-we’re-going deliverable. Phase grid, action lists for Sean + Jessar, brand-decision impact map, deliverables map by audience. View snapshot. Also: Shopify Access Setup section corrected to 4/4 Complete (was stale since OAuth exchange).
    2026-04-28 · RevShift
  • Brand guide v0.3 shipped — italic-as-emphasis pattern (per Our Place reference) wired into every mock + spec, plus 5 alternative Caraway-spirited palettes (Walnut & Saffron, Bone & Brass, Linen & Forest, Stone & Plum, Almond & Saddle). Pick a direction and a palette — mix-and-match. View v0.3.
    2026-04-28 · RevShift
  • Brand guide v0.2 shipped in response to Sean's feedback that v0.1 mocks looked alike. v0.2 loads real Google Fonts (Fraunces, Cormorant Garamond, Newsreader, Inter), uses all 9 palette colors per direction with semantic roles, and gives each direction its own distinct mock layout. View v0.2.
    2026-04-28 · RevShift
  • Overnight: 3 new deliverables live on jessar-deliverables.vercel.app. (1) brand_guide_options_v0_1 — 3 direction-setting candidates honoring Sean's serif+sans soft-Caraway constraint. (2) investigate_skus_report — 366 WP-only SKUs pre-triaged. (3) wp_category_audit — 147 categories scored (34 abandoned, 11 weak, 102 healthy) for IA input.
    2026-04-28 · RevShift (overnight)
  • Deliverables live on Vercel: jessar-deliverables.vercel.app. Built as replicable cross-client pattern (templates in polished-deliverables skill). Sean can spin up <client>-deliverables.vercel.app for any project in ~5 min.
    2026-04-27 · RevShift
  • Hyper theme VALIDATED. All 3 criteria pass — 5 collection templates, 9 product templates, native filtering/swatches/sorting, 93 sections incl. brand-logos, collapsible-tabs, comparison-table. FR locale built in. See /work/hyper_theme_validation.html. Pebble ruled out.
    2026-04-27 · RevShift
  • WP migration scope is just products + 301 redirects. No plugins, no blog, no menus (existing menu is messed up — we rebuild), no static pages exporting cleanly (we pull what's needed from products). Significantly tighter than first assumed.
    2026-04-27 · Sean
  • AI image + video generation pipeline for hero PDPs and social — feed base product photos, generate lifestyle imagery / short videos. Logged in Phase 6 / retainer scope; design hero templates with AI-imagery placeholder slots so they drop in cleanly.
    2026-04-27 · Sean
  • Phase 5 expanded with 3 critical migration items: 301 redirect map (WP slugs → Shopify URLs from Permalink column), Google Search Console setup, Google Analytics 4 setup. Confirm existing accounts first. Phase 5: 15 → 17 items.
    2026-04-27 · Sean
  • Built product_database_viewer.html — single self-contained file, 3,211 SKUs interactive (sort/filter/search/expand). For Jessar's team to triage at speed. Color-coded tier + action badges, completeness bars, missing-fields chips. Light + dark mode.
    2026-04-27 · RevShift
  • Bug fixes: dark-mode card on 1-pager (hardcoded cream → palette var); responsive breakpoint bumped to 1100px so vertical screens collapse to single-column before right column gets cramped. Skill CSS updated too.
    2026-04-27 · RevShift
  • Additional WP exports requested: Pages, plugin list, menu screenshot. Products export already has the URL slugs needed for 301 redirects.
    2026-04-27 · Sean
  • Tone POC approved by Jessar. Proceed with content gen in the existing voice. Q9 closed.
    2026-04-27 · Jessar
  • FR copy: we do it ourselves. Items-Jessar desc-fr already has 2,659 SKUs covered — we enhance rather than translate from scratch. Cherry-pick human review only. Shopify Translate & Adapt for fallback. Q10 closed.
    2026-04-27 · Jessar
  • MSRP populated from Items-Jessar col AO ("Selling Price"). Stays gitignored; pushed to Shopify as msrp metafield behind dealer login. Q6 fully resolved.
    2026-04-27 · Sean / Jessar
  • Partner logos: Sean procures from public sources (Costco, Linen Chest, Staples). Q17 fully resolved.
    2026-04-27 · Sean
  • Jessar intern available for data tasks. First brief: sub-brand mapping template.
    2026-04-27 · Jessar
  • Secondary product tier added to unified DB. Long-tail products from Master Sku / catalogs get priority_tier=secondary + parallel CSV. Ready to add later without pipeline rebuild.
    2026-04-27 · Sean
  • Data foundation summary refresh after SSD pull — current 1-pager is accurate to what's local; expect updates after asset bulk-copy.
    2026-04-27 · Sean
  • Dark mode + theme toggle on all Jessar HTML deliverables (progress.html, data_gap_report.html, phase1_data_state_one_pager.html). Respects OS preference; ☾/☀ toggle top-right persists to localStorage.
    2026-04-27 · RevShift
  • Unified product database is the Phase 1 deliverable. 3,211 unique SKUs, 5 migration buckets (preserve 1,099 · add 567 · cleanup 81 · investigate 366 · skip 1,098). Completeness scored. Pricing kept out of repo.
    2026-04-27 · RevShift
  • Shopify OAuth complete. shpca_* token stored in .env. Smoke-tested: shop = Jessar Industries Inc., CAD, EN primary, dev plan, 0 products. Granted scope = all admin (~70 scopes — Partner custom apps grant full access by default).
    2026-04-27 · RevShift
  • Hyper + Pebble both pre-installed as demo themes on the dev store (current main = Horizon). Hyper validation can proceed immediately via Shopify CLI pull of theme code without changing the live role.
    2026-04-27 · RevShift
  • WP vs masters reconciliation: 1,226 live + active (preserve), 110 live but discontinued (must clean up), 805 WP-only (status unclear), 440 active but missing from current site (must add).
    2026-04-27 · RevShift
  • Catalog PDFs are searchable text — no OCR needed. PyMuPDF extracted 1,767 SKU rows across 11 PDFs, 451 pages. Full text saved per page for content gen reuse.
    2026-04-27 · RevShift
  • Orange exclusion lives in Items-Jessar's On Hand sheet (not the SKU master). 119 SKUs flagged discontinued.
    2026-04-27 · RevShift
  • WP SKUs are in the Name field, not the SKU column. Built regex extractor.
    2026-04-27 · RevShift
  • WC CSV export is sufficient — REST API not needed for now. Sean uncertain about full API access; 2,196-product CSV covers SKUs, names, descriptions, categories, images, stock, published.
    2026-04-27 · RevShift
  • Brands are sub-brands of Jessar. Top-level identity is Jessar; 10 sub-brands (JS Gourmet, JS Maison, Beauty Cover, Cook & Fresca, IBake, Limpus, Pop Fluff, Veraroma, Jessar Lighting, Xtricity) live inside.
    2026-04-27 · Jessar
  • Orange highlight in Items-Jessar = ignore (discontinued + eco-fees). Read cell fill colors programmatically.
    2026-04-27 · Jessar
  • Source-of-truth confirmed: Items-Jessar + Electrical/Beauty Cover Inventory = primary. Master Sku xlsm = late-stage gap-filling reference.
    2026-04-27 · Jessar
  • No store locator. Replaced with "Partners" section showing major retailers (Costco, etc.) as logos.
    2026-04-27 · Jessar
  • Dealer portal out of scope — link to existing system. Retailer application out of scope (or simple contact form).
    2026-04-27 · Jessar
  • Costco items live on the site (not Costco-exclusive). Catalog supersession: newer wins only if same SKU; otherwise add regardless of year.
    2026-04-27 · Jessar
  • No MSRP yet — add empty msrp metafield as placeholder.
    2026-04-27 · Jessar
  • Brand guide: we design 2–3 options. Jessar has no existing guide. New explicit Phase 3 deliverable.
    2026-04-27 · Jessar
  • Pricing is NOT a gap — Items-Jessar already has prix-list, cout-std, prix-cout, prix. Lives behind dealer login. Local only, never in repo.
    2026-04-27 · RevShift
  • 108 eco-fee / non-product SKUs excluded from migration (accounting line items, not products).
    2026-04-27 · RevShift (pending Jessar confirm)
  • Items-Jessar confirmed as canonical SKU master (provisional). ~2,560 real SKUs across 6 prefixes, fully bilingual, pricing present.
    2026-04-27 · RevShift
  • External SSD primary; Tailscale as fallback. Windows App (RDP) on Mac is not programmatically accessible — SSD is the right call for bulk processing.
    2026-04-27 · Sean
  • Lockstep enforcement via hook + CLAUDE.md. PostToolUse hook injects reminder when PROJECT.md is edited; CLAUDE.md auto-loads at session start. Activate with /hooks once.
    2026-04-27 · Sean
  • Veraroma identified as JS Gourmet sub-line (logo: Veraroma by JS Gourmet). Same pattern likely for other sub-brands — confirm with Jessar.
    2026-04-27 · Sean
  • Custom Shopify Partner app created against jessar-industries.myshopify.com dev store. OAuth flow to capture access token; secret stored in .env (gitignored).
    2026-04-27 · Sean
  • Repo at folder root with smart .gitignore for raw client data.
    2026-04-27 · Sean
  • 6-phase engagement with sign-off gates and renders before commits.
    2026-04-27 · Sean
  • Tooling stack (provisional): Hyper theme + Shopify CLI + Python scripts. Migration tool (Matrixify vs. API) TBD.
    2026-04-27 · Sean
  • Items-Jessar for Sean.xlsx as primary data source (provisional).
    2026-04-27 · Sean
  • PROJECT.md + progress.html in lockstep as canonical state.
    2026-04-27 · Sean
  • 1 TB external SSD for bulk box-artwork + image access.
    2026-04-27 · Sean
  • Confidential files NEVER in repo: SOW, raw xlsm, future pricing, .env.
    2026-04-27 · Sean

Quality Bar (Always-On)

  • 1. Brand elevation is the goal. Migration is the vehicle.
  • 2. Render before commit. No design or IA is "done" until visualized + approved.
  • 3. Phase gates are real. Don't start N+1 until N is signed off.
  • 4. Data first, structure second.
  • 5. Dual-audience always — consumer + B2B on every page.
  • 6. Bilingual EN/FR from day one.
  • 7. Truth over speed. Mark gaps, don't invent data.
  • 8. Reference Caraway/Our Place + Linen Chest/Sur La Table — synthesize, don't copy.
  • 9. PROJECT.md is the single source of truth.
  • 10. Append-only history.