Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
67 commits
Select commit Hold shift + click to select a range
662928a
feat(brand): Phase 2 — Brand Foundation
Siya360 Jun 22, 2026
ff2cf13
feat(homepage): Phase 3 — Homepage Sections
Siya360 Jun 22, 2026
211d53d
feat(products): Phase 4 — Product Cards & Collection Grid Polish
Siya360 Jun 22, 2026
6eae99b
feat(product-page): Phase 5 — Product Page Conversion UX
Siya360 Jun 22, 2026
9d69522
feat(nav): Phase 6 — Navigation & Mobile UX Polish
Siya360 Jun 22, 2026
84d124f
fix(schema): Phase 6.5 — schema fixes and project tracker
Siya360 Jun 22, 2026
4505786
feat(homepage): Phase 7 — QA, newsletter, trending section, and proje…
Siya360 Jun 22, 2026
81ecad3
merge: Get Yours Booster-inspired theme (Phases 1-7)
Siya360 Jun 22, 2026
049bd6f
Remove old root-level Dawn theme attempt
Siya360 Jul 7, 2026
d4c3d10
Set up Get Yours Dawn conversion foundation
Siya360 Jul 7, 2026
b731839
Style Get Yours Dawn brand shell
Siya360 Jul 7, 2026
881d642
Build Get Yours homepage sections and recovery state
Siya360 Jul 9, 2026
3700d48
Fix promo hero block schema label
Siya360 Jul 9, 2026
07631ec
Refine collection pages and preserve homepage hero settings
Siya360 Jul 9, 2026
2392480
Refine product detail page and buy box
Siya360 Jul 9, 2026
17543e4
Refine cart notification and cart page
Siya360 Jul 9, 2026
e26e658
Refine search and content page presentation
Siya360 Jul 9, 2026
b5d32c7
Document navigation and launch readiness audit
Siya360 Jul 10, 2026
adf5c91
Document payments shipping tax and operations runbook
Siya360 Jul 10, 2026
b313812
Draft support and information page content
Siya360 Jul 10, 2026
34541aa
Refine Phase 10 support page drafts
Siya360 Jul 10, 2026
f846250
Prepare admin-ready support page copy
Siya360 Jul 10, 2026
b7d151d
Prepare Shopify admin page creation pack
Siya360 Jul 10, 2026
adbcc71
Verify unpublished Shopify admin pages
Siya360 Jul 10, 2026
dd6cb30
Document menu wiring readiness plan
Siya360 Jul 10, 2026
605b248
Document payments shipping and launch operations checklist
Siya360 Jul 10, 2026
7ba7863
Document PayFast and shipping access blockers
Siya360 Jul 11, 2026
b1b03e6
Record authenticated payment and shipping inspection
Siya360 Jul 11, 2026
b515412
Document PayFast test-mode handoff failure
Siya360 Jul 11, 2026
0d1cc12
Document PayFast sandbox handoff investigation
Siya360 Jul 11, 2026
a7132d7
Document successful PayFast sandbox payment
Siya360 Jul 11, 2026
3cc818f
Verify PayFast sandbox order and fulfilment issue
Siya360 Jul 11, 2026
311aca0
Identify Shopify automatic fulfilment root cause
Siya360 Jul 11, 2026
23426e8
Disable automatic order fulfilment
Siya360 Jul 12, 2026
2299bde
Validate corrected manual fulfilment workflow
Siya360 Jul 12, 2026
219f8d2
Document pending PayFast sandbox refund
Siya360 Jul 12, 2026
b58a269
Record pending PayFast refund follow-up
Siya360 Jul 12, 2026
d4f2f4b
Record PayFast refund 11-hour follow-up
Siya360 Jul 12, 2026
e4cb4ee
Verify development theme responsive preview
Siya360 Jul 12, 2026
a78ac29
Add launch readiness and operations documentation
Siya360 Jul 12, 2026
b253442
Record pending PayFast refund follow-ups
Siya360 Jul 12, 2026
1bc9d21
Complete development storefront journey QA
Siya360 Jul 12, 2026
6010d1e
Align storefront shipping promise to R770
Siya360 Jul 12, 2026
c13b59e
Define launch navigation and content readiness
Siya360 Jul 12, 2026
0bab143
Align support drafts with launch operations
Siya360 Jul 12, 2026
c7e7a2e
Align support drafts with launch operations
Siya360 Jul 13, 2026
fdcbab6
Define support page publication readiness
Siya360 Jul 13, 2026
0530138
Document LP-3B merchant operational readiness
Siya360 Jul 13, 2026
b98630d
Add merchant operational approval register
Siya360 Jul 13, 2026
562cf1b
Record Get Yours merchant operational approvals
Siya360 Jul 13, 2026
4adc0c7
Record local Contact form verification limitation
Siya360 Jul 13, 2026
34ae927
Record hosted Contact form verification result
Siya360 Jul 13, 2026
8cbd1bc
Complete password-protected storefront staging build
Siya360 Jul 13, 2026
6893578
docs: record PR-2 production candidate promotion
Siya360 Jul 13, 2026
1fa5900
feat: match Stitch header and navigation
Siya360 Jul 13, 2026
e6f1cd8
feat: match Stitch promotional grid hero
Siya360 Jul 13, 2026
b3eb8d8
fix: align Stitch header rows and navigation
Siya360 Jul 13, 2026
58a4b22
fix: replace native category select and normalise menu states
Siya360 Jul 13, 2026
911034e
chore: assign Get Yours primary navigation
Siya360 Jul 14, 2026
f2a78da
feat: match Stitch homepage category grid
Siya360 Jul 14, 2026
7b16641
feat: add Stitch featured practical finds
Siya360 Jul 14, 2026
9166608
feat: match Stitch homepage trust section
Siya360 Jul 14, 2026
4819f1c
fix: correct Sprint 2 links and trust copy
Siya360 Jul 14, 2026
305305a
refactor: generalise Get Yours product rail
Siya360 Jul 14, 2026
08188f3
feat: migrate homepage collections to Get Yours cards
Siya360 Jul 14, 2026
b776011
chore: reorder homepage merchandising and trust
Siya360 Jul 14, 2026
cba884f
style: separate homepage product rails into section cards
Siya360 Jul 14, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,5 @@ ehthumbs.db
Thumbs.db
.shopify
node_modules
*.zip
*.zip
assets/mock-*local_assets/
37 changes: 37 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
# Get Yours Shopify Dawn Conversion Instructions

## Project Role

This repository contains the Get Yours Shopify Dawn conversion work. The static prototype in `get-yours-static-prototype/` is the visual and UX reference, while `get-yours-shopify-theme/` is the Dawn-based Shopify theme foundation.

## Conversion Guardrails

- Keep the static prototype unchanged unless a task explicitly targets it.
- Preserve Dawn behavior, accessibility patterns, section schema conventions, cart behavior, predictive search, localization, and theme editor compatibility wherever possible.
- Do not paste static HTML directly into Liquid templates.
- Convert static prototype patterns into Dawn-compatible sections, snippets, settings, and JSON templates in phased work.
- Do not introduce React, TypeScript, backend services, or non-Shopify runtime dependencies for the storefront theme.
- Avoid broad restructures, formatting churn, and unrelated Dawn changes.
- Keep Get Yours brand tokens centralised in `get-yours-shopify-theme/assets/gy-theme.css`.

## Brand Direction

- Primary blue: `#0081D8`
- Navy: `#073A66`
- Deep navy: `#063A66`
- Logo yellow: `#FFD200`
- Gold accent: `#F5B700`
- Use gold/yellow sparingly for small labels or highlights, not full-width backgrounds.
- The announcement bar and footer should use the navy family.

## Phase Discipline

- Phase 1 is foundation only: Dawn scaffold, copied reference docs, logo asset, token stylesheet, and setup documentation.
- Later phases should build header/footer, homepage sections, collection/product/cart templates, content pages, settings, and QA in separate scoped passes.
- Before changing Dawn Liquid, inspect the relevant Dawn section/snippet/template and follow its existing conventions.

## Validation Expectations

- Run Shopify Theme Check when available.
- Check changed Liquid and JSON files for syntax and schema integrity.
- Document any Shopify CLI, store authentication, or theme preview blockers in `get-yours-shopify-theme/docs/`.
Original file line number Diff line number Diff line change
@@ -0,0 +1,340 @@
<div class="gy-section gy-promo-hero color-{{ section.settings.color_scheme }}">
<div class="page-width">
{%- if section.settings.accessibility_heading != blank -%}
<h2 class="visually-hidden">{{ section.settings.accessibility_heading }}</h2>
{%- endif -%}

{%- liquid
for block in section.blocks
case block.type
when 'main_tile'
assign main_block = block
when 'office_tile'
assign office_block = block
when 'travel_tile'
assign travel_block = block
endcase
endfor
-%}

<div class="gy-promo-hero__grid">
{%- if main_block != blank -%}
<article
class="gy-promo-hero__tile gy-promo-hero__tile--main"
style="--gy-overlay-opacity: {{ main_block.settings.overlay_opacity | times: 0.01 }};"
{{ main_block.shopify_attributes }}
>
<div class="gy-promo-hero__media">
{%- if main_block.settings.image != blank -%}
{{
main_block.settings.image
| image_url: width: 1600
| image_tag:
widths: '375, 550, 750, 1100, 1400, 1600',
sizes: '(min-width: 990px) 65vw, 100vw',
class: 'gy-promo-hero__image',
loading: 'eager',
fetchpriority: 'high'
}}
{%- else -%}
{{ 'lifestyle-1' | placeholder_svg_tag: 'gy-promo-hero__placeholder' }}
{%- endif -%}
</div>
<div class="gy-promo-hero__content">
{%- if main_block.settings.eyebrow != blank -%}
<p class="gy-eyebrow">{{ main_block.settings.eyebrow }}</p>
{%- endif -%}
{%- if main_block.settings.heading != blank -%}
<h2 class="gy-promo-hero__heading">{{ main_block.settings.heading }}</h2>
{%- endif -%}
{%- if main_block.settings.text != blank -%}
<div class="gy-promo-hero__text rte">{{ main_block.settings.text }}</div>
{%- endif -%}
{%- if main_block.settings.button_label != blank and main_block.settings.button_link != blank -%}
<a class="button gy-button" href="{{ main_block.settings.button_link }}">
{{ main_block.settings.button_label }}
</a>
{%- endif -%}
</div>
</article>
{%- endif -%}

<div class="gy-promo-hero__stack">
{%- if office_block != blank -%}
<article
class="gy-promo-hero__tile"
style="--gy-overlay-opacity: {{ office_block.settings.overlay_opacity | times: 0.01 }};"
{{ office_block.shopify_attributes }}
>
<div class="gy-promo-hero__media">
{%- if office_block.settings.image != blank -%}
{{
office_block.settings.image
| image_url: width: 900
| image_tag:
widths: '375, 550, 750, 900',
sizes: '(min-width: 990px) 35vw, 100vw',
class: 'gy-promo-hero__image',
loading: 'lazy'
}}
{%- else -%}
{{ 'collection-1' | placeholder_svg_tag: 'gy-promo-hero__placeholder' }}
{%- endif -%}
</div>
<div class="gy-promo-hero__content gy-promo-hero__content--compact">
{%- if office_block.settings.eyebrow != blank -%}
<p class="gy-eyebrow">{{ office_block.settings.eyebrow }}</p>
{%- endif -%}
{%- if office_block.settings.heading != blank -%}
<h3 class="gy-promo-hero__subheading">{{ office_block.settings.heading }}</h3>
{%- endif -%}
{%- if office_block.settings.text != blank -%}
<div class="gy-promo-hero__text rte">{{ office_block.settings.text }}</div>
{%- endif -%}
{%- if office_block.settings.button_label != blank and office_block.settings.button_link != blank -%}
<a class="button button--secondary gy-button gy-button--secondary" href="{{ office_block.settings.button_link }}">
{{ office_block.settings.button_label }}
</a>
{%- endif -%}
</div>
</article>
{%- endif -%}

{%- if travel_block != blank -%}
<article
class="gy-promo-hero__tile"
style="--gy-overlay-opacity: {{ travel_block.settings.overlay_opacity | times: 0.01 }};"
{{ travel_block.shopify_attributes }}
>
<div class="gy-promo-hero__media">
{%- if travel_block.settings.image != blank -%}
{{
travel_block.settings.image
| image_url: width: 900
| image_tag:
widths: '375, 550, 750, 900',
sizes: '(min-width: 990px) 35vw, 100vw',
class: 'gy-promo-hero__image',
loading: 'lazy'
}}
{%- else -%}
{{ 'collection-2' | placeholder_svg_tag: 'gy-promo-hero__placeholder' }}
{%- endif -%}
</div>
<div class="gy-promo-hero__content gy-promo-hero__content--compact">
{%- if travel_block.settings.eyebrow != blank -%}
<p class="gy-eyebrow">{{ travel_block.settings.eyebrow }}</p>
{%- endif -%}
{%- if travel_block.settings.heading != blank -%}
<h3 class="gy-promo-hero__subheading">{{ travel_block.settings.heading }}</h3>
{%- endif -%}
{%- if travel_block.settings.text != blank -%}
<div class="gy-promo-hero__text rte">{{ travel_block.settings.text }}</div>
{%- endif -%}
{%- if travel_block.settings.button_label != blank and travel_block.settings.button_link != blank -%}
<a class="button button--secondary gy-button gy-button--secondary" href="{{ travel_block.settings.button_link }}">
{{ travel_block.settings.button_label }}
</a>
{%- endif -%}
</div>
</article>
{%- endif -%}
</div>
</div>
</div>
</div>

{% schema %}
{
"name": "Get Yours promo grid hero",
"tag": "section",
"class": "section",
"disabled_on": {
"groups": ["header", "footer"]
},
"settings": [
{
"type": "text",
"id": "accessibility_heading",
"label": "Accessibility heading",
"default": "Featured promotions"
},
{
"type": "color_scheme",
"id": "color_scheme",
"label": "Color scheme",
"default": "scheme-1"
}
],
"max_blocks": 3,
"blocks": [
{
"type": "main_tile",
"name": "Main hero tile",
"limit": 1,
"settings": [
{
"type": "image_picker",
"id": "image",
"label": "Image"
},
{
"type": "text",
"id": "eyebrow",
"label": "Eyebrow or badge",
"default": "Smart Value Guarantee"
},
{
"type": "inline_richtext",
"id": "heading",
"label": "Heading",
"default": "Smart everyday finds for less."
},
{
"type": "richtext",
"id": "text",
"label": "Text",
"default": "<p>Practical home, desk, travel and lifestyle essentials curated for everyday value.</p>"
},
{
"type": "text",
"id": "button_label",
"label": "Button label",
"default": "Shop practical finds"
},
{
"type": "url",
"id": "button_link",
"label": "Button link"
},
{
"type": "range",
"id": "overlay_opacity",
"min": 0,
"max": 70,
"step": 5,
"unit": "%",
"label": "Image overlay opacity",
"default": 25
}
]
},
{
"type": "office_tile",
"name": "Office & Desk tile",
"limit": 1,
"settings": [
{
"type": "image_picker",
"id": "image",
"label": "Image"
},
{
"type": "text",
"id": "eyebrow",
"label": "Eyebrow or badge"
},
{
"type": "inline_richtext",
"id": "heading",
"label": "Heading",
"default": "Office & Desk Essentials"
},
{
"type": "richtext",
"id": "text",
"label": "Text",
"default": "<p>Useful upgrades for work, study and home office.</p>"
},
{
"type": "text",
"id": "button_label",
"label": "Button label",
"default": "Shop desk finds"
},
{
"type": "url",
"id": "button_link",
"label": "Button link"
},
{
"type": "range",
"id": "overlay_opacity",
"min": 0,
"max": 70,
"step": 5,
"unit": "%",
"label": "Image overlay opacity",
"default": 25
}
]
},
{
"type": "travel_tile",
"name": "Travel & Daily tile",
"limit": 1,
"settings": [
{
"type": "image_picker",
"id": "image",
"label": "Image"
},
{
"type": "text",
"id": "eyebrow",
"label": "Eyebrow or badge"
},
{
"type": "inline_richtext",
"id": "heading",
"label": "Heading",
"default": "Travel & Daily Accessories"
},
{
"type": "richtext",
"id": "text",
"label": "Text",
"default": "<p>Compact finds for errands, commutes and everyday carry.</p>"
},
{
"type": "text",
"id": "button_label",
"label": "Button label",
"default": "Shop travel finds"
},
{
"type": "url",
"id": "button_link",
"label": "Button link"
},
{
"type": "range",
"id": "overlay_opacity",
"min": 0,
"max": 70,
"step": 5,
"unit": "%",
"label": "Image overlay opacity",
"default": 25
}
]
}
],
"presets": [
{
"name": "Get Yours promo grid hero",
"blocks": [
{
"type": "main_tile"
},
{
"type": "office_tile"
},
{
"type": "travel_tile"
}
]
}
]
}
{% endschema %}
Loading
Loading