All Skills

Convert any web project (React, Next.js, Vue, HTML/CSS, any framework) into a COMPLETE, launch-ready Shopify store package. Goes beyond theme conversion to include page templates with pre-configured sections, navigation menus, asset manifests, content extraction, and client handoff documentation. Use when converting websites to Shopify - outputs everything needed for client to see exactly what was demoed.

J
$npx skills add JacobKayembekazadi/athyre-2026 --skill shopify-theme-converter

Shopify Theme Converter v2

Convert any web project into a complete, launch-ready Shopify store package — not just a theme folder.

The Problem This Solves

Converting components to sections is only 30% of the work. A client expecting their demo to "just work" also needs:

  • Pages that actually exist in Shopify
  • Sections pre-configured on those pages
  • Navigation menus created
  • Images uploaded
  • Content already populated
  • Clear setup instructions

This skill produces a deployment package that delivers exactly what was demoed.

Quick Reference

Load relevant references before starting:

Core Conversion References

ReferenceUse When
references/liquid-patterns.mdWriting any Liquid code
references/section-schemas.mdCreating section settings
references/theme-structure.mdUnderstanding file organization
references/conversion-examples.mdTranslating React/Vue patterns
references/deployment-package.mdStructuring final deliverable
references/content-extraction.mdPulling content from source
references/metafields-guide.mdWorking with metafields/metaobjects
references/app-integration.mdApp blocks, subscriptions, checkout
references/jsx-to-liquid-checklist.mdConverting JSX patterns to Liquid
references/icon-mapping.mdReact icon imports → Liquid snippets

Automation Scripts

ScriptUse When
scripts/sanitize_liquid.jsScan/fix JSX patterns in Liquid files
scripts/validate_schema.jsCheck sections have presets
scripts/generate_template.jsGenerate JSON templates with UUIDs
scripts/check_mandatory_files.jsP0 Verify ALL Shopify-required files exist (BLOCKING)
scripts/check_locale_coverage.jsP0 Verify every `
scripts/extract_handle_references.jsP0 Scan for content-code bindings (blogs, pages, collections)
scripts/check_icon_references.jsP1 Verify every render 'icon-x' has a matching snippet

Scaffold Resources

ResourceContents
scaffold/icons/48+ Lucide-based icon snippets
scaffold/sections/Pre-built sections with presets (main-product, main-collection, etc.)
scaffold/snippets/Reusable components (variant-picker, breadcrumbs, price)
scaffold/assets/JavaScript (product-form.js with AJAX cart)
scaffold/layout/theme.liquid with cart drawer, cookie banner enabled
scaffold/locales/Comprehensive baseline en.default.json with ALL common keys
scaffold/templates/Mandatory templates (gift_card.liquid, customer account)
scaffold/config/Base settings schema

Defensive Verification References

ReferenceGap It Fills
references/mandatory-files.mdExact list of files Shopify REQUIRES — not best practices, hard requirements
references/content-code-bindings.mdHow theme code references admin content (blogs, pages, collections)
references/post-deployment-checklist.mdVerification steps after deploying to a live store
references/critical-user-journeys.mdThe 8 customer flows every store must support

Component References

ReferenceUse When
references/announcement-bar.mdPromotional banners, dismissible notices
references/mega-menu.mdComplex navigation with dropdowns
references/preorder-backorder.mdInventory states, pre-order buttons
references/countdown-timer.mdSale/launch countdowns
references/trust-badges.mdPayment icons, guarantee badges
references/product-compare.mdCompare products functionality
references/product-bundles.mdBundle displays, frequently bought together
references/shipping-calculator.mdCart shipping rate estimator

UX Pattern References

ReferenceUse When
references/mobile-patterns.mdTouch targets, swipe, bottom nav, sticky bars
references/loading-states.mdSpinners, skeleton screens, lazy loading
references/error-states.mdForm validation, 404 pages, empty states

Advanced Commerce References

ReferenceUse When
references/b2b-wholesale.mdWholesale pricing, quick order, tiered pricing
references/cart-api-complete.mdCart API, line item properties, cart attributes
references/checkout-extensibility.mdCheckout UI extensions, Shopify Functions
references/subscriptions-selling-plans.mdRecurring products, subscribe & save

Data & Integration References

ReferenceUse When
references/metafields-complete.mdFull metafield/metaobject guide, custom data
references/backend-connectivity.mdApp proxy, webhooks, Storefront API
references/customer-accounts.mdLogin, registration, account dashboard
references/markets-multi-currency.mdInternational selling, currency, languages
references/search-discovery.mdPredictive search, collection filtering
references/shopify-flow-automation.mdWorkflow automation, triggers, actions

Quality & Standards References

ReferenceUse When
references/performance-accessibility-checklist.mdLighthouse scores, WCAG compliance

Content & Marketing References

ReferenceUse When
references/popup-modal.mdNewsletter popups, exit intent, promotional modals
references/faq-accordion.mdCollapsible FAQs, accordion components
references/gift-cards.mdGift card templates, balance checker
references/size-guide.mdSize charts, measurement guides, fit finder
references/blog-patterns.mdArticle templates, blog grids, author bios
references/video-sections.mdVideo backgrounds, YouTube/Vimeo embeds
references/image-lightbox.mdImage zoom, lightbox galleries, 360° views
references/cart-upsells.mdIn-cart upsells, order bumps, FBT
references/contact-forms.mdContact pages, multi-field forms, validation
references/social-proof.mdInstagram feeds, UGC, press logos, sales pop

Blind Spot Prevention

These issues cause 40%+ of post-conversion debugging time. Prevent them proactively.

Issue 1: JSX Comments Render as Literal Text

Problem: {/* comment */} renders visibly in Liquid output.

Solution: Run sanitizer before deployment:

node scripts/sanitize_liquid.js ./theme/ --fix

Auto-fixes:

  • {/* comment */}{% comment %}...{% endcomment %}
  • className=class=
  • htmlFor=for=

Issue 2: Missing Icon Assets Crash Theme

Problem: {% render 'icon-arrow-right' %} fails if snippet doesn't exist.

Solution: Copy scaffold icons during initialization:

cp -r scaffold/icons/* theme/snippets/

The scaffold/icons/ folder contains 48+ Lucide-based icons covering:

  • Navigation (arrows, chevrons)
  • E-commerce (cart, heart, star)
  • Social (Instagram, Facebook, etc.)
  • UI (search, menu, user)

See references/icon-mapping.md for React import → snippet mapping.

Issue 3: Sections Invisible in Theme Editor

Problem: Sections without presets don't appear in "Add section" menu.

Solution: Run validator on all sections:

node scripts/validate_schema.js ./theme/sections/

Checks for:

  • Missing presets (except main-*, header, footer)
  • Missing name property
  • Invalid block types
  • Duplicate setting IDs

Issue 4: JSON Template UUID Tedium

Problem: Manual section ID creation is error-prone and tedious.

Solution: Use template generator:

# Generate about page template
node scripts/generate_template.js page.about --sections hero,rich-text,team

# Write directly to theme
node scripts/generate_template.js page.about --sections hero,rich-text --write

Issue 5: Sections Not Rendered in Layout

Problem: Some critical sections exist but don't appear because they must be manually added to theme.liquid.

Solution: Understand which sections auto-render vs. need manual rendering:

SectionAuto-Rendered?Must Add to theme.liquid
header✓ (layout)No
footer✓ (layout)No
main-*✓ (templates)No
cart-drawerYes - {% section 'cart-drawer' %}
cookie-bannerYes - {% section 'cookie-banner' %}
announcement-barYes - {% section 'announcement-bar' %}
breadcrumbs❌ (snippet)Yes - {% render 'breadcrumbs' %}

The scaffold's theme.liquid has these ENABLED by default. If you create theme.liquid from scratch, ensure these are included:

{%- comment -%} In <body>, after header {%- endcomment -%}
{% section 'cart-drawer' %}

{%- comment -%} Before main content (except homepage) {%- endcomment -%}
{%- unless template == 'index' -%}
  {% render 'breadcrumbs' %}
{%- endunless -%}

{%- comment -%} Before </body>, after footer {%- endcomment -%}
{% section 'cookie-banner' %}

Complete Conversion Workflow

Phase 0: Initialize Theme Structure

Before converting anything, set up the foundation:

# 1. Create theme directory structure
mkdir -p theme/{assets,config,layout,locales,sections,snippets,templates/customers}

# 2. Copy scaffold icons (prevents missing icon errors)
cp -r scaffold/icons/* theme/snippets/

# 3. Copy base sections with presets
cp -r scaffold/sections/* theme/sections/

# 4. Copy base config
cp scaffold/config/settings_schema.json theme/config/

# 5. MANDATORY: Copy required templates that Shopify expects
cp scaffold/templates/gift_card.liquid theme/templates/
cp scaffold/templates/customers/activate_account.json theme/templates/customers/
cp scaffold/templates/customers/reset_password.json theme/templates/customers/

# 6. Copy comprehensive baseline locale
cp scaffold/locales/en.default.json theme/locales/

# 7. VERIFY: Run mandatory files check (must pass before proceeding)
node scripts/check_mandatory_files.js ./theme/

This ensures:

  • All common icons are available from the start
  • Base sections have proper presets for Theme Editor visibility
  • Settings schema has required theme structure
  • Gift card template exists as .liquid (Shopify rejects .json for this)
  • Customer activation & password reset templates exist (without these, customers can't activate accounts or reset passwords)
  • Baseline locale file covers all common translation keys (prevents raw key paths showing to customers)
  • Mandatory files check passes before any conversion work begins

Phase 1: Analyze Source Project

Step 1.1: Map the entire project structure

Source Project Analysis
├── Pages (routes)
│   ├── / (home) → templates/index.json
│   ├── /about → templates/page.about.json + Shopify page
│   ├── /services → templates/page.services.json + Shopify page
│   ├── /contact → templates/page.contact.json + Shopify page
│   └── /blog → templates/blog.json
│
├── Components → sections/
│   ├── Hero.jsx → sections/hero.liquid
│   ├── Features.jsx → sections/features.liquid
│   └── ...
│
├── Navigation
│   ├── Header nav links → Main menu
│   ├── Footer nav links → Footer menu
│   └── Mobile nav → Mobile menu (if different)
│
├── Assets
│   ├── Images → Files (need upload manifest)
│   ├── Fonts → Theme settings or assets/
│   └── Icons → snippets/icon.liquid or inline SVG
│
└── Content
    ├── Headlines → Section setting defaults
    ├── Body text → Section setting defaults
    ├── CTAs → Section setting defaults
    └── Alt text → Image settings

Step 1.2: Create conversion inventory

For each page, document:

## Page: About (/about)

**Shopify requirements:**
- Template: templates/page.about.json
- Page: Must create "About" page in Shopify admin

**Sections used (in order):**
1. about-hero (converted from AboutHero.jsx)
2. team-grid (converted from TeamSection.jsx)
3. values (converted from OurValues.jsx)

**Content to extract:**
- Headline: "About Our Company"
- Subheadline: "Building the future since 2015"
- Team members: [array of 4 members]
- Values: [array of 3 values]

**Images needed:**
- /images/about-hero.jpg → about-hero.jpg
- /images/team/person1.jpg → team-person1.jpg

Phase 2: Convert Components to Sections

Follow existing section conversion process (see references/conversion-examples.md).

Critical rules for every section:

Rule 1: Mobile-First Responsive Classes

Every converted section MUST use responsive patterns. 65% of e-commerce traffic is mobile — desktop-only sections are unusable for the majority.

{%- comment -%} REQUIRED responsive patterns for every section {%- endcomment -%}

{%- comment -%} Padding: mobile-first, scale up {%- endcomment -%}
<section class="px-4 md:px-8 py-8 md:py-16">

{%- comment -%} Grid: single column mobile, multi-column desktop {%- endcomment -%}
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4 md:gap-8">

{%- comment -%} Typography: readable on mobile, larger on desktop {%- endcomment -%}
<h2 class="text-2xl md:text-4xl font-bold">

{%- comment -%} Images: full width on mobile {%- endcomment -%}
<img class="w-full h-auto object-cover">

{%- comment -%} Touch targets: minimum 44x44px {%- endcomment -%}
<button class="min-h-[44px] min-w-[44px] px-6 py-3">

Lint check: If a section has no md: or lg: responsive prefixes, it fails review.

Rule 2: JavaScript Behavior Mapping

For every interactive component in the source, document:

  1. What the behavior IS (client-side state? API call? animation?)
  2. How it maps to Shopify (JS + localStorage? Cart API? Alpine.js?)
  3. What JS file needs to be created
Source PatternShopify Implementation
React useState for UI toggleAlpine.js x-data / x-show
React useState for cart stateShopify Cart API + cart-drawer.js
React useState for wishlistlocalStorage + wishlist.js
React useEffect for data fetchShopify Liquid (server-rendered)
React onClick event handlerInline onclick or Alpine @click
React form with onSubmitShopify {% form %} tags
React router <Link>Standard <a href> tags

Do NOT leave interactive components as static HTML. A button with no click handler is worse than no button at all.

Rule 3: Translation Keys

Use | default: 'fallback' for ALL | t filters, AND add the key to locale JSON:

{%- comment -%} CORRECT: both default AND locale key {%- endcomment -%}
{{ 'products.product.add_to_cart' | t | default: 'Add to Cart' }}

Critical additions:

  1. Extract default content from source:
{% schema %}
{
  "name": "Hero Banner",
  "settings": [
    {
      "type": "text",
      "id": "heading",
      "label": "Heading",
      "default": "Welcome to Our Store"  // ← Actual content from React
    },
    {
      "type": "textarea",
      "id": "subheading",
      "label": "Subheading", 
      "default": "Quality products for modern living"  // ← Actual content from React
    }
  ]
}
{% endschema %}
  1. Use placeholder image references that match manifest:
{% comment %} 
  Image: hero-background.jpg
  Source: /public/images/hero-bg.jpg
  See assets-manifest.md for upload instructions
{% endcomment %}
{% if section.settings.image != blank %}
  {{ section.settings.image | image_url: width: 1920 | image_tag }}
{% else %}
  {{ 'hero-background.jpg' | asset_url | image_tag }}
{% endif %}

Phase 3: Create Page Templates with Pre-configured Sections

This is the critical missing step.

For EVERY page in the source project, create a corresponding template JSON with sections already placed and configured.

Step 3.1: Homepage (templates/index.json)

{
  "sections": {
    "hero": {
      "type": "hero-banner",
      "settings": {
        "heading": "Welcome to Our Store",
        "subheading": "Quality products for modern living",
        "button_text": "Shop Now",
        "button_link": "shopify://collections/all",
        "overlay_opacity": 40
      }
    },
    "featured-collection": {
      "type": "featured-collection",
      "settings": {
        "title": "Best Sellers",
        "collection": "",
        "products_to_show": 4
      }
    },
    "image-with-text": {
      "type": "image-with-text",
      "settings": {
        "heading": "Our Story",
        "text": "Founded in 2015, we've been committed to quality...",
        "button_text": "Learn More",
        "button_link": "shopify://pages/about",
        "image_position": "left"
      }
    },
    "testimonials": {
      "type": "testimonials",
      "blocks": {
        "testimonial-1": {
          "type": "testimonial",
          "settings": {
            "quote": "Best purchase I've ever made!",
            "author": "Sarah M.",
            "rating": 5
          }
        },
        "testimonial-2": {
          "type": "testimonial",
          "settings": {
            "quote": "Incredible quality and fast shipping.",
            "author": "John D.",
            "rating": 5
          }
        }
      },
      "block_order": ["testimonial-1", "testimonial-2"]
    },
    "newsletter": {
      "type": "newsletter",
      "settings": {
        "heading": "Join Our Newsletter",
        "subheading": "Get 10% off your first order"
      }
    }
  },
  "order": ["hero", "featured-collection", "image-with-text", "testimonials", "newsletter"]
}

Step 3.2: Custom page templates

For pages like About, Contact, Services, create alternate page templates:

// templates/page.about.json
{
  "sections": {
    "about-hero": {
      "type": "page-hero",
      "settings": {
        "heading": "About Us",
        "subheading": "Our story, our mission, our team"
      }
    },
    "story": {
      "type": "image-with-text",
      "settings": {
        "heading": "Our Story",
        "text": "Founded in a small garage in 2015, we started with a simple mission: create products that make a difference...",
        "image_position": "right"
      }
    },
    "team": {
      "type": "team-grid",
      "blocks": {
        "member-1": {
          "type": "team_member",
          "settings": {
            "name": "Jane Smith",
            "role": "Founder & CEO",
            "bio": "Jane started the company with a vision..."
          }
        }
      },
      "block_order": ["member-1"]
    },
    "values": {
      "type": "multicolumn",
      "settings": {
        "title": "Our Values"
      },
      "blocks": {
        "value-1": {
          "type": "column",
          "settings": {
            "title": "Quality",
            "text": "We never compromise on materials or craftsmanship."
          }
        },
        "value-2": {
          "type": "column",
          "settings": {
            "title": "Sustainability",
            "text": "Every decision considers our environmental impact."
          }
        }
      },
      "block_order": ["value-1", "value-2"]
    }
  },
  "order": ["about-hero", "story", "team", "values"]
}

Template naming convention:

  • page.json - Default page template
  • page.about.json - "About" alternate template
  • page.contact.json - "Contact" alternate template
  • page.services.json - "Services" alternate template

Phase 4: Extract Navigation Structure

Step 4.1: Parse navigation from source

From React/Vue nav component, extract:

// Source: Header.jsx
const navLinks = [
  { label: 'Home', href: '/' },
  { label: 'Shop', href: '/collections/all' },
  { label: 'About', href: '/about' },
  { label: 'Contact', href: '/contact' },
];

Step 4.2: Create menu structure document

// deployment-package/menus.json
{
  "main-menu": {
    "title": "Main menu",
    "handle": "main-menu",
    "items": [
      {
        "title": "Home",
        "link": "/"
      },
      {
        "title": "Shop",
        "link": "/collections/all",
        "children": [
          { "title": "New Arrivals", "link": "/collections/new-arrivals" },
          { "title": "Best Sellers", "link": "/collections/best-sellers" },
          { "title": "Sale", "link": "/collections/sale" }
        ]
      },
      {
        "title": "About",
        "link": "/pages/about"
      },
      {
        "title": "Contact",
        "link": "/pages/contact"
      }
    ]
  },
  "footer-menu": {
    "title": "Footer menu",
    "handle": "footer",
    "items": [
      { "title": "Privacy Policy", "link": "/policies/privacy-policy" },
      { "title": "Refund Policy", "link": "/policies/refund-policy" },
      { "title": "Terms of Service", "link": "/policies/terms-of-service" }
    ]
  }
}

Step 4.3: Update header/footer sections to use menus

<!-- sections/header.liquid -->
{% for link in linklists['main-menu'].links %}
  <a href="{{ link.url }}">{{ link.title }}</a>
  {% if link.links.size > 0 %}
    <ul class="dropdown">
      {% for child_link in link.links %}
        <a href="{{ child_link.url }}">{{ child_link.title }}</a>
      {% endfor %}
    </ul>
  {% endif %}
{% endfor %}

Phase 5: Create Asset Manifest

Step 5.1: Scan source for all images

# Asset Upload Manifest

## Images to Upload

Upload these to: Shopify Admin → Content → Files

| Filename | Source Location | Used In | Dimensions |
|----------|-----------------|---------|------------|
| hero-background.jpg | /public/images/hero-bg.jpg | Homepage hero | 1920x1080 |
| about-hero.jpg | /public/images/about/hero.jpg | About page hero | 1920x800 |
| team-jane.jpg | /public/images/team/jane.jpg | Team section | 400x400 |
| team-john.jpg | /public/images/team/john.jpg | Team section | 400x400 |
| logo.svg | /public/images/logo.svg | Header | - |
| favicon.png | /public/favicon.png | Browser tab | 32x32 |

## After Upload

1. Go to each section in Theme Customizer
2. Select the uploaded images for corresponding image pickers
3. Or update settings_data.json with CDN URLs

## Fonts

| Font | Source | Implementation |
|------|--------|----------------|
| Inter | Google Fonts | Added to theme.liquid |
| Playfair Display | Google Fonts | Added to theme.liquid |

## Icons

All icons converted to inline SVG in snippets/icons.liquid

Phase 6: Sanitize & Validate

Critical step before packaging. Run ALL automated checks to catch issues before deployment.

# 1. MANDATORY FILE CHECK (run first — blocks everything else)
node scripts/check_mandatory_files.js ./theme/

# 2. Scan and fix JSX patterns in Liquid files
node scripts/sanitize_liquid.js ./theme/ --fix

# 3. Validate all section schemas
node scripts/validate_schema.js ./theme/sections/

# 4. Verify commerce functionality
node scripts/verify_theme.js ./theme/

# 5. Check locale coverage (every | t key must exist in en.default.json)
node scripts/check_locale_coverage.js ./theme/

# 6. Extract content-code bindings (generates content-bindings.json)
node scripts/extract_handle_references.js ./theme/ --json

# 7. Check icon/snippet references (every render call must have a file)
node scripts/check_icon_references.js ./theme/

Script exit codes:

ScriptExit 0Exit 1
check_mandatory_files.jsAll required files presentCritical files missing — DO NOT DEPLOY
check_locale_coverage.jsAll translation keys have locale entriesMissing keys — theme check will flag
extract_handle_references.jsAlways exits 0 (informational)
check_icon_references.jsAll referenced snippets existMissing snippets — icons won't render

Common fixes:

IssueFix
JSX comment {/* */}Auto-fixed by sanitizer
className=Auto-fixed by sanitizer
Missing presetAdd "presets": [{"name": "Section Name"}] to schema
Missing iconCopy from scaffold/icons/ or create new
Hardcoded URLUse {{ pages.handle.url }} or {{ routes.* }}

Commerce Readiness Checklist

Before deployment, verify these critical e-commerce features work:

Product Page:

  • Variant selection changes price, image, and availability
  • Quantity selector +/- buttons work
  • Add to Cart button triggers cart drawer OR navigates to cart
  • Sold out variants show "Sold Out" state
  • Price displays correctly (regular, compare-at, sale)

Collection Page:

  • Collection filtering works (uses real Shopify Filter API)
  • Collection sorting works (price, date, alphabetical)
  • Pagination works
  • Product cards show correct prices

Cart:

  • Cart drawer opens on add-to-cart
  • Quantity updates work in cart
  • Remove item works
  • Cart total updates correctly

Search:

  • Search returns results
  • Predictive search suggestions appear

Customer:

  • Login page works
  • Account pages load (if enabled)

Run automated verification:

node scripts/verify_theme.js ./theme/

This script checks:

  • Cart drawer is enabled (not commented out)
  • Cookie banner renders
  • Product form JavaScript exists
  • Collection filtering uses real Filter API
  • Breadcrumbs snippet exists
  • Variant picker uses option-based selection
  • Price snippet has compare-at support
  • Skip-to-content link exists (accessibility)

Phase 7: Generate Deployment Package

Final output structure:

deployment-package/
│
├── theme/                              ← Upload to Shopify
│   ├── assets/
│   ├── config/
│   ├── layout/
│   ├── locales/
│   ├── sections/
│   ├── snippets/
│   └── templates/
│
├── SETUP-CHECKLIST.md                  ← Step-by-step for client
│
├── pages-to-create.md                  ← Pages needed in Shopify admin
│
├── menus.json                          ← Navigation structure
│
├── assets-manifest.md                  ← Images to upload
│
├── content-reference.json              ← All extracted content
│
├── section-inventory.md                ← What each section does
│
└── dependencies.md                     ← Apps/integrations needed

Phase 8: Generate Setup Checklist

Create SETUP-CHECKLIST.md for client handoff:

# Store Setup Checklist

Complete these steps in order after uploading the theme.

## 1. Upload Theme
- [ ] Go to Online Store → Themes
- [ ] Add theme → Upload zip file
- [ ] Preview theme before publishing

## 2. Upload Images
- [ ] Go to Content → Files
- [ ] Upload all images from `assets-manifest.md`
- [ ] Note: Some images may need to be selected in Theme Customizer

## 3. Create Navigation Menus
- [ ] Go to Online Store → Navigation
- [ ] Create "Main menu" with items from `menus.json`
- [ ] Create "Footer menu" with items from `menus.json`

## 4. Create Pages

| Page Title | URL Handle | Template |
|------------|------------|----------|
| About | about | page.about |
| Contact | contact | page.contact |
| Services | services | page.services |

For each page:
- [ ] Go to Online Store → Pages → Add page
- [ ] Enter title (content is in theme sections)
- [ ] Set URL handle
- [ ] Under "Theme template" select the corresponding template

## 5. Configure Theme Settings
- [ ] Go to Online Store → Themes → Customize
- [ ] Theme settings (gear icon):
  - [ ] Set brand colors
  - [ ] Upload logo
  - [ ] Set social media links
  - [ ] Configure typography if needed

## 6. Review Each Page
- [ ] Homepage - sections should be pre-configured
- [ ] About page - select "page.about" template
- [ ] Contact page - select "page.contact" template
- [ ] Product pages - add products first
- [ ] Collection pages - create collections first

## 7. Products & Collections
- [ ] Add products (or import via CSV)
- [ ] Create collections
- [ ] Assign products to collections
- [ ] Update "Featured Collection" sections to use actual collections

## 8. Final Checks
- [ ] Test all navigation links
- [ ] Test contact form submission
- [ ] Test on mobile device
- [ ] Review checkout flow
- [ ] Set up payment providers
- [ ] Configure shipping

## 9. Go Live
- [ ] Publish theme
- [ ] Remove password page (if applicable)
- [ ] Test purchase flow

Phase 9: Post-Deployment Verification (NEW — REQUIRED)

This phase catches the 80% of production issues that file-level validation cannot detect. Going from "files uploaded" to "store is production-ready" requires verifying real customer flows against live admin content.

See references/post-deployment-checklist.md for the complete checklist. See references/critical-user-journeys.md for the 8 flows every store must support.

Step 9.1: Deploy to Development Store

Upload the theme to a Shopify development store (NOT the live store). Create sample content:

  • At least 3 products with variants and images
  • At least 1 collection with products
  • At least 1 blog with 1 article
  • All pages referenced in footer/navigation
  • Navigation menus (main + footer)

Step 9.2: Verify Content-Code Bindings

Run the binding extractor and check every handle resolves:

node scripts/extract_handle_references.js ./theme/

For each handle listed:

  • Blog handles match what's in Shopify admin (Settings → Blog posts)
  • Page handles match (Online Store → Pages)
  • Collection handles match (Products → Collections)
  • Menu handles match (Online Store → Navigation)
  • No hardcoded URLs that should use Liquid objects

Step 9.3: Walk Through Critical User Journeys

All 8 journeys must pass (see references/critical-user-journeys.md):

  1. Browse → Buy: Homepage → product → add to cart → checkout
  2. Search → Find → Buy: Search → results → product → cart
  3. Collection Filtering: Filters work, sort works, pagination works
  4. Customer Account: Register → login → account → addresses
  5. Password Reset: Forgot password → email → reset → login
  6. Account Activation: Activation link → create password → login
  7. Gift Card: Gift card page renders, code copyable, QR shows
  8. Blog Reading: Blog listing shows articles, article pages work

Step 9.4: Test on Mobile Device

Use a real device or Chrome DevTools mobile emulation:

  • Header: logo, menu icon, cart icon visible and tappable
  • Mobile menu opens/closes, all links work
  • Product page: images swipe, variant buttons tappable
  • No horizontal scroll on any page
  • Touch targets minimum 44x44px
  • Text minimum 16px (no zoom required)

Step 9.5: Check Browser Console

Open DevTools Console on every major page:

  • No Liquid error: messages in rendered HTML
  • No 404 errors for assets (JS, CSS, images)
  • No JavaScript errors
  • No mixed content warnings

Step 9.6: Run Lighthouse Audit

Chrome DevTools → Lighthouse → Mobile → Performance:

  • Performance score > 60 (target > 80)
  • First Contentful Paint < 2.5s
  • Largest Contentful Paint < 4s
  • Cumulative Layout Shift < 0.25

Step 9.7: Sign-Off

Only after all steps pass, the theme is production-ready. Document results:

## Deployment Verification Results
- Date: YYYY-MM-DD
- Store: [store-name].myshopify.com
- Critical Journeys: PASS / FAIL
- Mobile: PASS / FAIL
- Console Errors: 0
- Lighthouse Performance: [score]
- Ready for production: YES / NO

Section Inventory Template

Generate for each project:

# Section Inventory

## Hero Sections

### hero-banner
**Purpose:** Full-width hero with image background, heading, and CTA
**Customizable:**
- Background image
- Heading text
- Subheading text
- Button text and link
- Overlay opacity (0-100%)
- Text alignment
- Minimum height

**Used on:** Homepage

---

### page-hero
**Purpose:** Smaller hero for interior pages
**Customizable:**
- Background image or color
- Heading
- Subheading
- Breadcrumb toggle

**Used on:** About, Contact, Services pages

---

## Content Sections

### image-with-text
**Purpose:** Two-column layout with image and text
**Customizable:**
- Image
- Heading
- Body text (rich text)
- Button text and link
- Image position (left/right)
- Background color

**Used on:** Homepage, About page

[Continue for all sections...]

Dependencies Documentation

Generate dependencies.md:

# Theme Dependencies & Integrations

## Required Apps

| Feature | Recommended App | Alternative | Notes |
|---------|-----------------|-------------|-------|
| Reviews | Judge.me | Loox, Stamped | Free tier available |
| Email signup | Klaviyo | Mailchimp | Connect in newsletter section |
| Contact form | Shopify native | - | Built into theme |

## External Services

| Service | Purpose | Setup |
|---------|---------|-------|
| Google Fonts | Typography | Already configured in theme |
| Google Analytics | Tracking | Add via Online Store → Preferences |
| Facebook Pixel | Ads | Add via Online Store → Preferences |

## Form Handling

Contact form uses Shopify's native form handling:
- Submissions go to: Settings → Notifications → Contact form
- Configure email recipient in Shopify admin

## Features Not Included

These features from the demo require additional setup:

| Feature | Reason | Solution |
|---------|--------|----------|
| Live chat | Requires app | Install Tidio, Gorgias, or similar |
| Wishlist | Requires app | Install Wishlist Plus or similar |
| Product reviews | Requires app | Install Judge.me or similar |

Conversion Command Summary

When asked to convert a project, follow this sequence:

  1. Initialize → Copy scaffold icons, sections, config, mandatory templates, baseline locale to theme/. Run check_mandatory_files.js — must pass.
  2. Analyze → Map all pages, components, navigation, assets
  3. Data Architecture → Identify custom data → metafields/metaobjects mapping
  4. Convert → Transform components to sections. Enforce mobile-first classes. Map JS behavior for every interactive component.
  5. Commerce Logic → Document discounts, shipping, cart customizations
  6. Template → Create JSON templates with pre-placed sections
  7. Navigate → Document menu structure
  8. Manifest → List all assets to upload
  9. Integrations → Document webhooks, app proxy needs, automations
  10. Sanitize → Run ALL verification scripts: check_mandatory_files.js, sanitize_liquid.js, validate_schema.js, verify_theme.js, check_locale_coverage.js, extract_handle_references.js, check_icon_references.js
  11. Package → Assemble deployment package
  12. Document → Generate setup checklist + content-bindings manifest
  13. Verify (Phase 9) → Deploy to dev store → Walk Critical User Journeys → Test mobile → Check console → Run Lighthouse → Sign off

Output: Complete deployment package with verified production readiness, not just a theme folder.


Pre-Conversion Questionnaire

Before starting ANY conversion, clarify these areas:

Data Questions

  • What custom product data exists? (specs, ingredients, care, etc.)
  • Is there a CMS? What content types?
  • Are there customer accounts with custom data?
  • Are there order customization options (gift wrap, notes)?

Commerce Questions

  • What discount types exist? (automatic, codes, tiered)
  • Is there free shipping logic?
  • Are there subscription/recurring products?
  • What payment methods are used?
  • Is there B2B/wholesale functionality?

Integration Questions

  • What external services are integrated? (CRM, ERP, etc.)
  • What automations exist (email sequences, notifications)?
  • Is there a custom backend/API?
  • What analytics are used?

International Questions

  • Does the site sell internationally?
  • What currencies are supported?
  • What languages are supported?
  • Are there market-specific prices?

Customer Questions

  • What does the account dashboard show?
  • Is there wishlist functionality?
  • Are there loyalty/rewards features?
  • What is the customer support flow?

See SKILL-BLINDSPOTS-ANALYSIS.md for comprehensive gap analysis.


Pre-Deployment Checklist

Run before every deployment:

# Automated checks (run ALL — any failure is a deployment blocker)
node scripts/check_mandatory_files.js ./theme/       # Required files exist
node scripts/sanitize_liquid.js ./theme/              # JSX pattern scan
node scripts/validate_schema.js ./theme/sections/     # Schema validation
node scripts/verify_theme.js ./theme/                 # Commerce readiness
node scripts/check_locale_coverage.js ./theme/        # Translation keys
node scripts/extract_handle_references.js ./theme/    # Content bindings
node scripts/check_icon_references.js ./theme/        # Icon completeness
# Manual verification
- [ ] All sections appear in Theme Editor "Add section" menu
- [ ] No visible `{/* */}` comments in rendered pages
- [ ] All icons render (no broken images)
- [ ] Mobile menu works
- [ ] All links navigate correctly
- [ ] Forms submit successfully
- [ ] Content-code bindings verified against Shopify admin
- [ ] Critical User Journeys passed (see references/critical-user-journeys.md)
- [ ] Mobile device testing passed
- [ ] Browser console has no errors

Quick Commands

User SaysAction
"Convert this React site to Shopify"Full workflow, all phases
"Convert this component"Section only, note dependencies
"Update my existing theme"Identify new sections needed, merge
"Create setup instructions"Generate SETUP-CHECKLIST.md
"What pages need to be created?"Generate pages-to-create.md