How to read this
This is the working reference we pull up while building. Cards are grouped by type (Customer-facing pages → Templates → Utility & policy). Within each group they appear roughly in build order — the order we tackle them in once the brand direction is locked.
"Done" criteria are testable. A page is finished when every item under "Done when" passes. No vibes. This protects velocity and makes hand-off to Jessar's team unambiguous.
Out of scope (intentionally): store locator (replaced with Partners), dealer portal (link to existing system), retailer application form, customer accounts, cart/checkout, blog. These are explicit decisions logged in PROJECT.md §9.
Sitemap (top-level)
Two shopping axes: by sub-brand (10 sub-brand pages, hand-curated) or by category (5 cross-cutting collections). Visitors can also land directly on a product (hero PDP or standard PDP).
jessar.ca
├── / # Home
│
├── /brands/ # Sub-brand index (optional landing — may redirect to /)
│ ├── /brands/js-gourmet/
│ ├── /brands/js-maison/
│ ├── /brands/beauty-cover/
│ ├── /brands/cook-and-fresca/
│ ├── /brands/ibake/
│ ├── /brands/limpus/
│ ├── /brands/pop-fluff/
│ ├── /brands/veraroma/ # sub-line of JS Gourmet
│ ├── /brands/jessar-lighting/
│ └── /brands/xtricity/
│
├── /collections/ # Category collections (cross-brand)
│ ├── /collections/kitchen-and-dining/
│ ├── /collections/home-and-bath/
│ ├── /collections/lighting/
│ ├── /collections/electrical/
│ └── /collections/cleaning/
│
├── /products/{handle} # PDP — hero or standard template, ~3,211 products
│
├── /partners/ # Retailer logos (Costco, Linen Chest, Staples, etc.)
├── /about/ # Brand story
├── /become-a-dealer/ # B2B contact form
├── /contact/ # General contact
├── /policies/privacy/ # Privacy Policy
├── /policies/terms/ # Terms of Service
│
├── /search # Search results
├── /404 # Not found
└── /sitemap.xml # SEO sitemap (auto-generated by Shopify)
FR mirror via /fr/ prefix or hreflang switch — Translate & Adapt handles routing.
Purpose
Establish brand presence in 5 seconds. Route visitors to the right sub-brand or category. Demonstrate breadth without overwhelming. Dual-mode entry — consumer can browse, B2B can find "Become a dealer."
Sections
(1) Hero — single brand statement with italic-emphasis · (2) Sub-brand grid — 10 tiles · (3) Featured hero collection carousel — 4–6 hero products from jessar.is_hero=true · (4) "Designed in Quebec since 1968" story strip · (5) Partners ribbon — retailer logos · (6) Become-a-dealer CTA · (7) Newsletter signup · (8) Footer.
Data
Hero copy → theme customizer text settings (EN + FR). Sub-brand grid → 10 sub_brand metaobject records. Featured collection → "hero" auto-collection (rule: jessar.is_hero = true). Partners ribbon → partner_retailer metaobject list. Story strip → theme customizer text. Newsletter → Shopify default form, list goes to Klaviyo or Shopify Email.
Done when
All 10 sub-brand tiles route to live sub-brand pages (no dead clicks). Featured collection shows 4–6 products with images, no broken links. Partners ribbon shows ≥6 retailer logos at full quality. EN + FR copy locked. Mobile layout holds at <640px without overflow. Lighthouse performance score ≥85 on mobile, page loads ≤2.5s on 4G.
02
JS Gourmet
/brands/js-gourmet
Purpose
Establish JS Gourmet's identity (Jessar's kitchen line — knives, cookware, serving, drinkware). Showcase the breadth, route visitors to category subsets within the sub-brand, surface the heroes from this sub-brand.
Sections
(1) Sub-brand hero — wordmark + tagline + narrative paragraph (from metaobject) · (2) Featured heroes within this sub-brand · (3) Category strip within sub-brand (e.g., Knives · Cookware · Serving · Drinkware) — clickable to filtered views · (4) Full collection grid (paginated) with filtering · (5) Brand story panel · (6) Cross-link to other Jessar sub-brands · (7) Become-a-dealer CTA · (8) Footer.
Data
All page-level content from the sub_brand metaobject (name, tagline, narrative, accent_color, page_url, logo). Product list = automatic collection rule jessar.sub_brand = JS Gourmet. Hero subset = same rule + jessar.is_hero = true. Filtering = native Hyper filter UI on metafields (clas-1 / clas-2 / material).
Done when
Metaobject record fully populated EN + FR. Auto-collection rule pulls correct product count (cross-checked against unified DB). Filter facets work. ≥3 hero products surface in the heroes strip. Cross-links to ≥4 other sub-brands. Mobile holds.
03
JS Maison
/brands/js-maison
Purpose
Same template as JS Gourmet. JS Maison is Jessar's home line (storage, organization, soft goods).
Spec
Identical structure to JS Gourmet — see above. Differences live in the metaobject record (narrative copy, accent color, category strip labels).
Done when
Metaobject populated EN + FR · auto-collection rule active · filters work · mobile holds.
04
Beauty Cover
/brands/beauty-cover
Purpose
Bath / personal care. Same template, sub-brand-specific narrative.
Spec
Same as JS Gourmet template.
Done when
Metaobject populated · collection rule active · ≥1 hero product in the strip (or hide the strip if zero) · mobile holds.
05
Cook & Fresca
/brands/cook-and-fresca
Purpose
Sub-line within the kitchen world (likely fresh-food storage / Italian-leaning). Same template.
Spec
Same as JS Gourmet template.
Done when
Same gates as JS Gourmet.
Purpose
Baking-specific products (pans, mats, tools). Same template.
Spec
Same as JS Gourmet template.
Done when
Same gates as JS Gourmet.
Purpose
Cleaning / utility products (likely owns the 6- SKU prefix once the intern's mapping returns). Same template.
Spec
Same as JS Gourmet template.
Done when
Same gates as JS Gourmet · mapping confirmation from intern.
08
Pop Fluff
/brands/pop-fluff
Purpose
Sub-brand identity TBD on intern mapping. Same template.
Spec
Same as JS Gourmet template.
Done when
Same gates as JS Gourmet · mapping confirmation from intern.
09
Veraroma
/brands/veraroma
Purpose
Sub-line under JS Gourmet (per logo evidence "Veraroma by JS Gourmet"). Same template, with parent-brand cross-link to JS Gourmet.
Spec
Same as JS Gourmet template + a small "Part of JS Gourmet" badge linking to the parent.
Done when
Same gates as JS Gourmet · parent-brand badge wired.
10
Jessar Lighting
/brands/jessar-lighting
Purpose
Owns the 5- SKU prefix (358 products, lighting). Same template, sub-brand-specific narrative.
Spec
Same as JS Gourmet template.
Done when
Same gates as JS Gourmet.
11
Xtricity
/brands/xtricity
Purpose
Owns the 1- + 4- SKU prefixes (LED bulbs + electrical, ~595 products). Same template.
Spec
Same as JS Gourmet template.
Done when
Same gates as JS Gourmet.
12
Kitchen & Dining
/collections/kitchen-and-dining
Purpose
The largest collection — cross-cuts JS Gourmet, Cook & Fresca, IBake, Veraroma. For visitors who shop by category not brand.
Sections
(1) Collection hero — image + headline · (2) Sub-category strip (Cookware · Knives · Bakeware · Serving · Drinkware · Storage) · (3) Filter rail (price, sub-brand, material, in-stock) · (4) Product grid (paginated, 24/page) · (5) Featured editorial block — "What we're known for" · (6) Cross-link to sub-brand pages · (7) Footer.
Data
Auto-collection rule: internal_clas_1 = KITCH (or whatever maps). Filters bind to jessar.sub_brand, jessar.materials, native price + stock. Editorial block → theme customizer block.
Done when
≥1,200 products in collection (matches unified DB count for kitchen-tagged SKUs). Filters return correct counts. Sub-category strip routes to filtered URLs. Mobile filter rail collapses to drawer cleanly.
13
Home & Bath
/collections/home-and-bath
Purpose
JS Maison + Beauty Cover products. Storage, organization, bath, soft goods.
Spec
Same template as Kitchen & Dining. Sub-categories adjusted (Bath · Storage · Laundry · Decor · Soft goods).
Done when
Same gates · sub-category list correct · ≥1 featured hero.
14
Lighting
/collections/lighting
Purpose
All Jessar Lighting products plus any lighting from Xtricity (LED bulbs).
Spec
Same template. Sub-categories: Touch lamps · Floor lamps · Table lamps · LED bulbs · Specialty.
Done when
Same gates · LED bulbs filterable by wattage / fitting type (metafield-driven).
15
Electrical
/collections/electrical
Purpose
Xtricity electrical products (outlets, plugs, switches). Heavily B2B; specs-forward.
Spec
Same template. Sub-categories: Outlets · Plugs · Switches · Wire & cable · Accessories.
Done when
Same gates · UPC + customs code visible on cards (B2B-friendly listing).
16
Cleaning
/collections/cleaning
Purpose
Limpus + Pop Fluff + any utility cleaning. Owns the 6- prefix mostly.
Spec
Same template. Sub-categories: Mops & brooms · Sponges · Utility tools · Laundry · Surface care.
Done when
Same gates · intern's prefix mapping resolves Limpus/Pop Fluff ownership before launch.
17
Hero PDP template Template
/products/{handle}
Purpose
The Caraway-style storytelling page. Used by the 20 hero products. Drives conversion (B2B inquiry, retailer interest, brand credibility).
Sections
(1) Site header · (2) Breadcrumbs · (3) Hero — image stack + sub-brand pill + italic-emphasis title + lede + meta row + dual CTA · (4) Story (Caraway centerpiece) · (5) Build / Materials & craft (4-col grid) · (6) Made for / Use cases (3 tiles) · (7) Specs panel (dark inverse, B2B sell-sheet) · (8) Sub-brand block · (9) Become-a-dealer CTA · (10) Complete the set / cross-sell · (11) Footer.
Data
Native fields (title, images, weight, dimensions, SKU). Metafields: jessar.romance_lede, jessar.audience_tag, jessar.story_headline, jessar.story_body, jessar.lifestyle_hero, jessar.materials (json), jessar.use_cases (json), jessar.upc, jessar.qty_per_container, jessar.qty_per_package, jessar.care_instructions, jessar.customs_code, jessar.catalog_pdf, jessar.related_products, jessar.sub_brand (metaobject ref), jessar.is_hero (boolean — must be true). Specs section visible always; Story / Build / Made-for sections render only if is_hero=true.
Visibility
Template auto-applies to any product with jessar.is_hero=true. The 20 picks Michael selects flip this flag via the build pass.
Done when
Render is ported to Hyper Liquid with 5 RevShift custom sections (rs-story-block, rs-build-grid, rs-use-tiles, rs-specs-panel, rs-sub-brand-block) — each carrying inline RevShift - YYYY-MM-DD comments and a per-file change-log entry under /docs/shopify_code_changes/. Bilingual smoke-test on 7-99096 passes (EN + FR via Translate & Adapt). Lifestyle-hero placeholder renders cleanly when metafield is empty. Lighthouse ≥85 mobile.
18
Standard PDP template Template
/products/{handle}
Purpose
The non-hero PDP for the other ~3,191 products. Specs-forward, fast to scan, B2B-friendly.
Sections
(1) Site header · (2) Breadcrumbs · (3) Hero — image gallery + title + sub-brand pill + short description + dual CTA · (4) Specs table (full B2B detail) · (5) Sub-brand mini-block (one-line ref) · (6) Cross-sell — automatic recommendations · (7) Footer.
Data
Native fields + same B2B metafields as hero (UPC, qty_per_container, customs_code, care_instructions, catalog_pdf). Skips the storytelling metafields (story_*, lifestyle_hero, materials json, use_cases). Cross-sell uses Shopify automated recommendations (no manual curation per SKU at this volume).
Visibility
Default product template. Used when jessar.is_hero is false or not set. ~3,191 products.
Done when
Template renders correctly for any sub-brand. Specs table populates from metafields when present (gracefully hides empty rows). Bilingual smoke-test on 3 products from different sub-brands. Mobile gallery swipe works.
19
Partners Static
/partners
Purpose
Replaces the original "store locator" decision. Shows the major retailers carrying Jessar products as a credibility signal. Routes B2B visitors to "Become a dealer" if they're a retailer themselves.
Sections
(1) Hero — "Where to find us" headline + intro · (2) Major retailers grid — logos at full quality (Costco, Linen Chest, Staples, etc.) · (3) "Looking to carry Jessar?" CTA → /become-a-dealer · (4) Footer.
Data
partner_retailer metaobject records. Logos sourced by Sean from public sources (per Q17 resolution).
Done when
≥6 retailer logos at full quality. EN + FR copy. Become-a-dealer CTA links correctly. Mobile grid holds.
Purpose
Tell the Jessar story: Quebec roots, family business, what they make, why retailers trust them. Establish credibility for buyers and end-customers alike.
Sections
(1) Hero — italic-emphasis statement on what Jessar is · (2) Story body — narrative across 2-3 paragraphs · (3) "Designed in Quebec" map / location section · (4) Sub-brand grid (linking to all 10) · (5) Partners ribbon · (6) Become-a-dealer CTA · (7) Footer.
Data
Theme customizer text fields (EN + FR via Translate & Adapt). Sub-brand grid pulls metaobjects.
Done when
EN + FR narrative locked. Map/location image at full quality. ≥4 sub-brands surface in the grid. Mobile holds.
21
Become a dealer Static
/become-a-dealer
Purpose
B2B inquiry capture. Routes retailers who want to carry Jessar products to a structured contact form (or email).
Sections
(1) Hero — "Carry Jessar in your store" headline · (2) Why-us value props (3 bullets) · (3) Inquiry form — name · company · location · estimated annual volume · message · (4) Existing-retailer note ("Already a dealer? Login at [external URL]") · (5) Footer.
Data
Theme customizer + Shopify Forms (or a simple contact form app). Submissions go to Jessar's sales email. Existing dealer login = link to existing Jessar portal.
Done when
Form submits successfully to test email. Form fields are bilingual. Existing-dealer link routes correctly. Mobile form holds.
Purpose
General contact for press, customer service, partnerships, anything not B2B-dealer.
Sections
(1) Hero · (2) Direct contact — phone, email, address (Saint-Eustache HQ) · (3) Generic contact form · (4) Map · (5) Footer.
Data
Theme customizer for contact info. Address sourced from Phase 5 location setup (341 Allée du Golf, Saint-Eustache, QC J7R 0L5).
Done when
Contact info matches Phase 5 location. Form submits. Map renders. Mobile holds.
23
Privacy Policy Policy
/policies/privacy
Purpose
Quebec Law 25 + PIPEDA compliance. Drafted using Shopify's built-in template; awaiting Jessar legal confirmation.
Sections
Standard Shopify policy sections: data collection, use, sharing, cookies, contact, etc.
Data
Shopify Settings → Policies → Privacy Policy (already populated EN by Sean, awaiting legal sign-off; FR via Translate & Adapt once EN locks).
Done when
Jessar legal confirms EN. FR translated. Footer link wired. Cookie banner (if any) references this page.
24
Terms of Service Policy
/policies/terms
Purpose
Standard Shopify ToS template. Awaiting Jessar legal confirmation.
Sections
Standard Shopify ToS sections.
Data
Shopify Settings → Policies → Terms (drafted EN, awaiting legal; FR via Translate & Adapt).
Done when
Jessar legal confirms EN. FR translated. Footer link wired.
25
Search results Utility
/search
Purpose
Search across all products. Default Shopify search; light styling to match the brand.
Sections
(1) Search input · (2) Results grid (paginated, same product card style as collection pages) · (3) Empty-state message if zero results · (4) Footer.
Data
Shopify native search index. Considers product title, description, vendor, tags, and (optional) metafields.
Done when
Search returns expected results for "knife" / "lamp" / "JS Gourmet" / "Costco". Empty state has helpful copy + CTA. EN + FR.
26
404 Not Found Utility
/404
Purpose
Catch-all for missing pages. Important during migration since some old WP URLs won't have direct redirects.
Sections
(1) "Page not found" headline · (2) Helpful copy + search input · (3) Top sub-brand tiles (helpful re-routes) · (4) Footer.
Data
Theme customizer text. Sub-brand tiles pull from metaobjects.
Done when
Triggers correctly on missing URL. Search input works. EN + FR. Sub-brand tiles render.
27
URL & taxonomy decisions Reference
— meta —
URL pattern
Sub-brand pages: /brands/{handle} (e.g., /brands/js-gourmet). Category collections: /collections/{handle} (e.g., /collections/kitchen-and-dining). Products: /products/{handle} — handle = Shopify-generated from product title (we override only when needed). Static pages: simple slug (/partners, /about). Policies: /policies/{slug} (Shopify default). FR mirror: /fr/... via Shopify's Markets routing — auto-generated when FR locale is published.
Slug strategy
Hyphens, lowercase, no accents (js-gourmet not JS-Gourmet; kitchen-and-dining not kitchen-&-dining). FR slugs translated where it matters semantically (e.g., /fr/marques/js-gourmet) — Translate & Adapt handles per-page slug translation.
Filter / facet strategy
Collection pages filter by: price range, sub-brand (via jessar.sub_brand), in-stock, and 1–2 collection-specific facets (Lighting → wattage; Kitchen → material; Electrical → amperage). Sub-brand pages filter by category strip (clas-1) + same price/stock. Search uses Shopify default. Facets are metafield-driven — no third-party filter app, native Hyper UI.
Canonical / SEO
Each product has one canonical URL: /products/{handle}. Collection-filtered URLs are noindex to avoid duplicate content. Hreflang auto-emitted per Shopify locale config (already set: EN primary + FR published).
301 redirect rules
From WP migration: 1,250 product URLs → new /products/{handle}; 452 category URLs → new /collections/{handle} (manual review of weak / abandoned WP categories — 34 don't get redirects, just route to home); 470 misc URLs → home with utm tracking. Applied via Shopify URL Redirects after bulk import.
Done when
All 27 pages live at the URL pattern above. /sitemap.xml includes all of them. Hreflang headers correct. Sample of 50 old WP URLs land at correct new home (no 404s on tracked URLs).
Killed
Store locator — replaced by Partners. Dealer portal — link to existing Jessar system. Retailer application form — out of scope; Become-a-dealer captures inquiries to email. Customer accounts — no DTC accounts in v1 (no transactions). Cart / Checkout — no transactions. Blog — Jessar didn't have one in WP; not adding. Refund / Shipping policy pages — Sean ruled out (no transactions, not applicable).
Deferred
Hero PDP variant tooling (color swatches with linked variant routing) — works out of the box on Hyper; deeper variant treatment is post-launch. Newsletter automation flows — set up the form at launch, build the journey in retainer Phase 6.