diff --git a/.gitignore b/.gitignore index bc110b6487d..837e5e7cf74 100644 --- a/.gitignore +++ b/.gitignore @@ -9,4 +9,5 @@ ehthumbs.db Thumbs.db .shopify node_modules -*.zip \ No newline at end of file +*.zip +assets/mock-*local_assets/ diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 00000000000..fdc533dabac --- /dev/null +++ b/AGENTS.md @@ -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/`. diff --git a/docs/recovery-backups/phase-3-9-recovery/gy-promo-grid-hero.before-recovery.liquid b/docs/recovery-backups/phase-3-9-recovery/gy-promo-grid-hero.before-recovery.liquid new file mode 100644 index 00000000000..8552eae9aab --- /dev/null +++ b/docs/recovery-backups/phase-3-9-recovery/gy-promo-grid-hero.before-recovery.liquid @@ -0,0 +1,340 @@ +
+
+ {%- if section.settings.accessibility_heading != blank -%} +

{{ section.settings.accessibility_heading }}

+ {%- 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 + -%} + +
+ {%- if main_block != blank -%} +
+
+ {%- 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 -%} +
+
+ {%- if main_block.settings.eyebrow != blank -%} +

{{ main_block.settings.eyebrow }}

+ {%- endif -%} + {%- if main_block.settings.heading != blank -%} +

{{ main_block.settings.heading }}

+ {%- endif -%} + {%- if main_block.settings.text != blank -%} +
{{ main_block.settings.text }}
+ {%- endif -%} + {%- if main_block.settings.button_label != blank and main_block.settings.button_link != blank -%} + + {{ main_block.settings.button_label }} + + {%- endif -%} +
+
+ {%- endif -%} + +
+ {%- if office_block != blank -%} +
+
+ {%- 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 -%} +
+
+ {%- if office_block.settings.eyebrow != blank -%} +

{{ office_block.settings.eyebrow }}

+ {%- endif -%} + {%- if office_block.settings.heading != blank -%} +

{{ office_block.settings.heading }}

+ {%- endif -%} + {%- if office_block.settings.text != blank -%} +
{{ office_block.settings.text }}
+ {%- endif -%} + {%- if office_block.settings.button_label != blank and office_block.settings.button_link != blank -%} + + {{ office_block.settings.button_label }} + + {%- endif -%} +
+
+ {%- endif -%} + + {%- if travel_block != blank -%} +
+
+ {%- 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 -%} +
+
+ {%- if travel_block.settings.eyebrow != blank -%} +

{{ travel_block.settings.eyebrow }}

+ {%- endif -%} + {%- if travel_block.settings.heading != blank -%} +

{{ travel_block.settings.heading }}

+ {%- endif -%} + {%- if travel_block.settings.text != blank -%} +
{{ travel_block.settings.text }}
+ {%- endif -%} + {%- if travel_block.settings.button_label != blank and travel_block.settings.button_link != blank -%} + + {{ travel_block.settings.button_label }} + + {%- endif -%} +
+
+ {%- endif -%} +
+
+
+
+ +{% 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": "

Practical home, desk, travel and lifestyle essentials curated for everyday value.

" + }, + { + "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": "

Useful upgrades for work, study and home office.

" + }, + { + "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": "

Compact finds for errands, commutes and everyday carry.

" + }, + { + "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 %} diff --git a/docs/recovery-backups/phase-3-9-recovery/index.before-recovery.json b/docs/recovery-backups/phase-3-9-recovery/index.before-recovery.json new file mode 100644 index 00000000000..61be7396e19 --- /dev/null +++ b/docs/recovery-backups/phase-3-9-recovery/index.before-recovery.json @@ -0,0 +1,291 @@ +{ + "sections": { + "gy_promo_grid_hero": { + "type": "gy-promo-grid-hero", + "blocks": { + "main_tile": { + "type": "main_tile", + "settings": { + "eyebrow": "Smart Value Guarantee", + "heading": "Smart everyday finds for less.", + "text": "

Practical home, desk, travel and lifestyle essentials curated for everyday value.

", + "button_label": "Shop practical finds", + "button_link": "shopify://collections/all", + "overlay_opacity": 25 + } + }, + "office_tile": { + "type": "office_tile", + "settings": { + "eyebrow": "", + "heading": "Office & Desk Essentials", + "text": "

Useful upgrades for work, study and home office.

", + "button_label": "Shop desk finds", + "button_link": "shopify://collections/all", + "overlay_opacity": 25 + } + }, + "travel_tile": { + "type": "travel_tile", + "settings": { + "eyebrow": "", + "heading": "Travel & Daily Accessories", + "text": "

Compact finds for errands, commutes and everyday carry.

", + "button_label": "Shop travel finds", + "button_link": "shopify://collections/all", + "overlay_opacity": 25 + } + } + }, + "block_order": [ + "main_tile", + "office_tile", + "travel_tile" + ], + "settings": { + "accessibility_heading": "Featured promotions", + "color_scheme": "scheme-1" + } + }, + "gy_category_grid": { + "type": "gy-category-grid", + "blocks": { + "home_organisation": { + "type": "category", + "settings": { + "title": "Home Organisation", + "text": "Storage and tidy-home finds", + "icon": "home", + "link": "shopify://collections/all", + "badge": "" + } + }, + "office_desk": { + "type": "category", + "settings": { + "title": "Office & Desk", + "text": "Work, study and desk upgrades", + "icon": "desk", + "link": "shopify://collections/all", + "badge": "" + } + }, + "kitchen_storage": { + "type": "category", + "settings": { + "title": "Kitchen & Storage", + "text": "Practical kitchen helpers", + "icon": "kitchen", + "link": "shopify://collections/all", + "badge": "" + } + }, + "lifestyle": { + "type": "category", + "settings": { + "title": "Lifestyle", + "text": "Everyday useful essentials", + "icon": "lifestyle", + "link": "shopify://collections/all", + "badge": "" + } + }, + "travel": { + "type": "category", + "settings": { + "title": "Travel", + "text": "Compact carry and trip finds", + "icon": "travel", + "link": "shopify://collections/all", + "badge": "" + } + }, + "tech_accessories": { + "type": "category", + "settings": { + "title": "Tech Accessories", + "text": "Simple add-ons for daily devices", + "icon": "tech", + "link": "shopify://collections/all", + "badge": "" + } + } + }, + "block_order": [ + "home_organisation", + "office_desk", + "kitchen_storage", + "lifestyle", + "travel", + "tech_accessories" + ], + "settings": { + "heading": "Shop by Category", + "subtitle": "

Browse practical everyday finds by the way you use them.

", + "view_all_label": "Browse all categories", + "view_all_link": "shopify://collections/all", + "color_scheme": "scheme-1" + } + }, + "gy_featured_practical_finds": { + "type": "gy-featured-collection", + "settings": { + "collection": "all", + "eyebrow": "", + "heading": "Featured Practical Finds", + "subtitle": "

Simple, useful products selected for everyday value.

", + "products_to_show": 4, + "show_view_all": true, + "view_all_label": "View all", + "background_style": "plain", + "color_scheme": "scheme-1", + "columns_desktop": "4", + "columns_mobile": "2", + "image_ratio": "square", + "show_secondary_image": false, + "show_vendor": false, + "show_rating": false, + "quick_add": "none" + } + }, + "gy_new_arrivals": { + "type": "gy-featured-collection", + "settings": { + "collection": "all", + "eyebrow": "", + "heading": "New Arrivals", + "subtitle": "

Fresh everyday finds recently added to Get Yours.

", + "products_to_show": 4, + "show_view_all": true, + "view_all_label": "View all", + "background_style": "plain", + "color_scheme": "scheme-1", + "columns_desktop": "4", + "columns_mobile": "2", + "image_ratio": "square", + "show_secondary_image": false, + "show_vendor": false, + "show_rating": false, + "quick_add": "none" + } + }, + "gy_best_sellers": { + "type": "gy-featured-collection", + "settings": { + "collection": "all", + "eyebrow": "", + "heading": "Best Sellers", + "subtitle": "

Popular picks customers are checking out.

", + "products_to_show": 4, + "show_view_all": true, + "view_all_label": "View all", + "background_style": "plain", + "color_scheme": "scheme-1", + "columns_desktop": "4", + "columns_mobile": "2", + "image_ratio": "square", + "show_secondary_image": false, + "show_vendor": false, + "show_rating": false, + "quick_add": "none" + } + }, + "gy_home_organisation": { + "type": "gy-featured-collection", + "settings": { + "collection": "all", + "eyebrow": "", + "heading": "Home Organisation Picks", + "subtitle": "

Smart storage and organising finds for your home.

", + "products_to_show": 4, + "show_view_all": true, + "view_all_label": "View all", + "background_style": "plain", + "color_scheme": "scheme-1", + "columns_desktop": "4", + "columns_mobile": "2", + "image_ratio": "square", + "show_secondary_image": false, + "show_vendor": false, + "show_rating": false, + "quick_add": "none" + } + }, + "gy_office_desk": { + "type": "gy-featured-collection", + "settings": { + "collection": "all", + "eyebrow": "", + "heading": "Office & Desk Essentials", + "subtitle": "

Practical desk upgrades for work, study and home office.

", + "products_to_show": 4, + "show_view_all": true, + "view_all_label": "View all", + "background_style": "plain", + "color_scheme": "scheme-1", + "columns_desktop": "4", + "columns_mobile": "2", + "image_ratio": "square", + "show_secondary_image": false, + "show_vendor": false, + "show_rating": false, + "quick_add": "none" + } + }, + "gy_trust_grid": { + "type": "gy-trust-grid", + "blocks": { + "reliable_delivery": { + "type": "trust_item", + "settings": { + "icon": "delivery", + "title": "Reliable delivery", + "text": "

Clear delivery updates and practical shipping options for everyday orders.

", + "link_label": "", + "link": "" + } + }, + "easy_support": { + "type": "trust_item", + "settings": { + "icon": "support", + "title": "Easy support", + "text": "

Need help before or after ordering? Get support through our customer service channels.

", + "link_label": "", + "link": "" + } + }, + "secure_checkout": { + "type": "trust_item", + "settings": { + "icon": "secure", + "title": "Secure checkout", + "text": "

Shop with trusted Shopify checkout and supported payment methods.

", + "link_label": "", + "link": "" + } + } + }, + "block_order": [ + "reliable_delivery", + "easy_support", + "secure_checkout" + ], + "settings": { + "heading": "Delivery, support and checkout you can trust", + "subtitle": "

Clear service details for everyday online shopping.

", + "color_scheme": "scheme-2" + } + } + }, + "order": [ + "gy_promo_grid_hero", + "gy_category_grid", + "gy_featured_practical_finds", + "gy_new_arrivals", + "gy_best_sellers", + "gy_home_organisation", + "gy_office_desk", + "gy_trust_grid" + ] +} diff --git a/get-yours-shopify-theme/.github/CODE_OF_CONDUCT.md b/get-yours-shopify-theme/.github/CODE_OF_CONDUCT.md new file mode 100644 index 00000000000..b4350ac3777 --- /dev/null +++ b/get-yours-shopify-theme/.github/CODE_OF_CONDUCT.md @@ -0,0 +1,77 @@ + +# Code of Conduct + +## Our Pledge + +In the interest of fostering an open and welcoming environment, we as +contributors and maintainers pledge to make participation in our project and +our community a harassment-free experience for everyone, regardless of age, body +size, disability, ethnicity, sex characteristics, gender identity and expression, +level of experience, education, socio-economic status, nationality, personal +appearance, race, religion, or sexual identity and orientation. + +## Our Standards + +Examples of behavior that contributes to creating a positive environment +include: + +* Using welcoming and inclusive language +* Being respectful of differing viewpoints and experiences +* Gracefully accepting constructive criticism +* Focusing on what is best for the community +* Showing empathy towards other community members + +Examples of unacceptable behavior by participants include: + +* The use of sexualized language or imagery and unwelcome sexual attention or + advances +* Trolling, insulting/derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or electronic + address, without explicit permission +* Other conduct which could reasonably be considered inappropriate in a + professional setting + +## Our Responsibilities + +Project maintainers are responsible for clarifying the standards of acceptable +behavior and are expected to take appropriate and fair corrective action in +response to any instances of unacceptable behavior. + +Project maintainers have the right and responsibility to remove, edit, or +reject comments, commits, code, wiki edits, issues, and other contributions +that are not aligned to this Code of Conduct, or to ban temporarily or +permanently any contributor for other behaviors that they deem inappropriate, +threatening, offensive, or harmful. + +## Scope + +This Code of Conduct applies within all project spaces, and it also applies when +an individual is representing the project or its community in public spaces. +Examples of representing a project or community include using an official +project e-mail address, posting via an official social media account, or acting +as an appointed representative at an online or offline event. Representation of +a project may be further defined and clarified by project maintainers. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported by contacting the project team at . All +complaints will be reviewed and investigated and will result in a response that +is deemed necessary and appropriate to the circumstances. The project team is +obligated to maintain confidentiality with regard to the reporter of an incident. +Further details of specific enforcement policies may be posted separately. + +Project maintainers who do not follow or enforce the Code of Conduct in good +faith may face temporary or permanent repercussions as determined by other +members of the project's leadership. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, +available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html + +[homepage]: https://www.contributor-covenant.org + +For answers to common questions about this code of conduct, see +https://www.contributor-covenant.org/faq diff --git a/get-yours-shopify-theme/.github/CONTRIBUTING.md b/get-yours-shopify-theme/.github/CONTRIBUTING.md new file mode 100644 index 00000000000..e166efb37cb --- /dev/null +++ b/get-yours-shopify-theme/.github/CONTRIBUTING.md @@ -0,0 +1,151 @@ +# Contributing + +[Before contributing](#before-contributing) | +[Scope](#scope) | +[Theme code principles](#theme-code-principles) | +[Contributing code](#contributing-code) | +[Reporting a bug](#reporting-a-bug) | +[Reviewing](#reviewing) + +We're really glad you're reading this, because we would love to have more developers contribute to this theme! If you're passionate about building for the next million entrepreneurs, you're in the right place. + +## Before contributing + +If you encounter a bug or think of a useful feature for Dawn, please [create a new issue](https://github.com/Shopify/dawn/issues/new). Creating an issue before jumping into code ensures we can discuss it and determine whether it aligns with the direction of the theme. + +If you want to contribute to the theme, regardless of whether it's a small bug fix or correcting a typo, please feel free to do so. Any help goes a long way! Also, contributions aren't necessarily all code related. Other contributions can be in the form of issues, pull requests, discussions, etc. + +## Scope + +This Github repository exists for the theme development community to discuss and solve problems directly related to Dawn. It **is not the place** to discuss general theme development problems, nor the place to seek help for non-Dawn related problems. + +Shopify theme development is a big topic and it's completely normal that you will encounter problems which might require you to reach out for help. In fact, we provide several knowledge and support platforms for theme development already: + +* [Shopify Development](https://shopify.dev/themes) +* [Shopify Help Center](https://help.shopify.com/themes) +* [Shopify Forum](https://ecommerce.shopify.com/forums) +* [Shopify Experts](https://experts.shopify.com/) + +## Theme code principles + +Before contributing to Dawn, please read the following theme code principles to better understand our fundamental approach to theme development. The expectation is that you follow these principles as you build for Dawn. + +### Why these principles? + +Browsers provide APIs to solve many problems: from [WebGL](https://en.wikipedia.org/wiki/WebGL) and [WASM](https://en.wikipedia.org/wiki/WebAssembly)-powered apps to static websites. The best APIs to use depends on the thing you’re building. Themes power ecommerce websites. In most cases, _Web-native_—making the most of the built-in features of browsers: HTTP, HTML, CSS, JavaScript, and the DOM—is a perfect fit for ecommerce websites. Ecommerce needs incredibly fast websites for mostly “logged out” traffic. + +### Web-native in its purest form + +_The most important principle._ + +Themes run on the [evergreen Web](https://www.w3.org/2001/tag/doc/evergreen-web/). We leverage the latest web browsers to their fullest, while maintaining support for the older ones through progressive enhancement—not polyfills. + +We write bespoke Web-native code with no abstractions. Frameworks, libraries, and dependencies don’t belong in our themes. + +We engage with the browser ecosystem on behalf of our merchants to make Web-native ecommerce the best it can be. + +“Don’t repeat yourself” is an anti-pattern. We do our utmost best to do more with less, but we don’t build abstractions around repetition. Instead, we use linting and testing to enforce consistently-good and up-to-date Web-native code. + +### Lean, fast, and reliable + +_The principle requirement._ + +Code must be lean, fast, and reliable. Our targets include: + +* Zero [Cumulative Layout Shift](https://web.dev/cls/) +* No DOM manipulation before user input +* No render-blocking JavaScript +* No [long tasks](https://developer.mozilla.org/en-US/docs/Web/API/Long_Tasks_API) + +Functionality and design defaults to “no” until it meets this requirement. Code ships on quality. + +We relentlessly and continuously optimize code within the constraint of being Web-native. If ever there is a feature that browsers have not made fast yet, we either don’t use it, or use it “as is” if it is fast enough. We trust that browsers will get faster over time. + +Themes must be built with purpose. They shouldn’t support each and every feature in Shopify. + +### Server-rendered + +_Our main constraint._ + +HTML must be rendered by Shopify servers using [Liquid](https://shopify.dev/api/liquid). Business logic and platform primitives such as translations and money formatting don’t belong on the client. + +Server-rendered doesn’t imply “full page reload”. Async and on-demand rendering of parts of the page is OK, but we do it sparingly as a progressive enhancement. + +### Functional, not pixel-perfect + +_No buyer is left behind._ + +The Web doesn’t require each page to be rendered pixel-perfect by each browser engine. Using semantic markup, progressive enhancement, and clever design, we ensure that themes remain functional regardless of the browser. + +And since legacy browsers are often the slowest, we don’t burden them with polyfills. We rely instead on the fail-open nature of the Web to provide them with a “minimal but functional” experience. + +## Contributing code + +You can follow these steps to go from setting up a store to creating a pull request for Dawn. + +>:information_source: We'll assume you're already set up with Git and GitHub (if you're not familiar with these, [start with these docs](https://docs.github.com/github/getting-started-with-github/quickstart/set-up-git)). + +1. Set up a [development store](https://shopify.dev/themes/tools/development-stores) so you can test your code changes (assuming you don't already have a store). +2. Install the [Shopify CLI](https://github.com/Shopify/shopify-cli) by following [these steps](https://shopify.dev/themes/tools/cli/installation). +3. Fork the repository, clone it and create a new branch: +```sh +git clone git@github.com:your-username/dawn.git +cd dawn +git checkout -b your-new-branch-name +``` +4. Launch a development server: +```sh +shopify theme serve +``` +5. Add your changes to the codebase. +6. Commit your changes: +```sh +git commit -a -m="Your commit message" +``` +7. Push your commit to your forked repository: +```sh +git push origin your-new-branch-name +``` +8. Open a pull request. See [GitHub's official documentation](https://help.github.com/articles/creating-a-pull-request-from-a-fork/) for more details. +9. Before you can merge your pull request, you must sign Shopify's [Contributor License Agreement (CLA)](https://cla.shopify.com/). + +## Reporting a bug + +Bugs are tracked as [GitHub issues](https://github.com/Shopify/dawn/issues). Search open issues to see if someone else has reported a similar bug. If it's something new, [open an issue](https://github.com/Shopify/dawn/issues/new). We'll use the issue to have a conversation about the problem you want to fix. + +When creating a new issue, please ensure the issue is clear and include additional details to help maintainers reproduce it: + +* **Use a clear and descriptive title** for the issue to identify the problem. +* **Describe the exact steps which reproduce the problem** in as many details as possible. +* **Provide specific examples to demonstrate the steps.** Include links to files, or copy/pasteable snippets. If you're providing snippets in the issue, use Markdown code blocks. +* **Describe the behavior you observed** after following the steps and point out what exactly is the problem with that behavior. +* **Explain which behavior you expected to see** instead and why. +* **Include screenshots and animated GIFs** where possible. + +## Reviewing + +We (the Themes team) review every single PR. The purpose of reviews is to create the best version of Dawn we can for merchants, developers, and others who use it. + +:yellow_heart: Reviews are always respectful, acknowledging that everyone did the best possible job with the knowledge they had at the time. +:yellow_heart: Reviews discuss content, not the person who created it. +:yellow_heart: Reviews are constructive and start conversation around feedback. + +### Self review + +You should always review your own PR first. + +For code changes, make sure that you: +- [ ] Confirm that the changes meet our [theme code principles](#theme-code-principles). +- [ ] Check new or updated Liquid docs to confirm that the code used is up to date and isn't deprecated. +- [ ] If there are any failing checks in your PR, troubleshoot them until they're all passing. +- [ ] Add @Shopify/themes-front-end-developers as a reviewer. + +### Pull request template + +When you open a pull request, you must fill out the "Ready for review" template before we can review your PR. This template helps reviewers understand your changes and the purpose of your pull request. + +### Suggested changes + +We may ask for changes to be made before a PR can be merged, either using [suggested changes](https://docs.github.com/github/collaborating-with-issues-and-pull-requests/incorporating-feedback-in-your-pull-request) or pull request comments. You can apply suggested changes directly through the UI. You can make any other changes in your fork, then commit them to your branch. + +As you update your PR and apply changes, mark each conversation as [resolved](https://docs.github.com/github/collaborating-with-issues-and-pull-requests/commenting-on-a-pull-request#resolving-conversations). diff --git a/get-yours-shopify-theme/.github/ISSUE_TEMPLATE/Bug_issue.md b/get-yours-shopify-theme/.github/ISSUE_TEMPLATE/Bug_issue.md new file mode 100644 index 00000000000..240ad6046a6 --- /dev/null +++ b/get-yours-shopify-theme/.github/ISSUE_TEMPLATE/Bug_issue.md @@ -0,0 +1,24 @@ +--- +name: Bug report +about: Use this template for reporting a bug +labels: bug +--- + +## Describe the current behavior + + +## Describe the expected behavior + + +## Version information (Dawn, browsers and operating systems) + +- Dawn Version: 7.0.1 +- Chrome Version 108.0.5359.124 +- macOS Version 13.1 + +## Possible solution + + +## Additional context/screenshots + + diff --git a/get-yours-shopify-theme/.github/ISSUE_TEMPLATE/Feature_request.md b/get-yours-shopify-theme/.github/ISSUE_TEMPLATE/Feature_request.md new file mode 100644 index 00000000000..7e3238d515f --- /dev/null +++ b/get-yours-shopify-theme/.github/ISSUE_TEMPLATE/Feature_request.md @@ -0,0 +1,17 @@ +--- +name: Feature request +about: Use this template for suggesting a Dawn enhancement +labels: enhancement +--- + +## Describe the enhancement you'd like + + + +## Describe alternatives you've considered + + + +## Additional context/screenshots + + diff --git a/get-yours-shopify-theme/.github/PULL_REQUEST_TEMPLATE.md b/get-yours-shopify-theme/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 00000000000..6694546860d --- /dev/null +++ b/get-yours-shopify-theme/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,43 @@ +### PR Summary: + + + + +### Why are these changes introduced? + +Fixes #0. + +### What approach did you take? + +### Other considerations + +### Decision log + +| # | Decision | Alternatives | Rationale | Downsides | +|---|---|---|---|---| +| 1 | | | | | + + +### Visual impact on existing themes + + + +### Testing steps/scenarios + +- [ ] Step 1 + +### Demo links + + +- [Store](url) +- [Editor](url) + +### Checklist +- [ ] Added PR summary for [release notes](https://themes.shopify.com/themes/dawn/styles/default#ReleaseNotes) +- [ ] Requested review from UX (Only for changes that are affecting the experience or perceivable visual details) +- [ ] Created a ticket for the [help.shopify.com](https://help.shopify.com) documentation team about updates to theme settings. (Internal-only task) +- [ ] Followed [theme code principles](https://github.com/Shopify/dawn/blob/main/.github/CONTRIBUTING.md#theme-code-principles) +- [ ] Linted with [Theme Check](https://github.com/Shopify/theme-check) +- [ ] Tested on [mobile](https://shopify.dev/themes/store/requirements#mobile-browser-requirements) +- [ ] Tested on [multiple browsers](https://shopify.dev/themes/store/requirements#desktop-browser-requirements) +- [ ] Tested for [accessibility](https://shopify.dev/themes/best-practices/accessibility) diff --git a/get-yours-shopify-theme/.github/dependabot.yaml b/get-yours-shopify-theme/.github/dependabot.yaml new file mode 100644 index 00000000000..c75e875a00b --- /dev/null +++ b/get-yours-shopify-theme/.github/dependabot.yaml @@ -0,0 +1,6 @@ +version: 2 +updates: + - package-ecosystem: github-actions + directory: "/" + schedule: + interval: weekly diff --git a/get-yours-shopify-theme/.github/workflows/ci.yml b/get-yours-shopify-theme/.github/workflows/ci.yml new file mode 100644 index 00000000000..3066b6a0d82 --- /dev/null +++ b/get-yours-shopify-theme/.github/workflows/ci.yml @@ -0,0 +1,26 @@ +name: CI +on: [push] +jobs: + lhci: + name: Lighthouse + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + - name: Lighthouse + uses: shopify/lighthouse-ci-action@v1 + with: + store: ${{ secrets.SHOP_STORE_OS2 }} + password: ${{ secrets.SHOP_PASSWORD_OS2 }} + access_token: ${{ secrets.SHOP_ACCESS_TOKEN }} + collection_handle: all + lhci_github_app_token: ${{ secrets.LHCI_GITHUB_TOKEN }} + pull_theme: ${{ secrets.SHOP_PULL_THEME }} + theme-check: + name: Theme Check + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + - name: Theme Check + uses: shopify/theme-check-action@v2 + with: + token: ${{ github.token }} diff --git a/get-yours-shopify-theme/.github/workflows/cla.yml b/get-yours-shopify-theme/.github/workflows/cla.yml new file mode 100644 index 00000000000..9c29c5c756a --- /dev/null +++ b/get-yours-shopify-theme/.github/workflows/cla.yml @@ -0,0 +1,22 @@ +name: Contributor License Agreement (CLA) + +on: + pull_request_target: + types: [opened, synchronize, reopened] + issue_comment: + types: [created] + +jobs: + cla: + runs-on: ubuntu-latest + if: | + (github.event.issue.pull_request + && !github.event.issue.pull_request.merged_at + && contains(github.event.comment.body, 'signed') + ) + || (github.event.pull_request && !github.event.pull_request.merged) + steps: + - uses: Shopify/shopify-cla-action@v1 + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + cla-token: ${{ secrets.CLA_TOKEN }} diff --git a/get-yours-shopify-theme/.github/workflows/stale.yml b/get-yours-shopify-theme/.github/workflows/stale.yml new file mode 100644 index 00000000000..5eb1f676bd4 --- /dev/null +++ b/get-yours-shopify-theme/.github/workflows/stale.yml @@ -0,0 +1,27 @@ +# This workflow warns and then closes issues and PRs that have had no activity for a specified amount of time. +# +# You can adjust the behavior by modifying this file. +# For more information, see: +# https://github.com/actions/stale +name: Mark stale issues and pull requests + +on: + schedule: + - cron: '38 16 * * *' + +jobs: + stale: + + runs-on: ubuntu-latest + permissions: + issues: write + pull-requests: write + + steps: + - uses: actions/stale@v5 + with: + repo-token: ${{ secrets.GITHUB_TOKEN }} + stale-issue-message: 'This issue has been marked as stale due to inactivity for 60 days. Please comment or update if this is still relevant, otherwise it will be closed in 7 days.' + stale-pr-message: 'This pull request has been marked as stale due to inactivity for 60 days. If no further activity occurs, it will be closed in 7 days.' + stale-issue-label: 'inactive' + stale-pr-label: 'inactive' diff --git a/get-yours-shopify-theme/.gitignore b/get-yours-shopify-theme/.gitignore new file mode 100644 index 00000000000..bc110b6487d --- /dev/null +++ b/get-yours-shopify-theme/.gitignore @@ -0,0 +1,12 @@ +# OS generated files # +###################### +.DS_Store +.DS_Store? +._* +.Spotlight-V100 +.Trashes +ehthumbs.db +Thumbs.db +.shopify +node_modules +*.zip \ No newline at end of file diff --git a/get-yours-shopify-theme/.prettierrc.json b/get-yours-shopify-theme/.prettierrc.json new file mode 100644 index 00000000000..a7785dfc0e2 --- /dev/null +++ b/get-yours-shopify-theme/.prettierrc.json @@ -0,0 +1,12 @@ +{ + "printWidth": 120, + "singleQuote": true, + "overrides": [ + { + "files": "*.liquid", + "options": { + "singleQuote": false + } + } + ] +} diff --git a/get-yours-shopify-theme/.theme-check.yml b/get-yours-shopify-theme/.theme-check.yml new file mode 100644 index 00000000000..f905bd47a81 --- /dev/null +++ b/get-yours-shopify-theme/.theme-check.yml @@ -0,0 +1,4 @@ +MatchingTranslations: + enabled: false +TemplateLength: + enabled: false diff --git a/LICENSE.md b/get-yours-shopify-theme/LICENSE.md similarity index 100% rename from LICENSE.md rename to get-yours-shopify-theme/LICENSE.md diff --git a/README.md b/get-yours-shopify-theme/README.md similarity index 100% rename from README.md rename to get-yours-shopify-theme/README.md diff --git a/assets/animations.js b/get-yours-shopify-theme/assets/animations.js similarity index 100% rename from assets/animations.js rename to get-yours-shopify-theme/assets/animations.js diff --git a/assets/base.css b/get-yours-shopify-theme/assets/base.css similarity index 100% rename from assets/base.css rename to get-yours-shopify-theme/assets/base.css diff --git a/assets/cart-disclosure-modal.js b/get-yours-shopify-theme/assets/cart-disclosure-modal.js similarity index 100% rename from assets/cart-disclosure-modal.js rename to get-yours-shopify-theme/assets/cart-disclosure-modal.js diff --git a/assets/cart-disclosure-tooltip.js b/get-yours-shopify-theme/assets/cart-disclosure-tooltip.js similarity index 100% rename from assets/cart-disclosure-tooltip.js rename to get-yours-shopify-theme/assets/cart-disclosure-tooltip.js diff --git a/assets/cart-drawer.js b/get-yours-shopify-theme/assets/cart-drawer.js similarity index 100% rename from assets/cart-drawer.js rename to get-yours-shopify-theme/assets/cart-drawer.js diff --git a/assets/cart-notification.js b/get-yours-shopify-theme/assets/cart-notification.js similarity index 100% rename from assets/cart-notification.js rename to get-yours-shopify-theme/assets/cart-notification.js diff --git a/assets/cart.js b/get-yours-shopify-theme/assets/cart.js similarity index 100% rename from assets/cart.js rename to get-yours-shopify-theme/assets/cart.js diff --git a/assets/collage.css b/get-yours-shopify-theme/assets/collage.css similarity index 100% rename from assets/collage.css rename to get-yours-shopify-theme/assets/collage.css diff --git a/assets/collapsible-content.css b/get-yours-shopify-theme/assets/collapsible-content.css similarity index 100% rename from assets/collapsible-content.css rename to get-yours-shopify-theme/assets/collapsible-content.css diff --git a/assets/component-accordion.css b/get-yours-shopify-theme/assets/component-accordion.css similarity index 100% rename from assets/component-accordion.css rename to get-yours-shopify-theme/assets/component-accordion.css diff --git a/assets/component-article-card.css b/get-yours-shopify-theme/assets/component-article-card.css similarity index 100% rename from assets/component-article-card.css rename to get-yours-shopify-theme/assets/component-article-card.css diff --git a/assets/component-card.css b/get-yours-shopify-theme/assets/component-card.css similarity index 100% rename from assets/component-card.css rename to get-yours-shopify-theme/assets/component-card.css diff --git a/assets/component-cart-drawer.css b/get-yours-shopify-theme/assets/component-cart-drawer.css similarity index 100% rename from assets/component-cart-drawer.css rename to get-yours-shopify-theme/assets/component-cart-drawer.css diff --git a/assets/component-cart-items.css b/get-yours-shopify-theme/assets/component-cart-items.css similarity index 100% rename from assets/component-cart-items.css rename to get-yours-shopify-theme/assets/component-cart-items.css diff --git a/assets/component-cart-notification.css b/get-yours-shopify-theme/assets/component-cart-notification.css similarity index 100% rename from assets/component-cart-notification.css rename to get-yours-shopify-theme/assets/component-cart-notification.css diff --git a/assets/component-cart.css b/get-yours-shopify-theme/assets/component-cart.css similarity index 100% rename from assets/component-cart.css rename to get-yours-shopify-theme/assets/component-cart.css diff --git a/assets/component-collection-hero.css b/get-yours-shopify-theme/assets/component-collection-hero.css similarity index 100% rename from assets/component-collection-hero.css rename to get-yours-shopify-theme/assets/component-collection-hero.css diff --git a/assets/component-complementary-products.css b/get-yours-shopify-theme/assets/component-complementary-products.css similarity index 100% rename from assets/component-complementary-products.css rename to get-yours-shopify-theme/assets/component-complementary-products.css diff --git a/assets/component-deferred-media.css b/get-yours-shopify-theme/assets/component-deferred-media.css similarity index 100% rename from assets/component-deferred-media.css rename to get-yours-shopify-theme/assets/component-deferred-media.css diff --git a/assets/component-disclosures.css b/get-yours-shopify-theme/assets/component-disclosures.css similarity index 100% rename from assets/component-disclosures.css rename to get-yours-shopify-theme/assets/component-disclosures.css diff --git a/assets/component-discounts.css b/get-yours-shopify-theme/assets/component-discounts.css similarity index 100% rename from assets/component-discounts.css rename to get-yours-shopify-theme/assets/component-discounts.css diff --git a/assets/component-facets.css b/get-yours-shopify-theme/assets/component-facets.css similarity index 100% rename from assets/component-facets.css rename to get-yours-shopify-theme/assets/component-facets.css diff --git a/assets/component-image-with-text.css b/get-yours-shopify-theme/assets/component-image-with-text.css similarity index 100% rename from assets/component-image-with-text.css rename to get-yours-shopify-theme/assets/component-image-with-text.css diff --git a/assets/component-list-menu.css b/get-yours-shopify-theme/assets/component-list-menu.css similarity index 100% rename from assets/component-list-menu.css rename to get-yours-shopify-theme/assets/component-list-menu.css diff --git a/assets/component-list-payment.css b/get-yours-shopify-theme/assets/component-list-payment.css similarity index 100% rename from assets/component-list-payment.css rename to get-yours-shopify-theme/assets/component-list-payment.css diff --git a/assets/component-list-social.css b/get-yours-shopify-theme/assets/component-list-social.css similarity index 100% rename from assets/component-list-social.css rename to get-yours-shopify-theme/assets/component-list-social.css diff --git a/assets/component-localization-form.css b/get-yours-shopify-theme/assets/component-localization-form.css similarity index 100% rename from assets/component-localization-form.css rename to get-yours-shopify-theme/assets/component-localization-form.css diff --git a/assets/component-mega-menu.css b/get-yours-shopify-theme/assets/component-mega-menu.css similarity index 100% rename from assets/component-mega-menu.css rename to get-yours-shopify-theme/assets/component-mega-menu.css diff --git a/assets/component-menu-drawer.css b/get-yours-shopify-theme/assets/component-menu-drawer.css similarity index 100% rename from assets/component-menu-drawer.css rename to get-yours-shopify-theme/assets/component-menu-drawer.css diff --git a/assets/component-modal-video.css b/get-yours-shopify-theme/assets/component-modal-video.css similarity index 100% rename from assets/component-modal-video.css rename to get-yours-shopify-theme/assets/component-modal-video.css diff --git a/assets/component-model-viewer-ui.css b/get-yours-shopify-theme/assets/component-model-viewer-ui.css similarity index 100% rename from assets/component-model-viewer-ui.css rename to get-yours-shopify-theme/assets/component-model-viewer-ui.css diff --git a/assets/component-newsletter.css b/get-yours-shopify-theme/assets/component-newsletter.css similarity index 100% rename from assets/component-newsletter.css rename to get-yours-shopify-theme/assets/component-newsletter.css diff --git a/assets/component-pagination.css b/get-yours-shopify-theme/assets/component-pagination.css similarity index 100% rename from assets/component-pagination.css rename to get-yours-shopify-theme/assets/component-pagination.css diff --git a/assets/component-pickup-availability.css b/get-yours-shopify-theme/assets/component-pickup-availability.css similarity index 100% rename from assets/component-pickup-availability.css rename to get-yours-shopify-theme/assets/component-pickup-availability.css diff --git a/assets/component-predictive-search.css b/get-yours-shopify-theme/assets/component-predictive-search.css similarity index 100% rename from assets/component-predictive-search.css rename to get-yours-shopify-theme/assets/component-predictive-search.css diff --git a/assets/component-price.css b/get-yours-shopify-theme/assets/component-price.css similarity index 100% rename from assets/component-price.css rename to get-yours-shopify-theme/assets/component-price.css diff --git a/assets/component-product-model.css b/get-yours-shopify-theme/assets/component-product-model.css similarity index 100% rename from assets/component-product-model.css rename to get-yours-shopify-theme/assets/component-product-model.css diff --git a/assets/component-product-variant-picker.css b/get-yours-shopify-theme/assets/component-product-variant-picker.css similarity index 100% rename from assets/component-product-variant-picker.css rename to get-yours-shopify-theme/assets/component-product-variant-picker.css diff --git a/assets/component-progress-bar.css b/get-yours-shopify-theme/assets/component-progress-bar.css similarity index 100% rename from assets/component-progress-bar.css rename to get-yours-shopify-theme/assets/component-progress-bar.css diff --git a/assets/component-rating.css b/get-yours-shopify-theme/assets/component-rating.css similarity index 100% rename from assets/component-rating.css rename to get-yours-shopify-theme/assets/component-rating.css diff --git a/assets/component-search.css b/get-yours-shopify-theme/assets/component-search.css similarity index 100% rename from assets/component-search.css rename to get-yours-shopify-theme/assets/component-search.css diff --git a/assets/component-show-more.css b/get-yours-shopify-theme/assets/component-show-more.css similarity index 100% rename from assets/component-show-more.css rename to get-yours-shopify-theme/assets/component-show-more.css diff --git a/assets/component-slider.css b/get-yours-shopify-theme/assets/component-slider.css similarity index 100% rename from assets/component-slider.css rename to get-yours-shopify-theme/assets/component-slider.css diff --git a/assets/component-slideshow.css b/get-yours-shopify-theme/assets/component-slideshow.css similarity index 100% rename from assets/component-slideshow.css rename to get-yours-shopify-theme/assets/component-slideshow.css diff --git a/assets/component-swatch-input.css b/get-yours-shopify-theme/assets/component-swatch-input.css similarity index 100% rename from assets/component-swatch-input.css rename to get-yours-shopify-theme/assets/component-swatch-input.css diff --git a/assets/component-swatch.css b/get-yours-shopify-theme/assets/component-swatch.css similarity index 100% rename from assets/component-swatch.css rename to get-yours-shopify-theme/assets/component-swatch.css diff --git a/assets/component-totals.css b/get-yours-shopify-theme/assets/component-totals.css similarity index 100% rename from assets/component-totals.css rename to get-yours-shopify-theme/assets/component-totals.css diff --git a/assets/component-volume-pricing.css b/get-yours-shopify-theme/assets/component-volume-pricing.css similarity index 100% rename from assets/component-volume-pricing.css rename to get-yours-shopify-theme/assets/component-volume-pricing.css diff --git a/assets/constants.js b/get-yours-shopify-theme/assets/constants.js similarity index 100% rename from assets/constants.js rename to get-yours-shopify-theme/assets/constants.js diff --git a/assets/customer.css b/get-yours-shopify-theme/assets/customer.css similarity index 100% rename from assets/customer.css rename to get-yours-shopify-theme/assets/customer.css diff --git a/assets/customer.js b/get-yours-shopify-theme/assets/customer.js similarity index 100% rename from assets/customer.js rename to get-yours-shopify-theme/assets/customer.js diff --git a/assets/details-disclosure.js b/get-yours-shopify-theme/assets/details-disclosure.js similarity index 100% rename from assets/details-disclosure.js rename to get-yours-shopify-theme/assets/details-disclosure.js diff --git a/assets/details-modal.js b/get-yours-shopify-theme/assets/details-modal.js similarity index 100% rename from assets/details-modal.js rename to get-yours-shopify-theme/assets/details-modal.js diff --git a/assets/disclosures.js b/get-yours-shopify-theme/assets/disclosures.js similarity index 100% rename from assets/disclosures.js rename to get-yours-shopify-theme/assets/disclosures.js diff --git a/assets/email-signup-banner-background-mobile.svg b/get-yours-shopify-theme/assets/email-signup-banner-background-mobile.svg similarity index 100% rename from assets/email-signup-banner-background-mobile.svg rename to get-yours-shopify-theme/assets/email-signup-banner-background-mobile.svg diff --git a/assets/email-signup-banner-background.svg b/get-yours-shopify-theme/assets/email-signup-banner-background.svg similarity index 100% rename from assets/email-signup-banner-background.svg rename to get-yours-shopify-theme/assets/email-signup-banner-background.svg diff --git a/assets/facets.js b/get-yours-shopify-theme/assets/facets.js similarity index 100% rename from assets/facets.js rename to get-yours-shopify-theme/assets/facets.js diff --git a/get-yours-shopify-theme/assets/get-yours-logo.svg b/get-yours-shopify-theme/assets/get-yours-logo.svg new file mode 100644 index 00000000000..35541963981 --- /dev/null +++ b/get-yours-shopify-theme/assets/get-yours-logo.svg @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/global.js b/get-yours-shopify-theme/assets/global.js similarity index 100% rename from assets/global.js rename to get-yours-shopify-theme/assets/global.js diff --git a/get-yours-shopify-theme/assets/gy-hero-office-desk.webp b/get-yours-shopify-theme/assets/gy-hero-office-desk.webp new file mode 100644 index 00000000000..86ef2fe8c61 Binary files /dev/null and b/get-yours-shopify-theme/assets/gy-hero-office-desk.webp differ diff --git a/get-yours-shopify-theme/assets/gy-hero-smart-everyday-finds.webp b/get-yours-shopify-theme/assets/gy-hero-smart-everyday-finds.webp new file mode 100644 index 00000000000..8c30dead1f0 Binary files /dev/null and b/get-yours-shopify-theme/assets/gy-hero-smart-everyday-finds.webp differ diff --git a/get-yours-shopify-theme/assets/gy-hero-travel-accessories.webp b/get-yours-shopify-theme/assets/gy-hero-travel-accessories.webp new file mode 100644 index 00000000000..ea218720570 Binary files /dev/null and b/get-yours-shopify-theme/assets/gy-hero-travel-accessories.webp differ diff --git a/get-yours-shopify-theme/assets/gy-theme.css b/get-yours-shopify-theme/assets/gy-theme.css new file mode 100644 index 00000000000..be2b81add69 --- /dev/null +++ b/get-yours-shopify-theme/assets/gy-theme.css @@ -0,0 +1,2646 @@ +/* + Get Yours foundational brand tokens and Dawn shell styling. + Keep this file targeted: brand shell first, deeper template work later. +*/ + +:root { + --gy-blue: #0077C8; + --gy-blue-hover: #005E9F; + --gy-navy: #063A66; + --gy-navy-deep: #063A66; + --gy-yellow-logo: #FFD200; + --gy-gold: #F5B700; + --gy-gold-soft: #FFF4CC; + --gy-blue-soft: #EAF6FF; + --gy-bg: #F5F7FA; + --gy-surface: #FFFFFF; + --gy-border: #E4E7EC; + --gy-text: #1A1C1E; + --gy-muted: #667085; + --gy-success: #16A34A; + --gy-radius: 8px; + --gy-radius-sm: 6px; + --gy-focus-ring: 0 0 0 3px rgba(0, 129, 216, 0.35); +} + +/* Announcement bar */ +.gy-utility-bar { + min-height: 3.2rem; + border-bottom: 0.1rem solid var(--gy-border); + color: #404751; + background: #f4f3f7; +} + +.gy-utility-bar__inner { + display: flex; + align-items: center; + justify-content: space-between; + gap: 2.4rem; + min-height: 3.2rem; + padding-inline: 3.2rem; +} + +.gy-utility-bar__reassurance, +.gy-utility-bar__links, +.gy-utility-bar__item { + display: flex; + align-items: center; +} + +.gy-utility-bar__reassurance, +.gy-utility-bar__links { + gap: 1.6rem; +} + +.gy-utility-bar__item { + gap: 0.5rem; + font-size: 1.2rem; + font-weight: 700; + letter-spacing: 0.02em; + white-space: nowrap; +} + +.gy-utility-bar__item + .gy-utility-bar__item::before { + content: ''; + width: 0.1rem; + height: 1.4rem; + margin-right: 1.1rem; + background: #c0c7d3; +} + +.gy-utility-bar__icon, +.gy-utility-bar__icon .icon { + width: 1.5rem; + height: 1.5rem; +} + +.gy-utility-bar a { + color: inherit; + text-decoration: none; +} + +.gy-utility-bar a:hover { + color: var(--gy-blue); +} + +/* Header */ +.header-wrapper { + border-bottom: 0; + background: var(--gy-surface); +} + +.header-wrapper.gradient { + background-image: none; +} + +.header.page-width, +.gy-header__navigation-row-inner.page-width, +.gy-utility-bar .page-width { + max-width: 134.4rem; +} + +.gy-header, +.gy-header__main-row, +.gy-header__navigation-row { + width: 100%; + background: var(--gy-surface); +} + +.gy-header__navigation-row { + border-top: 0.1rem solid #e4e7ec; + border-bottom: 0.1rem solid #e4e7ec; +} + +.header__heading-link { + align-items: center; + padding: 0; +} + +.header__heading-logo, +.gy-header-logo { + width: auto; + max-width: 20rem; + height: 4.6rem; + max-height: 4.6rem; + object-fit: contain; +} + +.header .header__search { + display: none !important; +} + +.gy-header-search { + position: relative; + min-width: 0; +} + +.gy-header-search predictive-search, +.gy-header-search search-form { + display: block; +} + +.gy-header-search__form { + position: relative; + display: grid; + grid-template-columns: auto minmax(0, 1fr) 5.6rem; + height: 4.8rem; + border: 0.2rem solid var(--gy-blue); + border-radius: var(--gy-radius); + background: var(--gy-surface); +} + +.gy-header-search__form:focus-within { + box-shadow: var(--gy-focus-ring); +} + +.gy-header-search__category-disclosure { + position: relative; + min-width: 16rem; + border-right: 0.1rem solid var(--gy-border); + background: #f4f3f7; + border-radius: calc(var(--gy-radius) - 0.2rem) 0 0 calc(var(--gy-radius) - 0.2rem); +} + +.gy-header-search__category-summary { + display: flex; + align-items: center; + justify-content: space-between; + gap: 1rem; + min-height: 4.4rem; + padding: 0 1.4rem; + color: var(--gy-text); + font-size: 1.3rem; + font-weight: 700; + white-space: nowrap; + cursor: pointer; + list-style: none; +} + +.gy-header-search__category-summary::-webkit-details-marker { + display: none; +} + +.gy-header-search__category-summary .svg-wrapper { + width: 1rem; + transition: transform var(--duration-short) ease; +} + +.gy-header-search__category-disclosure[open] .gy-header-search__category-summary .svg-wrapper { + transform: rotate(180deg); +} + +.gy-header-search__category-menu { + position: absolute; + top: calc(100% + 0.6rem); + left: -0.2rem; + z-index: 31; + width: clamp(26rem, 28vw, 30rem); + margin: 0; + padding: 0.8rem; + border: 0.1rem solid var(--gy-border); + border-radius: var(--gy-radius); + background: var(--gy-surface); + box-shadow: 0 1rem 2.4rem rgba(7, 58, 102, 0.12); +} + +.gy-header-search__category-link { + display: block; + padding: 1rem 1.2rem; + border-radius: 0.4rem; + color: var(--gy-text); + font-size: 1.3rem; + font-weight: 700; + text-decoration: none; +} + +.gy-header-search__category-link:hover, +.gy-header-search__category-link[aria-current='page'] { + color: var(--gy-blue); + background: var(--gy-blue-soft); + text-decoration: none; +} + +.gy-header-search__input { + min-width: 0; + padding: 0 1.6rem; + border: 0; + color: var(--gy-text); + background: transparent; + font: inherit; + font-size: 1.5rem; + outline: 0; +} + +.gy-header-search__input::placeholder { + color: var(--gy-muted); + opacity: 1; +} + +.gy-header-search__button { + display: grid; + place-items: center; + min-width: 5.6rem; + padding: 0; + border: 0; + border-radius: 0 calc(var(--gy-radius) - 0.2rem) calc(var(--gy-radius) - 0.2rem) 0; + color: var(--gy-surface); + background: var(--gy-blue); + cursor: pointer; +} + +.gy-header-search__reset { + position: absolute; + top: 0; + right: 5.6rem; + z-index: 2; + display: grid; + place-items: center; + width: 4.4rem; + height: 4.4rem; + padding: 0; + border: 0; + color: var(--gy-muted); + background: var(--gy-surface); + cursor: pointer; +} + +.gy-header-search__reset.hidden { + display: none; +} + +.gy-header-search__button:hover { + background: var(--gy-blue-hover); +} + +.gy-header-search__button:focus-visible, +.gy-header-search__category-summary:focus-visible { + outline: 0.2rem solid var(--gy-blue-hover); + outline-offset: -0.4rem; +} + +.gy-header-search .predictive-search { + top: calc(100% + 0.8rem); + right: -0.2rem; + left: -0.2rem; + width: auto; + border: 0.1rem solid var(--gy-border); + border-radius: var(--gy-radius); +} + +.header__icon:hover, +.header__icon:hover .icon, +.gy-header .header__menu-item:hover span, +.header__active-menu-item { + color: var(--gy-blue); +} + +.gy-header .header__inline-menu .header__menu-item, +.gy-header .header__inline-menu .header__menu-item span, +.gy-header .header__submenu .header__menu-item, +.gy-header .header__submenu .header__menu-item:hover, +.gy-header .header__submenu .list-menu__item--active { + text-decoration: none; +} + +.gy-header .header__inline-menu > .list-menu > li > .header__menu-item, +.gy-header .header__inline-menu > .list-menu > li > header-menu > details > .header__menu-item { + position: relative; +} + +.gy-header .header__active-menu-item::after { + position: absolute; + right: 0; + bottom: 0; + left: 0; + height: 0.2rem; + background: var(--gy-blue); + content: ''; +} + +.gy-header .header__submenu { + padding: 0.8rem; + border-color: var(--gy-border); + border-radius: 0 0 var(--gy-radius) var(--gy-radius); + box-shadow: 0 1rem 2.4rem rgba(7, 58, 102, 0.12); +} + +.gy-header .header__submenu .header__menu-item { + min-height: auto; + padding: 1rem 1.2rem; + border-radius: 0.4rem; + color: var(--gy-text); + background: transparent; +} + +.gy-header .header__submenu .header__menu-item:hover, +.gy-header .header__submenu .header__menu-item:focus-visible, +.gy-header .header__submenu .list-menu__item--active { + color: var(--gy-blue); + background: var(--gy-blue-soft); +} + +.gy-header .header__menu-item:focus-visible, +.gy-browse-categories__link:focus-visible, +.gy-header-search__category-link:focus-visible { + outline: 0.2rem solid var(--gy-blue); + outline-offset: 0.2rem; +} + +.header__icons { + gap: 1.2rem; +} + +.header__icon--account, +.header__icon--cart { + width: auto; + min-width: 4.4rem; + gap: 0.8rem; + text-decoration: none; +} + +.gy-header-account__text, +.gy-header-cart__text { + display: grid; + gap: 0.2rem; + color: var(--gy-text); + line-height: 1.1; + white-space: nowrap; +} + +.gy-header-account__text small, +.gy-header-cart__text small { + color: var(--gy-muted); + font-size: 1rem; + font-weight: 700; +} + +.gy-header-account__text strong, +.gy-header-cart__text strong { + font-size: 1.2rem; + font-weight: 800; +} + +.cart-count-bubble { + background: var(--gy-blue); + color: var(--gy-surface); +} + +.gy-browse-categories { + position: relative; + align-self: stretch; + flex: 0 0 auto; +} + +.gy-browse-categories__summary { + display: inline-flex; + align-items: center; + gap: 0.8rem; + height: 5rem; + padding: 0 2.4rem; + color: var(--gy-surface); + background: var(--gy-blue); + font-size: 1.4rem; + font-weight: 800; + line-height: 1; + white-space: nowrap; + cursor: pointer; + list-style: none; +} + +.gy-browse-categories__summary::-webkit-details-marker { + display: none; +} + +.gy-browse-categories__menu { + position: absolute; + top: 100%; + left: 0; + z-index: 20; + width: 28rem; + max-height: min(60rem, 70vh); + margin: 0; + padding: 0.8rem; + overflow-y: auto; + border: 0.1rem solid var(--gy-border); + border-radius: 0 0 var(--gy-radius) var(--gy-radius); + background: var(--gy-surface); + box-shadow: 0 1rem 2.4rem rgba(7, 58, 102, 0.12); +} + +.gy-browse-categories__link { + display: block; + padding: 1rem 1.2rem; + border-radius: 0.4rem; + color: var(--gy-text); + font-weight: 700; + text-decoration: none; +} + +.gy-browse-categories__link:hover, +.gy-browse-categories__link[aria-current='page'] { + color: var(--gy-blue); + background: var(--gy-blue-soft); + text-decoration: none; +} + +.gy-header-promotion { + display: flex; + align-items: center; + justify-content: flex-end; + gap: 0.6rem; + color: var(--gy-blue); + font-size: 1.2rem; + font-weight: 800; + text-decoration: none; + white-space: nowrap; +} + +.gy-header-search--mobile { + display: none; +} + +@media screen and (min-width: 990px) { + .header { + display: grid; + grid-template-areas: 'logo search icons'; + grid-template-columns: 20rem minmax(0, 1fr) auto; + gap: 3.2rem; + align-items: center; + min-height: 8rem; + padding: 1.6rem 3.2rem; + } + + .gy-header .gy-header__main-row-inner.page-width, + .gy-header .gy-header__navigation-row-inner.page-width { + padding-inline: 3.2rem; + } + + .header__heading, + .header__heading-link { + grid-area: logo; + justify-self: start; + } + + .gy-header-search--desktop { + grid-area: search; + justify-self: center; + width: 100%; + max-width: 67.2rem; + } + + .header__icons { + grid-area: icons; + justify-self: end; + } + + .gy-header__navigation-row-inner { + display: flex; + align-items: stretch; + min-height: 5rem; + padding: 0 3.2rem; + } + + .header__inline-menu { + min-width: 0; + margin: 0 0 0 2.4rem; + } + + .header__inline-menu .list-menu--inline { + height: 100%; + gap: 3.2rem; + flex-wrap: nowrap; + } + + .header__menu-item { + min-height: 5rem; + padding: 0; + color: var(--gy-text); + font-size: 1.3rem; + font-weight: 800; + text-decoration: none; + white-space: nowrap; + } + + .header__active-menu-item { + text-decoration: none; + } + + .gy-header-promotion { + align-self: center; + margin-left: auto; + padding-left: 2rem; + } +} + +@media screen and (min-width: 990px) and (max-width: 1199px) { + .gy-header__navigation-row-inner .header__inline-menu .list-menu--inline > li:nth-child(n + 5) { + display: none; + } + + .gy-header-promotion { + display: none; + } +} + +@media screen and (max-width: 989px) { + .gy-utility-bar__inner { + padding-inline: 1.6rem; + } + + .gy-utility-bar__reassurance { + width: 100%; + gap: 1.2rem; + overflow-x: auto; + scrollbar-width: none; + } + + .gy-utility-bar__reassurance::-webkit-scrollbar { + display: none; + } + + .gy-utility-bar__links { + display: none; + } + + .header { + display: grid; + grid-template-areas: + 'drawer logo icons' + 'search search search'; + grid-template-columns: 4.4rem minmax(0, 1fr) auto; + gap: 1.2rem; + padding: 1.2rem 1.6rem 1.6rem; + } + + .gy-header__navigation-row { + display: none; + } + + header-drawer { + grid-area: drawer; + margin-left: -1rem; + } + + .header__heading, + .header__heading-link { + grid-area: logo; + justify-self: start; + } + + .header__heading-logo, + .gy-header-logo { + height: 4rem; + max-height: 4rem; + } + + .header__icons { + grid-area: icons; + justify-self: end; + gap: 0; + } + + .header__icon--account, + .header__icon--cart { + min-width: 4rem; + } + + .gy-header-search--desktop { + display: none; + } + + .gy-header-search--mobile { + display: block; + grid-area: search; + } + + .gy-header-search__form { + grid-template-columns: auto minmax(0, 1fr) 5.2rem; + } + + .gy-header-search__category-disclosure { + min-width: 14rem; + } + + .gy-header-search__category-menu { + width: min(28rem, calc(100vw - 3.2rem)); + } +} + +@media screen and (max-width: 480px) { + .gy-utility-bar__item { + font-size: 1rem; + } + + .gy-utility-bar__icon { + display: none; + } + + .gy-utility-bar__item + .gy-utility-bar__item::before { + margin-right: 0.4rem; + } + + .header { + padding-inline: 1.2rem; + } + + .gy-header-search__category-disclosure { + min-width: 12.4rem; + } + + .gy-header-search__category-summary { + padding-inline: 1rem; + font-size: 1.2rem; + } + + .gy-header-search__category-menu { + width: min(28rem, calc(100vw - 2.4rem)); + } +} + +/* Footer */ +.footer { + background: var(--gy-navy-deep); + color: #eaf6ff; + border-top: 0; +} + +.footer.gradient { + background-image: none; +} + +.footer .footer-block__heading { + color: var(--gy-surface); + font-weight: 800; + letter-spacing: 0.06em; + text-transform: uppercase; +} + +.footer .rte, +.footer .link, +.footer .link--text, +.footer .list-menu__item--link, +.footer .copyright__content, +.footer .caption-large { + color: rgba(255, 255, 255, 0.84); +} + +.footer .footer-block__heading, +.footer .footer-block__heading.rte { + color: var(--gy-surface); +} + +.footer a:hover, +.footer .link--text:hover, +.footer .list-menu__item--link:hover { + color: var(--gy-blue-soft); +} + +.footer__content-bottom { + border-top-color: rgba(255, 255, 255, 0.18); +} + +.footer .list-payment { + justify-content: flex-end; +} + +@media screen and (max-width: 749px) { + .footer .list-payment { + justify-content: center; + } +} + +.gy-section { + overflow-x: clip; + padding-block: clamp(3.2rem, 5vw, 6.4rem); + background: rgb(var(--color-background)); + color: rgb(var(--color-foreground)); +} + +.gy-section .page-width { + min-width: 0; +} + +.gy-section + .gy-section { + padding-top: clamp(2.4rem, 4vw, 4.8rem); +} + +.gy-section__header { + display: flex; + align-items: end; + justify-content: space-between; + gap: 2.4rem; + margin-bottom: clamp(1.8rem, 3vw, 3.2rem); +} + +.gy-section__header--center { + justify-content: center; + text-align: center; +} + +.gy-section__title { + margin: 0; + color: var(--gy-text); + font-size: clamp(2.4rem, 3vw, 3.6rem); + line-height: 1.12; + font-weight: 800; + letter-spacing: 0; +} + +.gy-section__subtitle { + max-width: 64rem; + margin-top: 0.8rem; + color: var(--gy-muted); +} + +.gy-section__subtitle p, +.gy-promo-hero__text p, +.gy-trust-card__text p { + margin-block: 0; +} + +.gy-section__eyebrow, +.gy-eyebrow { + display: inline-flex; + align-items: center; + min-height: 3.2rem; + margin: 0 0 1.2rem; + padding: 0.4rem 1.2rem; + border-radius: 999px; + background: var(--gy-gold-soft); + color: #594000; + font-size: 1.2rem; + font-weight: 800; + letter-spacing: 0.04em; + text-transform: uppercase; +} + +.gy-link { + color: var(--gy-blue); + font-weight: 800; + text-decoration: none; +} + +.gy-link:hover { + text-decoration: underline; + text-underline-offset: 0.25em; +} + +.gy-button { + background: var(--gy-blue); + color: var(--gy-surface); + border-radius: var(--gy-radius); +} + +.gy-button:hover { + background: var(--gy-blue-hover); + color: var(--gy-surface); +} + +.gy-button--secondary { + background: var(--gy-surface); + color: var(--gy-blue); + box-shadow: inset 0 0 0 0.1rem rgba(255, 255, 255, 0.7); +} + +.gy-promo-hero { + padding-block: 4.8rem; + border-bottom: 0.1rem solid var(--gy-border); + background: var(--gy-bg); +} + +.gy-promo-hero .page-width { + max-width: 134.4rem; + padding-inline: 3.2rem; +} + +.gy-promo-hero__grid { + display: grid; + grid-template-columns: minmax(0, 2fr) minmax(30rem, 1fr); + gap: 1.6rem; + height: 60rem; + min-width: 0; +} + +.gy-promo-hero__stack { + display: grid; + grid-template-rows: repeat(2, minmax(0, 1fr)); + gap: 1.6rem; + min-height: 0; +} + +.gy-promo-hero__tile { + position: relative; + display: grid; + min-width: 0; + min-height: 0; + overflow: clip; + border: 0.1rem solid var(--gy-border); + border-radius: 1.2rem; + background: var(--gy-navy); + isolation: isolate; +} + +.gy-promo-hero__tile--main { + min-height: 0; +} + +.gy-promo-hero__media, +.gy-promo-hero__media::after, +.gy-promo-hero__content { + grid-area: 1 / 1; + min-width: 0; +} + +.gy-promo-hero__media::after { + content: ""; + position: absolute; + inset: 0; + z-index: 1; + background: linear-gradient( + to top, + rgba(0, 0, 0, 0.68) 0%, + rgba(0, 0, 0, var(--gy-overlay-opacity)) 48%, + transparent 78% + ); + transition: background-color 180ms ease; +} + +.gy-promo-hero__image, +.gy-promo-hero__placeholder { + display: block; + width: 100%; + height: 100%; + min-height: inherit; + object-fit: cover; + object-position: center; + transition: transform 500ms ease; +} + +.gy-promo-hero__placeholder { + background: var(--gy-blue-soft); +} + +.gy-promo-hero__content { + position: relative; + z-index: 2; + align-self: end; + min-width: 0; + max-width: 64rem; + padding: 3.2rem; + color: var(--gy-surface); +} + +.gy-promo-hero__content--compact { + padding: 2.4rem; +} + +.gy-promo-hero__tile--main .gy-promo-hero__content { + max-width: 100%; +} + +.gy-promo-hero__heading, +.gy-promo-hero__subheading { + margin: 0; + color: var(--gy-surface); + font-weight: 850; + letter-spacing: 0; + overflow-wrap: break-word; + text-wrap: balance; +} + +.gy-promo-hero__heading { + font-size: clamp(3.6rem, 3.4vw, 4.8rem); + line-height: 1.08; + letter-spacing: -0.02em; +} + +.gy-promo-hero__subheading { + font-size: 2rem; + line-height: 1.2; +} + +.gy-promo-hero__text { + max-width: 50rem; + margin-top: 1.2rem; + color: rgba(255, 255, 255, 0.88); + overflow-wrap: break-word; + font-size: 1.8rem; + line-height: 1.55; +} + +.gy-promo-hero__content .button { + min-height: 4.8rem; + margin-top: 2.4rem; + padding-inline: 2.8rem; + font-weight: 800; +} + +.gy-promo-hero__content--compact .button { + min-height: 4rem; + margin-top: 1.6rem; + padding-inline: 2rem; +} + +.gy-promo-hero .gy-eyebrow { + min-height: 2.8rem; + margin-bottom: 1.4rem; + padding: 0.4rem 1rem; + font-size: 1.1rem; + text-transform: none; +} + +.gy-promo-hero .gy-eyebrow .svg-wrapper { + width: 1.3rem; + height: 1.3rem; + margin-right: 0.4rem; +} + +@media (hover: hover) { + .gy-promo-hero__tile:hover .gy-promo-hero__image { + transform: scale(1.035); + } +} + +@media (prefers-reduced-motion: reduce) { + .gy-promo-hero__image, + .gy-browse-categories__caret { + transition: none; + } + + .gy-promo-hero__tile:hover .gy-promo-hero__image { + transform: none; + } +} + +.gy-category-grid__items { + display: grid; + grid-template-columns: repeat(6, minmax(0, 1fr)); + gap: 1.6rem; +} + +.gy-category-grid { + padding-block: 6.4rem; + border-bottom: 0.1rem solid var(--gy-border); + background: var(--gy-bg); +} + +.gy-category-grid .page-width { + max-width: 134.4rem; + padding-inline: 3.2rem; +} + +.gy-category-grid__view-all { + display: inline-flex; + align-items: center; + gap: 0.4rem; + min-height: 4.4rem; +} + +.gy-category-grid__view-all .svg-wrapper { + width: 1.8rem; +} + +.gy-category-card { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + gap: 1.6rem; + min-width: 0; + min-height: 16.8rem; + padding: 2.4rem; + border: 0.1rem solid var(--gy-border); + border-radius: 1.2rem; + background: var(--gy-surface); + color: var(--gy-text); + text-align: center; + text-decoration: none; + transition: border-color 180ms ease, box-shadow 180ms ease; +} + +.gy-category-card:not(.gy-category-card--placeholder):hover { + border-color: var(--gy-blue-soft); + box-shadow: 0 0.4rem 2rem rgba(0, 0, 0, 0.05); +} + +.gy-category-card__icon, +.gy-trust-card__icon { + display: inline-grid; + place-items: center; + width: 6.4rem; + height: 6.4rem; + border-radius: 999px; + background: var(--gy-bg); + color: var(--gy-navy); + transition: color 180ms ease, background-color 180ms ease; +} + +.gy-icon { + width: 3.2rem; + height: 3.2rem; + stroke: currentColor; + stroke-width: 1.7; + stroke-linecap: round; + stroke-linejoin: round; +} + +.gy-category-card__title, +.gy-trust-card__title { + color: var(--gy-text); + font-weight: 800; + line-height: 1.2; +} + +.gy-category-card__title { + font-size: 1.4rem; + transition: color 180ms ease; +} + +.gy-category-card:not(.gy-category-card--placeholder):hover .gy-category-card__icon { + color: var(--gy-blue); + background: var(--gy-blue-soft); +} + +.gy-category-card:not(.gy-category-card--placeholder):hover .gy-category-card__title { + color: var(--gy-blue); +} + +.gy-category-card:focus-visible { + outline: 0.2rem solid var(--gy-blue); + outline-offset: 0.3rem; +} + +.gy-category-card__text, +.gy-trust-card__text, +.gy-product-rail__placeholder { + color: var(--gy-muted); + font-size: 1.4rem; + line-height: 1.45; +} + +.gy-category-card__badge { + justify-self: start; + margin-top: 0.4rem; + padding: 0.2rem 0.8rem; + border-radius: 999px; + background: var(--gy-gold-soft); + color: #594000; + font-size: 1.1rem; + font-weight: 800; +} + +.gy-product-rail--soft { + background: var(--gy-bg); +} + +.gy-product-rail__grid { + margin-top: 0; + margin-bottom: 0; + padding-left: 0; +} + +.gy-product-rail .card-wrapper { + height: 100%; +} + +.gy-product-rail__placeholder { + margin: 1.6rem 0 0; +} + +.gy-section.gy-featured-products { + padding-block: 1.6rem; + background: var(--gy-bg); +} + +.gy-featured-products .page-width { + max-width: 134.4rem; + padding-inline: 3.2rem; +} + +.gy-product-rail__surface { + padding: 3.6rem; + border: 0.1rem solid var(--gy-border); + border-radius: 1.6rem; + background: var(--gy-surface); + box-shadow: 0 0.4rem 2rem rgba(0, 0, 0, 0.04); +} + +.gy-featured-products__view-all { + display: inline-flex; + align-items: center; + gap: 0.4rem; + min-height: 4.4rem; +} + +.gy-featured-products__view-all .svg-wrapper { + width: 1.8rem; +} + +.gy-featured-products__grid { + display: grid; + grid-template-columns: repeat(4, minmax(0, 1fr)); + gap: 2.4rem; + margin: 0; + padding: 0; + list-style: none; +} + +.gy-featured-products__grid > li { + min-width: 0; +} + +.gy-product-card { + display: flex; + flex-direction: column; + height: 100%; + min-width: 0; + overflow: hidden; + border: 0.1rem solid var(--gy-border); + border-radius: 1.2rem; + background: var(--gy-surface); + transition: box-shadow 180ms ease; +} + +.gy-product-card:hover { + box-shadow: 0 0.4rem 2rem rgba(0, 0, 0, 0.05); +} + +.gy-product-card__media { + position: relative; + display: grid; + aspect-ratio: 1; + min-width: 0; + overflow: hidden; + padding: 2.4rem; + background: var(--gy-bg); +} + +.gy-product-card__image-link { + display: grid; + min-width: 0; + height: 100%; +} + +.gy-product-card__image, +.gy-product-card__placeholder { + width: 100%; + height: 100%; + object-fit: contain; + transition: transform 300ms ease; +} + +.gy-product-card:hover .gy-product-card__image { + transform: scale(1.035); +} + +.gy-product-card__badge { + position: absolute; + top: 0.8rem; + left: 0.8rem; + z-index: 1; + padding: 0.4rem 0.8rem; + border-radius: 0.4rem; + background: var(--gy-gold-soft); + color: #5c4300; + font-size: 1.1rem; + font-weight: 800; + line-height: 1.3; +} + +.gy-product-card__content { + display: flex; + flex: 1; + flex-direction: column; + min-width: 0; + padding: 1.6rem; +} + +.gy-product-card__availability { + display: flex; + align-items: center; + gap: 0.5rem; + margin: 0 0 0.8rem; + color: var(--gy-success); + font-size: 1.2rem; + font-weight: 800; + line-height: 1.4; +} + +.gy-product-card__availability .gy-icon { + width: 1.5rem; + height: 1.5rem; +} + +.gy-product-card__availability--sold-out { + color: var(--gy-muted); +} + +.gy-product-card__title { + display: -webkit-box; + min-height: 4.8rem; + margin: 0; + overflow: hidden; + color: var(--gy-text); + font-size: 1.6rem; + font-weight: 700; + line-height: 1.5; + -webkit-box-orient: vertical; + -webkit-line-clamp: 2; +} + +.gy-product-card__title a { + color: inherit; + text-decoration: none; +} + +.gy-product-card__title a:hover { + color: var(--gy-blue); +} + +.gy-product-card__footer { + display: flex; + align-items: end; + justify-content: space-between; + gap: 1.2rem; + margin-top: auto; + padding-top: 1.2rem; +} + +.gy-product-card__price { + display: flex; + flex-wrap: wrap; + align-items: baseline; + gap: 0.4rem 0.8rem; + min-width: 0; + color: var(--gy-navy-deep); +} + +.gy-product-card__from { + width: 100%; + color: var(--gy-muted); + font-size: 1.1rem; + font-weight: 700; +} + +.gy-product-card__current-price { + font-size: 2.2rem; + font-weight: 800; + line-height: 1.1; +} + +.gy-product-card__compare-price { + color: var(--gy-muted); + font-size: 1.3rem; +} + +.gy-product-card product-form, +.gy-product-card product-form .form { + display: block; + margin: 0; +} + +.gy-product-card__action { + display: inline-grid; + flex: 0 0 auto; + place-items: center; + width: 4rem; + height: 4rem; + padding: 0; + border: 0; + border-radius: 999px; + background: var(--gy-blue); + color: var(--gy-surface); + text-decoration: none; + cursor: pointer; + transition: background-color 160ms ease; +} + +.gy-product-card__action .gy-icon { + width: 2.2rem; + height: 2.2rem; +} + +.gy-product-card__action:hover { + background: var(--gy-blue-hover); + color: var(--gy-surface); +} + +.gy-product-card__action:focus-visible, +.gy-product-card__image-link:focus-visible, +.gy-product-card__title a:focus-visible { + outline: 0.2rem solid var(--gy-blue); + outline-offset: 0.3rem; +} + +.gy-product-card__action:disabled { + background: var(--gy-border); + color: var(--gy-muted); + cursor: not-allowed; +} + +.gy-product-card__action .loading__spinner { + display: none; +} + +.gy-product-card__action.loading .gy-icon { + visibility: hidden; +} + +.gy-product-card__action.loading .loading__spinner { + display: block; +} + +.gy-trust-grid { + padding-block: 6.4rem; + border-top: 0.1rem solid var(--gy-border); + background: var(--gy-bg); +} + +.gy-trust-grid .page-width { + max-width: 134.4rem; + padding-inline: 3.2rem; +} + +.gy-trust-grid__heading { + margin-bottom: 3.2rem; + text-align: center; +} + +.gy-trust-grid__items { + display: grid; + grid-template-columns: repeat(3, minmax(0, 1fr)); + gap: 3.2rem; +} + +.gy-trust-card { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + gap: 1.6rem; + min-width: 0; + min-height: 24rem; + padding: 2.4rem; + border: 0.1rem solid var(--gy-border); + border-radius: 1.2rem; + background: var(--gy-surface); + color: var(--gy-text); + text-align: center; + text-decoration: none; +} + +.gy-trust-card__title { + margin: 0 0 0.8rem; + font-size: 1.8rem; +} + +.gy-trust-card__icon--secure { + background: var(--gy-gold-soft); + color: var(--gy-navy-deep); +} + +.gy-trust-card__icon--delivery { + background: var(--gy-blue-soft); + color: var(--gy-blue); +} + +.gy-trust-card__icon--support { + background: #f4f3f7; + color: var(--gy-navy-deep); +} + +.gy-trust-card--link { + transition: border-color 180ms ease, box-shadow 180ms ease; +} + +.gy-trust-card--link:hover { + border-color: var(--gy-blue-soft); + color: var(--gy-text); + box-shadow: 0 0.4rem 2rem rgba(0, 0, 0, 0.05); +} + +.gy-trust-card--link:focus-visible { + outline: 0.2rem solid var(--gy-blue); + outline-offset: 0.3rem; +} + +@media screen and (max-width: 989px) { + .gy-promo-hero { + padding-block: 3.2rem; + } + + .gy-promo-hero .page-width { + padding-inline: 2.4rem; + } + + .gy-promo-hero__grid { + grid-template-columns: 1fr; + height: auto; + } + + .gy-promo-hero__tile--main { + height: 50rem; + } + + .gy-promo-hero__stack { + grid-template-columns: repeat(2, minmax(0, 1fr)); + grid-template-rows: none; + } + + .gy-promo-hero__stack .gy-promo-hero__tile { + height: 28rem; + } + + .gy-category-grid__items { + grid-template-columns: repeat(3, minmax(0, 1fr)); + } + + .gy-featured-products__grid { + grid-template-columns: repeat(2, minmax(0, 1fr)); + } + + .gy-product-rail__surface { + padding: 2.8rem; + } +} + +@media screen and (max-width: 749px) { + .gy-section { + padding-block: 3.2rem; + } + + .gy-section__header { + display: grid; + gap: 1.2rem; + align-items: start; + } + + .gy-section__title { + font-size: 2.4rem; + } + + .gy-promo-hero__stack, + .gy-trust-grid__items { + grid-template-columns: 1fr; + } + + .gy-promo-hero .page-width { + padding-inline: 1.6rem; + } + + .gy-promo-hero__tile--main { + height: 43rem; + background: #d8d5cd; + } + + .gy-promo-hero__tile--main .gy-promo-hero__image { + object-fit: contain; + object-position: center top; + } + + .gy-promo-hero__stack .gy-promo-hero__tile { + height: 30rem; + } + + .gy-promo-hero__content { + padding: 2.4rem; + max-width: none; + } + + .gy-promo-hero__heading { + font-size: 3.2rem; + } + + .gy-category-grid__items { + grid-template-columns: repeat(2, minmax(0, 1fr)); + } + + .gy-category-grid { + padding-block: 4.8rem; + } + + .gy-category-grid .page-width { + padding-inline: 1.6rem; + } + + .gy-section.gy-featured-products { + padding-block: 1.2rem; + } + + .gy-featured-products .page-width { + padding-inline: 1.6rem; + } + + .gy-product-rail__surface { + padding: 2rem; + border-radius: 1.2rem; + } + + .gy-featured-products__grid { + gap: 1.6rem; + } + + .gy-product-card__media { + padding: 1.6rem; + } + + .gy-product-card__content { + padding: 1.4rem; + } + + .gy-product-card__title { + min-height: 4.2rem; + font-size: 1.4rem; + } + + .gy-product-card__current-price { + font-size: 1.8rem; + } + + .gy-category-card { + min-height: 14.4rem; + padding: 1.6rem; + } + + .gy-category-card__icon, + .gy-trust-card__icon { + width: 5.6rem; + height: 5.6rem; + } + + .gy-trust-card { + min-height: 0; + padding: 2rem; + } + + .gy-trust-grid { + padding-block: 4.8rem; + } + + .gy-trust-grid .page-width { + padding-inline: 1.6rem; + } +} + +@media screen and (max-width: 389px) { + .gy-promo-hero__content { + padding: 2rem 1.8rem; + } + + .gy-promo-hero__heading { + font-size: 2.8rem; + } + + .gy-promo-hero__subheading { + font-size: 2rem; + } + + .gy-promo-hero__text { + font-size: 1.4rem; + } + + .gy-promo-hero__tile--main { + height: 40rem; + } + + .gy-promo-hero__stack .gy-promo-hero__tile { + height: 28rem; + } + + .gy-category-card { + min-height: 13.6rem; + padding: 1.2rem; + } + + .gy-featured-products__grid { + grid-template-columns: 1fr; + } +} + +@media (prefers-reduced-motion: reduce) { + .gy-category-card, + .gy-category-card__icon, + .gy-category-card__title, + .gy-product-card, + .gy-product-card__image, + .gy-product-card__action { + transition: none; + } + + .gy-trust-card--link { + transition: none; + } + + .gy-product-card:hover .gy-product-card__image { + transform: none; + } +} + +/* Collection browsing and product cards */ +.collection-hero { + border-bottom: 0.1rem solid var(--gy-border); + background: var(--gy-bg); +} + +.collection-hero__inner { + padding-top: clamp(3.2rem, 5vw, 5.6rem); + padding-bottom: clamp(3.2rem, 5vw, 5.6rem); +} + +.collection-hero__title { + color: var(--gy-navy); + font-weight: 800; + letter-spacing: 0; +} + +.collection-hero__description { + max-width: 68rem; + margin-top: 1rem; + color: var(--gy-muted); + line-height: 1.55; +} + +.gy-product-rail__grid .card-wrapper, +collection-component .product-grid .card-wrapper { + display: flex; + flex-direction: column; + height: 100%; + min-width: 0; + padding: 0.6rem; + overflow: hidden; + border: 0.1rem solid var(--gy-border); + border-radius: 1.2rem; + background: var(--gy-surface); + box-shadow: 0 0.2rem 0.6rem rgba(6, 58, 102, 0.04); + transition: border-color 160ms ease, box-shadow 160ms ease; +} + +.gy-product-rail__grid .card, +collection-component .product-grid .card { + flex: 1 1 auto; + min-width: 0; +} + +.gy-product-rail__grid .card__inner, +collection-component .product-grid .card__inner { + overflow: hidden; + border: 0; + border-radius: 0.8rem; + background: var(--gy-bg); +} + +.gy-product-rail__grid .card__media .media, +collection-component .product-grid .card__media .media { + background: var(--gy-bg); +} + +.gy-product-rail__grid .card__media .media img, +collection-component .product-grid .card__media .media img { + object-fit: cover; + transition: transform 180ms ease; +} + +.gy-product-rail__grid .card__content, +collection-component .product-grid .card__content { + padding: 0.2rem 0.2rem 0; +} + +.gy-product-rail__grid .card__information, +collection-component .product-grid .card__information { + padding: 1.2rem 0.4rem 0.8rem; +} + +.gy-product-rail__grid .card__heading, +collection-component .product-grid .card__heading { + color: var(--gy-text); + font-size: 1.6rem; + font-weight: 700; + letter-spacing: 0; + line-height: 1.35; + overflow-wrap: anywhere; +} + +.gy-product-rail__grid .card__heading a, +collection-component .product-grid .card__heading a { + text-decoration: none; +} + +.gy-product-rail__grid .price, +collection-component .product-grid .price { + margin-top: 0.5rem; + color: var(--gy-navy); + font-size: 1.7rem; + font-weight: 800; + letter-spacing: 0; +} + +.gy-product-rail__grid .price--on-sale .price-item--regular, +collection-component .product-grid .price--on-sale .price-item--regular { + color: var(--gy-muted); +} + +.gy-product-rail__grid .card__badge .badge, +collection-component .product-grid .card__badge .badge { + min-height: 2.4rem; + padding: 0.3rem 0.8rem; + border: 0.1rem solid rgba(245, 183, 0, 0.45); + border-radius: 999px; + background: var(--gy-gold-soft); + color: #594000; + font-size: 1.1rem; + font-weight: 800; + letter-spacing: 0; +} + +.gy-product-rail__grid .quick-add, +collection-component .product-grid .quick-add { + margin: 0.4rem; +} + +.gy-product-rail__grid .card__heading a:focus-visible, +collection-component .product-grid .card__heading a:focus-visible, +.gy-product-rail__grid .quick-add__submit:focus-visible, +collection-component .product-grid .quick-add__submit:focus-visible { + outline: 0.2rem solid var(--gy-blue); + outline-offset: 0; + box-shadow: var(--gy-focus-ring); +} + +@media (hover: hover) { + .gy-product-rail__grid .card-wrapper:hover, + collection-component .product-grid .card-wrapper:hover { + border-color: rgba(0, 129, 216, 0.45); + box-shadow: 0 0.8rem 2rem rgba(6, 58, 102, 0.1); + } + + .gy-product-rail__grid .card-wrapper:hover .card__media .media img, + collection-component .product-grid .card-wrapper:hover .card__media .media img { + transform: scale(1.02); + } +} + +collection-component .facets-wrapper { + margin-bottom: 2.4rem; + padding-block: 1.2rem; + border-bottom: 0.1rem solid var(--gy-border); +} + +collection-component .facets__summary { + min-height: 4.4rem; + margin-bottom: 0; + padding: 0 1.2rem; + border: 0.1rem solid var(--gy-border); + border-radius: var(--gy-radius-sm); + color: var(--gy-text); +} + +collection-component .facets__summary:hover, +collection-component .facets__disclosure[open] .facets__summary { + border-color: rgba(0, 129, 216, 0.45); + color: var(--gy-navy); +} + +collection-component .facet-filters { + padding-left: 1.6rem; +} + +collection-component .facet-filters__label { + color: var(--gy-muted); + font-weight: 700; +} + +collection-component .facet-filters__sort { + min-height: 4.4rem; + padding: 0 3.6rem 0 1.2rem; + border: 0.1rem solid var(--gy-border); + border-radius: var(--gy-radius-sm); + color: var(--gy-text); + background: var(--gy-surface); +} + +collection-component .facet-filters__sort:focus-visible, +collection-component .facet-filters__sort.focused { + outline: 0.2rem solid var(--gy-blue); + outline-offset: 0.2rem; + box-shadow: none; +} + +collection-component .product-count__text { + color: var(--gy-muted); + font-weight: 600; +} + +collection-component .active-facets__button-inner { + border-radius: 999px; + background: var(--gy-blue-soft); + color: var(--gy-navy); +} + +collection-component .product-grid { + row-gap: 1.8rem; +} + +@media screen and (min-width: 750px) { + collection-component .product-grid { + row-gap: 2.4rem; + } +} + +@media screen and (min-width: 750px) and (max-width: 989px) { + collection-component .product-grid.grid--3-col-tablet.grid--2-col-tablet-down .grid__item { + width: calc(33.33% - var(--grid-desktop-horizontal-spacing) * 2 / 3); + max-width: calc(33.33% - var(--grid-desktop-horizontal-spacing) * 2 / 3); + } +} + +@media screen and (max-width: 749px) { + .collection-hero__inner { + padding-top: 3.2rem; + padding-bottom: 3.2rem; + } + + .collection-hero__title { + font-size: 2.8rem; + } + + .gy-product-rail__grid .card__heading, + collection-component .product-grid .card__heading { + font-size: 1.4rem; + } + + .gy-product-rail__grid .price, + collection-component .product-grid .price { + font-size: 1.5rem; + } + + collection-component .facets-wrapper { + margin-bottom: 1.6rem; + padding-block: 0.8rem; + } + + collection-component .mobile-facets__open-wrapper { + min-height: 4.4rem; + padding: 0.8rem 1.2rem; + border: 0.1rem solid var(--gy-border); + border-radius: var(--gy-radius-sm); + background: var(--gy-surface); + color: var(--gy-navy); + } + + collection-component .mobile-facets__open, + collection-component .mobile-facets__close { + color: var(--gy-navy); + } + + collection-component .mobile-facets__inner { + background: var(--gy-surface); + } +} + +/* Product detail and buy box */ +product-info .product__media-list { + gap: 1.2rem; +} + +product-info .product-media-container { + overflow: hidden; + border: 0.1rem solid var(--gy-border); + border-radius: 1.2rem; + background: var(--gy-bg); +} + +product-info .product-media-container .media { + border-radius: inherit; + background: var(--gy-bg); +} + +product-info .product__info-container { + padding: clamp(2rem, 3vw, 3.2rem); + border: 0.1rem solid var(--gy-border); + border-radius: 1.2rem; + background: var(--gy-surface); + box-shadow: 0 0.4rem 1.6rem rgba(6, 58, 102, 0.05); +} + +product-info .product__text.caption-with-letter-spacing { + color: var(--gy-muted); + font-size: 1.1rem; + font-weight: 800; + letter-spacing: 0.08em; +} + +product-info .product__title h1 { + color: var(--gy-navy); + font-size: clamp(3rem, 3vw, 4.2rem); + font-weight: 800; + letter-spacing: 0; + line-height: 1.08; + overflow-wrap: anywhere; +} + +product-info .product__info-container .price--large { + color: var(--gy-navy); + font-size: 2.8rem; + font-weight: 800; + letter-spacing: 0; + line-height: 1.15; +} + +product-info .product__info-container .price--on-sale .price-item--regular { + color: var(--gy-muted); + font-size: 1.5rem; +} + +product-info .product__info-container .price .badge { + padding: 0.3rem 0.8rem; + border: 0.1rem solid rgba(245, 183, 0, 0.45); + border-radius: 999px; + background: var(--gy-gold-soft); + color: #594000; + font-size: 1.1rem; + font-weight: 800; + letter-spacing: 0; +} + +product-info .product__tax, +product-info .installment { + color: var(--gy-muted); +} + +product-info .product__description { + padding: 1.4rem 1.6rem; + border-left: 0.3rem solid var(--gy-blue); + border-radius: 0 var(--gy-radius-sm) var(--gy-radius-sm) 0; + background: var(--gy-bg); + color: var(--gy-text); + line-height: 1.55; +} + +product-info .product__description > *:first-child { + margin-top: 0; +} + +product-info .product__description > *:last-child { + margin-bottom: 0; +} + +product-info .product-form__quantity { + padding: 1.2rem; + border: 0.1rem solid var(--gy-border); + border-radius: var(--gy-radius-sm); + background: var(--gy-bg); +} + +product-info .product-form__quantity .form__label { + color: var(--gy-text); + font-weight: 700; +} + +product-info .quantity { + min-height: 4.6rem; + border-color: var(--gy-border); + background: var(--gy-surface); +} + +product-info .quantity__button { + min-width: 4.4rem; + color: var(--gy-navy); +} + +product-info .product-form__buttons { + max-width: none; +} + +product-info .product-form__submit { + min-height: 5.2rem; + border-color: var(--gy-blue); + background: var(--gy-blue); + color: var(--gy-surface); + font-size: 1.6rem; + font-weight: 800; + letter-spacing: 0; +} + +product-info .product-form__submit:hover:not([disabled]) { + border-color: var(--gy-navy); + background: var(--gy-navy); +} + +product-info .product-form__submit:focus-visible, +product-info .quantity__button:focus-visible, +product-info .quantity__input:focus-visible { + outline: 0.2rem solid var(--gy-blue); + outline-offset: 0.2rem; + box-shadow: var(--gy-focus-ring); +} + +.gy-product-reassurance { + display: grid; + gap: 0.9rem; + padding: 1.6rem; + border: 0.1rem solid rgba(0, 129, 216, 0.2); + border-radius: var(--gy-radius-sm); + background: var(--gy-blue-soft); +} + +.gy-product-reassurance__item { + display: grid; + gap: 0.2rem; + color: var(--gy-muted); + font-size: 1.35rem; + line-height: 1.4; +} + +.gy-product-reassurance__item strong { + color: var(--gy-navy); + font-weight: 800; +} + +product-info .product__accordion { + margin-block: 0; + border-top: 0.1rem solid var(--gy-border); +} + +product-info .product__accordion:last-of-type { + border-bottom: 0.1rem solid var(--gy-border); +} + +product-info .product__accordion summary { + min-height: 5.2rem; + padding: 1.2rem 0; +} + +product-info .product__accordion .accordion__title { + color: var(--gy-text); + font-size: 1.5rem; + font-weight: 700; + letter-spacing: 0; +} + +product-info .product__accordion .accordion__content { + padding: 0 0 1.6rem; + color: var(--gy-muted); + line-height: 1.55; +} + +product-info .share-button { + color: var(--gy-muted); +} + +@media screen and (max-width: 749px) { + product-info .product__info-wrapper { + padding-top: 2.4rem; + } + + product-info .product__info-container { + padding: 1.8rem; + border-radius: var(--gy-radius); + } + + product-info .product__title h1 { + font-size: 2.9rem; + } + + product-info .product__info-container .price--large { + font-size: 2.4rem; + } + + product-info .product__media-list { + gap: 0; + } + + .gy-product-reassurance { + padding: 1.4rem; + } +} + +/* Cart drawer, cart page, and add-to-cart notification */ +cart-drawer .drawer__inner { + border-left: 0.1rem solid var(--gy-border); + background: var(--gy-surface); + box-shadow: -1.2rem 0 3.6rem rgba(6, 58, 102, 0.16); +} + +cart-drawer .drawer__header { + min-height: 7.2rem; + padding: 1.6rem 2.4rem; + border-bottom: 0.1rem solid var(--gy-border); +} + +cart-drawer .drawer__heading, +cart-items .title--primary { + color: var(--gy-navy); + font-weight: 800; + letter-spacing: 0; +} + +cart-drawer .drawer__close, +.cart-notification__close { + min-width: 4.4rem; + min-height: 4.4rem; + color: var(--gy-navy); +} + +cart-drawer .cart-item, +.cart__items .cart-item { + border-bottom-color: var(--gy-border); +} + +cart-drawer .cart-item__media, +.cart__items .cart-item__image-container { + overflow: hidden; + border: 0.1rem solid var(--gy-border); + border-radius: var(--gy-radius-sm); + background: var(--gy-bg); +} + +cart-drawer .cart-item__image, +.cart__items .cart-item__image { + object-fit: cover; +} + +cart-drawer .cart-item__name, +.cart__items .cart-item__name { + color: var(--gy-text); + font-weight: 700; +} + +cart-drawer .cart-item__price-wrapper, +.cart__items .cart-item__price-wrapper { + color: var(--gy-navy); + font-weight: 800; +} + +cart-drawer .quantity, +.cart__items .quantity { + min-height: 4.4rem; + border-color: var(--gy-border); + border-radius: var(--gy-radius-sm); + background: var(--gy-surface); +} + +cart-drawer .quantity__button, +.cart__items .quantity__button, +cart-remove-button .button { + min-width: 4.4rem; + min-height: 4.4rem; + color: var(--gy-navy); +} + +cart-drawer .quantity__button:hover:not([disabled]), +.cart__items .quantity__button:hover:not([disabled]), +cart-remove-button .button:hover:not([disabled]) { + color: var(--gy-blue); +} + +.cart__items .quantity__button:focus-visible, +cart-drawer .quantity__button:focus-visible, +cart-remove-button .button:focus-visible, +cart-drawer .drawer__close:focus-visible, +.cart-notification__close:focus-visible { + outline: 0.2rem solid var(--gy-blue); + outline-offset: 0.2rem; + box-shadow: var(--gy-focus-ring); +} + +.gy-cart-reassurance { + display: grid; + gap: 0.7rem; + margin-top: 1.6rem; + padding: 1.2rem 1.4rem; + border: 0.1rem solid rgba(0, 129, 216, 0.2); + border-radius: var(--gy-radius-sm); + background: var(--gy-blue-soft); +} + +.gy-cart-reassurance__item { + display: flex; + align-items: flex-start; + gap: 0.8rem; + margin: 0; + color: var(--gy-muted); + font-size: 1.3rem; + line-height: 1.45; +} + +.gy-cart-reassurance__marker { + flex: 0 0 auto; + width: 0.8rem; + height: 0.8rem; + margin-top: 0.5rem; + border-radius: 999px; + background: var(--gy-blue); +} + +.cart__footer-wrapper { + background: var(--gy-bg); +} + +#main-cart-footer .cart__blocks { + padding: clamp(2rem, 3vw, 2.8rem); + border: 0.1rem solid var(--gy-border); + border-radius: var(--gy-radius); + background: var(--gy-surface); + box-shadow: 0 0.4rem 1.6rem rgba(6, 58, 102, 0.05); +} + +#main-cart-footer .totals { + color: var(--gy-navy); +} + +#main-cart-footer .totals__total, +#main-cart-footer .totals__total-value { + font-weight: 800; +} + +.cart__checkout-button, +.cart-notification__links .button--primary { + min-height: 5.2rem; + border-color: var(--gy-blue); + border-radius: var(--gy-radius); + background: var(--gy-blue); + color: var(--gy-surface); + font-weight: 800; + letter-spacing: 0; +} + +.cart__checkout-button:hover:not([disabled]), +.cart-notification__links .button--primary:hover:not([disabled]) { + border-color: var(--gy-navy); + background: var(--gy-navy); +} + +.cart__checkout-button:focus-visible, +.cart-notification__links .button:focus-visible { + outline: 0.2rem solid var(--gy-blue); + outline-offset: 0.2rem; + box-shadow: var(--gy-focus-ring); +} + +.cart-notification { + border-color: var(--gy-border); + border-radius: 0 0 var(--gy-radius) var(--gy-radius); + background: var(--gy-surface); +} + +.cart-notification__heading { + color: var(--gy-navy); + font-weight: 800; +} + +.cart-notification__heading .icon-checkmark { + color: var(--gy-success); +} + +.cart-notification-product__image { + overflow: hidden; + border: 0.1rem solid var(--gy-border); + border-radius: var(--gy-radius-sm); + background: var(--gy-bg); +} + +.cart-notification .gy-cart-reassurance { + margin-top: 0; +} + +@media screen and (max-width: 749px) { + cart-drawer .drawer__inner { + width: 100%; + max-width: 100%; + } + + cart-drawer .drawer__header { + padding-inline: 1.6rem; + } + + cart-drawer .drawer__footer { + padding-inline: 1.6rem; + } + + #main-cart-footer .cart__blocks { + padding: 1.8rem; + } + + .cart-notification { + padding: 2rem 1.8rem; + } +} + +/* Search and content pages */ +.template-search { + background: var(--gy-surface); +} + +.template-search__header { + padding-top: clamp(1.2rem, 3vw, 3.2rem); +} + +.template-search__header .h2 { + color: var(--gy-navy); + font-size: clamp(3rem, 4vw, 4.8rem); + font-weight: 800; + letter-spacing: 0; +} + +.template-search__search .field { + border: 0.1rem solid var(--gy-border); + border-radius: var(--gy-radius); + background: var(--gy-surface); + box-shadow: 0 0.4rem 1.2rem rgba(6, 58, 102, 0.04); +} + +.template-search__search .field::before, +.template-search__search .field::after { + display: none; +} + +.template-search__search .field:focus-within { + border-color: var(--gy-blue); + box-shadow: var(--gy-focus-ring); +} + +.template-search__search .search__input { + min-height: 5.4rem; + color: var(--gy-text); +} + +.template-search__search .search__button, +.template-search__search .reset__button { + min-width: 4.4rem; + color: var(--gy-blue); +} + +.template-search .product-count__text, +.template-search .product-count-vertical, +.template-search .facets__summary, +.template-search .facet-filters__label { + color: var(--gy-muted); +} + +.template-search .product-grid { + row-gap: 1.8rem; +} + +.template-search .product-grid .card-wrapper { + display: flex; + flex-direction: column; + height: 100%; + min-width: 0; + padding: 0.6rem; + overflow: hidden; + border: 0.1rem solid var(--gy-border); + border-radius: 1.2rem; + background: var(--gy-surface); + box-shadow: 0 0.2rem 0.6rem rgba(6, 58, 102, 0.04); + transition: border-color 160ms ease, box-shadow 160ms ease; +} + +.template-search .product-grid .card { + flex: 1 1 auto; + min-width: 0; +} + +.template-search .product-grid .card__inner, +.template-search .product-grid .card__media .media { + overflow: hidden; + border: 0; + border-radius: 0.8rem; + background: var(--gy-bg); +} + +.template-search .product-grid .card__media .media img { + object-fit: cover; + transition: transform 180ms ease; +} + +.template-search .product-grid .card__content { + padding: 0.2rem 0.2rem 0; +} + +.template-search .product-grid .card__information { + padding: 1.2rem 0.4rem 0.8rem; +} + +.template-search .product-grid .card__heading { + color: var(--gy-text); + font-size: 1.6rem; + font-weight: 700; + letter-spacing: 0; + line-height: 1.35; + overflow-wrap: anywhere; +} + +.template-search .product-grid .card__heading a { + text-decoration: none; +} + +.template-search .product-grid .price { + margin-top: 0.5rem; + color: var(--gy-navy); + font-size: 1.7rem; + font-weight: 800; + letter-spacing: 0; +} + +.template-search .product-grid .card__badge .badge { + min-height: 2.4rem; + padding: 0.3rem 0.8rem; + border: 0.1rem solid rgba(245, 183, 0, 0.45); + border-radius: 999px; + background: var(--gy-gold-soft); + color: #594000; + font-size: 1.1rem; + font-weight: 800; + letter-spacing: 0; +} + +.template-search .product-grid .card__heading a:focus-visible { + outline: 0.2rem solid var(--gy-blue); + outline-offset: 0; + box-shadow: var(--gy-focus-ring); +} + +.gy-search-empty { + max-width: 58rem; + margin: 0 auto; + padding: clamp(2rem, 4vw, 3.2rem); + border: 0.1rem solid var(--gy-border); + border-radius: var(--gy-radius); + background: var(--gy-bg); + color: var(--gy-muted); + text-align: center; +} + +.gy-search-empty__title { + margin: 0; + color: var(--gy-navy); + font-size: 2.2rem; + font-weight: 800; + letter-spacing: 0; +} + +.gy-search-empty p { + max-width: 46rem; + margin: 1rem auto 1.8rem; + line-height: 1.55; +} + +.gy-search-empty .button { + min-height: 4.8rem; + border-color: var(--gy-blue); + color: var(--gy-blue); +} + +.gy-search-empty .button:hover { + border-color: var(--gy-navy); + background: var(--gy-navy); + color: var(--gy-surface); +} + +@media (hover: hover) { + .template-search .product-grid .card-wrapper:hover { + border-color: rgba(0, 129, 216, 0.45); + box-shadow: 0 0.8rem 2rem rgba(6, 58, 102, 0.1); + } + + .template-search .product-grid .card-wrapper:hover .card__media .media img { + transform: scale(1.02); + } +} + +.main-page-title { + color: var(--gy-navy); + font-size: clamp(3rem, 4vw, 4.8rem); + font-weight: 800; + letter-spacing: 0; + line-height: 1.1; +} + +.main-page-title + .rte, +.shopify-policy__body { + color: var(--gy-text); + font-size: 1.6rem; + line-height: 1.7; + overflow-wrap: anywhere; +} + +.main-page-title + .rte > * + *, +.shopify-policy__body > * + * { + margin-top: 1.8rem; +} + +.main-page-title + .rte h2, +.main-page-title + .rte h3, +.main-page-title + .rte h4, +.shopify-policy__body h2, +.shopify-policy__body h3, +.shopify-policy__body h4 { + color: var(--gy-navy); + font-weight: 800; + letter-spacing: 0; + line-height: 1.22; +} + +.main-page-title + .rte h2, +.shopify-policy__body h2 { + margin-top: 3.6rem; + font-size: 2.6rem; +} + +.main-page-title + .rte h3, +.shopify-policy__body h3 { + margin-top: 2.8rem; + font-size: 2rem; +} + +.main-page-title + .rte a, +.shopify-policy__body a { + color: var(--gy-blue); + font-weight: 700; + text-underline-offset: 0.2em; +} + +.main-page-title + .rte ul, +.main-page-title + .rte ol, +.shopify-policy__body ul, +.shopify-policy__body ol { + padding-left: 2.4rem; +} + +.main-page-title + .rte li + li, +.shopify-policy__body li + li { + margin-top: 0.7rem; +} + +.main-page-title + .rte table, +.shopify-policy__body table { + display: block; + max-width: 100%; + overflow-x: auto; + border: 0.1rem solid var(--gy-border); + border-radius: var(--gy-radius-sm); +} + +.main-page-title + .rte th, +.main-page-title + .rte td, +.shopify-policy__body th, +.shopify-policy__body td { + padding: 1rem 1.2rem; + border-color: var(--gy-border); +} + +.shopify-policy__container { + max-width: 82rem; + padding-inline: 2rem; +} + +.shopify-policy__title h1 { + color: var(--gy-navy); + font-size: clamp(3rem, 4vw, 4.8rem); + font-weight: 800; + letter-spacing: 0; +} + +@media screen and (min-width: 750px) { + .template-search .product-grid { + row-gap: 2.4rem; + } +} + +@media screen and (max-width: 749px) { + .template-search__header { + padding-top: 0.8rem; + } + + .template-search__search .search__input { + min-height: 5rem; + } + + .template-search .product-grid .card__heading { + font-size: 1.4rem; + } + + .template-search .product-grid .price { + font-size: 1.5rem; + } + + .gy-search-empty { + padding: 2rem 1.6rem; + } + + .main-page-title + .rte, + .shopify-policy__body { + font-size: 1.55rem; + line-height: 1.65; + } + + .main-page-title + .rte h2, + .shopify-policy__body h2 { + margin-top: 3.2rem; + font-size: 2.4rem; + } + + .shopify-policy__container { + padding-inline: 1.6rem; + } +} diff --git a/assets/icon-3d-model.svg b/get-yours-shopify-theme/assets/icon-3d-model.svg similarity index 100% rename from assets/icon-3d-model.svg rename to get-yours-shopify-theme/assets/icon-3d-model.svg diff --git a/assets/icon-account.svg b/get-yours-shopify-theme/assets/icon-account.svg similarity index 100% rename from assets/icon-account.svg rename to get-yours-shopify-theme/assets/icon-account.svg diff --git a/assets/icon-apple.svg b/get-yours-shopify-theme/assets/icon-apple.svg similarity index 100% rename from assets/icon-apple.svg rename to get-yours-shopify-theme/assets/icon-apple.svg diff --git a/assets/icon-arrow.svg b/get-yours-shopify-theme/assets/icon-arrow.svg similarity index 100% rename from assets/icon-arrow.svg rename to get-yours-shopify-theme/assets/icon-arrow.svg diff --git a/assets/icon-banana.svg b/get-yours-shopify-theme/assets/icon-banana.svg similarity index 100% rename from assets/icon-banana.svg rename to get-yours-shopify-theme/assets/icon-banana.svg diff --git a/assets/icon-bottle.svg b/get-yours-shopify-theme/assets/icon-bottle.svg similarity index 100% rename from assets/icon-bottle.svg rename to get-yours-shopify-theme/assets/icon-bottle.svg diff --git a/assets/icon-box.svg b/get-yours-shopify-theme/assets/icon-box.svg similarity index 100% rename from assets/icon-box.svg rename to get-yours-shopify-theme/assets/icon-box.svg diff --git a/assets/icon-caret.svg b/get-yours-shopify-theme/assets/icon-caret.svg similarity index 100% rename from assets/icon-caret.svg rename to get-yours-shopify-theme/assets/icon-caret.svg diff --git a/assets/icon-carrot.svg b/get-yours-shopify-theme/assets/icon-carrot.svg similarity index 100% rename from assets/icon-carrot.svg rename to get-yours-shopify-theme/assets/icon-carrot.svg diff --git a/assets/icon-cart-empty.svg b/get-yours-shopify-theme/assets/icon-cart-empty.svg similarity index 100% rename from assets/icon-cart-empty.svg rename to get-yours-shopify-theme/assets/icon-cart-empty.svg diff --git a/assets/icon-cart.svg b/get-yours-shopify-theme/assets/icon-cart.svg similarity index 100% rename from assets/icon-cart.svg rename to get-yours-shopify-theme/assets/icon-cart.svg diff --git a/assets/icon-chat-bubble.svg b/get-yours-shopify-theme/assets/icon-chat-bubble.svg similarity index 100% rename from assets/icon-chat-bubble.svg rename to get-yours-shopify-theme/assets/icon-chat-bubble.svg diff --git a/assets/icon-check-mark.svg b/get-yours-shopify-theme/assets/icon-check-mark.svg similarity index 100% rename from assets/icon-check-mark.svg rename to get-yours-shopify-theme/assets/icon-check-mark.svg diff --git a/assets/icon-checkmark.svg b/get-yours-shopify-theme/assets/icon-checkmark.svg similarity index 100% rename from assets/icon-checkmark.svg rename to get-yours-shopify-theme/assets/icon-checkmark.svg diff --git a/assets/icon-clipboard.svg b/get-yours-shopify-theme/assets/icon-clipboard.svg similarity index 100% rename from assets/icon-clipboard.svg rename to get-yours-shopify-theme/assets/icon-clipboard.svg diff --git a/assets/icon-close-small.svg b/get-yours-shopify-theme/assets/icon-close-small.svg similarity index 100% rename from assets/icon-close-small.svg rename to get-yours-shopify-theme/assets/icon-close-small.svg diff --git a/assets/icon-close.svg b/get-yours-shopify-theme/assets/icon-close.svg similarity index 100% rename from assets/icon-close.svg rename to get-yours-shopify-theme/assets/icon-close.svg diff --git a/assets/icon-copy.svg b/get-yours-shopify-theme/assets/icon-copy.svg similarity index 100% rename from assets/icon-copy.svg rename to get-yours-shopify-theme/assets/icon-copy.svg diff --git a/assets/icon-dairy-free.svg b/get-yours-shopify-theme/assets/icon-dairy-free.svg similarity index 100% rename from assets/icon-dairy-free.svg rename to get-yours-shopify-theme/assets/icon-dairy-free.svg diff --git a/assets/icon-dairy.svg b/get-yours-shopify-theme/assets/icon-dairy.svg similarity index 100% rename from assets/icon-dairy.svg rename to get-yours-shopify-theme/assets/icon-dairy.svg diff --git a/assets/icon-discount.svg b/get-yours-shopify-theme/assets/icon-discount.svg similarity index 100% rename from assets/icon-discount.svg rename to get-yours-shopify-theme/assets/icon-discount.svg diff --git a/assets/icon-dryer.svg b/get-yours-shopify-theme/assets/icon-dryer.svg similarity index 100% rename from assets/icon-dryer.svg rename to get-yours-shopify-theme/assets/icon-dryer.svg diff --git a/assets/icon-error.svg b/get-yours-shopify-theme/assets/icon-error.svg similarity index 100% rename from assets/icon-error.svg rename to get-yours-shopify-theme/assets/icon-error.svg diff --git a/assets/icon-eye.svg b/get-yours-shopify-theme/assets/icon-eye.svg similarity index 100% rename from assets/icon-eye.svg rename to get-yours-shopify-theme/assets/icon-eye.svg diff --git a/assets/icon-facebook.svg b/get-yours-shopify-theme/assets/icon-facebook.svg similarity index 100% rename from assets/icon-facebook.svg rename to get-yours-shopify-theme/assets/icon-facebook.svg diff --git a/assets/icon-filter.svg b/get-yours-shopify-theme/assets/icon-filter.svg similarity index 100% rename from assets/icon-filter.svg rename to get-yours-shopify-theme/assets/icon-filter.svg diff --git a/assets/icon-fire.svg b/get-yours-shopify-theme/assets/icon-fire.svg similarity index 100% rename from assets/icon-fire.svg rename to get-yours-shopify-theme/assets/icon-fire.svg diff --git a/assets/icon-gluten-free.svg b/get-yours-shopify-theme/assets/icon-gluten-free.svg similarity index 100% rename from assets/icon-gluten-free.svg rename to get-yours-shopify-theme/assets/icon-gluten-free.svg diff --git a/assets/icon-hamburger.svg b/get-yours-shopify-theme/assets/icon-hamburger.svg similarity index 100% rename from assets/icon-hamburger.svg rename to get-yours-shopify-theme/assets/icon-hamburger.svg diff --git a/assets/icon-heart.svg b/get-yours-shopify-theme/assets/icon-heart.svg similarity index 100% rename from assets/icon-heart.svg rename to get-yours-shopify-theme/assets/icon-heart.svg diff --git a/assets/icon-info.svg b/get-yours-shopify-theme/assets/icon-info.svg similarity index 100% rename from assets/icon-info.svg rename to get-yours-shopify-theme/assets/icon-info.svg diff --git a/assets/icon-instagram.svg b/get-yours-shopify-theme/assets/icon-instagram.svg similarity index 100% rename from assets/icon-instagram.svg rename to get-yours-shopify-theme/assets/icon-instagram.svg diff --git a/assets/icon-inventory-status.svg b/get-yours-shopify-theme/assets/icon-inventory-status.svg similarity index 100% rename from assets/icon-inventory-status.svg rename to get-yours-shopify-theme/assets/icon-inventory-status.svg diff --git a/assets/icon-iron.svg b/get-yours-shopify-theme/assets/icon-iron.svg similarity index 100% rename from assets/icon-iron.svg rename to get-yours-shopify-theme/assets/icon-iron.svg diff --git a/assets/icon-leaf.svg b/get-yours-shopify-theme/assets/icon-leaf.svg similarity index 100% rename from assets/icon-leaf.svg rename to get-yours-shopify-theme/assets/icon-leaf.svg diff --git a/assets/icon-leather.svg b/get-yours-shopify-theme/assets/icon-leather.svg similarity index 100% rename from assets/icon-leather.svg rename to get-yours-shopify-theme/assets/icon-leather.svg diff --git a/assets/icon-lightning-bolt.svg b/get-yours-shopify-theme/assets/icon-lightning-bolt.svg similarity index 100% rename from assets/icon-lightning-bolt.svg rename to get-yours-shopify-theme/assets/icon-lightning-bolt.svg diff --git a/assets/icon-lipstick.svg b/get-yours-shopify-theme/assets/icon-lipstick.svg similarity index 100% rename from assets/icon-lipstick.svg rename to get-yours-shopify-theme/assets/icon-lipstick.svg diff --git a/assets/icon-lock.svg b/get-yours-shopify-theme/assets/icon-lock.svg similarity index 100% rename from assets/icon-lock.svg rename to get-yours-shopify-theme/assets/icon-lock.svg diff --git a/assets/icon-map-pin.svg b/get-yours-shopify-theme/assets/icon-map-pin.svg similarity index 100% rename from assets/icon-map-pin.svg rename to get-yours-shopify-theme/assets/icon-map-pin.svg diff --git a/assets/icon-minus.svg b/get-yours-shopify-theme/assets/icon-minus.svg similarity index 100% rename from assets/icon-minus.svg rename to get-yours-shopify-theme/assets/icon-minus.svg diff --git a/assets/icon-nut-free.svg b/get-yours-shopify-theme/assets/icon-nut-free.svg similarity index 100% rename from assets/icon-nut-free.svg rename to get-yours-shopify-theme/assets/icon-nut-free.svg diff --git a/assets/icon-padlock.svg b/get-yours-shopify-theme/assets/icon-padlock.svg similarity index 100% rename from assets/icon-padlock.svg rename to get-yours-shopify-theme/assets/icon-padlock.svg diff --git a/assets/icon-pants.svg b/get-yours-shopify-theme/assets/icon-pants.svg similarity index 100% rename from assets/icon-pants.svg rename to get-yours-shopify-theme/assets/icon-pants.svg diff --git a/assets/icon-pause.svg b/get-yours-shopify-theme/assets/icon-pause.svg similarity index 100% rename from assets/icon-pause.svg rename to get-yours-shopify-theme/assets/icon-pause.svg diff --git a/assets/icon-paw-print.svg b/get-yours-shopify-theme/assets/icon-paw-print.svg similarity index 100% rename from assets/icon-paw-print.svg rename to get-yours-shopify-theme/assets/icon-paw-print.svg diff --git a/assets/icon-pepper.svg b/get-yours-shopify-theme/assets/icon-pepper.svg similarity index 100% rename from assets/icon-pepper.svg rename to get-yours-shopify-theme/assets/icon-pepper.svg diff --git a/assets/icon-perfume.svg b/get-yours-shopify-theme/assets/icon-perfume.svg similarity index 100% rename from assets/icon-perfume.svg rename to get-yours-shopify-theme/assets/icon-perfume.svg diff --git a/assets/icon-pinterest.svg b/get-yours-shopify-theme/assets/icon-pinterest.svg similarity index 100% rename from assets/icon-pinterest.svg rename to get-yours-shopify-theme/assets/icon-pinterest.svg diff --git a/assets/icon-plane.svg b/get-yours-shopify-theme/assets/icon-plane.svg similarity index 100% rename from assets/icon-plane.svg rename to get-yours-shopify-theme/assets/icon-plane.svg diff --git a/assets/icon-plant.svg b/get-yours-shopify-theme/assets/icon-plant.svg similarity index 100% rename from assets/icon-plant.svg rename to get-yours-shopify-theme/assets/icon-plant.svg diff --git a/assets/icon-play.svg b/get-yours-shopify-theme/assets/icon-play.svg similarity index 100% rename from assets/icon-play.svg rename to get-yours-shopify-theme/assets/icon-play.svg diff --git a/assets/icon-plus.svg b/get-yours-shopify-theme/assets/icon-plus.svg similarity index 100% rename from assets/icon-plus.svg rename to get-yours-shopify-theme/assets/icon-plus.svg diff --git a/assets/icon-price-tag.svg b/get-yours-shopify-theme/assets/icon-price-tag.svg similarity index 100% rename from assets/icon-price-tag.svg rename to get-yours-shopify-theme/assets/icon-price-tag.svg diff --git a/assets/icon-question-mark.svg b/get-yours-shopify-theme/assets/icon-question-mark.svg similarity index 100% rename from assets/icon-question-mark.svg rename to get-yours-shopify-theme/assets/icon-question-mark.svg diff --git a/assets/icon-recycle.svg b/get-yours-shopify-theme/assets/icon-recycle.svg similarity index 100% rename from assets/icon-recycle.svg rename to get-yours-shopify-theme/assets/icon-recycle.svg diff --git a/assets/icon-remove.svg b/get-yours-shopify-theme/assets/icon-remove.svg similarity index 100% rename from assets/icon-remove.svg rename to get-yours-shopify-theme/assets/icon-remove.svg diff --git a/assets/icon-reset.svg b/get-yours-shopify-theme/assets/icon-reset.svg similarity index 100% rename from assets/icon-reset.svg rename to get-yours-shopify-theme/assets/icon-reset.svg diff --git a/assets/icon-return.svg b/get-yours-shopify-theme/assets/icon-return.svg similarity index 100% rename from assets/icon-return.svg rename to get-yours-shopify-theme/assets/icon-return.svg diff --git a/assets/icon-ruler.svg b/get-yours-shopify-theme/assets/icon-ruler.svg similarity index 100% rename from assets/icon-ruler.svg rename to get-yours-shopify-theme/assets/icon-ruler.svg diff --git a/assets/icon-search.svg b/get-yours-shopify-theme/assets/icon-search.svg similarity index 100% rename from assets/icon-search.svg rename to get-yours-shopify-theme/assets/icon-search.svg diff --git a/assets/icon-serving-dish.svg b/get-yours-shopify-theme/assets/icon-serving-dish.svg similarity index 100% rename from assets/icon-serving-dish.svg rename to get-yours-shopify-theme/assets/icon-serving-dish.svg diff --git a/assets/icon-share.svg b/get-yours-shopify-theme/assets/icon-share.svg similarity index 100% rename from assets/icon-share.svg rename to get-yours-shopify-theme/assets/icon-share.svg diff --git a/assets/icon-shirt.svg b/get-yours-shopify-theme/assets/icon-shirt.svg similarity index 100% rename from assets/icon-shirt.svg rename to get-yours-shopify-theme/assets/icon-shirt.svg diff --git a/assets/icon-shoe.svg b/get-yours-shopify-theme/assets/icon-shoe.svg similarity index 100% rename from assets/icon-shoe.svg rename to get-yours-shopify-theme/assets/icon-shoe.svg diff --git a/assets/icon-shopify.svg b/get-yours-shopify-theme/assets/icon-shopify.svg similarity index 100% rename from assets/icon-shopify.svg rename to get-yours-shopify-theme/assets/icon-shopify.svg diff --git a/assets/icon-silhouette.svg b/get-yours-shopify-theme/assets/icon-silhouette.svg similarity index 100% rename from assets/icon-silhouette.svg rename to get-yours-shopify-theme/assets/icon-silhouette.svg diff --git a/assets/icon-snapchat.svg b/get-yours-shopify-theme/assets/icon-snapchat.svg similarity index 100% rename from assets/icon-snapchat.svg rename to get-yours-shopify-theme/assets/icon-snapchat.svg diff --git a/assets/icon-snowflake.svg b/get-yours-shopify-theme/assets/icon-snowflake.svg similarity index 100% rename from assets/icon-snowflake.svg rename to get-yours-shopify-theme/assets/icon-snowflake.svg diff --git a/assets/icon-star.svg b/get-yours-shopify-theme/assets/icon-star.svg similarity index 100% rename from assets/icon-star.svg rename to get-yours-shopify-theme/assets/icon-star.svg diff --git a/assets/icon-stopwatch.svg b/get-yours-shopify-theme/assets/icon-stopwatch.svg similarity index 100% rename from assets/icon-stopwatch.svg rename to get-yours-shopify-theme/assets/icon-stopwatch.svg diff --git a/assets/icon-success.svg b/get-yours-shopify-theme/assets/icon-success.svg similarity index 100% rename from assets/icon-success.svg rename to get-yours-shopify-theme/assets/icon-success.svg diff --git a/assets/icon-tick.svg b/get-yours-shopify-theme/assets/icon-tick.svg similarity index 100% rename from assets/icon-tick.svg rename to get-yours-shopify-theme/assets/icon-tick.svg diff --git a/assets/icon-tiktok.svg b/get-yours-shopify-theme/assets/icon-tiktok.svg similarity index 100% rename from assets/icon-tiktok.svg rename to get-yours-shopify-theme/assets/icon-tiktok.svg diff --git a/assets/icon-truck.svg b/get-yours-shopify-theme/assets/icon-truck.svg similarity index 100% rename from assets/icon-truck.svg rename to get-yours-shopify-theme/assets/icon-truck.svg diff --git a/assets/icon-tumblr.svg b/get-yours-shopify-theme/assets/icon-tumblr.svg similarity index 100% rename from assets/icon-tumblr.svg rename to get-yours-shopify-theme/assets/icon-tumblr.svg diff --git a/assets/icon-twitter.svg b/get-yours-shopify-theme/assets/icon-twitter.svg similarity index 100% rename from assets/icon-twitter.svg rename to get-yours-shopify-theme/assets/icon-twitter.svg diff --git a/assets/icon-unavailable.svg b/get-yours-shopify-theme/assets/icon-unavailable.svg similarity index 100% rename from assets/icon-unavailable.svg rename to get-yours-shopify-theme/assets/icon-unavailable.svg diff --git a/assets/icon-vimeo.svg b/get-yours-shopify-theme/assets/icon-vimeo.svg similarity index 100% rename from assets/icon-vimeo.svg rename to get-yours-shopify-theme/assets/icon-vimeo.svg diff --git a/assets/icon-warning.svg b/get-yours-shopify-theme/assets/icon-warning.svg similarity index 100% rename from assets/icon-warning.svg rename to get-yours-shopify-theme/assets/icon-warning.svg diff --git a/assets/icon-washing.svg b/get-yours-shopify-theme/assets/icon-washing.svg similarity index 100% rename from assets/icon-washing.svg rename to get-yours-shopify-theme/assets/icon-washing.svg diff --git a/assets/icon-youtube.svg b/get-yours-shopify-theme/assets/icon-youtube.svg similarity index 100% rename from assets/icon-youtube.svg rename to get-yours-shopify-theme/assets/icon-youtube.svg diff --git a/assets/icon-zoom.svg b/get-yours-shopify-theme/assets/icon-zoom.svg similarity index 100% rename from assets/icon-zoom.svg rename to get-yours-shopify-theme/assets/icon-zoom.svg diff --git a/assets/loading-spinner.svg b/get-yours-shopify-theme/assets/loading-spinner.svg similarity index 100% rename from assets/loading-spinner.svg rename to get-yours-shopify-theme/assets/loading-spinner.svg diff --git a/assets/localization-form.js b/get-yours-shopify-theme/assets/localization-form.js similarity index 100% rename from assets/localization-form.js rename to get-yours-shopify-theme/assets/localization-form.js diff --git a/assets/magnify.js b/get-yours-shopify-theme/assets/magnify.js similarity index 100% rename from assets/magnify.js rename to get-yours-shopify-theme/assets/magnify.js diff --git a/assets/main-search.js b/get-yours-shopify-theme/assets/main-search.js similarity index 100% rename from assets/main-search.js rename to get-yours-shopify-theme/assets/main-search.js diff --git a/assets/mask-arch.svg b/get-yours-shopify-theme/assets/mask-arch.svg similarity index 100% rename from assets/mask-arch.svg rename to get-yours-shopify-theme/assets/mask-arch.svg diff --git a/assets/mask-blobs.css b/get-yours-shopify-theme/assets/mask-blobs.css similarity index 100% rename from assets/mask-blobs.css rename to get-yours-shopify-theme/assets/mask-blobs.css diff --git a/assets/media-gallery.js b/get-yours-shopify-theme/assets/media-gallery.js similarity index 100% rename from assets/media-gallery.js rename to get-yours-shopify-theme/assets/media-gallery.js diff --git a/assets/newsletter-section.css b/get-yours-shopify-theme/assets/newsletter-section.css similarity index 100% rename from assets/newsletter-section.css rename to get-yours-shopify-theme/assets/newsletter-section.css diff --git a/assets/password-modal.js b/get-yours-shopify-theme/assets/password-modal.js similarity index 100% rename from assets/password-modal.js rename to get-yours-shopify-theme/assets/password-modal.js diff --git a/assets/pickup-availability.js b/get-yours-shopify-theme/assets/pickup-availability.js similarity index 100% rename from assets/pickup-availability.js rename to get-yours-shopify-theme/assets/pickup-availability.js diff --git a/assets/predictive-search.js b/get-yours-shopify-theme/assets/predictive-search.js similarity index 100% rename from assets/predictive-search.js rename to get-yours-shopify-theme/assets/predictive-search.js diff --git a/assets/price-per-item.js b/get-yours-shopify-theme/assets/price-per-item.js similarity index 100% rename from assets/price-per-item.js rename to get-yours-shopify-theme/assets/price-per-item.js diff --git a/assets/product-form.js b/get-yours-shopify-theme/assets/product-form.js similarity index 100% rename from assets/product-form.js rename to get-yours-shopify-theme/assets/product-form.js diff --git a/assets/product-info.js b/get-yours-shopify-theme/assets/product-info.js similarity index 100% rename from assets/product-info.js rename to get-yours-shopify-theme/assets/product-info.js diff --git a/assets/product-modal.js b/get-yours-shopify-theme/assets/product-modal.js similarity index 100% rename from assets/product-modal.js rename to get-yours-shopify-theme/assets/product-modal.js diff --git a/assets/product-model.js b/get-yours-shopify-theme/assets/product-model.js similarity index 100% rename from assets/product-model.js rename to get-yours-shopify-theme/assets/product-model.js diff --git a/assets/pubsub.js b/get-yours-shopify-theme/assets/pubsub.js similarity index 100% rename from assets/pubsub.js rename to get-yours-shopify-theme/assets/pubsub.js diff --git a/assets/quantity-popover.css b/get-yours-shopify-theme/assets/quantity-popover.css similarity index 100% rename from assets/quantity-popover.css rename to get-yours-shopify-theme/assets/quantity-popover.css diff --git a/assets/quantity-popover.js b/get-yours-shopify-theme/assets/quantity-popover.js similarity index 100% rename from assets/quantity-popover.js rename to get-yours-shopify-theme/assets/quantity-popover.js diff --git a/assets/quick-add-bulk.js b/get-yours-shopify-theme/assets/quick-add-bulk.js similarity index 100% rename from assets/quick-add-bulk.js rename to get-yours-shopify-theme/assets/quick-add-bulk.js diff --git a/assets/quick-add.css b/get-yours-shopify-theme/assets/quick-add.css similarity index 100% rename from assets/quick-add.css rename to get-yours-shopify-theme/assets/quick-add.css diff --git a/assets/quick-add.js b/get-yours-shopify-theme/assets/quick-add.js similarity index 100% rename from assets/quick-add.js rename to get-yours-shopify-theme/assets/quick-add.js diff --git a/assets/quick-order-list.css b/get-yours-shopify-theme/assets/quick-order-list.css similarity index 100% rename from assets/quick-order-list.css rename to get-yours-shopify-theme/assets/quick-order-list.css diff --git a/assets/quick-order-list.js b/get-yours-shopify-theme/assets/quick-order-list.js similarity index 100% rename from assets/quick-order-list.js rename to get-yours-shopify-theme/assets/quick-order-list.js diff --git a/assets/recipient-form.js b/get-yours-shopify-theme/assets/recipient-form.js similarity index 100% rename from assets/recipient-form.js rename to get-yours-shopify-theme/assets/recipient-form.js diff --git a/assets/search-form.js b/get-yours-shopify-theme/assets/search-form.js similarity index 100% rename from assets/search-form.js rename to get-yours-shopify-theme/assets/search-form.js diff --git a/assets/section-blog-post.css b/get-yours-shopify-theme/assets/section-blog-post.css similarity index 100% rename from assets/section-blog-post.css rename to get-yours-shopify-theme/assets/section-blog-post.css diff --git a/assets/section-collection-list.css b/get-yours-shopify-theme/assets/section-collection-list.css similarity index 100% rename from assets/section-collection-list.css rename to get-yours-shopify-theme/assets/section-collection-list.css diff --git a/assets/section-contact-form.css b/get-yours-shopify-theme/assets/section-contact-form.css similarity index 100% rename from assets/section-contact-form.css rename to get-yours-shopify-theme/assets/section-contact-form.css diff --git a/assets/section-email-signup-banner.css b/get-yours-shopify-theme/assets/section-email-signup-banner.css similarity index 100% rename from assets/section-email-signup-banner.css rename to get-yours-shopify-theme/assets/section-email-signup-banner.css diff --git a/assets/section-featured-blog.css b/get-yours-shopify-theme/assets/section-featured-blog.css similarity index 100% rename from assets/section-featured-blog.css rename to get-yours-shopify-theme/assets/section-featured-blog.css diff --git a/assets/section-featured-product.css b/get-yours-shopify-theme/assets/section-featured-product.css similarity index 100% rename from assets/section-featured-product.css rename to get-yours-shopify-theme/assets/section-featured-product.css diff --git a/assets/section-footer.css b/get-yours-shopify-theme/assets/section-footer.css similarity index 100% rename from assets/section-footer.css rename to get-yours-shopify-theme/assets/section-footer.css diff --git a/assets/section-image-banner.css b/get-yours-shopify-theme/assets/section-image-banner.css similarity index 100% rename from assets/section-image-banner.css rename to get-yours-shopify-theme/assets/section-image-banner.css diff --git a/assets/section-main-blog.css b/get-yours-shopify-theme/assets/section-main-blog.css similarity index 100% rename from assets/section-main-blog.css rename to get-yours-shopify-theme/assets/section-main-blog.css diff --git a/assets/section-main-page.css b/get-yours-shopify-theme/assets/section-main-page.css similarity index 100% rename from assets/section-main-page.css rename to get-yours-shopify-theme/assets/section-main-page.css diff --git a/assets/section-main-product.css b/get-yours-shopify-theme/assets/section-main-product.css similarity index 100% rename from assets/section-main-product.css rename to get-yours-shopify-theme/assets/section-main-product.css diff --git a/assets/section-multicolumn.css b/get-yours-shopify-theme/assets/section-multicolumn.css similarity index 100% rename from assets/section-multicolumn.css rename to get-yours-shopify-theme/assets/section-multicolumn.css diff --git a/assets/section-password.css b/get-yours-shopify-theme/assets/section-password.css similarity index 100% rename from assets/section-password.css rename to get-yours-shopify-theme/assets/section-password.css diff --git a/assets/section-related-products.css b/get-yours-shopify-theme/assets/section-related-products.css similarity index 100% rename from assets/section-related-products.css rename to get-yours-shopify-theme/assets/section-related-products.css diff --git a/assets/section-rich-text.css b/get-yours-shopify-theme/assets/section-rich-text.css similarity index 100% rename from assets/section-rich-text.css rename to get-yours-shopify-theme/assets/section-rich-text.css diff --git a/assets/share.js b/get-yours-shopify-theme/assets/share.js similarity index 100% rename from assets/share.js rename to get-yours-shopify-theme/assets/share.js diff --git a/assets/show-more.js b/get-yours-shopify-theme/assets/show-more.js similarity index 100% rename from assets/show-more.js rename to get-yours-shopify-theme/assets/show-more.js diff --git a/assets/sparkle.gif b/get-yours-shopify-theme/assets/sparkle.gif similarity index 100% rename from assets/sparkle.gif rename to get-yours-shopify-theme/assets/sparkle.gif diff --git a/assets/square.svg b/get-yours-shopify-theme/assets/square.svg similarity index 100% rename from assets/square.svg rename to get-yours-shopify-theme/assets/square.svg diff --git a/assets/standard-actions-override.js b/get-yours-shopify-theme/assets/standard-actions-override.js similarity index 100% rename from assets/standard-actions-override.js rename to get-yours-shopify-theme/assets/standard-actions-override.js diff --git a/assets/template-collection.css b/get-yours-shopify-theme/assets/template-collection.css similarity index 100% rename from assets/template-collection.css rename to get-yours-shopify-theme/assets/template-collection.css diff --git a/assets/template-giftcard.css b/get-yours-shopify-theme/assets/template-giftcard.css similarity index 100% rename from assets/template-giftcard.css rename to get-yours-shopify-theme/assets/template-giftcard.css diff --git a/assets/theme-editor.js b/get-yours-shopify-theme/assets/theme-editor.js similarity index 100% rename from assets/theme-editor.js rename to get-yours-shopify-theme/assets/theme-editor.js diff --git a/assets/video-section.css b/get-yours-shopify-theme/assets/video-section.css similarity index 100% rename from assets/video-section.css rename to get-yours-shopify-theme/assets/video-section.css diff --git a/config/settings_data.json b/get-yours-shopify-theme/config/settings_data.json similarity index 83% rename from config/settings_data.json rename to get-yours-shopify-theme/config/settings_data.json index d6c15957e01..90dd3336b79 100644 --- a/config/settings_data.json +++ b/get-yours-shopify-theme/config/settings_data.json @@ -2,61 +2,61 @@ "current": "Dawn", "presets": { "Dawn": { - "logo_width": 90, + "logo_width": 150, "color_schemes": { "scheme-1": { "settings": { "background": "#FFFFFF", "background_gradient": "", - "text": "#121212", - "button": "#121212", + "text": "#1F2933", + "button": "#0081D8", "button_label": "#FFFFFF", - "secondary_button_label": "#121212", - "shadow": "#121212" + "secondary_button_label": "#0081D8", + "shadow": "#063A66" } }, "scheme-2": { "settings": { - "background": "#F3F3F3", + "background": "#F5F7FA", "background_gradient": "", - "text": "#121212", - "button": "#121212", - "button_label": "#F3F3F3", - "secondary_button_label": "#121212", - "shadow": "#121212" + "text": "#1F2933", + "button": "#0081D8", + "button_label": "#FFFFFF", + "secondary_button_label": "#0081D8", + "shadow": "#063A66" } }, "scheme-3": { "settings": { - "background": "#242833", + "background": "#063A66", "background_gradient": "", "text": "#FFFFFF", - "button": "#FFFFFF", - "button_label": "#000000", + "button": "#0081D8", + "button_label": "#FFFFFF", "secondary_button_label": "#FFFFFF", - "shadow": "#121212" + "shadow": "#063A66" } }, "scheme-4": { "settings": { - "background": "#121212", + "background": "#FFF4CC", "background_gradient": "", - "text": "#FFFFFF", - "button": "#FFFFFF", - "button_label": "#121212", - "secondary_button_label": "#FFFFFF", - "shadow": "#121212" + "text": "#1F2933", + "button": "#0081D8", + "button_label": "#FFFFFF", + "secondary_button_label": "#073A66", + "shadow": "#F5B700" } }, "scheme-5": { "settings": { - "background": "#334FB4", + "background": "#0081D8", "background_gradient": "", "text": "#FFFFFF", - "button": "#FFFFFF", - "button_label": "#334FB4", + "button": "#073A66", + "button_label": "#FFFFFF", "secondary_button_label": "#FFFFFF", - "shadow": "#121212" + "shadow": "#063A66" } } }, @@ -72,7 +72,7 @@ "animations_hover_elements": "none", "buttons_border_thickness": 1, "buttons_border_opacity": 100, - "buttons_radius": 0, + "buttons_radius": 8, "buttons_shadow_opacity": 0, "buttons_shadow_horizontal_offset": 0, "buttons_shadow_vertical_offset": 4, @@ -86,7 +86,7 @@ "variant_pills_shadow_blur": 5, "inputs_border_thickness": 1, "inputs_border_opacity": 55, - "inputs_radius": 0, + "inputs_radius": 8, "inputs_shadow_opacity": 0, "inputs_shadow_horizontal_offset": 0, "inputs_shadow_vertical_offset": 4, @@ -155,8 +155,8 @@ "badge_corner_radius": 40, "sale_badge_color_scheme": "scheme-4", "sold_out_badge_color_scheme": "scheme-3", - "brand_headline": "", - "brand_description": "

", + "brand_headline": "Get Yours", + "brand_description": "

Practical everyday finds for home, office, travel and organising - curated for clean value.

", "brand_image_width": 100, "social_twitter_link": "", "social_facebook_link": "", diff --git a/config/settings_schema.json b/get-yours-shopify-theme/config/settings_schema.json similarity index 100% rename from config/settings_schema.json rename to get-yours-shopify-theme/config/settings_schema.json diff --git a/get-yours-shopify-theme/docs/admin-ready-pages/contact-page-content.md b/get-yours-shopify-theme/docs/admin-ready-pages/contact-page-content.md new file mode 100644 index 00000000000..e23b73fba9b --- /dev/null +++ b/get-yours-shopify-theme/docs/admin-ready-pages/contact-page-content.md @@ -0,0 +1,28 @@ +# Contact + +## Get In Touch + +Use the contact form to send Get Yours a question about an order, delivery, product, payment, return or refund. + +## What To Include + +Including the right details helps us review your request: + +- Your order number, if you have one. +- The name and email address used at checkout. +- The product name and a short description of the issue. +- For delivery queries, the delivery address and any tracking reference available. +- Clear photos of the item and packaging where an item arrived damaged, incorrect or incomplete. + +## Keep Your Details Safe + +Do not send card details, banking passwords, one-time PINs, account passwords or other sensitive payment information by email, social media or the contact form. Payment details should only be entered through the secure checkout process. + +## Related Help + +- Help: `/pages/help` +- Customer Service: `/pages/customer-service` +- Shipping Information: `/pages/shipping-information` +- Returns & Refunds: `/pages/returns-and-refunds` +- Payment Information: `/pages/payment-information` +- FAQ: `/pages/faq` diff --git a/get-yours-shopify-theme/docs/admin-ready-pages/customer-service.md b/get-yours-shopify-theme/docs/admin-ready-pages/customer-service.md new file mode 100644 index 00000000000..7c47ad2ae79 --- /dev/null +++ b/get-yours-shopify-theme/docs/admin-ready-pages/customer-service.md @@ -0,0 +1,33 @@ +# Customer Service + +## We Are Here To Help + +Get Yours aims to make support clear and practical. Contact us when you need help with an order, delivery update, product issue, payment question, return or refund request. + +## What To Include + +Including the right details helps us review your request: + +- Your order number, if you have one. +- The name and email address used at checkout. +- The product name and a brief description of the issue. +- For delivery queries, the delivery address and any tracking reference available. +- For damaged or incorrect items, clear photos of the item and packaging where relevant. + +## Delivery And Tracking Queries + +We can review the order status and any tracking information available for your delivery. Delivery and tracking availability can vary by item, delivery address and fulfilment route. + +## Returns And Refund Queries + +Contact us before sending an item back or starting a refund request. We will review the order details and explain the available next steps under the Returns & Refunds information and policy. + +Please do not send an item back before receiving return instructions from Get Yours. + +## Contact Us + +Use the Contact page to send your request. Do not send card details, banking passwords, one-time PINs, account passwords or other sensitive payment information by email, social media or the contact form. + +- Contact: `/pages/contact` +- Help: `/pages/help` +- FAQ: `/pages/faq` diff --git a/get-yours-shopify-theme/docs/admin-ready-pages/faq.md b/get-yours-shopify-theme/docs/admin-ready-pages/faq.md new file mode 100644 index 00000000000..99513f9e66f --- /dev/null +++ b/get-yours-shopify-theme/docs/admin-ready-pages/faq.md @@ -0,0 +1,62 @@ +# FAQ + +## What is Get Yours? + +Get Yours offers practical finds for home, desk, travel and everyday routines. + +## Where do you deliver? + +Get Yours is launching with delivery within South Africa. + +## How much is delivery? + +Available shipping options and charges are shown at checkout. + +## Do you offer free shipping? + +Free Standard shipping applies to qualifying orders of R770 or more. + +## How long does delivery take? + +Delivery timing depends on the product, destination and available shipping route. Refer to the information available for your order. + +## How do I track my order? + +Where tracking is available, we will share it once the supplier or carrier provides a valid tracking reference. + +## Can I cancel an order? + +Contact Customer Service as soon as possible with your order number. Cancellation options can depend on the stage of your order and the Returns & Refunds information and policy. + +## Can I return an item? + +Please contact us before returning an item. Return eligibility and instructions are set out in the Returns & Refunds information and policy. + +Please do not send an item back before receiving return instructions from Get Yours. + +## What if my item arrives damaged or incorrect? + +Contact Customer Service with your order number, the product details and clear photos of the item and packaging where relevant. + +## Which payment methods do you accept? + +Available payment methods are shown at checkout. + +## Do you sell internationally? + +No. Get Yours is launching in South Africa only. + +## Are all products stocked locally? + +Some items may be fulfilled through supplier partners. Availability and fulfilment routes can vary by item. + +## Why can delivery time vary? + +Delivery timing depends on the product, destination and available shipping route. + +## How do I contact support? + +Use the Contact page or Customer Service page and include your order number if you have one. Do not send card details, banking passwords, one-time PINs, account passwords or other sensitive payment information by email, social media or the contact form. + +- Contact: `/pages/contact` +- Customer Service: `/pages/customer-service` diff --git a/get-yours-shopify-theme/docs/admin-ready-pages/help.md b/get-yours-shopify-theme/docs/admin-ready-pages/help.md new file mode 100644 index 00000000000..58152ee4ddc --- /dev/null +++ b/get-yours-shopify-theme/docs/admin-ready-pages/help.md @@ -0,0 +1,48 @@ +# Help + +## Welcome to Get Yours + +Get Yours brings together practical finds for home, desk, travel and daily routines. This page explains the usual steps from finding an item to getting support after you place an order. + +## Find What You Need + +- Browse Shop All or explore by category. +- Use search if you already know what you need. +- Review product images, price, product information and available options before adding an item to your cart. + +## Place an Order + +1. Add the items you want to your cart. +2. Review the quantity, delivery details and total at checkout. +3. Enter an accurate delivery address and contact information. +4. Choose an available payment method and complete checkout. +5. After your order is successfully placed, you should receive an order confirmation email. + +## Payments + +Available payment methods are shown at checkout. If a payment appears not to have completed, first check whether you received an order confirmation and whether a charge appears on your payment method. + +Only try checkout again after confirming that the original attempt did not create an order or charge. Contact Customer Service if you are unsure. + +## Shipping And Tracking + +Get Yours is launching in South Africa. Shipping options and charges are shown at checkout. Free Standard shipping applies to qualifying orders of R770 or more. + +Delivery timing depends on the product, destination and available shipping route. Where tracking is available, we will share it once the supplier or carrier provides a valid tracking reference. + +## Returns & Refunds + +If there is a problem with an item, contact us first so we can review the order and explain the next steps. Please include your order number, the name and email used at checkout, and clear photos where an item is damaged or incorrect. + +Please do not send an item back before receiving return instructions from Get Yours. + +## Get Support + +For help with an order, delivery, payment or product issue, contact Customer Service with as much useful detail as possible. Do not send card details, banking passwords, one-time PINs, account passwords or other sensitive payment information by email, social media or the contact form. + +- Customer Service: `/pages/customer-service` +- Shipping Information: `/pages/shipping-information` +- Returns & Refunds: `/pages/returns-and-refunds` +- Payment Information: `/pages/payment-information` +- FAQ: `/pages/faq` +- Contact: `/pages/contact` diff --git a/get-yours-shopify-theme/docs/admin-ready-pages/payment-information.md b/get-yours-shopify-theme/docs/admin-ready-pages/payment-information.md new file mode 100644 index 00000000000..94ad520acfb --- /dev/null +++ b/get-yours-shopify-theme/docs/admin-ready-pages/payment-information.md @@ -0,0 +1,25 @@ +# Payment Information + +## Paying For Your Order + +Available payment methods are shown at checkout before you place an order. Only the methods shown for your order are available. Use an available option to complete checkout using the secure checkout process. + +## Secure Checkout + +Payment is processed through Shopify checkout and the payment provider selected at checkout. Get Yours does not ask customers to send card details, banking passwords, one-time PINs, account passwords or other sensitive payment information by email, social media or the contact form. + +## Failed Or Cancelled Payments + +If a payment fails or is cancelled, an order might not be completed. Before trying again, check whether you received an order confirmation or whether a charge appears on your payment method. + +Contact Customer Service if the payment and order status are unclear. + +## Refunds + +Approved refunds are handled through the original payment method where possible, subject to the Returns & Refunds information and policy and payment-provider processes. After a refund is submitted, it may remain pending with the payment provider before it is settled. We cannot guarantee immediate refund settlement. + +## Need Help? + +- Customer Service: `/pages/customer-service` +- Returns & Refunds: `/pages/returns-and-refunds` +- Contact: `/pages/contact` diff --git a/get-yours-shopify-theme/docs/admin-ready-pages/returns-and-refunds.md b/get-yours-shopify-theme/docs/admin-ready-pages/returns-and-refunds.md new file mode 100644 index 00000000000..607a578e438 --- /dev/null +++ b/get-yours-shopify-theme/docs/admin-ready-pages/returns-and-refunds.md @@ -0,0 +1,39 @@ +# Returns & Refunds + +## Contact Us First + +If there is a problem with an item, please contact Get Yours before returning it or requesting a refund. We will review the order details and explain the available next steps. + +Please do not send an item back before receiving return instructions from Get Yours. + +## What To Send Us + +Please include: + +- Your order number. +- The name and email address used at checkout. +- The product name and a short description of the issue. +- Clear photos if an item arrived damaged, incorrect or incomplete. + +## Damaged Or Incorrect Items + +Contact us as soon as possible if an item arrives damaged or is not what you ordered. Photos of the item and packaging may help us assess the issue and advise on the next steps. + +## Change-of-Mind Returns + +Contact Get Yours before returning an item. Return eligibility, instructions and any applicable costs are considered according to the Returns & Refunds information and policy. + +## Refunds + +If a refund is approved, it will be handled through the original payment method where possible, subject to the Returns & Refunds information and policy and payment-provider processes. After a refund is submitted, it may remain pending with the payment provider before it is settled. We cannot guarantee immediate refund settlement. + +## Items That May Not Be Returnable + +Some items may not be eligible for return. Any applicable exclusions will be set out in the Returns & Refunds information and policy. + +## Need Help? + +Contact Customer Service with your order number before sending an item anywhere. + +- Customer Service: `/pages/customer-service` +- Contact: `/pages/contact` diff --git a/get-yours-shopify-theme/docs/admin-ready-pages/shipping-information.md b/get-yours-shopify-theme/docs/admin-ready-pages/shipping-information.md new file mode 100644 index 00000000000..b7a6f659b47 --- /dev/null +++ b/get-yours-shopify-theme/docs/admin-ready-pages/shipping-information.md @@ -0,0 +1,30 @@ +# Shipping Information + +## South Africa Delivery + +Get Yours is launching with delivery within South Africa. Available shipping options and charges are shown at checkout before you complete your order. + +## Shipping Charges + +The shipping charge for your delivery address and order is shown at checkout. Free Standard shipping applies to qualifying orders of R770 or more. + +## Delivery And Tracking + +Delivery timing depends on the product, destination and available shipping route. Where tracking is available, we will share it once the supplier or carrier provides a valid tracking reference. + +## Fulfilment And Delays + +Some items may be fulfilled through supplier partners. This can affect availability, dispatch timing and delivery routes. We will communicate if we need to share an update about your order. + +We do not guarantee supplier stock or delivery timing before an order is confirmed and processed. + +## Your Delivery Address + +Please check your delivery address, contact number and email address carefully at checkout. Contact Customer Service as soon as possible if you notice an error after placing an order. + +## Need Help? + +For an order or tracking query, contact Customer Service with your order number and the name and email used at checkout. + +- Customer Service: `/pages/customer-service` +- Contact: `/pages/contact` diff --git a/get-yours-shopify-theme/docs/content-pages/contact-page-notes.md b/get-yours-shopify-theme/docs/content-pages/contact-page-notes.md new file mode 100644 index 00000000000..51014bba0ad --- /dev/null +++ b/get-yours-shopify-theme/docs/content-pages/contact-page-notes.md @@ -0,0 +1,32 @@ +# Contact Page Improvement Notes + +The existing contact page should remain simple: name, email, phone number, message and one clear Send action. + +## Before Publishing + +- Add the approved support email: [CONFIRM BEFORE LAUNCH] Confirm support email address. +- Add approved support hours: [CONFIRM BEFORE LAUNCH] Confirm support hours. +- Confirm the Shopify contact-form recipient inbox is monitored. +- Add calm response-time wording only after the operational target is confirmed: [CONFIRM BEFORE LAUNCH] Confirm response-time wording. + +## Helpful Guidance Near The Form + +Ask customers to include: + +- Their order number, if applicable. +- The name and email address used at checkout. +- The product name and a short description of the issue. +- Photos for damaged or incorrect items where relevant. + +## Related Links + +Link the Contact page to: + +- Help: `/pages/help` +- Customer Service: `/pages/customer-service` +- Shipping Information: `/pages/shipping-information` +- Returns & Refunds: `/pages/returns-and-refunds` +- Payment Information: `/pages/payment-information` +- FAQ: `/pages/faq` + +Do not publish a WhatsApp number, response-time claim or delivery promise until it has been approved operationally. diff --git a/get-yours-shopify-theme/docs/content-pages/customer-service.md b/get-yours-shopify-theme/docs/content-pages/customer-service.md new file mode 100644 index 00000000000..5f8b2ae2030 --- /dev/null +++ b/get-yours-shopify-theme/docs/content-pages/customer-service.md @@ -0,0 +1,36 @@ +# Customer Service + +## We Are Here To Help + +Get Yours aims to make support clear and practical. Contact us when you need help with an order, delivery update, product issue, payment question, return or refund request. + +## What To Include + +Including the right details helps us review your request efficiently: + +- Your order number, if you have one. +- The name and email address used at checkout. +- The product name and a brief description of the issue. +- For delivery queries, the delivery address and any tracking reference available. +- For damaged or incorrect items, clear photos of the item and packaging where relevant. + +## Delivery And Tracking Queries + +We can check the order status and any tracking information available for your delivery. Delivery timing depends on the product, destination and available shipping route. + +[CONFIRM BEFORE LAUNCH] Confirm delivery estimates. + +## Returns And Refund Queries + +Contact us before sending an item back or starting a refund request. We will review the order details and explain the next steps under the approved Returns & Refunds information and policy. + +[CONFIRM BEFORE LAUNCH] Confirm return rules. + +## Contact Details + +- Support email: [CONFIRM BEFORE LAUNCH] Confirm support email address. +- Support hours: [CONFIRM BEFORE LAUNCH] Confirm support hours. +- Response target: [CONFIRM BEFORE LAUNCH] Confirm response target. +- Contact form: `/pages/contact` + +Please do not send card details, banking passwords, one-time PINs, account passwords or other sensitive payment information by email, social media or the contact form. diff --git a/get-yours-shopify-theme/docs/content-pages/faq.md b/get-yours-shopify-theme/docs/content-pages/faq.md new file mode 100644 index 00000000000..470dbb4276c --- /dev/null +++ b/get-yours-shopify-theme/docs/content-pages/faq.md @@ -0,0 +1,72 @@ +# FAQ + +## What is Get Yours? + +Get Yours offers practical finds for home, desk, travel and everyday routines. + +## Where do you deliver? + +Get Yours is launching with delivery within South Africa. + +## How much is delivery? + +Available shipping options and charges are shown at checkout. + +[CONFIRM BEFORE LAUNCH] Confirm shipping rates. + +## Do you offer free shipping? + +Free Standard shipping applies to qualifying orders of R770 or more. + +[CONFIRM BEFORE LAUNCH] Confirm whether free shipping is enabled. + +## How long does delivery take? + +Delivery timing depends on the product, destination and available shipping route. + +[CONFIRM BEFORE LAUNCH] Confirm delivery estimates. + +## How do I track my order? + +Where tracking is available, we will share it once the supplier or carrier provides a valid tracking reference. + +## Can I cancel an order? + +Contact Customer Service as soon as possible with your order number. Cancellation options depend on the order stage and the approved policy. + +[CONFIRM BEFORE LAUNCH] Confirm cancellation cutoff and rules. + +## Can I return an item? + +Please contact us before returning an item. Return eligibility and instructions are set out in the final Returns/Refund Policy. + +[CONFIRM BEFORE LAUNCH] Confirm return rules. + +## What if my item arrives damaged or incorrect? + +Contact Customer Service with your order number, the product details and clear photos of the item and packaging where relevant. + +## Which payment methods do you accept? + +Available payment methods are shown at checkout. + +[CONFIRM BEFORE LAUNCH] Confirm active payment methods. + +## Do you sell internationally? + +No. Get Yours is launching in South Africa only. + +## Are all products stocked locally? + +Some items may be fulfilled through supplier partners. Availability and fulfilment routes can vary by item. + +## Why can delivery time vary? + +Delivery timing depends on the product, destination and available shipping route. + +## How do I contact support? + +Use the Contact page or Customer Service page and include your order number if you have one. + +- Contact: `/pages/contact` +- Customer Service: `/pages/customer-service` diff --git a/get-yours-shopify-theme/docs/content-pages/help.md b/get-yours-shopify-theme/docs/content-pages/help.md new file mode 100644 index 00000000000..1b369e0a629 --- /dev/null +++ b/get-yours-shopify-theme/docs/content-pages/help.md @@ -0,0 +1,62 @@ +# Help + +## Welcome to Get Yours + +Get Yours brings together practical finds for home, desk, travel and daily routines. This page explains the usual steps from finding an item to getting support after you place an order. + +## Find What You Need + +- Browse the Shop All page or use the collections to explore by category. +- Use search if you already know what you need. +- Review product images, price, product information and available options before adding an item to your cart. + +## Place an Order + +1. Add the items you want to your cart. +2. Review the quantity, delivery details and total at checkout. +3. Enter an accurate delivery address and contact information. +4. Choose an available payment method and complete checkout. +5. After your order is successfully placed, you should receive an order confirmation email. + +## Payment + +Available payment methods are shown at checkout. + +[CONFIRM BEFORE LAUNCH] Confirm active payment methods. + +If a payment appears not to have completed, first check whether you received an order confirmation and whether a charge appears on your payment method. + +Only try checkout again after confirming that the original attempt did not create an order or charge. Contact Customer Service if you are unsure. + +## Delivery And Tracking + +Get Yours is launching with delivery within South Africa. + +- Shipping options and charges are shown at checkout. +- Free Standard shipping applies to qualifying orders of R770 or more. +- Delivery timing depends on the product, destination and available shipping route. Where tracking is available, we will share it once the supplier or carrier provides a valid tracking reference. + +[CONFIRM BEFORE LAUNCH] Confirm delivery estimates. + +[CONFIRM BEFORE LAUNCH] Confirm tracking process. + +## Returns & Refunds + +If there is a problem with an item, contact us first so we can review the order and the next steps. + +Please include your order number, the name and email used at checkout, and clear photos where an item is damaged or incorrect. + +Read the Returns & Refunds information page before requesting a return or refund. + +## Get Support + +For help with an order, delivery, payment or product issue, contact customer support with as much useful detail as possible. Do not send card details, banking passwords, one-time PINs, account passwords or other sensitive payment information by email, social media or the contact form. + +- Customer Service: `/pages/customer-service` +- Shipping Information: `/pages/shipping-information` +- Returns & Refunds: `/pages/returns-and-refunds` +- Payment Information: `/pages/payment-information` +- FAQ: `/pages/faq` +- Contact: `/pages/contact` + +[CONFIRM BEFORE LAUNCH] Confirm support email address. diff --git a/get-yours-shopify-theme/docs/content-pages/payment-information.md b/get-yours-shopify-theme/docs/content-pages/payment-information.md new file mode 100644 index 00000000000..8d250f5229e --- /dev/null +++ b/get-yours-shopify-theme/docs/content-pages/payment-information.md @@ -0,0 +1,29 @@ +# Payment Information + +## Paying For Your Order + +Available payment methods are shown at Shopify checkout before you place an order. Only the methods shown for your order are available. + +[CONFIRM BEFORE LAUNCH] Confirm PayPal inclusion before any public mention. + +## Secure Checkout + +Payment is processed through Shopify checkout and the payment provider selected at checkout. Get Yours does not ask customers to send card details, banking passwords, one-time PINs, account passwords or other sensitive payment information by email, social media or the contact form. + +## Failed Or Cancelled Payments + +If a payment fails or is cancelled, an order might not be completed. Before trying again, check whether you received an order confirmation or whether a charge appears on your payment method. + +Contact Customer Service if the payment and order status are unclear. + +## Refunds + +Approved refunds are handled through the original payment method where possible, subject to the final Returns & Refunds information and policy and payment-provider processes. After a refund is submitted, it may remain pending with the payment provider before it is settled. We cannot guarantee immediate refund settlement. + +[CONFIRM BEFORE LAUNCH] Confirm refund process. + +## Need Help? + +- Customer Service: `/pages/customer-service` +- Returns & Refunds: `/pages/returns-and-refunds` +- Contact: `/pages/contact` diff --git a/get-yours-shopify-theme/docs/content-pages/returns-and-refunds.md b/get-yours-shopify-theme/docs/content-pages/returns-and-refunds.md new file mode 100644 index 00000000000..71e04068b3a --- /dev/null +++ b/get-yours-shopify-theme/docs/content-pages/returns-and-refunds.md @@ -0,0 +1,47 @@ +# Returns & Refunds + +## Contact Us First + +If there is a problem with an item, please contact Get Yours before returning it or requesting a refund. We will review the order details and explain the available next steps. + +Please do not send an item back before receiving return instructions from Get Yours. + +## What To Send Us + +Please include: + +- Your order number. +- The name and email address used at checkout. +- The product name and a short description of the issue. +- Clear photos if an item arrived damaged, incorrect or incomplete. + +## Damaged Or Incorrect Items + +Contact us as soon as possible if an item arrives damaged or is not what you ordered. Photos of the item and packaging may help us assess the issue and advise on the next steps. + +[CONFIRM BEFORE LAUNCH] Confirm damaged or incorrect item reporting window and evidence requirements. + +## Change-of-Mind Returns + +[CONFIRM BEFORE LAUNCH] Confirm return rules. + +Eligibility, return instructions and any costs for change-of-mind returns must be confirmed in the final Returns & Refunds information and policy before publication. + +## Refunds + +If a refund is approved, it will be handled through the original payment method where possible, subject to the final policy and payment-provider processes. After a refund is submitted, it may remain pending with the payment provider before it is settled. We cannot guarantee immediate refund settlement. + +[CONFIRM BEFORE LAUNCH] Confirm refund processing times. + +## Items That May Not Be Returnable + +[CONFIRM BEFORE LAUNCH] Confirm non-returnable items. + +Any category-specific exclusions must be reviewed and included in the final policy before launch. + +## Need Help? + +Contact Customer Service with your order number before sending an item anywhere. + +- Customer Service: `/pages/customer-service` +- Contact: `/pages/contact` diff --git a/get-yours-shopify-theme/docs/content-pages/shipping-information.md b/get-yours-shopify-theme/docs/content-pages/shipping-information.md new file mode 100644 index 00000000000..170209d3451 --- /dev/null +++ b/get-yours-shopify-theme/docs/content-pages/shipping-information.md @@ -0,0 +1,48 @@ +# Shipping Information + +## South Africa Delivery + +Get Yours is launching with delivery within South Africa. Available shipping options and charges are shown at checkout before you complete your order. + +## Shipping Charges + +Standard shipping is planned for launch. The final shipping charge is shown at checkout for your delivery address and order. + +Free Standard shipping applies to qualifying orders of R770 or more. + +[CONFIRM BEFORE LAUNCH] Confirm shipping rates. + +[CONFIRM BEFORE LAUNCH] Confirm that free Standard shipping applies to qualifying orders of R770 or more. + +## Delivery Timing + +Delivery timing depends on the product, destination and available shipping route. Where tracking is available, we will share it once the supplier or carrier provides a valid tracking reference. + +[CONFIRM BEFORE LAUNCH] Confirm delivery estimates. + +## Tracking + +Where tracking is available, we will share it once the supplier or carrier provides a valid tracking reference. + +[CONFIRM BEFORE LAUNCH] Confirm tracking process. + +[CONFIRM BEFORE LAUNCH] Confirm tax/VAT treatment before publication. + +[CONFIRM BEFORE LAUNCH] Confirm customs/import treatment before publication. + +## Fulfilment And Delays + +Some items may be fulfilled through supplier partners. This can affect availability, dispatch timing and delivery routes. We will communicate if we need to share an update about your order. + +We do not guarantee supplier stock or delivery timing before an order is confirmed and processed. + +## Your Delivery Address + +Please check your delivery address, contact number and email address carefully at checkout. Contact support as soon as possible if you notice an error after placing an order. + +## Need Help? + +For an order or tracking query, contact Customer Service with your order number and the name and email used at checkout. + +- Customer Service: `/pages/customer-service` +- Contact: `/pages/contact` diff --git a/get-yours-shopify-theme/docs/dawn-conversion-plan.md b/get-yours-shopify-theme/docs/dawn-conversion-plan.md new file mode 100644 index 00000000000..31f755bd24d --- /dev/null +++ b/get-yours-shopify-theme/docs/dawn-conversion-plan.md @@ -0,0 +1,687 @@ +# Dawn Conversion Plan + +## 1. Executive Summary + +The frozen Get Yours static prototype is ready to become the Shopify theme blueprint. It has a stable visual direction, a clear ecommerce homepage flow, reusable product card patterns, a credible header/footer rhythm, and enough page coverage to guide Shopify Online Store 2.0 templates. + +Safest conversion strategy: + +- Use Dawn as the base theme. +- Preserve Dawn's ecommerce logic wherever possible, especially cart, product forms, variants, media, filtering, search, accessibility and Shopify editor support. +- Port the Get Yours visual system into Dawn gradually through theme settings, CSS variables, section styling and snippets. +- Convert repeated static markup into Shopify sections/snippets instead of copying static HTML directly. +- Replace static sample data with Shopify products, collections, pages, navigation menus, metafields and theme settings. + +Why Dawn instead of building from scratch: + +- Dawn already implements Shopify-native product forms, cart behavior, section architecture, accessibility patterns, responsive images, search, filtering and theme editor conventions. +- Starting from Dawn reduces risk around checkout handoff, cart state, variants, selling plans, dynamic checkout buttons and Online Store 2.0 editor compatibility. +- The Get Yours design does not require a custom storefront architecture; it needs a polished ecommerce theme with brand-specific sections. +- Building from scratch would spend time recreating solved Shopify behavior and increase launch risk. + +Primary principle: keep the Get Yours visual direction, but let Shopify/Dawn own the commerce mechanics. + +## 2. Recommended Shopify Theme Architecture + +Target structure: + +```text +sections/ + announcement-bar.liquid + header.liquid + gy-promo-grid-hero.liquid + gy-category-grid.liquid + gy-featured-collection.liquid + gy-trust-grid.liquid + main-collection-product-grid.liquid + main-product.liquid + cart-drawer.liquid + main-cart-items.liquid + main-cart-footer.liquid + main-search.liquid + main-page.liquid + contact-form.liquid + footer.liquid + +snippets/ + gy-product-card.liquid + gy-price.liquid + gy-product-badge.liquid + gy-delivery-label.liquid + gy-trust-item.liquid + gy-icon.liquid + gy-breadcrumbs.liquid + gy-product-tabs.liquid + gy-free-shipping-progress.liquid + +templates/ + index.json + collection.json + product.json + cart.json + search.json + page.json + page.contact.json + page.faq.json + +assets/ + gy-theme.css + gy-theme.js + get-yours-logo.svg + get-yours-logo-reversed.svg + hero/category/product media as Shopify assets only when not product media + +config/ + settings_schema.json + settings_data.json + +locales/ + en.default.json +``` + +Architecture guidance: + +- Prefer JSON templates and configurable sections over hard-coded Liquid templates. +- Keep Dawn's existing files where behavior is already correct; customize carefully. +- Put Get Yours visual tokens in theme settings and CSS custom properties. +- Use snippets for repeated product cards, badges, delivery labels, trust items and breadcrumbs. +- Keep merchant-editable text in section schema settings, page content or metafields rather than hard-coded strings. + +## 3. Section Mapping + +### Announcement Bar + +- Section filename: `sections/announcement-bar.liquid` or Dawn's existing announcement section if present. +- Purpose: show the free-shipping message and other calm trust notices. +- Schema settings needed: text, link, background color, text color, enable/disable, optional rotation only if needed later. +- Block settings: optional multiple announcements, but start with one. +- Shopify data source: theme settings/section settings. +- Type: static/editor-driven. + +Recommendation: preserve `FREE STANDARD SHIPPING ON ORDERS OVER R500` as a merchant-editable default. + +### Header + +- Section filename: `sections/header.liquid`. +- Purpose: logo, search, account, wishlist decision, cart, navigation and mobile nav. +- Schema settings needed: logo image, logo width, menu selector, enable sticky header, show search, show account, show cart total, mobile behavior options. +- Block settings: optional mega-menu/category blocks later. +- Shopify data source: linklists/menus, routes, cart, customer, settings. +- Type: dynamic Shopify navigation and cart state. + +Recommendation: start from Dawn header behavior and restyle it to match Get Yours. Do not rebuild search/cart/account logic from scratch. + +### Promo-Grid Hero + +- Section filename: `sections/gy-promo-grid-hero.liquid`. +- Purpose: homepage hero with one large promo tile and two stacked supporting tiles. +- Schema settings needed: section background, main image, main eyebrow/pill, heading, text, button label/link, tile images/headings/buttons, image overlay strength. +- Block settings: three promo tile blocks if flexible ordering is needed. +- Shopify data source: section settings and image picker; optional collection links. +- Type: static/editor-driven with collection links. + +Recommendation: keep it as a custom Get Yours section because Dawn does not have this exact promo-grid composition. + +### Shop by Category + +- Section filename: `sections/gy-category-grid.liquid`. +- Purpose: six category tiles for browsing. +- Schema settings needed: heading, subtitle, view-all link, icon style, columns, spacing. +- Block settings: category label, icon name, collection/link, optional product count toggle. +- Shopify data source: collections and section blocks. +- Type: merchant-configured, collection-linked. + +Recommendation: use blocks for each category so merchants can reorder categories without editing code. + +### Featured Practical Finds + +- Section filename: `sections/gy-featured-collection.liquid`. +- Purpose: featured collection rail using Get Yours product card. +- Schema settings needed: heading, subtitle, collection selector, product limit, show view-all link, view-all label, background style. +- Block settings: not needed if collection-driven. +- Shopify data source: selected collection products. +- Type: collection-driven. + +Recommendation: this should become the reusable homepage product rail section. + +### New Arrivals + +- Section filename: `sections/gy-featured-collection.liquid`. +- Purpose: collection rail for new products. +- Schema settings needed: same as featured rail. +- Shopify data source: selected "New Arrivals" collection or automated collection sorted by created date. +- Type: collection-driven. + +### Best Sellers + +- Section filename: `sections/gy-featured-collection.liquid`. +- Purpose: best-selling product rail. +- Schema settings needed: same as featured rail. +- Shopify data source: selected collection manually/automatically merchandised as best sellers. +- Type: collection-driven. + +Note: Shopify best-seller logic may require manual collection merchandising unless using reporting/app logic. + +### Home Organisation Picks + +- Section filename: `sections/gy-featured-collection.liquid`. +- Purpose: category-specific collection rail. +- Schema settings needed: same as featured rail. +- Shopify data source: Home Organisation collection. +- Type: collection-driven. + +### Office & Desk Essentials + +- Section filename: `sections/gy-featured-collection.liquid`. +- Purpose: category-specific collection rail. +- Schema settings needed: same as featured rail. +- Shopify data source: Office & Desk collection. +- Type: collection-driven. + +### Trust / Delivery / WhatsApp Support + +- Section filename: `sections/gy-trust-grid.liquid`. +- Purpose: three trust cards below merchandising rails. +- Schema settings needed: heading optional, section background, card style, columns, icon color. +- Block settings: icon, title, text, link, optional badge. +- Shopify data source: section blocks/theme settings. +- Type: static/editor-driven. + +### Footer + +- Section filename: `sections/footer.liquid`. +- Purpose: brand description, shop links, support links, legal links, copyright and optional payment/support details. +- Schema settings needed: logo/reversed logo, description, menu selectors, show payment icons, social links, newsletter enable. +- Block settings: link groups, text blocks, newsletter/social blocks if using Dawn footer architecture. +- Shopify data source: linklists, shop, policies, payment icons, theme settings. +- Type: dynamic menus plus editor-driven content. + +Recommendation: use a dedicated reversed logo asset rather than relying on CSS filter if possible. + +## 4. Product Card Mapping + +Snippet filename: `snippets/gy-product-card.liquid` + +Inputs: + +- `product` +- `collection` optional +- `show_vendor` optional +- `show_badge` optional +- `show_delivery_label` optional +- `show_quick_add` optional +- `image_ratio` optional + +Mapped fields: + +- Product image: `product.featured_media` or first available media, responsive `image_url`/`image_tag`. +- Title: `product.title`, linked to `product.url`. +- Price: use Dawn price logic or a Get Yours wrapper around Dawn's price snippet. +- Compare-at price: show only if product is on sale; avoid aggressive sale treatment. +- Delivery label: product metafield, fallback to collection/theme default. +- Badge: product metafield, product tag, or automatic sale/new logic. +- Add to Cart behavior: use Dawn quick-add/product form patterns where possible; if product has variants, route to product or show variant picker rather than blindly adding first variant. +- Accessibility: image alt text, accessible product link, button label including product title, visible focus states, no duplicate inaccessible click targets. + +Recommended metafield strategy: + +- Delivery label: `custom.delivery_label` +- Badge: `custom.product_badge` +- Product highlights: `custom.highlights` +- Shipping estimate: `custom.shipping_estimate` + +Do not hard-code sample product cards in Liquid. Every homepage rail and collection grid should render the same snippet from real Shopify product data. + +## 5. Collection Page Mapping + +Static source: `pages/collection-home-organisation.html` + +- Template file: `templates/collection.json` +- Main section: `sections/main-collection-product-grid.liquid` using Dawn as base. +- Shopify native filters: use `collection.filters`. +- Sorting: use Shopify collection sort options. +- Pagination: use Shopify pagination, likely 12/24 products per page depending final density. +- Product grid: render `gy-product-card`. +- Mobile filter strategy: use Dawn's drawer/disclosure pattern, restyled to Get Yours. Avoid leaving full filters stacked above products on mobile. +- Dawn defaults to preserve: filtering logic, sorting, pagination, product URL generation, image handling, accessibility basics. +- Customise: card snippet styling, filter/sidebar visual treatment, toolbar copy, spacing, category breadcrumbs, mobile filter trigger styling. + +Required decisions: + +- Product page size: 12 vs 24 per page. +- Whether categories are separate collections or filtered collection groups. +- Whether "Fast Delivery" is a filterable metafield. + +## 6. Product Page Mapping + +Static source: `pages/product-adjustable-drawer-divider.html` + +- Template file: `templates/product.json` +- Main section: `sections/main-product.liquid`, based on Dawn. + +Mapped components: + +- Product media gallery: use Shopify product media and Dawn gallery behavior; style to match static layout. +- Title: `product.title`. +- Price: Dawn price logic with Get Yours styling. +- Reviews/rating strategy: do not keep fake rating. Use a reviews app/metafields later or hide rating until real. +- Product form: Dawn product form for variants and add-to-cart. +- Variants: use Shopify variants/options; style selectors to fit current clean UI. +- Quantity selector: use Dawn quantity input behavior, styled like prototype. +- Add to Cart: preserve Dawn behavior. +- Buy Now/dynamic checkout: decide merchant setting. Use Shopify dynamic checkout buttons if enabled, otherwise hide or keep cart-first flow. +- Trust block: product section block or snippet with merchant-editable trust cards. +- Tabs: Description, Delivery, Returns, FAQs as product information blocks or accordions/disclosures. +- Related products: use Shopify product recommendations or selected collection fallback. + +Metafields needed: + +- `custom.delivery_label` +- `custom.shipping_estimate` +- `custom.returns_note` +- `custom.product_faq` +- `custom.support_note` +- `custom.highlights` +- `custom.specifications` +- `custom.product_badge` + +Recommendation: keep content available without brittle JavaScript by using accessible disclosure/accordion patterns. + +## 7. Cart Drawer and Cart Page Mapping + +Preferred strategy: extend Dawn's cart drawer and cart page. Do not replace cart logic. + +Cart drawer strategy: + +- Preserve Dawn cart AJAX/state handling. +- Restyle drawer width, typography, buttons, product summary and reassurance notes to match Get Yours. +- Add WhatsApp/support reassurance as a theme setting or cart drawer block. +- Include quantity updates, remove item, empty state and live subtotal from Dawn. +- Keep focus management and accessibility from Dawn. + +Cart page strategy: + +- Use Dawn cart template/sections. +- Style line items, order summary, checkout CTA and recommendations to match the static prototype. +- Add recommended products through Shopify recommendations or a selected collection. + +Free-shipping progress: + +- Implement with theme setting threshold, e.g. R500 in cents. +- Use cart subtotal to calculate progress. +- Keep copy editable. +- Ensure it handles currencies and discounts carefully. + +Promo code limitations: + +- Shopify discount codes are usually applied at checkout or through supported discount flows. +- Theme-side promo code fields can be misleading unless implemented with a supported cart/checkout discount URL pattern. +- For first launch, prefer "Discounts can be added at checkout" unless a robust implementation is confirmed. + +Checkout handoff: + +- Use Shopify checkout route/button. +- Do not custom-build checkout. + +Empty cart state: + +- Must include continue shopping, recommended collection link and reassurance copy. + +## 8. Search Mapping + +Static source: `pages/search.html` + +- Template file: `templates/search.json` +- Main section: `sections/main-search.liquid`. +- Normal search results: use Shopify search results and product card snippet. +- Predictive search: use Dawn predictive search if enabled; restyle input/results. +- Empty results state: include suggested categories, popular products and a clear search refinement message. +- Product card reuse: render `gy-product-card` for product results. + +Recommendation: search should become a real ecommerce experience before launch. The static page is only a route placeholder. + +## 9. Static Content / Legal Pages + +### Shipping + +- Shopify page or template: Shopify Page with optional `page.shipping.json`. +- Editable content strategy: use Shopify admin page content plus optional page template sections for delivery cards. +- Copy required: delivery areas, timelines, couriers, fees, free-shipping threshold, tracking steps. + +### Returns + +- Shopify page or template: Shopify Page with `page.returns.json`. +- Editable content strategy: legal/business-approved page content. +- Copy required: return window, eligibility, exclusions, damaged items, refund method, support contact. + +### Contact + +- Shopify page or template: `page.contact.json` with `sections/contact-form.liquid`. +- Editable content strategy: Shopify contact form plus support cards. +- Copy required: WhatsApp link/number, email, support hours, response expectations. + +### FAQ + +- Shopify page or template: `page.faq.json`. +- Editable content strategy: section blocks or metaobjects if FAQ grows. +- Copy required: delivery, payment, order tracking, returns, support, product sizing/care. + +### Privacy + +- Shopify page or policy: Shopify policy page preferred where appropriate. +- Editable content strategy: Shopify legal policy content and/or page. +- Copy required: POPIA/privacy compliance, Shopify/payment providers, analytics, support channels. + +### Terms + +- Shopify page or policy: Shopify policy page preferred where appropriate. +- Editable content strategy: Shopify legal policy content and/or page. +- Copy required: purchase terms, pricing, availability, delivery, returns, liability, disputes. + +## 10. Assets and Design Tokens + +Logo SVG: + +- Move `assets/brand/get-yours-logo.svg` into theme `assets/`. +- Preserve the cropped horizontal logo treatment. +- Add a dedicated reversed logo asset for footer if possible. + +Colour tokens: + +- Map static CSS variables into Dawn/theme settings: + - `--gy-blue: #0081D8` + - `--gy-navy: #073A66` + - `--gy-navy-deep: #063A66` + - `--gy-yellow-logo: #FFD200` + - `--gy-gold: #F5B700` + - `--gy-gold-soft: #FFF4CC` + - `--gy-blue-soft: #EAF6FF` + - `--gy-bg: #F5F7FA` + - `--gy-surface: #FFFFFF` + - `--gy-border: #E4E7EC` + - `--gy-text: #1F2933` + - `--gy-muted: #667085` + - `--gy-success: #16A34A` + +Typography: + +- Current prototype uses Hanken Grotesk. +- Decide whether to use Shopify-hosted font settings, system fallback, or externally loaded font. +- Prefer theme font settings where possible for performance and editor compatibility. + +Product images: + +- Product images should become Shopify product media, not theme assets. +- Replace remote Stitch-generated URLs with real product media before production QA. + +Hero images: + +- Use section image picker settings for hero tiles. +- Store reusable hero/promo assets as theme assets only if they are brand/editor assets, not product media. + +CSS variables: + +- Add Get Yours variables to a small theme stylesheet layered on Dawn. +- Avoid large rewrites of Dawn CSS at first. +- Prefer component-scoped classes and CSS variables from section settings. + +JavaScript interactions: + +- Keep Dawn JS for cart, variant selection, media gallery, predictive search and disclosure patterns. +- Add custom JS only for Get Yours-specific UI that Dawn cannot cover. +- Avoid porting static `main.js` directly into Shopify. + +## 11. Shopify Metafields Needed + +Product metafields: + +- `custom.delivery_label` - short product-card and buy-box delivery label. +- `custom.product_badge` - "Smart value", "New", "Popular" or other restrained badge. +- `custom.product_faq` - product-specific FAQ content. +- `custom.returns_note` - product-specific returns exception or reassurance. +- `custom.shipping_estimate` - product-specific delivery estimate. +- `custom.support_note` - support reassurance near buy box. +- `custom.highlights` - bullet highlights for product page. +- `custom.specifications` - structured specs such as dimensions/material/pack size. + +Collection metafields: + +- `custom.short_description` - collection page intro copy. +- `custom.category_icon` - optional category tile icon/asset. +- `custom.featured_badge` - optional category merchandising label. + +Shop/theme settings: + +- Free-shipping threshold. +- WhatsApp support link. +- Support hours. +- Default delivery label. +- Default returns note. +- Footer brand description. + +## 12. Shopify Apps / Settings Needed + +Shopify native functionality: + +- Products, variants, collections. +- Menus/navigation. +- Cart and checkout. +- Search and predictive search baseline. +- Collection filters and sorting. +- Customer accounts if enabled. +- Shopify Pages and policies. +- Shopify Email/newsletter if sufficient. +- Payments and shipping/rates configuration. +- Basic SEO fields and redirects. + +Theme code: + +- Get Yours visual sections. +- Product card snippet. +- Trust blocks. +- Product tabs/disclosures. +- Free-shipping progress presentation. +- WhatsApp CTA display. +- Custom homepage rail styling. +- Footer/header brand styling. + +Shopify apps later: + +- Reviews: only when ready for real review collection/display. +- Wishlist: add later if it supports business goals; otherwise hide wishlist until implemented. +- WhatsApp support: app or simple link depending operational needs. +- Email/newsletter capture: Shopify Email or dedicated email platform if needed. +- Analytics: native Shopify analytics plus GA4/Meta pixel where appropriate. +- SEO: app only if native theme/admin SEO is insufficient. +- Shipping/rates: app only if native Shopify shipping does not cover fulfilment rules. + +Recommendation: avoid app sprawl during first conversion. Start native, add apps only for clear gaps. + +## 13. Implementation Phases + +### Phase 1: Dawn Setup and Foundation + +- Create Git branch for Shopify conversion. +- Install/verify Shopify CLI. +- Pull or initialise Dawn-based theme. +- Add project-level `AGENTS.md` for Shopify theme constraints. +- Configure theme settings and base brand tokens. +- Add logo assets. +- Establish Theme Check workflow. +- Confirm local preview workflow. + +Exit criteria: + +- Dawn runs locally. +- Theme Check passes before custom work. +- Brand tokens and logo are available. + +### Phase 2: Header, Footer and Announcement Bar + +- Restyle Dawn announcement/header/footer to match Get Yours. +- Preserve Dawn navigation, search, account and cart behavior. +- Configure menus. +- Add reversed footer logo if available. + +Exit criteria: + +- Header/footer match static prototype rhythm. +- Mobile header works without overflow. +- Cart icon/state remains Dawn-compatible. + +### Phase 3: Homepage Sections + +- Build `gy-promo-grid-hero`. +- Build `gy-category-grid`. +- Build reusable `gy-featured-collection`. +- Build `gy-trust-grid`. +- Configure `templates/index.json` with: + - hero + - categories + - featured practical finds + - new arrivals + - best sellers + - home organisation picks + - office & desk essentials + - trust grid + +Exit criteria: + +- Homepage visually matches static foundation. +- Product rails are collection-driven and editable. + +### Phase 4: Product Card Snippet and Collection Page + +- Build/reuse `gy-product-card`. +- Integrate card into homepage rails and collection grid. +- Customize collection template around Dawn filters/sort/pagination. +- Add mobile filter strategy. + +Exit criteria: + +- Collection page works with Shopify products, filters, sorting and pagination. +- Product cards are consistent across homepage and collection. + +### Phase 5: Product Page + +- Customize Dawn product page layout. +- Style gallery, buy-box, quantity, buttons and trust block. +- Add metafield-driven delivery label, badge, highlights, specifications and tabs/disclosures. +- Decide review visibility. +- Add product recommendations. + +Exit criteria: + +- Product page supports real products, variants, availability and add-to-cart. +- No fake rating/review data. + +### Phase 6: Cart Drawer and Cart Page + +- Extend Dawn cart drawer styling. +- Add Get Yours reassurance copy. +- Add free-shipping progress. +- Style cart page order summary and recommendations. +- Confirm empty cart state. + +Exit criteria: + +- Cart drawer/page preserve Dawn cart functionality. +- Checkout handoff works. +- Mobile cart experience is clean. + +### Phase 7: Search and Content Pages + +- Style search page and predictive search. +- Add empty search state. +- Create page templates for shipping, returns, contact, FAQ, privacy and terms as needed. +- Connect support/legal menus. + +Exit criteria: + +- Support/legal pages are editable and linked. +- Search feels like ecommerce search, not a placeholder. + +### Phase 8: Mobile QA, Accessibility, Performance and Theme Check + +- Test 360px, 400px, 430px, 768px, 1200px and wide desktop. +- Test keyboard navigation, focus states, drawer behavior and product forms. +- Run Shopify Theme Check. +- Check image sizing, LCP candidates, CLS risks and unused JS/CSS. +- Validate cart, filters, search and product variants. + +Exit criteria: + +- No horizontal overflow. +- Theme Check passes or documented exceptions are approved. +- Core purchase flow works. + +### Phase 9: Unpublished Theme Push and Admin Content Setup + +- Push unpublished theme. +- Configure Shopify admin products, collections, menus, pages, policies, shipping, payments and theme settings. +- Upload product media. +- Review in Shopify preview with real data. +- Run final pre-launch QA. + +Exit criteria: + +- Unpublished theme is ready for stakeholder review. +- Remaining launch blockers are content/business operations, not theme architecture. + +## 14. Risk Register + +### Breaking Dawn Cart Logic + +- Risk: replacing cart drawer/page logic can break quantities, discounts, checkout or accessibility. +- Mitigation: extend Dawn behavior and restyle; do not rewrite cart from scratch. + +### Over-Customising Too Early + +- Risk: heavy CSS/JS rewrites make Dawn harder to update and debug. +- Mitigation: start with small layered CSS and targeted sections/snippets. + +### Static Prototype Patterns Not Mapping Cleanly + +- Risk: duplicated static rails and hard-coded cards do not translate directly to dynamic data. +- Mitigation: map product rails to one reusable featured collection section and product cards to one snippet. + +### Placeholder Legal Copy + +- Risk: generic returns/privacy/terms content undermines trust and creates legal exposure. +- Mitigation: require approved policy copy before launch. + +### Fake Review/Ratings Perception + +- Risk: placeholder reviews can damage credibility. +- Mitigation: remove ratings until real reviews/app/metafields exist. + +### Product Image Quality + +- Risk: generated/remote images can make the store feel dropshippy. +- Mitigation: replace with credible Shopify product media before production QA. + +### App Sprawl + +- Risk: adding reviews, wishlist, WhatsApp, SEO and marketing apps too early can slow theme and complicate launch. +- Mitigation: use Shopify native functionality first; add apps only for explicit gaps. + +### Mobile Filter Complexity + +- Risk: real Shopify filters may become too tall or awkward on mobile. +- Mitigation: use Dawn filter drawer/disclosure behavior and test with real filter groups. + +### Product Metafield Governance + +- Risk: inconsistent metafield use leads to missing badges, delivery labels and tab content. +- Mitigation: define metafields before product import and document editorial rules. + +### South African Trust Requirements + +- Risk: customers may hesitate without clear local delivery, payment, returns and support details. +- Mitigation: prioritise shipping, support, WhatsApp, payment and returns content before launch. + +## Final Planning Recommendation + +Proceed with Dawn conversion planning and setup. The static prototype should remain frozen as the visual reference while Shopify-native architecture takes over dynamic ecommerce behavior. + +Do not spend another major pass on static HTML. The next meaningful work belongs in Dawn: theme setup, sections, snippets, templates, real Shopify data, policies and merchant-editable settings. diff --git a/get-yours-shopify-theme/docs/demo-content/demo-collections.csv b/get-yours-shopify-theme/docs/demo-content/demo-collections.csv new file mode 100644 index 00000000000..990562417da --- /dev/null +++ b/get-yours-shopify-theme/docs/demo-content/demo-collections.csv @@ -0,0 +1,10 @@ +collection_title,handle,description,intended_homepage_section_usage,suggested_image,collection_type +Featured Practical Finds,featured-practical-finds,"Simple, useful products selected for everyday value.","Featured Practical Finds product rail",pending,manual +New Arrivals,new-arrivals,"Fresh everyday finds recently added to Get Yours.","New Arrivals product rail",pending,manual +Best Sellers,best-sellers,"Popular practical picks for home, desk, travel and everyday use.","Best Sellers product rail",pending,manual +Home Organisation,home-organisation,"Storage and organising finds for a calmer, tidier home.","Home Organisation Picks rail and category grid",pending,manual +Office & Desk Essentials,office-desk-essentials,"Practical desk upgrades for work, study and home office.","Office & Desk Essentials rail and category grid",hero-office-desk.jpg,manual +Kitchen & Storage,kitchen-storage,"Useful kitchen storage, pantry and sink organisation products.","Category grid",pending,manual +Lifestyle,lifestyle,"Everyday useful essentials for routines, errands and simple living.","Category grid",pending,manual +Travel,travel,"Compact travel and daily carry organisers for errands and trips.","Category grid and hero travel tile",hero-travel-accessories-candidate.jpg,manual +Tech Accessories,tech-accessories,"Simple add-ons for cables, devices and everyday tech carry.","Category grid",pending,manual diff --git a/get-yours-shopify-theme/docs/demo-content/demo-products.csv b/get-yours-shopify-theme/docs/demo-content/demo-products.csv new file mode 100644 index 00000000000..f36497833ac --- /dev/null +++ b/get-yours-shopify-theme/docs/demo-content/demo-products.csv @@ -0,0 +1,21 @@ +product_title,handle,image_filename,image_alt_text,product_type,vendor,status,price_zar,compare_at_price_zar,tags,assigned_collections,short_description,bullet_highlights +Adjustable Drawer Divider Set,adjustable-drawer-divider-set,product-adjustable-drawer-divider-set.jpg,"Adjustable drawer divider set for organised drawers",Home Organisation,Get Yours,Draft,149,,"drawer dividers;storage;home organisation","Featured Practical Finds;Best Sellers;Home Organisation","Adjustable dividers for neater drawers in bedrooms, kitchens or offices.","Expandable fit|Easy drawer organisation|Useful for clothing utensils and accessories" +Modular Fridge Storage Bins,modular-fridge-storage-bins,product-modular-fridge-storage-bins.jpg,"Modular fridge storage bins arranged on a shelf",Kitchen & Storage,Get Yours,Draft,199,,"fridge storage;kitchen;organisation","Featured Practical Finds;New Arrivals;Kitchen & Storage","Storage bins for organising fridge shelves and pantry spaces.","Modular storage|Easy visibility|Useful for snacks produce and pantry items" +Under-Shelf Wire Storage Basket,under-shelf-wire-storage-basket,product-under-shelf-wire-storage-basket.jpg,"Under-shelf wire basket for extra storage",Home Organisation,Get Yours,Draft,129,,"wire basket;shelf storage;home organisation","Featured Practical Finds;Best Sellers;Home Organisation;Kitchen & Storage","A simple under-shelf basket for adding storage without drilling.","Slides under shelves|Good for kitchens and cupboards|Lightweight wire design" +Gray Fabric Storage Boxes,gray-fabric-storage-boxes,product-gray-fabric-storage-boxes-with-folded-clothing.jpg,"Gray fabric storage boxes with folded clothing",Home Organisation,Get Yours,Draft,175,,"fabric storage;boxes;home organisation","Home Organisation;Lifestyle","Soft fabric boxes for wardrobes, shelves and general tidy-up storage.","Foldable design|Neutral grey finish|Useful for clothing toys and linen" +Beige Linen Storage Bags,beige-linen-storage-bags,product-beige-linen-storage-bags.jpg,"Beige linen storage bags for home organisation",Home Organisation,Get Yours,Draft,149,,"linen bags;storage;home organisation","Home Organisation;Lifestyle","Light storage bags for seasonal clothing, bedding and household items.","Soft sided storage|Neutral beige colour|Easy to move and store" +Bamboo Desk Organizer,bamboo-desk-organizer,product-bamboo-desk-organiser.jpg,"Bamboo desk organiser with compartments",Office & Desk,Get Yours,Draft,199,,"desk organiser;bamboo;office","Office & Desk Essentials;Featured Practical Finds","A compact desktop organiser for pens, notes and everyday stationery.","Natural bamboo look|Multiple compartments|Keeps desktop items grouped" +Minimalist Desk Organizer,minimalist-desk-organizer,product-minimalist-desk-organiser.jpg,"Minimalist desk organiser on a clean workspace",Office & Desk,Get Yours,Draft,129,,"desk organiser;office;study","Office & Desk Essentials;New Arrivals","A clean desk organiser for small office and study essentials.","Compact footprint|Simple neutral styling|Useful for stationery and small tools" +Ergonomic Aluminium Laptop Stand,ergonomic-aluminium-laptop-stand,product-ergonomic-aluminium-laptop-stand.jpg,"Ergonomic aluminium laptop stand on a desk",Office & Desk,Get Yours,Draft,289,399,"laptop stand;office;desk","Best Sellers;Office & Desk Essentials","A sturdy laptop stand for raising screens during work or study.","Raises laptop height|Ventilated open design|Suitable for home office setups" +Adjustable Metal Laptop Stand,adjustable-metal-laptop-stand,product-adjustable-metal-laptop-stand.jpg,"Adjustable metal laptop stand folded on a desk",Office & Desk,Get Yours,Draft,249,,"laptop stand;adjustable;office","Office & Desk Essentials;Tech Accessories","An adjustable stand for flexible laptop positioning at a desk.","Adjustable viewing angle|Foldable design|Useful for work study and calls" +Sleek Metal Tablet Stand,sleek-metal-tablet-stand,product-sleek-metal-tablet-stand.jpg,"Sleek metal tablet stand holding a tablet",Tech Accessories,Get Yours,Draft,129,,"tablet stand;tech accessories;desk","Office & Desk Essentials;Tech Accessories","A compact metal stand for tablets, phones and small screens.","Desk-friendly size|Stable metal frame|Good for video calls and recipes" +Desk Cable Organiser,desk-cable-organiser,product-desk-cable-organiser.jpg,"Desk cable organiser for tidy charging cables",Tech Accessories,Get Yours,Draft,79,,"cable organiser;desk;tech accessories","Featured Practical Finds;Best Sellers;Office & Desk Essentials;Tech Accessories","A simple cable organiser for keeping charging cables within reach.","Reduces cable clutter|Compact desk accessory|Useful for chargers and headphones" +Tech Organizer Case,tech-organizer-case,product-tech-organiser.jpg,"Tech organiser case with cables and accessories",Tech Accessories,Get Yours,Draft,149,,"tech case;cables;travel","Tech Accessories;Travel;New Arrivals","A zip case for carrying cables, chargers and everyday tech accessories.","Multiple pockets|Travel friendly|Keeps small tech items together" +Travel Pouch Set,travel-pouch-set,product-travel-pouch-set.jpg,"Travel pouch set for packing small items",Travel,Get Yours,Draft,175,,"travel pouches;packing;organiser","Travel;Lifestyle;Featured Practical Finds","A practical pouch set for packing toiletries, cables or daily essentials.","Multiple pouch sizes|Useful for trips and errands|Keeps bag contents grouped" +Travel Toiletry Organizer,travel-toiletry-organizer,product-minimalist-travel-toiletry-set.jpg,"Minimalist travel toiletry organiser set",Travel,Get Yours,Draft,199,,"toiletry organiser;travel;bag","Travel;Best Sellers","A compartment organiser for toiletries and small travel essentials.","Multiple compartments|Easy to pack|Useful for weekend trips" +Pantry Glass Jar Set,pantry-glass-jar-set,product-minimalist-pantry-jars.jpg,"Minimalist pantry glass jar set on a kitchen shelf",Kitchen & Storage,Get Yours,Draft,249,,"glass jars;pantry;kitchen storage","Kitchen & Storage;Home Organisation","A clean jar set for pantry staples and kitchen shelf organisation.","Clear jar design|Good for dry goods|Helps pantry shelves look tidy" +Kitchen Sink Organizer,kitchen-sink-organizer,product-modern-kitchen-sink-organiser.jpg,"Modern kitchen sink organiser holding everyday sink items",Kitchen & Storage,Get Yours,Draft,99,,"sink organiser;kitchen;storage","Kitchen & Storage;Featured Practical Finds","A compact organiser for sponge, brush and sink-side essentials.","Keeps sink area tidy|Small footprint|Useful for everyday cleaning tools" +Rolling Storage Cart,rolling-storage-cart,product-rolling-storage-cart-display.jpg,"Rolling storage cart with household items",Home Organisation,Get Yours,Draft,399,,"storage cart;home organisation;rolling cart","Home Organisation;Best Sellers;Lifestyle","A rolling cart for flexible storage in kitchens, bathrooms or workspaces.","Wheeled storage|Multi-tier design|Useful in compact spaces" +Jewelry Organizer Box,jewelry-organizer-box,product-elegant-jewellery-box.jpg,"Elegant jewellery organiser box with compartments",Lifestyle,Get Yours,Draft,175,,"jewelry organiser;storage;lifestyle","Lifestyle;Home Organisation","A small organiser box for jewellery and accessories.","Compartment storage|Compact dresser size|Helps separate small accessories" +Laundry Hamper,laundry-hamper,product-beige-laundry-hamper.jpg,"Beige laundry hamper for bedroom or bathroom",Home Organisation,Get Yours,Draft,199,,"laundry hamper;home organisation;storage","Home Organisation;Lifestyle","A simple laundry hamper for bedrooms, bathrooms or laundry areas.","Neutral styling|Easy everyday storage|Useful for clothing and linen" +Bathroom Wall Shelf Organizer,bathroom-wall-shelf-organizer,product-minimalist-bathroom-shelving.jpg,"Minimalist bathroom shelving for toiletries",Home Organisation,Get Yours,Draft,149,,"bathroom shelf;wall organiser;storage","Home Organisation;Lifestyle","A wall shelf organiser for toiletries and small bathroom essentials.","Wall storage|Good for compact bathrooms|Keeps essentials visible" diff --git a/get-yours-shopify-theme/docs/demo-content/homepage-section-assignments.md b/get-yours-shopify-theme/docs/demo-content/homepage-section-assignments.md new file mode 100644 index 00000000000..deba37e67f7 --- /dev/null +++ b/get-yours-shopify-theme/docs/demo-content/homepage-section-assignments.md @@ -0,0 +1,39 @@ +# Homepage Section Assignments + +## Hero Promo Grid + +| Homepage area | Intended image | Theme section setting | +| --- | --- | --- | +| Hero main tile | `hero-main-image.jpg` | `gy-promo-grid-hero` main image | +| Office & Desk tile | `hero-office-desk.jpg` | `gy-promo-grid-hero` secondary tile 1 image | +| Travel tile | `hero-travel-accessories-candidate.jpg` | `gy-promo-grid-hero` secondary tile 2 image | + +Image status: `hero-main-image.jpg` and `hero-office-desk.jpg` were created from source hero files. A dedicated source hero travel image was not found, so `hero-travel-accessories-candidate.jpg` was created from `Product-TravelAccessories.png` as a temporary candidate. + +## Homepage Product Rails + +| Homepage rail | Shopify collection | +| --- | --- | +| Featured Practical Finds | Featured Practical Finds | +| New Arrivals | New Arrivals | +| Best Sellers | Best Sellers | +| Home Organisation Picks | Home Organisation | +| Office & Desk Essentials | Office & Desk Essentials | + +## Shop By Category Grid + +| Category card | Shopify collection | +| --- | --- | +| Home Organisation | Home Organisation | +| Office & Desk | Office & Desk Essentials | +| Kitchen & Storage | Kitchen & Storage | +| Lifestyle | Lifestyle | +| Travel | Travel | +| Tech Accessories | Tech Accessories | + +## Theme Editor Steps + +1. Upload/select the three hero images in the `Get Yours promo grid hero` section. +2. Assign each category block to the matching collection. +3. Assign each product rail to the matching collection. +4. Keep the homepage product rails collection-driven. Do not hard-code product image assets into Liquid. diff --git a/get-yours-shopify-theme/docs/demo-content/image-upload-map.md b/get-yours-shopify-theme/docs/demo-content/image-upload-map.md new file mode 100644 index 00000000000..f58484eccb7 --- /dev/null +++ b/get-yours-shopify-theme/docs/demo-content/image-upload-map.md @@ -0,0 +1,41 @@ +# Image Upload Map + +## Upload Rules + +- Product images should be uploaded as Shopify product media. +- Hero images should be selected in the Shopify theme editor or uploaded through Shopify Files. +- Do not hard-code these images into Liquid. + +| Image filename | Intended Shopify use | Product title or hero tile | Alt text | Upload method | +| --- | --- | --- | --- | --- | +| `hero-main-image.jpg` | Hero main tile | Smart everyday finds for less. | Smart everyday finds for less. | theme editor / Shopify Files | +| `hero-office-desk.jpg` | Office & Desk hero tile | Office & Desk Essentials | Office & Desk Essentials | theme editor / Shopify Files | +| `hero-travel-accessories-candidate.jpg` | Travel hero tile candidate | Travel & Daily Accessories | Travel & Daily Accessories | theme editor / Shopify Files | +| `product-adjustable-drawer-divider-set.jpg` | Product media | Adjustable Drawer Divider Set | Adjustable drawer divider set for organised drawers | product media | +| `product-adjustable-metal-laptop-stand.jpg` | Product media | Adjustable Metal Laptop Stand | Adjustable metal laptop stand folded on a desk | product media | +| `product-bamboo-desk-organiser.jpg` | Product media | Bamboo Desk Organizer | Bamboo desk organiser with compartments | product media | +| `product-beauty-essentials.jpg` | Extra product media candidate | Unassigned demo image | Product Beauty Essentials | product media if product is created later | +| `product-beige-laundry-hamper.jpg` | Product media | Laundry Hamper | Beige laundry hamper for bedroom or bathroom | product media | +| `product-beige-linen-storage-bags.jpg` | Product media | Beige Linen Storage Bags | Beige linen storage bags for home organisation | product media | +| `product-black-cable-clips.jpg` | Extra product media candidate | Unassigned demo image | Product Black Cable Clips | product media if product is created later | +| `product-desk-cable-organiser.jpg` | Product media | Desk Cable Organiser | Desk cable organiser for tidy charging cables | product media | +| `product-elegant-jewellery-box.jpg` | Product media | Jewelry Organizer Box | Elegant jewellery organiser box with compartments | product media | +| `product-ergonomic-aluminium-laptop-stand.jpg` | Product media | Ergonomic Aluminium Laptop Stand | Ergonomic aluminium laptop stand on a desk | product media | +| `product-gray-fabric-storage-boxes-with-folded-clothing.jpg` | Product media | Gray Fabric Storage Boxes | Gray fabric storage boxes with folded clothing | product media | +| `product-minimalist-bathroom-shelving.jpg` | Product media | Bathroom Wall Shelf Organizer | Minimalist bathroom shelving for toiletries | product media | +| `product-minimalist-desk-organiser.jpg` | Product media | Minimalist Desk Organizer | Minimalist desk organiser on a clean workspace | product media | +| `product-minimalist-kitchen-storage-with-glass-jars.jpg` | Extra product media candidate | Unassigned demo image | Product Minimalist Kitchen Storage With Glass Jars | product media if product is created later | +| `product-minimalist-pantry-jars.jpg` | Product media | Pantry Glass Jar Set | Minimalist pantry glass jar set on a kitchen shelf | product media | +| `product-minimalist-travel-toiletry-set.jpg` | Product media | Travel Toiletry Organizer | Minimalist travel toiletry organiser set | product media | +| `product-minimalist-wooden-monitor-stand-with-drawer.jpg` | Extra product media candidate | Unassigned demo image | Product Minimalist Wooden Monitor Stand With Drawer | product media if product is created later | +| `product-modern-kitchen-sink-organiser.jpg` | Product media | Kitchen Sink Organizer | Modern kitchen sink organiser holding everyday sink items | product media | +| `product-modular-fridge-storage-bins.jpg` | Product media | Modular Fridge Storage Bins | Modular fridge storage bins arranged on a shelf | product media | +| `product-modular-shoe-storage.jpg` | Extra product media candidate | Unassigned demo image | Product Modular Shoe Storage | product media if product is created later | +| `product-rolling-storage-cart-display.jpg` | Product media | Rolling Storage Cart | Rolling storage cart with household items | product media | +| `product-sleek-metal-tablet-stand.jpg` | Product media | Sleek Metal Tablet Stand | Sleek metal tablet stand holding a tablet | product media | +| `product-stacked-storage-fresh-produce.jpg` | Extra product media candidate | Unassigned demo image | Product Stacked Storage Fresh Produce | product media if product is created later | +| `product-tech-organiser.jpg` | Product media | Tech Organizer Case | Tech organiser case with cables and accessories | product media | +| `product-travel-accessories.jpg` | Extra product media candidate | Unassigned demo image | Product Travel Accessories | product media if product is created later | +| `product-travel-pouch-set.jpg` | Product media | Travel Pouch Set | Travel pouch set for packing small items | product media | +| `product-under-shelf-wire-storage-basket.jpg` | Product media | Under-Shelf Wire Storage Basket | Under-shelf wire basket for extra storage | product media | +| `product-water-resistant-travel-cable-bag.jpg` | Extra product media candidate | Unassigned demo image | Product Water Resistant Travel Cable Bag | product media if product is created later | diff --git a/get-yours-shopify-theme/docs/demo-content/image-upload-plan.md b/get-yours-shopify-theme/docs/demo-content/image-upload-plan.md new file mode 100644 index 00000000000..5146d284177 --- /dev/null +++ b/get-yours-shopify-theme/docs/demo-content/image-upload-plan.md @@ -0,0 +1,86 @@ +# Image Upload Plan + +## Current Status + +The corrected source folder `/Users/thabisoradebe/Downloads/GY_Demo_Content` was found and optimised JPG copies were created in: + +```text +get-yours-shopify-theme/docs/demo-content/optimised-images/ +``` + +Source files in Downloads were not modified. + +## Normalised Naming Convention + +Use lowercase kebab-case names: + +- lowercase only +- hyphen-separated +- no spaces +- no special characters +- preserve product meaning +- keep the content type prefix + +Examples: + +- `hero-main-image.jpg` +- `hero-office-desk.jpg` +- `hero-travel-accessories-candidate.jpg` +- `product-adjustable-drawer-divider-set.jpg` +- `product-modular-fridge-storage-bins.jpg` +- `product-under-shelf-wire-storage-basket.jpg` + +## Available Optimised Hero Images + +- `hero-main-image.jpg` +- `hero-office-desk.jpg` +- `hero-travel-accessories-candidate.jpg` + +Note: a dedicated `HeroTravel...` source image was not found. The travel candidate was generated from `Product-TravelAccessories.png`. + +## Optimisation Targets + +Hero images: + +- Landscape crop or preserve landscape composition. +- Max width: `1800px`. +- Format: `.jpg`. +- Quality: around `75-82`. +- Target size: roughly `250KB-600KB` where possible. + +Product images: + +- Square crop or preserve square format if already square. +- Max width/height: `1200px`. +- Format: `.jpg`. +- Quality: around `75-82`. +- Target size: roughly `100KB-300KB` where possible. + +## Shopify Upload Strategy + +Product images: + +- Upload as Shopify product media. +- Attach each product image to the matching Shopify product. +- Use descriptive alt text from `demo-products.csv`. +- Do not add product demo images to Liquid sections or theme assets for product card rendering. + +Hero images: + +- Upload through the Shopify theme editor image picker, or upload to Shopify Files and select them in the homepage section settings. +- Assign images to `gy-promo-grid-hero` settings: + - `hero-main-image.jpg` + - `hero-office-desk.jpg` + - `hero-travel-accessories-candidate.jpg` + +Homepage product rails: + +- Keep rails collection-driven. +- Assign each `gy-featured-collection` instance to a Shopify collection. +- Do not hard-code demo images into `gy-featured-collection.liquid`. + +## Automation Position + +Do not attempt automated Shopify product or media creation without explicit approval. + +Shopify CLI theme workflows can preview and push themes, but should not be assumed to create products or upload product images by itself. Product/catalogue creation should use Shopify Admin UI, Shopify CSV import, or a deliberately approved Admin API workflow. diff --git a/get-yours-shopify-theme/docs/demo-content/optimised-images/Used/product-adjustable-drawer-divider-set.jpg b/get-yours-shopify-theme/docs/demo-content/optimised-images/Used/product-adjustable-drawer-divider-set.jpg new file mode 100644 index 00000000000..86f9b22769a Binary files /dev/null and b/get-yours-shopify-theme/docs/demo-content/optimised-images/Used/product-adjustable-drawer-divider-set.jpg differ diff --git a/get-yours-shopify-theme/docs/demo-content/optimised-images/Used/product-adjustable-metal-laptop-stand.jpg b/get-yours-shopify-theme/docs/demo-content/optimised-images/Used/product-adjustable-metal-laptop-stand.jpg new file mode 100644 index 00000000000..3768e8dee90 Binary files /dev/null and b/get-yours-shopify-theme/docs/demo-content/optimised-images/Used/product-adjustable-metal-laptop-stand.jpg differ diff --git a/get-yours-shopify-theme/docs/demo-content/optimised-images/Used/product-bamboo-desk-organiser.jpg b/get-yours-shopify-theme/docs/demo-content/optimised-images/Used/product-bamboo-desk-organiser.jpg new file mode 100644 index 00000000000..8b7aee26515 Binary files /dev/null and b/get-yours-shopify-theme/docs/demo-content/optimised-images/Used/product-bamboo-desk-organiser.jpg differ diff --git a/get-yours-shopify-theme/docs/demo-content/optimised-images/Used/product-beige-laundry-hamper.jpg b/get-yours-shopify-theme/docs/demo-content/optimised-images/Used/product-beige-laundry-hamper.jpg new file mode 100644 index 00000000000..d61396f2bc1 Binary files /dev/null and b/get-yours-shopify-theme/docs/demo-content/optimised-images/Used/product-beige-laundry-hamper.jpg differ diff --git a/get-yours-shopify-theme/docs/demo-content/optimised-images/Used/product-beige-linen-storage-bags.jpg b/get-yours-shopify-theme/docs/demo-content/optimised-images/Used/product-beige-linen-storage-bags.jpg new file mode 100644 index 00000000000..21693d87ba1 Binary files /dev/null and b/get-yours-shopify-theme/docs/demo-content/optimised-images/Used/product-beige-linen-storage-bags.jpg differ diff --git a/get-yours-shopify-theme/docs/demo-content/optimised-images/Used/product-desk-cable-organiser.jpg b/get-yours-shopify-theme/docs/demo-content/optimised-images/Used/product-desk-cable-organiser.jpg new file mode 100644 index 00000000000..9b259d0bb68 Binary files /dev/null and b/get-yours-shopify-theme/docs/demo-content/optimised-images/Used/product-desk-cable-organiser.jpg differ diff --git a/get-yours-shopify-theme/docs/demo-content/optimised-images/Used/product-elegant-jewellery-box.jpg b/get-yours-shopify-theme/docs/demo-content/optimised-images/Used/product-elegant-jewellery-box.jpg new file mode 100644 index 00000000000..52bf18cb3e0 Binary files /dev/null and b/get-yours-shopify-theme/docs/demo-content/optimised-images/Used/product-elegant-jewellery-box.jpg differ diff --git a/get-yours-shopify-theme/docs/demo-content/optimised-images/Used/product-ergonomic-aluminium-laptop-stand.jpg b/get-yours-shopify-theme/docs/demo-content/optimised-images/Used/product-ergonomic-aluminium-laptop-stand.jpg new file mode 100644 index 00000000000..b736ba7b99e Binary files /dev/null and b/get-yours-shopify-theme/docs/demo-content/optimised-images/Used/product-ergonomic-aluminium-laptop-stand.jpg differ diff --git a/get-yours-shopify-theme/docs/demo-content/optimised-images/Used/product-gray-fabric-storage-boxes-with-folded-clothing.jpg b/get-yours-shopify-theme/docs/demo-content/optimised-images/Used/product-gray-fabric-storage-boxes-with-folded-clothing.jpg new file mode 100644 index 00000000000..d9b0356c601 Binary files /dev/null and b/get-yours-shopify-theme/docs/demo-content/optimised-images/Used/product-gray-fabric-storage-boxes-with-folded-clothing.jpg differ diff --git a/get-yours-shopify-theme/docs/demo-content/optimised-images/Used/product-minimalist-bathroom-shelving.jpg b/get-yours-shopify-theme/docs/demo-content/optimised-images/Used/product-minimalist-bathroom-shelving.jpg new file mode 100644 index 00000000000..5064a94f899 Binary files /dev/null and b/get-yours-shopify-theme/docs/demo-content/optimised-images/Used/product-minimalist-bathroom-shelving.jpg differ diff --git a/get-yours-shopify-theme/docs/demo-content/optimised-images/Used/product-minimalist-desk-organiser.jpg b/get-yours-shopify-theme/docs/demo-content/optimised-images/Used/product-minimalist-desk-organiser.jpg new file mode 100644 index 00000000000..827daa8ceaa Binary files /dev/null and b/get-yours-shopify-theme/docs/demo-content/optimised-images/Used/product-minimalist-desk-organiser.jpg differ diff --git a/get-yours-shopify-theme/docs/demo-content/optimised-images/Used/product-minimalist-pantry-jars.jpg b/get-yours-shopify-theme/docs/demo-content/optimised-images/Used/product-minimalist-pantry-jars.jpg new file mode 100644 index 00000000000..d5907526877 Binary files /dev/null and b/get-yours-shopify-theme/docs/demo-content/optimised-images/Used/product-minimalist-pantry-jars.jpg differ diff --git a/get-yours-shopify-theme/docs/demo-content/optimised-images/Used/product-modular-fridge-storage-bins.jpg b/get-yours-shopify-theme/docs/demo-content/optimised-images/Used/product-modular-fridge-storage-bins.jpg new file mode 100644 index 00000000000..08124fe3858 Binary files /dev/null and b/get-yours-shopify-theme/docs/demo-content/optimised-images/Used/product-modular-fridge-storage-bins.jpg differ diff --git a/get-yours-shopify-theme/docs/demo-content/optimised-images/Used/product-rolling-storage-cart-display.jpg b/get-yours-shopify-theme/docs/demo-content/optimised-images/Used/product-rolling-storage-cart-display.jpg new file mode 100644 index 00000000000..e86bdde7b86 Binary files /dev/null and b/get-yours-shopify-theme/docs/demo-content/optimised-images/Used/product-rolling-storage-cart-display.jpg differ diff --git a/get-yours-shopify-theme/docs/demo-content/optimised-images/Used/product-sleek-metal-tablet-stand.jpg b/get-yours-shopify-theme/docs/demo-content/optimised-images/Used/product-sleek-metal-tablet-stand.jpg new file mode 100644 index 00000000000..b3026f6c17d Binary files /dev/null and b/get-yours-shopify-theme/docs/demo-content/optimised-images/Used/product-sleek-metal-tablet-stand.jpg differ diff --git a/get-yours-shopify-theme/docs/demo-content/optimised-images/Used/product-tech-organiser.jpg b/get-yours-shopify-theme/docs/demo-content/optimised-images/Used/product-tech-organiser.jpg new file mode 100644 index 00000000000..f3c06993dd1 Binary files /dev/null and b/get-yours-shopify-theme/docs/demo-content/optimised-images/Used/product-tech-organiser.jpg differ diff --git a/get-yours-shopify-theme/docs/demo-content/optimised-images/Used/product-travel-accessories.jpg b/get-yours-shopify-theme/docs/demo-content/optimised-images/Used/product-travel-accessories.jpg new file mode 100644 index 00000000000..6016d7148c7 Binary files /dev/null and b/get-yours-shopify-theme/docs/demo-content/optimised-images/Used/product-travel-accessories.jpg differ diff --git a/get-yours-shopify-theme/docs/demo-content/optimised-images/Used/product-travel-pouch-set.jpg b/get-yours-shopify-theme/docs/demo-content/optimised-images/Used/product-travel-pouch-set.jpg new file mode 100644 index 00000000000..8af02b3eaa3 Binary files /dev/null and b/get-yours-shopify-theme/docs/demo-content/optimised-images/Used/product-travel-pouch-set.jpg differ diff --git a/get-yours-shopify-theme/docs/demo-content/optimised-images/Used/product-under-shelf-wire-storage-basket.jpg b/get-yours-shopify-theme/docs/demo-content/optimised-images/Used/product-under-shelf-wire-storage-basket.jpg new file mode 100644 index 00000000000..1cb8dcc3954 Binary files /dev/null and b/get-yours-shopify-theme/docs/demo-content/optimised-images/Used/product-under-shelf-wire-storage-basket.jpg differ diff --git a/get-yours-shopify-theme/docs/demo-content/optimised-images/hero-main-image.jpg b/get-yours-shopify-theme/docs/demo-content/optimised-images/hero-main-image.jpg new file mode 100644 index 00000000000..f002e34926e Binary files /dev/null and b/get-yours-shopify-theme/docs/demo-content/optimised-images/hero-main-image.jpg differ diff --git a/get-yours-shopify-theme/docs/demo-content/optimised-images/hero-office-desk.jpg b/get-yours-shopify-theme/docs/demo-content/optimised-images/hero-office-desk.jpg new file mode 100644 index 00000000000..79c924eeca0 Binary files /dev/null and b/get-yours-shopify-theme/docs/demo-content/optimised-images/hero-office-desk.jpg differ diff --git a/get-yours-shopify-theme/docs/demo-content/optimised-images/hero-travel-accessories-candidate.jpg b/get-yours-shopify-theme/docs/demo-content/optimised-images/hero-travel-accessories-candidate.jpg new file mode 100644 index 00000000000..f1bab420771 Binary files /dev/null and b/get-yours-shopify-theme/docs/demo-content/optimised-images/hero-travel-accessories-candidate.jpg differ diff --git a/get-yours-shopify-theme/docs/demo-content/optimised-images/product-beauty-essentials.jpg b/get-yours-shopify-theme/docs/demo-content/optimised-images/product-beauty-essentials.jpg new file mode 100644 index 00000000000..43d485737f1 Binary files /dev/null and b/get-yours-shopify-theme/docs/demo-content/optimised-images/product-beauty-essentials.jpg differ diff --git a/get-yours-shopify-theme/docs/demo-content/optimised-images/product-black-cable-clips.jpg b/get-yours-shopify-theme/docs/demo-content/optimised-images/product-black-cable-clips.jpg new file mode 100644 index 00000000000..633b00a61e7 Binary files /dev/null and b/get-yours-shopify-theme/docs/demo-content/optimised-images/product-black-cable-clips.jpg differ diff --git a/get-yours-shopify-theme/docs/demo-content/optimised-images/product-minimalist-kitchen-storage-with-glass-jars.jpg b/get-yours-shopify-theme/docs/demo-content/optimised-images/product-minimalist-kitchen-storage-with-glass-jars.jpg new file mode 100644 index 00000000000..307bd39f5d3 Binary files /dev/null and b/get-yours-shopify-theme/docs/demo-content/optimised-images/product-minimalist-kitchen-storage-with-glass-jars.jpg differ diff --git a/get-yours-shopify-theme/docs/demo-content/optimised-images/product-minimalist-travel-toiletry-set.jpg b/get-yours-shopify-theme/docs/demo-content/optimised-images/product-minimalist-travel-toiletry-set.jpg new file mode 100644 index 00000000000..a5e72e2d397 Binary files /dev/null and b/get-yours-shopify-theme/docs/demo-content/optimised-images/product-minimalist-travel-toiletry-set.jpg differ diff --git a/get-yours-shopify-theme/docs/demo-content/optimised-images/product-minimalist-wooden-monitor-stand-with-drawer.jpg b/get-yours-shopify-theme/docs/demo-content/optimised-images/product-minimalist-wooden-monitor-stand-with-drawer.jpg new file mode 100644 index 00000000000..ed60af887ef Binary files /dev/null and b/get-yours-shopify-theme/docs/demo-content/optimised-images/product-minimalist-wooden-monitor-stand-with-drawer.jpg differ diff --git a/get-yours-shopify-theme/docs/demo-content/optimised-images/product-modern-kitchen-sink-organiser.jpg b/get-yours-shopify-theme/docs/demo-content/optimised-images/product-modern-kitchen-sink-organiser.jpg new file mode 100644 index 00000000000..6bd1be710a9 Binary files /dev/null and b/get-yours-shopify-theme/docs/demo-content/optimised-images/product-modern-kitchen-sink-organiser.jpg differ diff --git a/get-yours-shopify-theme/docs/demo-content/optimised-images/product-modular-shoe-storage.jpg b/get-yours-shopify-theme/docs/demo-content/optimised-images/product-modular-shoe-storage.jpg new file mode 100644 index 00000000000..2a1b6945ead Binary files /dev/null and b/get-yours-shopify-theme/docs/demo-content/optimised-images/product-modular-shoe-storage.jpg differ diff --git a/get-yours-shopify-theme/docs/demo-content/optimised-images/product-stacked-storage-fresh-produce.jpg b/get-yours-shopify-theme/docs/demo-content/optimised-images/product-stacked-storage-fresh-produce.jpg new file mode 100644 index 00000000000..36c94329c05 Binary files /dev/null and b/get-yours-shopify-theme/docs/demo-content/optimised-images/product-stacked-storage-fresh-produce.jpg differ diff --git a/get-yours-shopify-theme/docs/demo-content/optimised-images/product-water-resistant-travel-cable-bag.jpg b/get-yours-shopify-theme/docs/demo-content/optimised-images/product-water-resistant-travel-cable-bag.jpg new file mode 100644 index 00000000000..aa0f0d86bfc Binary files /dev/null and b/get-yours-shopify-theme/docs/demo-content/optimised-images/product-water-resistant-travel-cable-bag.jpg differ diff --git a/get-yours-shopify-theme/docs/demo-content/original-inventory.md b/get-yours-shopify-theme/docs/demo-content/original-inventory.md new file mode 100644 index 00000000000..989a617e982 --- /dev/null +++ b/get-yours-shopify-theme/docs/demo-content/original-inventory.md @@ -0,0 +1,88 @@ +# Demo Content Original Inventory + +## Source Folder Check + +Expected source folder from original brief: + +```text +/Users/thabisoradebe/Desktop/GY_Demo_Content +``` + +Fallback checked: + +```text +~/Desktop/GY_Demo_Content +``` + +Corrected source folder: + +```text +/Users/thabisoradebe/Downloads/GY_Demo_Content +``` + +Result: corrected source folder found. + +Nearby Desktop folders/files checked: + +- `/Users/thabisoradebe/Desktop/stitch_everyday_essentials_marketplace_ui` +- `/Users/thabisoradebe/Desktop/stitch.zip` + +The Downloads source folder contains 30 PNG demo images plus `.DS_Store`. + +## Inventory Summary + +| Item | Count | +| --- | ---: | +| Total files in `GY_Demo_Content` | 31 | +| PNG image files found | 30 | +| Hero images found | 2 | +| Product images found | 28 | +| Non-conforming files found | 2 | +| Obvious duplicate/unusable images found | 0 | +| Images optimised | 31 | + +## Image Extensions Found + +| Extension | Count | +| --- | ---: | +| `.png` | 30 | +| `.DS_Store` | 1 | + +## Non-Conforming Files + +- `.DS_Store` +- `ProductAdjustableMetalLaptopStand.png` uses the `Product` prefix but not the `Product-` separator pattern. + +## Notable Source Issues + +- No dedicated travel hero image was found. +- `Product-TravelAccessories.png` is landscape and was also exported as `hero-travel-accessories-candidate.jpg` for temporary homepage use. +- Several source names contain spelling issues, but normalised output filenames use corrected ecommerce spelling: + - `Product-GrayFrabricStorageBoxesWithFoldedClothing.png` -> `product-gray-fabric-storage-boxes-with-folded-clothing.jpg` + - `Product-MnimalistTravelToiletrySet.png` -> `product-minimalist-travel-toiletry-set.jpg` + - `Product-ModernKitchenSinOrganiser.png` -> `product-modern-kitchen-sink-organiser.jpg` + - `Product-ElegantJeweleryBox.png` -> `product-elegant-jewellery-box.jpg` + +## Naming Convention Expected + +Hero image source files should begin with `Hero-` or `Hero`, for example: + +- `HeroMainImage.png` +- `HeroOffice-desk.png` +- `HeroTravel-accessories.png` + +Product image source files should begin with `Product-` or `Product`, for example: + +- `Product-Adjustable-Drawer-Set.png` +- `Product-Minimalist-Jars.png` + +Normalised copies should use lowercase kebab-case names: + +- `hero-main-image.jpg` +- `hero-office-desk.jpg` +- `hero-travel-accessories.jpg` +- `product-adjustable-drawer-divider-set.jpg` + +## Source File Safety + +No source files were modified, renamed, moved or deleted. diff --git a/get-yours-shopify-theme/docs/demo-content/product-collection-matrix.md b/get-yours-shopify-theme/docs/demo-content/product-collection-matrix.md new file mode 100644 index 00000000000..43b0f45ac1a --- /dev/null +++ b/get-yours-shopify-theme/docs/demo-content/product-collection-matrix.md @@ -0,0 +1,24 @@ +# Product Collection Matrix + +| Product title | Image filename | Primary collection | Additional collections | Homepage rail | +| --- | --- | --- | --- | --- | +| Adjustable Drawer Divider Set | `product-adjustable-drawer-divider-set.jpg` | Featured Practical Finds | Best Sellers, Home Organisation | Featured Practical Finds | +| Modular Fridge Storage Bins | `product-modular-fridge-storage-bins.jpg` | Featured Practical Finds | New Arrivals, Kitchen & Storage | Featured Practical Finds | +| Under-Shelf Wire Storage Basket | `product-under-shelf-wire-storage-basket.jpg` | Featured Practical Finds | Best Sellers, Home Organisation, Kitchen & Storage | Featured Practical Finds | +| Gray Fabric Storage Boxes | `product-gray-fabric-storage-boxes-with-folded-clothing.jpg` | Home Organisation | Lifestyle | Home Organisation Picks | +| Beige Linen Storage Bags | `product-beige-linen-storage-bags.jpg` | Home Organisation | Lifestyle | Home Organisation Picks | +| Bamboo Desk Organizer | `product-bamboo-desk-organiser.jpg` | Office & Desk Essentials | Featured Practical Finds | Office & Desk Essentials | +| Minimalist Desk Organizer | `product-minimalist-desk-organiser.jpg` | Office & Desk Essentials | New Arrivals | Office & Desk Essentials | +| Ergonomic Aluminium Laptop Stand | `product-ergonomic-aluminium-laptop-stand.jpg` | Best Sellers | Office & Desk Essentials | Best Sellers | +| Adjustable Metal Laptop Stand | `product-adjustable-metal-laptop-stand.jpg` | Office & Desk Essentials | Tech Accessories | Office & Desk Essentials | +| Sleek Metal Tablet Stand | `product-sleek-metal-tablet-stand.jpg` | Office & Desk Essentials | Tech Accessories | Office & Desk Essentials | +| Desk Cable Organiser | `product-desk-cable-organiser.jpg` | Featured Practical Finds | Best Sellers, Office & Desk Essentials, Tech Accessories | Featured Practical Finds | +| Tech Organizer Case | `product-tech-organiser.jpg` | Tech Accessories | Travel, New Arrivals | New Arrivals | +| Travel Pouch Set | `product-travel-pouch-set.jpg` | Travel | Lifestyle, Featured Practical Finds | Featured Practical Finds | +| Travel Toiletry Organizer | `product-minimalist-travel-toiletry-set.jpg` | Travel | Best Sellers | Best Sellers | +| Pantry Glass Jar Set | `product-minimalist-pantry-jars.jpg` | Kitchen & Storage | Home Organisation | Home Organisation Picks | +| Kitchen Sink Organizer | `product-modern-kitchen-sink-organiser.jpg` | Kitchen & Storage | Featured Practical Finds | Featured Practical Finds | +| Rolling Storage Cart | `product-rolling-storage-cart-display.jpg` | Home Organisation | Best Sellers, Lifestyle | Home Organisation Picks | +| Jewelry Organizer Box | `product-elegant-jewellery-box.jpg` | Lifestyle | Home Organisation | Home Organisation Picks | +| Laundry Hamper | `product-beige-laundry-hamper.jpg` | Home Organisation | Lifestyle | Home Organisation Picks | +| Bathroom Wall Shelf Organizer | `product-minimalist-bathroom-shelving.jpg` | Home Organisation | Lifestyle | Home Organisation Picks | diff --git a/get-yours-shopify-theme/docs/demo-content/scripts/prepare-demo-content-summary.py b/get-yours-shopify-theme/docs/demo-content/scripts/prepare-demo-content-summary.py new file mode 100644 index 00000000000..e169fd38b18 --- /dev/null +++ b/get-yours-shopify-theme/docs/demo-content/scripts/prepare-demo-content-summary.py @@ -0,0 +1,21 @@ +#!/usr/bin/env python3 +import csv +from pathlib import Path + +base = Path(__file__).resolve().parents[1] +products = list(csv.DictReader((base / "demo-products.csv").open(newline=""))) +collections = list(csv.DictReader((base / "demo-collections.csv").open(newline=""))) +images = {p.name for p in (base / "optimised-images").glob("*.jpg")} +product_handles = [p["handle"] for p in products] +collection_handles = [c["handle"] for c in collections] +missing_product_images = [p["image_filename"] for p in products if p["image_filename"] not in images] +duplicate_product_handles = sorted({h for h in product_handles if product_handles.count(h) > 1}) +duplicate_collection_handles = sorted({h for h in collection_handles if collection_handles.count(h) > 1}) +print(f"products: {len(products)}") +print(f"collections: {len(collections)}") +print(f"images: {len(images)}") +print(f"missing_product_images: {missing_product_images}") +print(f"duplicate_product_handles: {duplicate_product_handles}") +print(f"duplicate_collection_handles: {duplicate_collection_handles}") +if missing_product_images or duplicate_product_handles or duplicate_collection_handles: + raise SystemExit(1) diff --git a/get-yours-shopify-theme/docs/demo-content/shopify-admin-demo-setup-checklist.md b/get-yours-shopify-theme/docs/demo-content/shopify-admin-demo-setup-checklist.md new file mode 100644 index 00000000000..f8fd74e995f --- /dev/null +++ b/get-yours-shopify-theme/docs/demo-content/shopify-admin-demo-setup-checklist.md @@ -0,0 +1,41 @@ +# Shopify Admin Demo Setup Checklist + +## A. Create Manual Collections + +- [ ] Create `Featured Practical Finds` with handle `featured-practical-finds`. Use manual collection type. +- [ ] Create `New Arrivals` with handle `new-arrivals`. Use manual collection type. +- [ ] Create `Best Sellers` with handle `best-sellers`. Use manual collection type. +- [ ] Create `Home Organisation` with handle `home-organisation`. Use manual collection type. +- [ ] Create `Office & Desk Essentials` with handle `office-desk-essentials`. Use manual collection type. +- [ ] Create `Kitchen & Storage` with handle `kitchen-storage`. Use manual collection type. +- [ ] Create `Lifestyle` with handle `lifestyle`. Use manual collection type. +- [ ] Create `Travel` with handle `travel`. Use manual collection type. +- [ ] Create `Tech Accessories` with handle `tech-accessories`. Use manual collection type. + +## B. Import Or Manually Create Products + +- [ ] Use `shopify-products-import-no-images.csv` for the first product import. +- [ ] Do not use `shopify-products-import.csv` for the first import unless public image URLs have been added. +- [ ] Products in the no-image import are set to `Published: TRUE` and `Status: active` for preview visibility. +- [ ] Confirm prices are in ZAR after import. +- [ ] Attach matching optimised JPGs manually after import using `optimised-images/`. +- [ ] Set vendor to `Get Yours`. + +## C. Assign Products To Collections + +- [ ] Use `product-collection-matrix.md` for collection assignment. +- [ ] Make sure each homepage rail collection has at least four products. + +## D. Assign Homepage Sections + +- [ ] Assign `hero-main-image.jpg` to the main promo tile. +- [ ] Assign `hero-office-desk.jpg` to the Office & Desk promo tile. +- [ ] Decide whether to use `hero-travel-accessories-candidate.jpg` for the Travel promo tile. +- [ ] Link each category card to its matching collection. +- [ ] Assign each product rail to its matching collection. +- [ ] Add trust links only when real support/policy URLs exist. + +## Safety + +- [ ] Do not publish to the live theme during demo setup. +- [ ] Do not use `--publish` or `--allow-live`. diff --git a/get-yours-shopify-theme/docs/demo-content/shopify-import-notes.md b/get-yours-shopify-theme/docs/demo-content/shopify-import-notes.md new file mode 100644 index 00000000000..ce0d4e9abd2 --- /dev/null +++ b/get-yours-shopify-theme/docs/demo-content/shopify-import-notes.md @@ -0,0 +1,55 @@ +# Shopify Import Notes + +## Recommended Approach + +Use manual Shopify admin setup or Shopify CSV import for this demo content phase. Do not run automated product creation until explicitly approved. + +## Create Collections Manually + +1. In Shopify admin, open `Products > Collections`. +2. Create the collections listed in `demo-collections.csv`. +3. Use manual collections for this demo phase. +4. Use the provided handles and descriptions where practical. +5. Add collection images later if suitable category images are available. + +## Create Products Manually + +1. In Shopify admin, open `Products`. +2. Create each product from `demo-products.csv`. +3. Set vendor to `Get Yours`. +4. Set status to `Draft`. +5. Add price in ZAR. +6. Add compare-at price only where included. +7. Add tags and product type from the CSV. +8. Use the short description and bullet highlights as starter content. + +## Attach Product Images + +1. Optimise source images once `GY_Demo_Content` is available. +2. Upload the normalised image for each matching product. +3. Set the image alt text from `demo-products.csv`. +4. Keep images as product media, not hard-coded theme assets. + +## Assign Products To Collections + +1. Open each product in Shopify admin. +2. Add it to the manual collections listed in the `assigned_collections` column. +3. Confirm that homepage rail collections contain at least four products each. + +## Assign Homepage Sections + +1. Open the development theme editor. +2. Assign the hero images to `Get Yours promo grid hero`. +3. Assign category grid blocks to the matching collections. +4. Assign each product rail to its matching collection: + - Featured Practical Finds + - New Arrivals + - Best Sellers + - Home Organisation + - Office & Desk Essentials +5. Save the development theme only. Do not publish to the live theme. + +## CSV Import Option + +The current `demo-products.csv` is a planning CSV, not a native Shopify product import CSV. If Shopify CSV import is preferred, create a Shopify-format import file from this plan after images are available. + diff --git a/get-yours-shopify-theme/docs/demo-content/shopify-products-import-no-images.csv b/get-yours-shopify-theme/docs/demo-content/shopify-products-import-no-images.csv new file mode 100644 index 00000000000..5d2efb641a6 --- /dev/null +++ b/get-yours-shopify-theme/docs/demo-content/shopify-products-import-no-images.csv @@ -0,0 +1,21 @@ +Handle,Title,Body (HTML),Vendor,Product Category,Type,Tags,Published,Option1 Name,Option1 Value,Variant SKU,Variant Inventory Qty,Variant Inventory Tracker,Variant Inventory Policy,Variant Fulfillment Service,Variant Price,Variant Compare At Price,Variant Requires Shipping,Variant Taxable,Status +adjustable-drawer-divider-set,Adjustable Drawer Divider Set,"

Adjustable dividers for neater drawers in bedrooms, kitchens or offices.

",Get Yours,,Home Organisation,"drawer dividers, storage, home organisation",TRUE,Title,Default Title,GY-ADJUSTABLE-DRAWER-DIVIDER-SET,25,,deny,manual,149,,TRUE,TRUE,active +modular-fridge-storage-bins,Modular Fridge Storage Bins,

Storage bins for organising fridge shelves and pantry spaces.

,Get Yours,,Kitchen & Storage,"fridge storage, kitchen, organisation",TRUE,Title,Default Title,GY-MODULAR-FRIDGE-STORAGE-BINS,25,,deny,manual,199,,TRUE,TRUE,active +under-shelf-wire-storage-basket,Under-Shelf Wire Storage Basket,

A simple under-shelf basket for adding storage without drilling.

,Get Yours,,Home Organisation,"wire basket, shelf storage, home organisation",TRUE,Title,Default Title,GY-UNDER-SHELF-WIRE-STORAGE-BASKET,25,,deny,manual,129,,TRUE,TRUE,active +gray-fabric-storage-boxes,Gray Fabric Storage Boxes,"

Soft fabric boxes for wardrobes, shelves and general tidy-up storage.

",Get Yours,,Home Organisation,"fabric storage, boxes, home organisation",TRUE,Title,Default Title,GY-GRAY-FABRIC-STORAGE-BOXES,25,,deny,manual,175,,TRUE,TRUE,active +beige-linen-storage-bags,Beige Linen Storage Bags,"

Light storage bags for seasonal clothing, bedding and household items.

",Get Yours,,Home Organisation,"linen bags, storage, home organisation",TRUE,Title,Default Title,GY-BEIGE-LINEN-STORAGE-BAGS,25,,deny,manual,149,,TRUE,TRUE,active +bamboo-desk-organizer,Bamboo Desk Organizer,"

A compact desktop organiser for pens, notes and everyday stationery.

",Get Yours,,Office & Desk,"desk organiser, bamboo, office",TRUE,Title,Default Title,GY-BAMBOO-DESK-ORGANIZER,25,,deny,manual,199,,TRUE,TRUE,active +minimalist-desk-organizer,Minimalist Desk Organizer,

A clean desk organiser for small office and study essentials.

,Get Yours,,Office & Desk,"desk organiser, office, study",TRUE,Title,Default Title,GY-MINIMALIST-DESK-ORGANIZER,25,,deny,manual,129,,TRUE,TRUE,active +ergonomic-aluminium-laptop-stand,Ergonomic Aluminium Laptop Stand,

A sturdy laptop stand for raising screens during work or study.

,Get Yours,,Office & Desk,"laptop stand, office, desk",TRUE,Title,Default Title,GY-ERGONOMIC-ALUMINIUM-LAPTOP-STAND,25,,deny,manual,289,399,TRUE,TRUE,active +adjustable-metal-laptop-stand,Adjustable Metal Laptop Stand,

An adjustable stand for flexible laptop positioning at a desk.

,Get Yours,,Office & Desk,"laptop stand, adjustable, office",TRUE,Title,Default Title,GY-ADJUSTABLE-METAL-LAPTOP-STAND,25,,deny,manual,249,,TRUE,TRUE,active +sleek-metal-tablet-stand,Sleek Metal Tablet Stand,"

A compact metal stand for tablets, phones and small screens.

",Get Yours,,Tech Accessories,"tablet stand, tech accessories, desk",TRUE,Title,Default Title,GY-SLEEK-METAL-TABLET-STAND,25,,deny,manual,129,,TRUE,TRUE,active +desk-cable-organiser,Desk Cable Organiser,

A simple cable organiser for keeping charging cables within reach.

,Get Yours,,Tech Accessories,"cable organiser, desk, tech accessories",TRUE,Title,Default Title,GY-DESK-CABLE-ORGANISER,25,,deny,manual,79,,TRUE,TRUE,active +tech-organizer-case,Tech Organizer Case,"

A zip case for carrying cables, chargers and everyday tech accessories.

",Get Yours,,Tech Accessories,"tech case, cables, travel",TRUE,Title,Default Title,GY-TECH-ORGANIZER-CASE,25,,deny,manual,149,,TRUE,TRUE,active +travel-pouch-set,Travel Pouch Set,"

A practical pouch set for packing toiletries, cables or daily essentials.

",Get Yours,,Travel,"travel pouches, packing, organiser",TRUE,Title,Default Title,GY-TRAVEL-POUCH-SET,25,,deny,manual,175,,TRUE,TRUE,active +travel-toiletry-organizer,Travel Toiletry Organizer,

A compartment organiser for toiletries and small travel essentials.

,Get Yours,,Travel,"toiletry organiser, travel, bag",TRUE,Title,Default Title,GY-TRAVEL-TOILETRY-ORGANIZER,25,,deny,manual,199,,TRUE,TRUE,active +pantry-glass-jar-set,Pantry Glass Jar Set,

A clean jar set for pantry staples and kitchen shelf organisation.

,Get Yours,,Kitchen & Storage,"glass jars, pantry, kitchen storage",TRUE,Title,Default Title,GY-PANTRY-GLASS-JAR-SET,25,,deny,manual,249,,TRUE,TRUE,active +kitchen-sink-organizer,Kitchen Sink Organizer,"

A compact organiser for sponge, brush and sink-side essentials.

",Get Yours,,Kitchen & Storage,"sink organiser, kitchen, storage",TRUE,Title,Default Title,GY-KITCHEN-SINK-ORGANIZER,25,,deny,manual,99,,TRUE,TRUE,active +rolling-storage-cart,Rolling Storage Cart,"

A rolling cart for flexible storage in kitchens, bathrooms or workspaces.

",Get Yours,,Home Organisation,"storage cart, home organisation, rolling cart",TRUE,Title,Default Title,GY-ROLLING-STORAGE-CART,25,,deny,manual,399,,TRUE,TRUE,active +jewelry-organizer-box,Jewelry Organizer Box,

A small organiser box for jewellery and accessories.

,Get Yours,,Lifestyle,"jewelry organiser, storage, lifestyle",TRUE,Title,Default Title,GY-JEWELRY-ORGANIZER-BOX,25,,deny,manual,175,,TRUE,TRUE,active +laundry-hamper,Laundry Hamper,"

A simple laundry hamper for bedrooms, bathrooms or laundry areas.

",Get Yours,,Home Organisation,"laundry hamper, home organisation, storage",TRUE,Title,Default Title,GY-LAUNDRY-HAMPER,25,,deny,manual,199,,TRUE,TRUE,active +bathroom-wall-shelf-organizer,Bathroom Wall Shelf Organizer,

A wall shelf organiser for toiletries and small bathroom essentials.

,Get Yours,,Home Organisation,"bathroom shelf, wall organiser, storage",TRUE,Title,Default Title,GY-BATHROOM-WALL-SHELF-ORGANIZER,25,,deny,manual,149,,TRUE,TRUE,active diff --git a/get-yours-shopify-theme/docs/demo-content/shopify-products-import.csv b/get-yours-shopify-theme/docs/demo-content/shopify-products-import.csv new file mode 100644 index 00000000000..3ca49a26217 --- /dev/null +++ b/get-yours-shopify-theme/docs/demo-content/shopify-products-import.csv @@ -0,0 +1,21 @@ +Handle,Title,Body (HTML),Vendor,Product Category,Type,Tags,Published,Option1 Name,Option1 Value,Variant SKU,Variant Inventory Qty,Variant Inventory Tracker,Variant Inventory Policy,Variant Fulfillment Service,Variant Price,Variant Compare At Price,Variant Requires Shipping,Variant Taxable,Image Src,Image Position,Image Alt Text,Status +adjustable-drawer-divider-set,Adjustable Drawer Divider Set,"

Adjustable dividers for neater drawers in bedrooms, kitchens or offices.

",Get Yours,,Home Organisation,"drawer dividers, storage, home organisation",FALSE,Title,Default Title,GY-ADJUSTABLE-DRAWER-DIVIDER-SET,25,,deny,manual,149,,TRUE,TRUE,,1,Adjustable drawer divider set for organised drawers,draft +modular-fridge-storage-bins,Modular Fridge Storage Bins,

Storage bins for organising fridge shelves and pantry spaces.

,Get Yours,,Kitchen & Storage,"fridge storage, kitchen, organisation",FALSE,Title,Default Title,GY-MODULAR-FRIDGE-STORAGE-BINS,25,,deny,manual,199,,TRUE,TRUE,,1,Modular fridge storage bins arranged on a shelf,draft +under-shelf-wire-storage-basket,Under-Shelf Wire Storage Basket,

A simple under-shelf basket for adding storage without drilling.

,Get Yours,,Home Organisation,"wire basket, shelf storage, home organisation",FALSE,Title,Default Title,GY-UNDER-SHELF-WIRE-STORAGE-BASKET,25,,deny,manual,129,,TRUE,TRUE,,1,Under-shelf wire basket for extra storage,draft +gray-fabric-storage-boxes,Gray Fabric Storage Boxes,"

Soft fabric boxes for wardrobes, shelves and general tidy-up storage.

",Get Yours,,Home Organisation,"fabric storage, boxes, home organisation",FALSE,Title,Default Title,GY-GRAY-FABRIC-STORAGE-BOXES,25,,deny,manual,175,,TRUE,TRUE,,1,Gray fabric storage boxes with folded clothing,draft +beige-linen-storage-bags,Beige Linen Storage Bags,"

Light storage bags for seasonal clothing, bedding and household items.

",Get Yours,,Home Organisation,"linen bags, storage, home organisation",FALSE,Title,Default Title,GY-BEIGE-LINEN-STORAGE-BAGS,25,,deny,manual,149,,TRUE,TRUE,,1,Beige linen storage bags for home organisation,draft +bamboo-desk-organizer,Bamboo Desk Organizer,"

A compact desktop organiser for pens, notes and everyday stationery.

",Get Yours,,Office & Desk,"desk organiser, bamboo, office",FALSE,Title,Default Title,GY-BAMBOO-DESK-ORGANIZER,25,,deny,manual,199,,TRUE,TRUE,,1,Bamboo desk organiser with compartments,draft +minimalist-desk-organizer,Minimalist Desk Organizer,

A clean desk organiser for small office and study essentials.

,Get Yours,,Office & Desk,"desk organiser, office, study",FALSE,Title,Default Title,GY-MINIMALIST-DESK-ORGANIZER,25,,deny,manual,129,,TRUE,TRUE,,1,Minimalist desk organiser on a clean workspace,draft +ergonomic-aluminium-laptop-stand,Ergonomic Aluminium Laptop Stand,

A sturdy laptop stand for raising screens during work or study.

,Get Yours,,Office & Desk,"laptop stand, office, desk",FALSE,Title,Default Title,GY-ERGONOMIC-ALUMINIUM-LAPTOP-STAND,25,,deny,manual,289,399,TRUE,TRUE,,1,Ergonomic aluminium laptop stand on a desk,draft +adjustable-metal-laptop-stand,Adjustable Metal Laptop Stand,

An adjustable stand for flexible laptop positioning at a desk.

,Get Yours,,Office & Desk,"laptop stand, adjustable, office",FALSE,Title,Default Title,GY-ADJUSTABLE-METAL-LAPTOP-STAND,25,,deny,manual,249,,TRUE,TRUE,,1,Adjustable metal laptop stand folded on a desk,draft +sleek-metal-tablet-stand,Sleek Metal Tablet Stand,"

A compact metal stand for tablets, phones and small screens.

",Get Yours,,Tech Accessories,"tablet stand, tech accessories, desk",FALSE,Title,Default Title,GY-SLEEK-METAL-TABLET-STAND,25,,deny,manual,129,,TRUE,TRUE,,1,Sleek metal tablet stand holding a tablet,draft +desk-cable-organiser,Desk Cable Organiser,

A simple cable organiser for keeping charging cables within reach.

,Get Yours,,Tech Accessories,"cable organiser, desk, tech accessories",FALSE,Title,Default Title,GY-DESK-CABLE-ORGANISER,25,,deny,manual,79,,TRUE,TRUE,,1,Desk cable organiser for tidy charging cables,draft +tech-organizer-case,Tech Organizer Case,"

A zip case for carrying cables, chargers and everyday tech accessories.

",Get Yours,,Tech Accessories,"tech case, cables, travel",FALSE,Title,Default Title,GY-TECH-ORGANIZER-CASE,25,,deny,manual,149,,TRUE,TRUE,,1,Tech organiser case with cables and accessories,draft +travel-pouch-set,Travel Pouch Set,"

A practical pouch set for packing toiletries, cables or daily essentials.

",Get Yours,,Travel,"travel pouches, packing, organiser",FALSE,Title,Default Title,GY-TRAVEL-POUCH-SET,25,,deny,manual,175,,TRUE,TRUE,,1,Travel pouch set for packing small items,draft +travel-toiletry-organizer,Travel Toiletry Organizer,

A compartment organiser for toiletries and small travel essentials.

,Get Yours,,Travel,"toiletry organiser, travel, bag",FALSE,Title,Default Title,GY-TRAVEL-TOILETRY-ORGANIZER,25,,deny,manual,199,,TRUE,TRUE,,1,Minimalist travel toiletry organiser set,draft +pantry-glass-jar-set,Pantry Glass Jar Set,

A clean jar set for pantry staples and kitchen shelf organisation.

,Get Yours,,Kitchen & Storage,"glass jars, pantry, kitchen storage",FALSE,Title,Default Title,GY-PANTRY-GLASS-JAR-SET,25,,deny,manual,249,,TRUE,TRUE,,1,Minimalist pantry glass jar set on a kitchen shelf,draft +kitchen-sink-organizer,Kitchen Sink Organizer,"

A compact organiser for sponge, brush and sink-side essentials.

",Get Yours,,Kitchen & Storage,"sink organiser, kitchen, storage",FALSE,Title,Default Title,GY-KITCHEN-SINK-ORGANIZER,25,,deny,manual,99,,TRUE,TRUE,,1,Modern kitchen sink organiser holding everyday sink items,draft +rolling-storage-cart,Rolling Storage Cart,"

A rolling cart for flexible storage in kitchens, bathrooms or workspaces.

",Get Yours,,Home Organisation,"storage cart, home organisation, rolling cart",FALSE,Title,Default Title,GY-ROLLING-STORAGE-CART,25,,deny,manual,399,,TRUE,TRUE,,1,Rolling storage cart with household items,draft +jewelry-organizer-box,Jewelry Organizer Box,

A small organiser box for jewellery and accessories.

,Get Yours,,Lifestyle,"jewelry organiser, storage, lifestyle",FALSE,Title,Default Title,GY-JEWELRY-ORGANIZER-BOX,25,,deny,manual,175,,TRUE,TRUE,,1,Elegant jewellery organiser box with compartments,draft +laundry-hamper,Laundry Hamper,"

A simple laundry hamper for bedrooms, bathrooms or laundry areas.

",Get Yours,,Home Organisation,"laundry hamper, home organisation, storage",FALSE,Title,Default Title,GY-LAUNDRY-HAMPER,25,,deny,manual,199,,TRUE,TRUE,,1,Beige laundry hamper for bedroom or bathroom,draft +bathroom-wall-shelf-organizer,Bathroom Wall Shelf Organizer,

A wall shelf organiser for toiletries and small bathroom essentials.

,Get Yours,,Home Organisation,"bathroom shelf, wall organiser, storage",FALSE,Title,Default Title,GY-BATHROOM-WALL-SHELF-ORGANIZER,25,,deny,manual,149,,TRUE,TRUE,,1,Minimalist bathroom shelving for toiletries,draft diff --git a/get-yours-shopify-theme/docs/final-ui-ux-audit.md b/get-yours-shopify-theme/docs/final-ui-ux-audit.md new file mode 100644 index 00000000000..dab3ccd70f6 --- /dev/null +++ b/get-yours-shopify-theme/docs/final-ui-ux-audit.md @@ -0,0 +1,308 @@ +# Final UI/UX Judgement + +## 1. Overall Judgement + +Recommendation: A. Freeze static prototype and begin Shopify conversion planning. + +The current Get Yours static prototype is strong enough to freeze as the static design foundation before Shopify/Dawn conversion. It should not be treated as launch-ready, but it does now express the right ecommerce direction: practical products, clean value, restrained branding, calm trust cues and a homepage that feels like a store rather than a generic landing page. + +UI/UX score: 7.4 / 10 + +The site does feel like "clean value". It communicates affordability without leaning on aggressive sale language, flashing urgency, cluttered banners or discount-store chaos. The navy, blue, white and restrained gold palette feels credible for a new South African ecommerce store. The brand does not yet feel fully mature because product imagery, support/legal copy, reviews, search and cart behavior are still placeholder/static, but the visual foundation is credible enough to carry into Dawn. + +The biggest concern is not the layout anymore. The biggest concern is trust depth: legal pages, returns, delivery details, real payment reassurance, real support channels and real product data must be completed before launch. + +## 2. Homepage + +Current flow: + +1. Hero promo grid +2. Shop by Category +3. Featured Practical Finds +4. New Arrivals +5. Best Sellers +6. Home Organisation Picks +7. Office & Desk Essentials +8. Trust / Delivery / WhatsApp Support + +What works: + +- The homepage now feels much more like an ecommerce storefront. The added product rails create a browsing rhythm customers expect from a general everyday-products shop. +- The promo-grid hero communicates merchandising immediately and avoids corporate/agency energy. +- Shop by Category is clear and useful as an early orientation section. +- The product rails create enough depth for a static prototype and make the store feel less empty. +- Trust / Delivery / WhatsApp Support lands in the right place after browsing, reinforcing confidence before footer navigation. + +What feels weak: + +- Five product rails in a row are useful for ecommerce depth, but they are visually repetitive because every rail uses the same card density, same products style and similar image sources. +- "Featured Practical Finds", "New Arrivals" and "Best Sellers" are all reasonable, but without real merchandising logic they can feel semantically interchangeable. +- "Home Organisation Picks" and "Office & Desk Essentials" are stronger because they imply category aisles. +- The homepage would benefit from one stronger category-specific rail before a generic rail if final merchandising supports it. + +Judgement: + +- Keep the rails for Shopify conversion planning. +- Do not remove rails now; they help the prototype feel like a real store. +- During Shopify setup, make each rail dynamic and purposeful: Featured, New Arrivals, Best Sellers, and one or two category collections. +- If the homepage feels long after real content is added, remove either "Featured Practical Finds" or "Best Sellers", not the category-specific rails. + +## 3. Header + +What works: + +- Header now feels like a real ecommerce store: announcement, logo, search, account, wishlist, cart and nav are all present. +- Search width is balanced on desktop and properly full-width on mobile. +- Announcement bar is calm and credible in navy. +- Navigation labels are familiar and commerce-oriented. +- Mobile header is usable: logo/actions row, search row, collapsible nav. + +What feels weak: + +- Account and wishlist are expectation-setting features, but currently static/placeholder. If not implemented at launch, they may disappoint users. +- "Deals", "New Arrivals" and "Bestsellers" nav links still rely on homepage anchors/sections rather than distinct collection logic. +- Cart total is static, so it can conflict with the cart page until Shopify state is wired. + +Judgement: + +- Header rhythm is good enough to carry into Dawn. +- Search is balanced, not too dominant. +- Keep the nav structure, but make nav destinations real during Shopify conversion. + +## 4. Logo and Brand Application + +What works: + +- The cropped horizontal SVG is now much more credible than the original whitespace-heavy logo rendering. +- Desktop and mobile logo sizes are readable without overpowering the header. +- Navy announcement and footer support the brand well. +- Blue is clearly the action/trust colour. +- Gold is restrained and used mostly as a small accent/badge treatment. + +What feels weak: + +- Footer logo is converted visually to white via CSS filter, which is readable but less brand-rich than a purpose-made reversed logo. +- Product imagery still contributes more to brand perception than the logo does, and some remote/generated images may read as generic dropshipping if left unchanged. + +Judgement: + +- Brand application is now coherent. +- Before launch, create a dedicated white/reversed footer logo asset or confirm the filtered logo is acceptable. +- Keep the current blue/gold balance; do not add large yellow promotional blocks. + +## 5. Product Cards + +What works: + +- Product cards are calm, readable and consistent across homepage rails, collection page and related products. +- Image area, delivery label, title, price and cart action are ordered correctly. +- Cards feel appropriate for clean-value ecommerce: not luxury, not cheap, not chaotic. +- Add to Cart icon buttons are compact and work well in dense rails. + +What feels weak: + +- Repetition is now more visible because the homepage has many rails using similar products/images. +- Some titles will need final merchandising discipline so mobile cards do not feel cramped. +- Icon-only Add to Cart may be less explicit for some customers than a small text button. +- Badges are restrained, which is good, but should be driven by real merchandising logic later. + +Judgement: + +- Product card design is premium enough for this brand tier. +- Keep the component. +- Improve conversion later through real images, real badge logic, review/social proof, and possibly an "Add" label if testing suggests the icon is too subtle. + +## 6. Collection Page + +What works: + +- The page has the right foundation for a Shopify collection template: breadcrumb, heading, filters, product count, sort and grid. +- Desktop filter sidebar is understandable. +- Mobile layout remains usable and avoids overflow. + +What feels weak: + +- Static filters do not affect products. +- Mobile filters stack above the grid and can take too much space once real filter groups are added. +- Product count and pagination are representative rather than believable. + +Judgement: + +- Strong enough as a Shopify collection template foundation. +- Main improvement should happen during Dawn conversion using Shopify native filters/sort. +- Add a mobile filter disclosure/drawer during Shopify implementation, not as another static pass unless the prototype must be user-tested first. + +## 7. Product Detail Page + +What works: + +- Buy-box hierarchy is clear: title, rating, price, stock/delivery, summary, quantity, Add to Cart and Buy Now. +- Trust block is close enough to the purchase decision. +- Product tabs cover the right confidence topics. +- Related products support continued browsing. + +What feels weak: + +- Rating and review count are placeholders; fake-looking reviews can hurt trust. +- Gallery thumbnails do not create a real product media experience. +- Delivery/returns/FAQ tab copy is generic. +- Product variants/options are absent. +- Buy Now behavior is not production-realistic. + +Judgement: + +- The buy-box is clear and conversion-ready as a layout. +- It is not launch-ready as content/functionality. +- During Shopify conversion, wire product form, variants, media gallery, real availability, shipping/returns content and either real reviews or no review count. + +## 8. Cart Drawer and Cart Page + +What works: + +- Cart drawer is simple, readable and reassuring. +- Drawer checkout and continue shopping actions are obvious. +- Cart page has a credible order summary structure with promo code, delivery note, free-shipping progress and recommendations. +- Mobile behavior is clean. + +What feels weak: + +- Drawer and cart are static and can show inconsistent totals/counts. +- No remove item action. +- No empty cart state. +- No real discount application. +- "Proceed to Checkout" currently cannot represent real checkout until Shopify cart is wired. + +Judgement: + +- The cart feels safe and simple visually. +- Before launch, cart logic and empty states are must-have. +- Use Dawn cart behavior as the implementation baseline rather than extending static JS. + +## 9. Content, Legal and Support Pages + +Search: + +- Good enough as a placeholder route. +- Not good enough for launch; must become real search/predictive search with results and empty-state handling. + +Shipping: + +- Good enough as a placeholder. +- Needs real South African delivery regions, timelines, courier expectations, free-shipping threshold and tracking guidance. + +Returns: + +- High risk if left generic. +- Needs final returns window, eligibility, refund process, exclusions and support route. + +Contact: + +- Good placeholder direction, especially WhatsApp. +- Needs real WhatsApp link/number, email, hours and response expectations. + +FAQ: + +- Good structural placeholder. +- Needs deeper customer anxiety coverage before launch. + +Privacy: + +- Legally risky if left generic. +- Must be legally reviewed and aligned with POPIA, Shopify, payments, support and analytics. + +Terms: + +- Legally/commercially risky if left generic. +- Must define purchase terms, pricing, fulfilment, returns, liability and dispute handling. + +Judgement: + +- These pages are acceptable for static design review. +- They are not acceptable for launch. + +## 10. Ecommerce Missing-Elements Checklist + +### Must-Have Before Launch + +- Real Shopify cart state, line item updates, remove actions and empty cart state. +- Real checkout handoff. +- Real search results and no-results state. +- Real collection filtering/sorting and accurate product counts. +- Real product data, variants, availability and product media. +- Shipping policy with delivery regions, timelines, cost rules and tracking expectations. +- Returns/refunds policy with legal/business approval. +- Privacy policy and terms of service with legal review. +- Real contact/support details, including WhatsApp if promised. +- Payment reassurance using actual payment methods/providers. +- Header cart count/total synced with Shopify cart. +- Account route either implemented or hidden. +- Review/rating strategy: real reviews or no review counts. +- Accessibility pass for cart drawer focus, product tabs/disclosures, forms and keyboard flow. + +### Nice-to-Have Before Launch + +- Predictive search. +- Newsletter or WhatsApp opt-in. +- Payment icons in footer/cart. +- Better FAQ accordion/disclosure layout. +- Mobile filter drawer. +- Product recommendation logic. +- Wishlist, only if it can be implemented cleanly. +- Dedicated order tracking instructions/page. +- Localised product imagery and image fallback states. + +### Later After Sales Validation + +- Personalised recommendations. +- Recently viewed products. +- Loyalty/referral mechanics. +- Bundles and cross-sells. +- A/B testing for product cards and Add to Cart treatment. +- Review platform integration. +- WhatsApp automation. +- Advanced account/order history enhancements. + +## 11. Shopify Conversion Implications + +Fix now in static HTML/CSS: + +- Nothing major is required before conversion. +- Only fix static copy or obvious visual defects if stakeholder review identifies specific concerns. + +Fix during Dawn/Liquid conversion: + +- Header, footer and product cards should become sections/snippets. +- Homepage rails should become configurable featured collection sections. +- Collection filters should use Shopify native filtering. +- Product page should use Shopify product form, variants, media and availability. +- Cart drawer/page should use Shopify cart state and Dawn patterns. +- Search should use Shopify search/predictive search. +- Account route should use Shopify customer accounts or be removed until enabled. + +Handle later through Shopify settings/apps: + +- Reviews platform. +- Wishlist. +- Predictive search enhancements if not handled by theme. +- Newsletter/email capture. +- WhatsApp support integration. +- Loyalty/referral mechanics. + +Handle through real product/content data: + +- Final product names, prices, variants and descriptions. +- Real product/category imagery. +- Real badges and merchandising rules. +- Shipping, returns, FAQ and support copy. +- Legal policy copy. +- Homepage collection ordering and rail selection. + +## 12. Final Recommendation + +A. Freeze static prototype and begin Shopify conversion planning. + +Reason: + +The prototype now has enough visual and ecommerce structure to serve as the design foundation. Another static polish pass risks spending time on duplicated HTML that should soon become Shopify sections/snippets. The remaining weaknesses are mostly production ecommerce concerns: real cart/search/filter behavior, legal/support copy, real product data, real imagery and Shopify-powered merchandising. + +The best next step is to move into Dawn conversion planning, preserve the current visual rhythm, and solve the remaining issues in the right layer: Liquid sections, Shopify data, theme settings, product media, policies and selected apps. diff --git a/get-yours-shopify-theme/docs/lp-1-cj-sku-mapping-template.md b/get-yours-shopify-theme/docs/lp-1-cj-sku-mapping-template.md new file mode 100644 index 00000000000..91b0fe74af2 --- /dev/null +++ b/get-yours-shopify-theme/docs/lp-1-cj-sku-mapping-template.md @@ -0,0 +1,9 @@ +# LP-1 Shopify-to-CJ SKU Mapping Template + +Complete and time-stamp every field before a product is approved for launch. Do not substitute a product title for a supplier mapping. + +| Shopify title | Shopify product ID | Shopify variant ID | Shopify SKU | CJ product ID | CJ variant ID | Supplier description | Selling price | Supplier cost | Supplier shipping | Route | Delivery range | Stock | Weight | Dimensions | Restricted | IP/brand risk | Return restrictions | Last verified | Owner | +| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | +| [INPUT] | [INPUT] | [INPUT] | [INPUT] | [INPUT] | [INPUT] | [INPUT] | [ZAR] | [COST] | [COST] | [INPUT] | [CONFIRM] | [CONFIRM] | [CONFIRM] | [CONFIRM] | [Y/N] | [Y/N] | [CONFIRM] | [TIMESTAMP] | [OWNER] | + +Required stop state: `Needs supplier verification` until CJ product, variant, stock, product cost, shipping cost, route, and restriction fields are confirmed. diff --git a/get-yours-shopify-theme/docs/lp-1-customer-support-operations-pack.md b/get-yours-shopify-theme/docs/lp-1-customer-support-operations-pack.md new file mode 100644 index 00000000000..610e5dfc377 --- /dev/null +++ b/get-yours-shopify-theme/docs/lp-1-customer-support-operations-pack.md @@ -0,0 +1,38 @@ +# LP-1 Customer Support Operations Pack + +## Merchant Confirmation Checklist + +- Monitored support inbox and backup inbox: Merchant confirmation required. +- Shopify sender email and merchant-notification recipient: Merchant confirmation required. +- Inbox access, support owner, escalation owner, support hours, and response target: Merchant confirmation required. +- Identity-verification, refund escalation, delivery-exception, and record-retention procedures: Merchant confirmation required. +- Staff must never request card or bank details through email, social media, or a contact form. + +## Reusable Response Templates + +Use only after the facts in the individual order are verified. Do not promise delivery or refund settlement times. + +| Situation | Approved starting wording | +| --- | --- | +| Order received | `We have received your order and will review the order details before fulfilment.` | +| Payment failed | `We could not confirm payment for this order. Please check the payment option shown at checkout or contact us with your order details.` | +| Payment pending | `Your payment is still being processed. We will confirm the order once the payment provider reports a completed status.` | +| Address correction | `Please send the corrected delivery details as soon as possible. We will confirm whether the order can still be updated.` | +| Cancellation before CJ order | `We are reviewing your cancellation request before any supplier commitment is made.` | +| Cancellation after CJ order | `Your cancellation request is under review because supplier processing may already have started.` | +| Supplier order placed | `Your order is being processed with the supplier. We will share an update when verified tracking is available.` | +| Tracking not available | `Tracking is not yet available for this order. We will update you once a valid tracking reference is received.` | +| Tracking supplied | `Tracking is now available for your order. Please use the supplied reference for the latest delivery progress.` | +| Delivery delayed | `We are reviewing the delivery update with the fulfilment route and will share a further update when confirmed.` | +| Out of stock after order | `The item is currently unavailable from the supplier. We are reviewing the available options for your order.` | +| Supplier cost/route issue | `We are reviewing a fulfilment issue affecting this order and will confirm the available next steps.` | +| Incorrect/damaged/missing item | `Please share your order number and clear photos where relevant. We will review the issue before confirming next steps.` | +| Refund submitted | `Your refund has been submitted to the original payment method where applicable.` | +| Refund pending | `The payment provider is still processing your refund. We will confirm once the provider reports a completed status.` | +| Refund completed | `The payment provider has reported the refund as completed. Your bank or payment method may show the update according to its own processing cycle.` | +| Refund issue | `We are investigating the refund status with the payment process and will provide a further update once confirmed.` | +| Escalation acknowledgement | `We have received your escalation and are reviewing the order details with the relevant team.` | + +## Controlled Mailbox Test Plan + +Requires later approval and synthetic test data only: customer order confirmation, merchant new-order notification, refund notification, shipping confirmation, and supported failed-delivery notification. Record generated event, mailbox delivery, timestamp, and safe outcome. Do not resend notifications during testing. diff --git a/get-yours-shopify-theme/docs/lp-1-final-launch-runbook.md b/get-yours-shopify-theme/docs/lp-1-final-launch-runbook.md new file mode 100644 index 00000000000..5e957598317 --- /dev/null +++ b/get-yours-shopify-theme/docs/lp-1-final-launch-runbook.md @@ -0,0 +1,35 @@ +# LP-1 Final Launch Runbook + +No launch action is authorized by this runbook. Each step needs recorded evidence and the stated approval. + +| Step | Prerequisite | Exact action | Stop/rollback condition | Evidence | Owner | Approval | +| --- | --- | --- | --- | --- | --- | +| 1. Resolve pending refund | Existing refund terminal state required | Read-only verify final status | Pending, failed, or mismatch | Shopify/PayFast sanitized status | Payments | Merchant for escalation/retry decisions | +| 2. Failed-payment test | Step 1 complete | Run one approved sandbox failure procedure | Unexpected paid order | Shopify/PayFast result | Payments | Separate approval | +| 3. Cancellation test | Step 1 complete | Run one approved provider cancellation procedure | Paid/incorrect order state | Order and provider state | Payments | Separate approval | +| 4. Mailbox test | Synthetic test plan approved | Verify customer/merchant notification delivery | Mailbox or privacy issue | Generated and received status | Support | Separate approval | +| 5. Manual fulfilment test | Payment tests complete | Verify mapping, tracking, legitimate fulfilment, shipping notification | Stock/cost/mapping issue | Tracker row | Fulfilment | Separate approval | +| 6. Merchant verification | Provider records available | Confirm legal entity and PayFast verification | Name/entity mismatch unresolved | Merchant confirmation | Merchant | Merchant | +| 7. Settlement and fees | Provider documentation | Confirm payout, fee, refund, reserve process | Working capital insufficient | Finance register | Merchant / finance | Merchant | +| 8. Working capital | Costs confirmed | Set supplier and refund reserves | Reserve below stop threshold | Signed operating policy | Merchant | Merchant | +| 9. Shipping decision | Margin model complete | Approve rates, threshold, and wording | R770 copy is aligned, but Admin-rate and checkout verification remain | Checkout tests | Merchant / finance | Merchant | +| 10. Tax/VAT | Adviser review | Confirm tax display, invoices, refunds | Uncertain treatment | Written professional advice | Merchant / adviser | Merchant | +| 11. Product approval | CJ mapping and economics | Approve initial 10-20 products | Any mapping/cost/restriction gap | Product audit | Merchant / fulfilment | Merchant | +| 12. Legal/support approval | LP-3B.4 selected approvals and recipient mailbox recorded | Close remaining supplier/provider, Contact-test, tax and policy decisions; approve support copy | Unresolved legal/operational claim | Recorded merchant, supplier/provider and professional approvals | Merchant / legal | Merchant | +| 13. Publish pages | Step 12 complete | Publish only approved support pages | Placeholder or policy gap | Live URLs | Merchant | Separate approval | +| 14. Confirm legal policies | Step 12 complete | Approve/configure policy content and URLs | Legal or operational wording gap | Four verified policy URLs | Merchant / legal | Separate approval | +| 15. Wire menus | Approved launch collections | PR-1 wired the development header and Footer Shop; add Support/Legal only after approved pages/policies are live | Broken, unpublished or unsupported destination | PR-1 desktop/mobile link QA | Merchant / theme owner | Shop menu complete; content menus separate | +| 16. Contact readiness | Theme copy corrected; native destination still differs from approved mailbox | Align destination/sender and run one hosted retest after approval | Destination misaligned, delivery absent, sender warning, or privacy issue | LP-3B.5B/5C and PR-1 records | Store Owner | Separate approval | +| 17. Final QA | Content/data finalized and password protection enabled | Complete acceptance QA on the active password-protected candidate | P0/P1 issue or password disabled | PR-1 report plus production acceptance log | Theme owner | Merchant | +| 18. Test gateway decision | Payment QA complete | Decide whether to remove Shopify Test Payment Gateway | Unverified live checkout | Decision record | Merchant | Merchant | +| 19. PayPal decision | PayPal process reviewed | Retain or disable after approval | Unverified provider process | Decision record | Merchant | Merchant | +| 20. PayFast live decision | All payment gates complete | Approve live mode activation | Any payment blocker | Approval record | Merchant | Separate approval | +| 21. Publish theme | All P0/P1 closed and storefront password verified enabled | Publish approved development theme for private staging | Password protection off or unresolved blocker | Candidate `141697089639`; rollback Dawn `141692731495` | Merchant | Conditional private-staging approval | +| 22. Remove password | Theme published and smoke plan ready | Remove storefront password | Any public readiness gap | Public access check | Merchant | Separate approval | +| 23. Public smoke test | Store public | Check home, collection, product, cart, checkout handoff, policies | P0 customer issue | Smoke-test log | Theme/ops | Merchant | +| 24. First-order monitoring | Store public | Manually inspect every early order | Payment, risk, stock, or margin exception | Order tracker | Operations | Merchant | +| 25. Daily reconciliation | First orders received | Reconcile Shopify, PayFast, CJ, refunds, and reserve | Mismatch/unresolved refund | Daily reconciliation log | Operations / finance | Merchant | + +## Stop Rules + +Do not publish, remove the storefront password, or activate PayFast live mode while any P0 item in the LP-1 blocker register remains open. Do not place a CJ supplier order before Shopify is Paid and the manual order tracker gates pass. diff --git a/get-yours-shopify-theme/docs/lp-1-launch-blocker-register.md b/get-yours-shopify-theme/docs/lp-1-launch-blocker-register.md new file mode 100644 index 00000000000..9fe2cadfa67 --- /dev/null +++ b/get-yours-shopify-theme/docs/lp-1-launch-blocker-register.md @@ -0,0 +1,33 @@ +# LP-1 Launch Blocker Register + +| ID | Area | Blocker | Severity | Evidence | Required decision/action | Owner | Dependency | Status | +| --- | --- | --- | --- | --- | --- | --- | --- | --- | +| LP1-01 | Refunds | R179 sandbox refund is pending | P0 | One pending PayFast Refund for #1002 | Wait for terminal state; do not retry | Payments owner | PayFast | Deferred until refund terminal state | +| LP1-02 | Payments | PayFast verification, legal entity, fees, settlement and refund process unconfirmed | P0 | Merchant evidence absent | Confirm privately with provider records | Merchant | LP1-01 | Pending merchant decision | +| LP1-03a | Development-theme shipping copy | Former R500 promise | P0 — resolved | LP-3A occurrence audit and hosted-preview retest | R770 wording applied to announcement, product reassurance and cart reassurance | Theme owner | None | Resolved and preview-verified | +| LP1-03b | Shopify Admin shipping wording | Standard/Express rate names and estimates remain Admin-controlled | P1 | Standard R100, Express R150 and estimates observed in Phase 12 | Approve or replace customer-facing rate wording after route validation | Merchant / fulfilment | CJ route verification | Pending merchant decision | +| LP1-03c | Unpublished support pages | Draft copy is aligned to R770 and LP-3B.4 records selected merchant procedures, but recipient, supplier/provider, technical, tax and legal publication gates remain | P1 | LP-3B.1/3B.2/3B.3/3B.4 decision package | Close remaining page-specific supplier, provider, technical, tax and legal gates before publication | Merchant / content owner | LP1-03b, LP1-05, LP1-06, LP1-10 | Drafted but unpublished | +| LP1-03d | Delivery timing | Exact checkout estimates are not operationally verified | P1 | No CJ service evidence | Retain neutral theme wording; approve evidence-based timing only after supplier-route review | Merchant / fulfilment | CJ route verification | Pending merchant decision | +| LP1-03e | Checkout verification | Post-change checkout behaviour has not been rerun | P1 | LP-3A source changes only | Verify R770 threshold, rates and displayed wording in a separately approved controlled test | Merchant / QA owner | LP1-03b | Pending approval | +| LP1-05 | Tax/VAT | Tax treatment not confirmed | P0 | Test order showed included VAT/tax only | Obtain accountant/tax-practitioner advice | Merchant / adviser | Business records | Pending professional confirmation | +| LP1-06 | Support | Public support mailbox is active, but Shopify's native Contact destination is a different private Sender email | P1 | LP-3B.5C read-only Admin/API inspection | Decide whether to align Shopify Sender email/native Contact destination to `info@getyours.online`; separately approve any change and hosted retest | Store Owner | Sender/destination decision | Pending merchant decision | +| LP1-07 | CJ operations | SKU mapping, stock, cost, route, and reserve unverified | P0 | No completed mapping/register | Complete mapping and margin verification | Fulfilment owner | Supplier access | Pending merchant decision | +| LP1-08 | Payments QA | Failed-payment and cancellation tests paused | P1 | Pending refund safeguard | Resume only after LP1-01 terminal state | Payments owner | LP1-01 | Deferred until refund terminal state | +| LP1-09 | Fulfilment QA | Manual fulfilment/tracking test paused | P1 | Correct setting exists but workflow untested | Run controlled test later | Fulfilment owner | LP1-01 | Deferred until refund terminal state | +| LP1-10 | Legal | Policies and support content need approval/review | P0 | LP-3B.2 tax/legal dependency register and LP-3B.3 review briefs | Merchant approval, accountant/tax-practitioner confirmation and South African legal review | Merchant / legal | Operations decisions | Pending professional confirmation | +| LP1-11 | Pages/menus | Development header and Footer Shop are wired; support pages remain unpublished and Support/Legal groups remain intentionally hidden | P1 | PR-1 created isolated launch menus and removed Search placeholders from the development footer | Approve/publish support and legal content before creating and assigning those footer groups | Merchant | LP1-10, LP1-03b/c/d | Shop navigation resolved; content menus deferred | +| LP1-12 | Products | Twenty active products exist, but CJ mapping, supplier cost, shipping route, restrictions and contribution margin remain unverified | P0 | Shopify catalogue inspection confirmed 20 active products with SKUs, prices, inventory and media | Complete LP-2 supplier mapping and approve the initial launch shortlist | Merchant / fulfilment | LP1-07 | Pending merchant decision | +| LP1-13 | Launch controls | Storefront password protection is off; test gateway, PayPal, PayFast live mode and public launch remain unresolved | P0 | PR-1 Shopify Preferences inspection and payment review | Enable and verify password protection before separately approving development-theme publication; resolve payment gates before public launch | Merchant | All P0/P1 | Private-staging publication blocked | +| LP1-14 | Domain/monitoring | Public smoke testing and first-order monitoring are documented but not authorized or executed | P1 | LP-1 Final Launch Runbook steps 23–25 | Assign owners and execute after public-launch approval | Merchant / operations | LP1-13 | Deferred until live-launch approval | +| LP1-15 | Contact operations | Native form and corrected success/safety copy pass; destination still differs from the approved public mailbox and the sender fallback warning remains | P1 | LP-3B.5B/5C and PR-1 preview evidence | Align destination/sender, complete hosted delivery retest and privacy/legal review | Store Owner | LP1-06, legal review | Theme copy resolved; routing pending | + +## Prioritized Action Order + +1. Wait for the existing refund to become terminal. At 24 hours pending, prepare sanitized PayFast support evidence; do not submit without approval. +2. Complete supplier mapping, landed-cost model, and a 10-20 product launch shortlist. +3. Verify the R770 checkout threshold and Shopify Admin rate wording, then close the support-page operational and legal gates before any customer-facing content is published. +4. Obtain tax/VAT and legal-policy confirmation. +5. Enable and verify storefront password protection before any private-staging theme publication. +6. Align the Shopify Contact sender/destination and rerun one controlled hosted delivery test. + +Deferred tests are paused, not failed, until the refund reaches a terminal state. diff --git a/get-yours-shopify-theme/docs/lp-1-legal-content-gap-audit.md b/get-yours-shopify-theme/docs/lp-1-legal-content-gap-audit.md new file mode 100644 index 00000000000..eac7880eb3f --- /dev/null +++ b/get-yours-shopify-theme/docs/lp-1-legal-content-gap-audit.md @@ -0,0 +1,39 @@ +# LP-1 Legal And Customer-Facing Content Gap Audit + +## Content Status + +| Page | Source/status | Key gap and dependency | +| --- | --- | --- | +| Help | Admin-ready draft; unpublished | Copy is aligned to R770; tracking process and support channel must match operations. | +| Customer Service | Admin-ready draft; unpublished | Public and recipient mailbox, Store Owner, published hours and selected operating controls are approved. Controlled Contact delivery testing and final returns/payment/legal dependencies remain open. | +| Shipping Information | Admin-ready draft; unpublished | Copy is aligned to R770; delivery timing remains route-dependent and unverified. | +| Returns & Refunds | Admin-ready draft; unpublished | Reporting window, return eligibility, exclusions, and processing policy need approval. | +| Payment Information | Admin-ready draft; unpublished | Public provider wording must match checkout; PayFast test/live and PayPal decision unresolved. | +| FAQ | Admin-ready draft; unpublished | Rates, free-shipping threshold, delivery, cancellations, and payment answers need operational confirmation. | +| Privacy Policy | Shopify policy reference | Requires South African legal review and merchant approval. | +| Terms of Use | Shopify policy reference | Requires South African legal review and merchant approval. | +| Refund Policy | Shopify policy reference | Must align with Returns & Refunds process and payment-provider handling. | +| Shipping Policy | Shopify policy reference | Must align with approved rates, destinations, and delivery wording. | +| Contact | Existing page unchanged | Hosted submission works, but Shopify's configured native destination differs from the approved public mailbox and the Dawn acknowledgement differs from approved wording. Destination correction, delivery retest and privacy review remain open. | + +## Mandatory Decision Register + +| Decision | Current state | Owner | +| --- | --- | --- | +| R770 customer copy versus checkout configuration | Development-theme copy aligned; controlled checkout verification still required | Merchant / finance | +| Standard and Express delivery language | Requires merchant approval after CJ evidence | Merchant / fulfilment | +| Enabled customer-facing payment methods | Requires merchant approval after checkout verification | Merchant | +| PayPal public mention | Requires merchant approval | Merchant | +| Return windows, exclusions, and cancellation rules | Requires merchant approval and legal review | Merchant / legal | +| VAT, customs, and import wording | Requires professional confirmation | Accountant / legal | +| Support inbox, hours and response wording | Merchant-approved; controlled Contact-form delivery and privacy review remain | Store Owner / legal | + +The expanded LP-3B.2 package records the publication gates for tax, imported-goods, consumer-rights, cancellation, privacy, electronic communications and legal business-identity wording. LP-3B.3 separates recommended operational procedures from the professional review questions, and LP-3B.4 records selected merchant operations. No item is treated as legally or tax approved. + +## Wording Risks + +- Do not publish a free-shipping claim until checkout is aligned. +- Do not publish the current delivery estimates without confirmed CJ service evidence. +- Do not claim VAT-inclusive pricing, customs treatment, or import-duty outcomes without professional confirmation. +- Do not promise supplier stock, tracking, refund timing, cancellation outcome, or support response times. +- Use `Requires merchant approval` and `Requires South African legal review` for all final policy publication decisions. diff --git a/get-yours-shopify-theme/docs/lp-1-manual-cj-fulfilment-sop.md b/get-yours-shopify-theme/docs/lp-1-manual-cj-fulfilment-sop.md new file mode 100644 index 00000000000..6c56fd8381a --- /dev/null +++ b/get-yours-shopify-theme/docs/lp-1-manual-cj-fulfilment-sop.md @@ -0,0 +1,37 @@ +# LP-1 Manual CJ Fulfilment SOP + +## Preconditions + +Proceed only when Shopify shows Paid, the fraud/risk review is acceptable, address and SKU are complete, supplier mapping and stock are confirmed, and the recalculated contribution margin is approved. + +## Workflow + +1. Receive Shopify order. +2. Confirm financial status and fraud/risk status. +3. Validate customer address and contact details. +4. Validate Shopify product, SKU, and variant. +5. Confirm CJ product/variant mapping and stock. +6. Confirm current CJ product cost, shipping route, shipping cost, and restrictions. +7. Recalculate margin and obtain approval where required. +8. Place the CJ order manually only after all gates pass. +9. Record the CJ order reference, selected route, costs, and supplier state. +10. Monitor supplier progress and delivery exceptions. +11. Add tracking only when it is valid. +12. Add tracking to Shopify and perform legitimate fulfilment. +13. Allow Shopify to send the shipping confirmation. +14. Reconcile final supplier cost, refund exposure, and margin. + +## Stop Conditions + +- Unpaid order, unresolved high risk, invalid address, or customer cancellation before supplier commitment. +- CJ stock unavailable, variant mismatch, unsupported destination, restricted shipping item, or suspected IP issue. +- Supplier product/shipping cost removes approved margin. +- Loose lithium battery, aerosol/liquid, oversized/fragile item, or return restriction without an approved operational path. + +## Manual Order Tracker + +| Shopify order | Payment verified | Fraud reviewed | Address reviewed | SKU matched | CJ stock | Cost confirmed | Margin approved | CJ reference | Supplier status | Tracking received | Tracking added | Shopify fulfilled | Shipping confirmation | Delivered | Exception | Refund | Reconciled | +| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | +| [INPUT] | [Y/N] | [Y/N] | [Y/N] | [Y/N] | [Y/N] | [Y/N] | [Y/N] | [INPUT] | [INPUT] | [Y/N] | [Y/N] | [Y/N] | [Y/N] | [Y/N] | [INPUT] | [INPUT] | [Y/N] | + +No CJ supplier order was created in LP-1. diff --git a/get-yours-shopify-theme/docs/lp-1-master-launch-readiness-audit.md b/get-yours-shopify-theme/docs/lp-1-master-launch-readiness-audit.md new file mode 100644 index 00000000000..7d617118398 --- /dev/null +++ b/get-yours-shopify-theme/docs/lp-1-master-launch-readiness-audit.md @@ -0,0 +1,45 @@ +# LP-1 Master Launch Readiness Audit + +## Baseline + +This audit now includes the completed PR-1 private-staging implementation. PR-1 created isolated launch menus and updated only the development-theme navigation, footer and Contact copy. It did not publish the theme, pages or policies or alter payments, shipping, orders, refunds, fulfilment or CJ. + +| Area | Classification | Evidence and next gate | +| --- | --- | --- | +| Storefront | Development preview passes; publication blocked | PR-1 verified the final header, Shop hierarchy, footer and Contact copy locally and through the hosted development preview at five widths. Publication was withheld because password protection is off. | +| Products | Pending merchant decision | Shopify currently has 20 Active Get Yours products with one variant, SKU, inventory, price, and featured media each; supplier economics and restrictions remain unverified. | +| Payments | Blocked | PayFast is in test mode. Successful test payment passed; existing sandbox refund is pending. | +| Refunds | Deferred until refund terminal state | #1002 has one pending R179 PayFast refund; do not retry. | +| Fulfilment | Configured; end-to-end test pending | Automatic fulfilment was disabled; paid orders can remain unfulfilled. Manual fulfilment test is paused pending the terminal result of the existing refund. | +| CJ operations | Pending merchant decision | No SKU mapping, supplier stock, costs, or working-capital reserve is confirmed. | +| Shipping | Partially corrected | Development-theme and support-page copy are aligned to R770. Shopify Admin rate wording and checkout behaviour still require controlled verification before publication. | +| Tax/VAT | Pending professional confirmation | Test order displayed R10.30 included VAT/tax; treatment is not approved. | +| Customer support | Partial operational approval; unpublished | LP-3B.4 approves the public/recipient mailbox, Store Owner escalation model, hours, cadence and selected customer-safety rules. Shopify Contact-form delivery, controlled mailbox test and professional gates remain open. | +| Legal content | Pending professional confirmation | LP-3B.2/3B.3 separate legal/tax questions from recommended operations; policy copy and operational rules still need South African legal review. | +| Menus | Launch Shop menus implemented in development | PR-1 created isolated Main and Footer Shop menus and assigned them to development theme `141697089639`. Unapproved Support and Legal groups are hidden; support pages remain unpublished. | +| Contact | Copy corrected; routing misaligned | PR-1 applied the approved acknowledgement and sensitive-information warning. Shopify still routes the native form to a different private Sender email rather than `info@getyours.online`; destination/sender alignment, delivery retest and privacy review remain open. | +| Notifications | Pending merchant decision | Order confirmation event exists; refund and merchant-mail delivery are unverified. | +| Domain | Password-protected staging blocked | Shopify Preferences showed password protection off. The development theme cannot be published under the approved private-staging authorization until protection is enabled and verified. | +| Theme | Development candidate ready; not published | Theme `141697089639` contains the PR-1 changes and passed hosted/local changed-component QA. Theme Check has 8 inherited warnings and no errors. Active rollback theme remains Dawn `141692731495`. | +| Launch monitoring | Pending merchant decision | First-order monitoring and reconciliation procedures are defined in the runbook. | + +## Current Observed Store Facts + +- South Africa is the active market; dormant international R310 shipping configuration is not market-enabled. +- Standard is R100; Express is R150; configured free Standard threshold is R770. +- The development-theme announcement is set to `FREE STANDARD SHIPPING ON ORDERS OF R770 OR MORE`. The configured Standard rate is R100 and becomes free from R770; Shopify Admin rate wording and estimates are unchanged. +- LP-3A confirmed the R770 wording in the hosted development preview at 360, 400, 430, 768 and 1200px, plus the product and cart surfaces. Controlled checkout verification remains outstanding. +- PayFast is active in test mode. PayPal was already active separately and requires a later launch decision. +- Order #1002 is a test order, Paid and Unfulfilled. Its single R179 PayFast refund remains pending and is a launch blocker. +- Six support pages exist in Shopify Admin as unpublished drafts: Help, Customer Service, Shipping Information, Returns & Refunds, Payment Information, and FAQ. +- On 2026-07-13, PR-1 assigned the approved launch menus to development theme `141697089639`; the hosted and local previews had no measured horizontal overflow at 360, 400, 430, 768 or 1200px. +- Password protection was off, so theme `141697089639` was not published. Active theme Dawn `141692731495` remains unchanged. +- An auxiliary `GET /sf_private_access_tokens` returned HTTP 400 during local preview without a visible storefront defect. This is monitoring-only unless related behaviour fails. + +## Evidence Limitations + +Merchant confirmation required for supplier economics, support operations, delivery capability, payment settlement, legal entity, and commercial decisions. Professional confirmation required for tax/VAT and legal-policy content. No item in this audit is marked ready without supporting evidence. + +## LP-1 Outcome + +The store is not ready for public launch. Work can proceed on templates, content review, product shortlist preparation, and technical inspection while the refund remains pending. Payment failure, customer cancellation, refund replacement, and manual fulfilment/tracking tests remain paused until the refund has a terminal state. diff --git a/get-yours-shopify-theme/docs/lp-1-payfast-business-readiness-register.md b/get-yours-shopify-theme/docs/lp-1-payfast-business-readiness-register.md new file mode 100644 index 00000000000..cffcf58b59f --- /dev/null +++ b/get-yours-shopify-theme/docs/lp-1-payfast-business-readiness-register.md @@ -0,0 +1,45 @@ +# LP-1 PayFast Business Readiness Register + +## Merchant Confirmation Checklist + +| Topic | Status | Evidence required | +| --- | --- | --- | +| Formal PayFast verification | Merchant confirmation required | Provider dashboard status. | +| Intended legal merchant entity | Merchant confirmation required | Business/legal records. | +| Get Yours versus provider-facing business name | Merchant confirmation required | Written explanation and ownership confirmation. | +| Settlement bank account | Merchant confirmation required | Confirm privately; do not record account details here. | +| Payout workflow and timing | Merchant confirmation required | Current PayFast documentation/dashboard. | +| Fees: PayFast, cards, EFT, Zapper, Payflex | Merchant confirmation required | Current provider schedule. | +| Pending/refund workflow | Pending terminal refund state | Terminal sandbox evidence and provider process. | +| Reserves, holds, disputes, chargebacks | Merchant confirmation required | Provider documentation and owner process. | +| Merchant support route | Merchant confirmation required | Support contact and escalation procedure. | +| Evidence retention | Ready | Keep sanitized order number, timestamp, amount, status, and owner notes. | + +## Dropshipping Working-Capital Model + +``` +Customer pays Get Yours +-> Shopify records Paid +-> PayFast may still be settling funds +-> Get Yours may need to pay CJ before bank settlement +-> CJ fulfils only after supplier payment +``` + +| Policy input | Merchant input | +| --- | --- | +| Minimum supplier-payment reserve | [AMOUNT] | +| Separate refund reserve | [AMOUNT] | +| Maximum daily supplier commitment | [AMOUNT] | +| Stop-selling threshold | [AMOUNT / RULE] | +| Maximum untracked supplier exposure | [AMOUNT / RULE] | + +## Operating Policy Template + +- Do not place a CJ order until Shopify shows Paid. +- Do not place a CJ order for high-risk, address-unresolved, or refund-disputed orders. +- Recalculate supplier landed cost and margin before supplier commitment. +- Stop selling a product when available reserve is insufficient, supplier cost removes margin, or mapping/stock is unverified. +- Reconcile Shopify order state, PayFast transaction state, and CJ supplier state daily during launch. +- Escalate any Shopify/PayFast mismatch with sanitized timestamp, amount, order number, and transaction status. Do not include provider credentials or bank data. + +The existing R179 test refund remains pending. It is evidence that refund settlement handling must be understood before live activation. diff --git a/get-yours-shopify-theme/docs/lp-1-product-launch-audit.md b/get-yours-shopify-theme/docs/lp-1-product-launch-audit.md new file mode 100644 index 00000000000..a61a7e434e7 --- /dev/null +++ b/get-yours-shopify-theme/docs/lp-1-product-launch-audit.md @@ -0,0 +1,29 @@ +# LP-1 Product Launch Audit + +## Evidence Boundary + +Read-only Shopify inspection found 20 Active Get Yours products. Each returned product has one variant, an SKU, a price, positive Shopify inventory, and featured media. This confirms catalogue structure only; it does not confirm CJ mapping, supplier stock, supplier costs, shipping costs, dimensions, restrictions, or contribution margin. + +## Recommended Initial Shortlist + +Use this as a research shortlist, not a launch-ready claim. All candidates are `Needs supplier verification` and `Needs margin verification`. + +| Candidate | Price ZAR | Shopify evidence | Audit status | Primary launch gate | +| --- | --- | --- | --- | --- | +| Adjustable Drawer Divider Set | 149 | Active; one SKU; inventory 1; featured media | Ready after merchant verification | Mapping, landed cost, material/dimensions. | +| Modular Fridge Storage Bins | 199 | Active; one SKU; inventory 13; featured media | Needs supplier verification | Food-contact/material and shipping. | +| Under-Shelf Wire Storage Basket | 129 | Active; one SKU; inventory 23; featured media | Needs supplier verification | Weight, shelf compatibility, packaging. | +| Gray Fabric Storage Boxes | 175 | Active; one SKU; inventory 6; featured media | Needs supplier verification | Dimensions and material. | +| Bamboo Desk Organizer | 199 | Active; one SKU; inventory 15; featured media | Needs supplier verification | Material/finish and dimensions. | +| Ergonomic Aluminium Laptop Stand | 289 | Active; one SKU; inventory 19; featured media | Needs content correction | Compatibility, load/safety claim, supplier mapping. | +| Desk Cable Organiser | 79 | Active; one SKU; inventory 3; featured media | Needs supplier verification | Material, adhesive/compatibility, margin. | +| Travel Pouch Set | 175 | Active; one SKU; inventory 20; featured media | Needs supplier verification | Dimensions, material, route. | +| Kitchen Sink Organizer | 99 | Active; one SKU; inventory 15; featured media | Needs supplier verification | Material and water-use claims. | +| Laundry Hamper | 199 | Active; one SKU; inventory 25; featured media | Needs supplier verification | Oversize/volumetric shipping. | + +## Catalogue Gates + +- Do not classify any product Launch Ready without active status, physical/requires-shipping confirmation, valid SKU, inventory/location evidence, final images, compliant description, and verified supplier mapping/cost/stock. +- Screen every product for loose lithium batteries, aerosol/liquid, oversized/fragile shipping, unverified brand/logo, copyrighted design, fake ratings, and placeholder content. +- Do not manufacture ratings, availability, delivery claims, product dimensions, materials, compatibility, or supplier data. +- Exclude a candidate from initial launch when supplier cost removes margin, stock is unclear, mapping is absent, restriction risk is unresolved, or content cannot be substantiated. diff --git a/get-yours-shopify-theme/docs/lp-1-shipping-economics-decision-model.md b/get-yours-shopify-theme/docs/lp-1-shipping-economics-decision-model.md new file mode 100644 index 00000000000..ca29b45eb5c --- /dev/null +++ b/get-yours-shopify-theme/docs/lp-1-shipping-economics-decision-model.md @@ -0,0 +1,57 @@ +# LP-1 Shipping Economics Decision Model + +> Historical decision-model snapshot: the R500 options below were superseded by the approved R770 starter-launch threshold. They remain as margin-analysis history only and are not current customer policy. + +## Observed Shipping State + +| Item | Observed state | Launch status | +| --- | --- | --- | +| Standard | R100; displayed 3-5 business days | Rate exists; delivery promise unverified. | +| Express | R150; displayed 1-2 business days | Rate exists; delivery promise unverified. | +| Free Standard | Free from R770 | Does not match announcement. | +| Announcement | Free Standard over R500 | Launch blocker until aligned. | +| Market | South Africa active | Appropriate for initial scope. | +| International | R310 configuration exists, not market-enabled | Keep dormant or remove only under separate approval. | + +## Representative Basket Model + +Use one row per product or representative basket. All input fields require merchant or supplier confirmation. + +| Input | Amount / assumption | Owner | +| --- | --- | --- | +| Shopify selling price | [MERCHANT INPUT] | Merchandising | +| CJ product cost | [SUPPLIER INPUT] | Fulfilment | +| CJ shipping charge | [SUPPLIER INPUT] | Fulfilment | +| Currency conversion assumption | [MERCHANT INPUT] | Finance | +| Currency fluctuation buffer | [MERCHANT INPUT] | Finance | +| PayFast fee | [MERCHANT INPUT] | Finance | +| Shopify transaction fee | [MERCHANT INPUT] | Finance | +| Packaging/handling | [MERCHANT INPUT] | Operations | +| Refund/return reserve | [MERCHANT INPUT] | Finance | +| Failed-delivery reserve | [MERCHANT INPUT] | Operations | +| Support allowance | [MERCHANT INPUT] | Support | +| Promotion allowance | [MERCHANT INPUT] | Merchandising | +| Desired contribution margin | [MERCHANT INPUT] | Merchant | + +``` +Supplier landed cost = CJ product cost + CJ shipping charge + conversion buffer +Other variable costs = PayFast fee + Shopify fee + handling + refund reserve + failed-delivery reserve + support allowance + promotion allowance +Contribution before free shipping = selling price - supplier landed cost - other variable costs +Contribution after merchant-funded shipping = contribution before free shipping - merchant-funded shipping amount +``` + +Do not approve a free-shipping threshold until contribution after merchant-funded shipping is positive at the representative product mix and intended average order value. + +## Decision Routes + +| Route | Benefit | Risk and dependency | Required changes after approval | Required test | +| --- | --- | --- | --- | --- | +| A. Honour R500 | Matches current announcement; clear customer proposition. | Requires margin proof across baskets and CJ routes. | Configure free Standard from R500; retain aligned copy. | SA checkout below/above R500 across provinces. | +| B. Retain R770 | Matches current checkout configuration. | Current announcement becomes misleading. | Update announcement and all affected content later. | Checkout and content-link QA. | +| C. Transparent flat rates | Lowest margin ambiguity while early economics are unknown. | Removes promotional incentive; requires clear customer wording. | Remove free-shipping claim; retain approved flat rates. | Checkout and support-content QA. | + +## Delivery-Promise Gate + +The displayed 3-5 and 1-2 business-day estimates are not supported by confirmed CJ service-level evidence. Merchant confirmation required for each selected CJ route, cut-off, destination coverage, dispatch process, and exception handling. Until then, remove the estimates or replace them with broader non-guaranteed wording after approval. + +Recommendation: choose Route C unless Route A is proved sustainable through the completed model. The final threshold and delivery wording remain merchant decisions. diff --git a/get-yours-shopify-theme/docs/lp-1-technical-storefront-qa.md b/get-yours-shopify-theme/docs/lp-1-technical-storefront-qa.md new file mode 100644 index 00000000000..10b24080d2b --- /dev/null +++ b/get-yours-shopify-theme/docs/lp-1-technical-storefront-qa.md @@ -0,0 +1,117 @@ +# LP-1 Technical Storefront QA + +## Scope And Current Evidence + +No LP-1 theme changes were made. Theme Check is run as a safe validation command. Existing phase reports document the branded Dawn shell, homepage sections, collection/product/cart/search work, and earlier responsive checks. + +### Development Theme Preview Check - 2026-07-13 + +The Shopify Theme Access credential was supplied through the local `SHOPIFY_CLI_THEME_TOKEN` environment variable and is intentionally not recorded here. `shopify theme info` and `shopify theme dev` succeeded against development theme `141697089639` on `tdaqk1-nv.myshopify.com`. The local preview at `http://127.0.0.1:9292` returned HTTP 200. + +| Check | Result | Evidence / follow-up | +| --- | --- | --- | +| Homepage render | Pass | Announcement, branded header, promo grid, category grid, product rails, trust area and footer rendered in the local preview. | +| Responsive horizontal overflow | Pass | At 360, 400, 430, 768 and 1200px, `scrollWidth` equalled `clientWidth`. | +| 360px visual pass | Pass | Header controls and stacked hero tiles were visible, readable and within the viewport. | +| Homepage navigation | P1 follow-up | Main navigation currently exposes Home, Catalog and Contact only; planned collection and Help links remain unwired. | +| Footer navigation | P1 follow-up | Shop links are present; Support and Legal still expose only Search because their menus have not been wired. | +| Payment-logo review | P1 follow-up | Footer renders several payment logos, including PayPal. Confirm that every displayed method is intentionally customer-facing before launch. | +| R770 announcement alignment | P1 checkout verification | LP-3A aligned development-theme wording and the hosted preview passed at five widths; controlled checkout verification remains required. | +| Auxiliary storefront request | Monitor | A GET request to `/sf_private_access_tokens` returned HTTP 400 without a visible storefront failure. Monitor it; investigate only if a related feature fails. | + +This was read-only preview QA. No theme, store, payment, shipping, page, menu, policy, product, order or customer data was changed. + +## Required Final QA Matrix + +| Area | Required checks | Current classification | +| --- | --- | --- | +| Header/navigation | Logo, announcement, search, predictive search, account, wishlist, cart, mobile menu, focus, keyboard. | P1: mobile menu and search render; keyboard-only focus/trap remains incomplete. | +| Homepage | Hero, promo blocks, collections, images, placeholders, stacking, layout shifts. | Pass for rendering and horizontal overflow; menu and link completeness remain P1. | +| Collections | Filters, sort, zero state, cards, prices, sale/unavailable state. | P1: cards and mobile filter drawer render; sort leaves hosted preview. | +| Products | Media, variants, quantity, cart, stock, delivery/returns messaging. | P1: layout and cart add pass; supplier facts and payment presentation remain unverified. | +| Cart | Quantity, remove, empty state, totals, shipping/free-shipping messaging, checkout handoff. | P0: cart flow passes, but shipping promise mismatch affects customer totals. | +| Search | Valid/no-results query, predictive links, mobile behaviour. | P1: predictive and no-result states pass; results route out of hosted preview. | +| Accessibility | Keyboard, focus, labels, headings, alt text, contrast, touch targets, errors. | P1: structural checks pass; full keyboard-only and focus-trap verification remains required. | +| SEO/branding | Titles, descriptions, favicon, social image, canonical domain, 404, redirects, password page. | P1: final live-launch approval required. | + +## Known Expectation Risks + +- Development-theme copy now promises free Standard shipping on orders of R770 or more; Shopify Admin rate wording and checkout behaviour still require a controlled retest. +- Account, wishlist, reviews/stars, delivery wording, and payment logos must not imply unavailable features, data, or methods. +- South Africa is the active market; no international customer wording should appear. +- The storefront password must remain until final launch approval. + +## Issue Record Template + +| Severity | Page | Width | Reproduction | Expected | Actual | Screenshot | Correction | Approval | +| --- | --- | --- | --- | --- | --- | --- | --- | +| P0/P1/P2/P3 | [URL] | [PX] | [STEPS] | [EXPECTED] | [ACTUAL] | [SAFE REF] | [RECOMMENDATION] | [OWNER] | + +P0 blocks launch; P1 must be fixed before launch; P2 is important; P3 is post-launch. No defects are fixed in LP-1. + +## LP-QA-1 Full Storefront Journey Audit + +### Execution Status - 2026-07-13 + +The initial local-preview attempt was unavailable to this isolated QA process. The audit was resumed successfully through the hosted development-theme URL for theme `141697089639`. No Theme Access credential, storefront password, Shopify Admin control, checkout, or payment flow was used. + +| Area | Device/width | Result | Severity | Evidence | Recommended action | +| --- | --- | --- | --- | --- | --- | +| Homepage journey | 360, 400, 430, 768, 1200px | Pass with P1 follow-ups | P0/P1 | Header, hero, categories, rails, trust content and footer render. No page-level horizontal overflow at all five widths. Main navigation is limited to Home/Catalog/Contact. | Resolve shipping mismatch; wire approved navigation later. | +| Collection/catalog | 360, 1200px | Pass with P1 follow-up | P1 | Catalog showed 20 products; Home Organisation showed 8 cards with images/prices. Mobile filter drawer opened without overflow. Sorting works but redirected to `getyours.online`. | Keep preview navigation on the preview host or document that stateful preview QA must use another route. | +| Product pages | 360, 1200px | Pass with P1 follow-ups | P1 | Tested Desk Cable Organiser (R79), Ergonomic Aluminium Laptop Stand sale (R399/R289), and Kitchen Sink Organizer (R99). Titles, prices, image access, quantities, descriptions, trust content and related products rendered. | Verify supplier material/performance claims, stock and delivery/return wording before launch. | +| Search | Mobile and desktop route checks | Pass with P1 follow-up | P1 | Predictive exact search returned Desk Cable Organiser; generic `organizer` search returned relevant products; no-result state gave useful browsing guidance; Escape closed the modal. Search results redirected to `getyours.online`. | Resolve or document hosted-preview routing before final acceptance. | +| Cart | Mobile cart-only interaction | Pass with P1 follow-ups | P1 | LP-QA-1 validated cart interaction. LP-3A visually confirmed the R770 reassurance in the cart drawer and cart page, then removed its test item. Checkout was not clicked. Cart updates redirect to `getyours.online`. | Verify checkout threshold and isolate preview-cart routing before launch QA sign-off. | +| Navigation/footer | Desktop and mobile | P1 follow-up | P1 | Header controls have accessible names. Footer Shop has Home/Catalog/Contact; Support and Legal each expose only Search. | Publish approved pages and wire menus only after operational approval. | +| Payment logos | Desktop and mobile | P1 follow-up | P1 | Footer renders Visa, Mastercard, American Express, PayPal, Diners Club and Discover. Product/cart pages render PayPal accelerated checkout. | Merchant must confirm the live payment set and remove any unsupported logo or express-payment control. | +| Accessibility | Mobile and desktop structural pass | P1 follow-up | P1 | Skip link, headings, named controls, labelled quantity inputs, search dialog, Escape close, and named cart controls were observed. Full keyboard tab order, visible focus and drawer focus trapping were not reliably verifiable in browser automation. | Complete a manual keyboard-only pass; do not claim WCAG conformance. | +| Console/network | Homepage, collection, product, search, cart | Pass with monitor item | P2 | No console warnings or errors were captured. No credential-bearing payload was inspected. | Keep `/sf_private_access_tokens` HTTP 400 as monitor-only unless a customer feature fails. | +| `/sf_private_access_tokens` | Prior local homepage preview | Monitor only | P2 | HTTP 400 had no visible customer-facing effect. | Investigate only if an associated storefront feature fails. | +| Theme Check | N/A | Pass with warnings | P2 | 174 files inspected; 8 warnings in 7 files; no errors. | Review inherited Dawn warnings before launch; no source change made in this audit. | + +### Theme Check Warning Record + +| Rule | File | Line | Risk | Likely origin | Launch effect | Recommended action | Approval | +| --- | --- | --- | --- | --- | --- | --- | --- | +| UndefinedObject `scheme_classes` | `layout/password.liquid` | 40 | Static-analysis false positive or initial-value ambiguity | Dawn | No observed storefront failure | Confirm upstream Dawn pattern/version before changing. | Theme-source approval | +| UndefinedObject `scheme_classes` | `layout/theme.liquid` | 82 | Static-analysis false positive or initial-value ambiguity | Dawn | No observed storefront failure | Confirm upstream Dawn pattern/version before changing. | Theme-source approval | +| VariableName `anchorId` | `sections/main-article.liquid` | 102 | Naming convention only | Dawn | None | Defer unless maintaining a customised article section. | Theme-source approval | +| VariableName `moduloResult` | `sections/main-list-collections.liquid` | 20 | Naming convention only | Dawn | None | Defer unless changing collection-list code. | Theme-source approval | +| UnusedAssign `seo_media` | `sections/main-product.liquid` | 745 | Dead assignment | Dawn | No observed failure | Review only during approved product-template maintenance. | Theme-source approval | +| UndefinedObject `continue` | `sections/main-product.liquid` | 601 | Liquid continuation syntax reported by checker | Dawn | No observed failure | Validate against the Dawn release used before editing. | Theme-source approval | +| UnusedAssign `product_settings` | `sections/main-search.liquid` | 280 | Dead assignment | Dawn | No observed failure | Review only during approved search-template maintenance. | Theme-source approval | +| OrphanedSnippet | `snippets/quick-order-product-row.liquid` | 1 | Unreferenced code | Dawn | None unless quick order is enabled later | Retain or remove only in an approved Dawn maintenance pass. | Theme-source approval | + +### LP-QA-1 Issue Summary + +| Severity | Issue | Exact recommended correction | Owner / decision | +| --- | --- | --- | --- | +| P1 | Former development-theme R500 promises were aligned to R770 in LP-3A and previewed successfully; checkout confirmation remains outstanding. | Verify the exact R770-inclusive wording against the configured checkout threshold before launch. | Merchant / QA owner. | +| P1 | Hosted development preview sends sort, full search and cart update flows to `getyours.online`. | Resolve preview-host/canonical routing or use a controlled alternative for final stateful development-theme QA. | Theme/store-domain review. | +| P1 | Main nav and footer Support/Legal menus are incomplete. | Publish approved content pages only after launch blockers are resolved, then wire the approved menus. | Merchant approval. | +| P1 | Payment logos and PayPal accelerated checkout are visible while payment-method launch presentation still needs confirmation. | Confirm the final enabled payment methods, then align product/cart controls and footer logos. | Merchant payment decision. | +| P1 | Supplier facts, customer-facing stock, delivery and return wording are not commercially verified. | Validate each launch SKU and replace generic/unsupported claims with approved data. | Merchant and supplier review. | +| P1 | Complete keyboard-only focus order, focus visibility and modal/drawer focus-trap verification was not established. | Run an assisted manual keyboard pass on the final configured theme. | Final accessibility QA. | +| P2 | Eight Theme Check warnings remain in inherited Dawn code. | Review during an approved Dawn maintenance pass; none caused an observed storefront error. | Theme maintenance approval. | +| P2 | Wishlist was not present in the observed header. | Do not imply wishlist functionality in customer-facing copy unless a supported implementation is enabled. | Merchant decision. | + +No theme code, Shopify Admin setting, live-store setting, checkout, payment, order, refund, fulfilment, inventory, tracking, CJ action, page, menu or policy was changed during LP-QA-1. Cart-only test items were removed and the cart ended empty. + +## LP-3A Approved Promise Alignment + +- The approved customer-facing free Standard threshold is **R770**, inclusive: `FREE STANDARD SHIPPING ON ORDERS OF R770 OR MORE`. +- Corrected theme-controlled R500 occurrences: the announcement-bar setting, product reassurance block and shared cart reassurance locale string. +- Replaced generic product delivery timing copy with: `Delivery timing depends on the product, destination and available shipping route.` No exact customer-facing delivery estimate exists in the theme after this change. +- The Standard R100 and Express R150 names, checkout estimates and R770 rate condition remain Shopify Admin-controlled and were not changed. +- Footer payment icons are dynamically generated from `shop.enabled_payment_types`; no hard-coded Visa, Mastercard, American Express, Diners Club or Discover icons were found. Final visible icons depend on the enabled provider configuration. +- PayPal accelerated checkout remains visible because PayPal is active. Its final launch inclusion remains a merchant decision. Payflex is held pending margin review; Mobicred remains disabled; no payment-provider setting changed. +- Unpublished support-page drafts were later aligned to R770 in LP-3B.1. Their remaining gates are operational, tax and legal approval, not copy alignment. +- The development-theme R770 preview retest passed. Verify checkout independently after any future Shopify Admin rate or provider change. + +## LP-3B Navigation And Contact Readiness + +- Current header: Home, Catalog and Contact. `Catalog` has the correct `/collections/all` target but should be renamed to Shop in a separately approved menu mutation. +- Footer Shop currently mirrors `main-menu`; Support and Legal both point to Search. These are P1 launch-content defects, not theme rendering defects. +- Search passed prior QA. Account remains ready after account-flow testing; Wishlist is not implemented; Cart remains ready after final checkout handoff testing. +- Contact is published and its labelled Shopify form rendered without horizontal overflow at 360px. Recipient configuration and acknowledgement are unverified because no form submission was authorized. +- LP-3B did not modify a menu, page, policy, Contact, theme source or Shopify Admin setting. See `docs/lp-3b-navigation-content-readiness.md` for the LP-3C execution matrix. diff --git a/get-yours-shopify-theme/docs/lp-3a-promise-alignment-report.md b/get-yours-shopify-theme/docs/lp-3a-promise-alignment-report.md new file mode 100644 index 00000000000..cc76a45d0bb --- /dev/null +++ b/get-yours-shopify-theme/docs/lp-3a-promise-alignment-report.md @@ -0,0 +1,75 @@ +# LP-3A Development-Theme Shipping Promise And Payment-Presentation Alignment + +## Approved Baseline + +- Standard customer charge: R100. +- Express customer charge: R150. +- Free Standard threshold: R770, including an order exactly at R770. +- Customer-facing theme wording: `FREE STANDARD SHIPPING ON ORDERS OF R770 OR MORE`. +- Customer delivery timing remains route-dependent until each CJ SKU, destination and shipping route is verified. + +Customer shipping charges are not supplier shipping costs. CJ route cost and transit range must be confirmed per SKU; neither establishes a universal customer-facing delivery promise. + +## Occurrence List Before Editing + +| File | Line/section | Current wording | Customer-visible | Approved replacement | +| --- | --- | --- | --- | --- | +| `sections/header-group.json` | announcement block | `FREE STANDARD SHIPPING ON ORDERS OVER R500` | Yes | `FREE STANDARD SHIPPING ON ORDERS OF R770 OR MORE` | +| `templates/product.json` | `trust_reassurance` | `Free standard shipping over R500` | Yes | `Free standard shipping on orders of R770 or more` | +| `locales/en.default.json` | `sections.cart.free_shipping_reassurance` | `Free standard shipping on orders over R500.` | Yes | `Free standard shipping on orders of R770 or more.` | +| Phase 12 and earlier audit docs | historical evidence | R500/R770 mismatch history | No | Preserved as historical evidence | +| Support-page drafts | unpublished content | conditional/historic R500 references at the time of LP-3A | Not currently live | Historical snapshot; later aligned to R770 in LP-3B.1 | + +## Results + +| Area | Before | Approved state | Files changed | Remaining dependency | Result | +| --- | --- | --- | --- | --- | --- | +| Announcement | R500 promise | R770 inclusive wording | `sections/header-group.json` | None for theme copy; checkout verification remains separate | Changed and preview-verified | +| Homepage | No separate R500 copy found outside announcement | Inherits corrected announcement | None | None for theme copy | No direct change required; preview-verified | +| Product | R500 reassurance; generic delivery wording | R770 reassurance; route-dependent delivery wording | `templates/product.json` | Supplier route validation | Changed | +| Cart and drawer | R500 locale reassurance | R770 inclusive locale reassurance | `locales/en.default.json` | Checkout verification remains separate | Changed and preview-verified | +| Footer | Payment icons observed as Visa, Mastercard, American Express, PayPal, Diners Club and Discover | Dynamic `shop.enabled_payment_types` output retained | None | Final provider configuration determines visible icons | No hard-coded change | +| Delivery wording | No exact delivery duration in theme source; product copy was generic | Neutral route-dependent wording | `templates/product.json` | CJ SKU mapping and route evidence | Changed conservatively | +| Payment logos | No hard-coded brand icons found | Dynamic Dawn payment loop retained | None | Remove unsupported provider types through approved Shopify Admin configuration later | Documented | +| Accelerated PayPal | PayPal accelerated checkout visible | Left unchanged because PayPal is currently active | None | Final merchant PayPal decision | Unchanged | +| Support-page dependency | Drafts may retain R500 wording | Later aligned to R770 in LP-3B.1 | `docs/admin-ready-pages/` and `docs/content-pages/` | Operational, tax and legal publication gates | Content alignment complete; publication blocked | +| Shopify Admin dependency | R100 Standard, R150 Express, R770 condition and displayed estimates | Not changed | None | Future controlled Admin review and checkout verification | Outstanding | + +## Delivery-Time Classification + +| Category | Finding | LP-3A action | +| --- | --- | --- | +| Theme-controlled customer-facing copy | Product reassurance and Delivery information accordion had no exact duration but implied generic timing information. | Replaced with route-dependent neutral wording. | +| Shopify Admin rate wording | Phase 12 records Standard 3–5 business days and Express 1–2 business days. | Not changed; outside scope. | +| Historical documentation | Phase 12 and prior audits record observed estimates. | Preserved. | +| Supplier/product claim | CJ route timing not verified per SKU. | No claim added. | +| Internal operating guidance | Supplier route and cost work remains LP-2 work. | No change. | + +## Payment Presentation Findings + +- Footer icons use Dawn's dynamic `shop.enabled_payment_types` loop, not hard-coded markup. No change was made because the final output must follow approved provider configuration. +- PayPal accelerated checkout uses Dawn's `payment_button` and remains visible because PayPal is currently active. It remains pending a final merchant decision. +- No hard-coded American Express, Diners Club, Discover, Payflex, Mobicred, Instant EFT or Zapper presentation was found in customer-facing theme source. +- Visa, Mastercard, Instant EFT and Zapper are the intended PayFast launch methods, but Instant EFT and Zapper icons were not invented. Payflex is held; Mobicred remains disabled. + +## Development-Theme Visual Retest + +The hosted development preview for theme `141697089639` was available after the source update. + +| Check | Result | Evidence | +| --- | --- | --- | +| Announcement at 360, 400, 430, 768 and 1200px | Pass | Exact R770-inclusive wording rendered at every width; `scrollWidth` equalled `clientWidth`. | +| Product reassurance at 360px | Pass | Product page rendered the R770 reassurance and route-dependent delivery wording with no horizontal overflow. | +| Cart drawer and cart page | Pass | Both rendered `Free standard shipping on orders of R770 or more.` A cart-only test item was removed afterwards; no checkout was entered. | +| Console | Pass | No warning or error was captured during the homepage/product/cart checks. | +| Payment icon output | Dependency remains | Footer still uses Shopify's dynamic enabled-payment-types loop. Provider configuration, not this theme source, determines the visible brands. | + +## Remaining Admin And Content Work + +1. In a separately approved Admin phase, review Standard/Express names and estimates, then conduct a controlled checkout test below R770 and at R770 or more. +2. Support-page drafts were later aligned to R770 in LP-3B.1. Before publication, close their operational, tax and legal gates. +3. Before live launch, make a final PayPal decision and ensure enabled payment providers match all customer-facing logos and accelerated checkout controls. + +## No-Change Confirmation + +LP-3A changed local development-theme source and documentation only. It did not change Shopify Admin shipping rates, thresholds, delivery estimates, providers, test mode, PayPal, orders, refunds, fulfilment, tracking, CJ activity, pages, menus, policies, the storefront password or any live theme. diff --git a/get-yours-shopify-theme/docs/lp-3b-1-content-contact-readiness.md b/get-yours-shopify-theme/docs/lp-3b-1-content-contact-readiness.md new file mode 100644 index 00000000000..206214653cc --- /dev/null +++ b/get-yours-shopify-theme/docs/lp-3b-1-content-contact-readiness.md @@ -0,0 +1,61 @@ +# LP-3B.1 Content Alignment And Contact Readiness + +## Scope + +LP-3B.1 updates repository-held support-page drafts only. It does not publish pages, submit a contact form, alter Shopify Admin, change policies, wire menus or change the live store. + +## Support-Page Copy Alignment + +| Area | Customer-facing approved wording | Files aligned | Remaining dependency | +| --- | --- | --- | --- | +| Free Standard shipping | `Free Standard shipping applies to qualifying orders of R770 or more.` | Admin-ready Help, Shipping Information and FAQ; internal Help, Shipping Information and FAQ drafts | Controlled checkout verification at the configured threshold. | +| Delivery timing | `Delivery timing depends on the product, destination and available shipping route.` | Admin-ready Help, Shipping Information and FAQ; internal Help, Shipping Information, FAQ and Customer Service drafts | Per-SKU CJ route and fulfilment evidence. | +| Payment methods | `Only the methods shown for your order are available.` | Admin-ready Payment Information and Help; internal Payment Information draft | Final merchant payment-method decision before publication. | +| Payment provider wording | Shopify checkout and the provider selected at checkout, without named providers | Admin-ready and internal Payment Information drafts | PayFast live activation, PayPal decision and Test Gateway removal are outside this phase. | + +The customer-facing copies do not name PayFast, PayPal, Payflex, Mobicred, Visa, Mastercard, Instant EFT or Zapper. This avoids publication of a provider promise while the store is still in test mode and the final customer-facing payment configuration is pending. + +Historical Phase 12 and earlier operating documents may retain the superseded R500 decision and related test evidence. Treat those references as **historical value — superseded by the approved R770 starter-launch threshold**. They are not current customer policy. + +## Internal Payment Status Register + +| Item | Current internal state | Customer-facing treatment | Decision required before publication | +| --- | --- | --- | --- | +| PayFast | Active in test mode; no live launch authorized | Do not name it in support pages yet | Confirm live activation and final launch method set. | +| Visa / Mastercard / Instant EFT / Zapper | Intended PayFast launch methods | Refer customers only to methods shown at checkout | Confirm actual live checkout presentation. | +| Payflex | Held pending fee and margin review | Do not mention | Merchant payment decision. | +| Mobicred | Disabled | Do not mention | None unless intentionally enabled later. | +| PayPal | Active separately; final inclusion pending | Do not name it in support pages | Merchant retain/remove decision and final presentation review. | +| Shopify Test Payment Gateway | Remains in use for testing | Never mention to customers | Remove or retain only through a separately approved launch-control decision. | + +## Contact Recipient, Ownership And Controlled-Test Decision Register + +| Decision | Required state before Contact is launch-ready | Owner | Evidence required | Status | +| --- | --- | --- | --- | --- | +| Recipient mailbox | Confirm the exact monitored destination for Shopify contact-form messages. Do not record the address here until it is approved for public use. | Merchant / support owner | Admin confirmation and mailbox access check | Pending merchant decision | +| Public support email | Confirm whether a separate support email will be published and, if so, approve its exact public wording. | Merchant / support owner | Written approval and monitored-inbox check | Pending merchant decision | +| Primary owner | Name one person or role responsible for first response and triage. | Merchant | Written owner assignment | Pending | +| Backup/escalation owner | Name a backup for absence, payment, returns and supplier escalations. | Merchant | Written escalation route | Pending | +| Monitoring cadence | Define business-day monitoring frequency and coverage. | Support owner | Operating note | Pending | +| Customer acknowledgement | Use only wording that Shopify can actually send and that the support process can meet. | Support owner | Approved copy and observed test result | Pending | +| Response wording | Define a realistic response target only after support coverage is confirmed; do not promise a response time before then. | Support owner | Approved customer copy | Pending | +| Privacy wording | Add approved customer safety wording and an appropriate Privacy Policy link when Contact content is separately approved. | Merchant / legal | Legal/content approval | Pending | +| Spam handling | Confirm Shopify spam protection, mailbox filtering and review process. | Support owner | Controlled test plan | Pending | +| Escalation process | Define the handoff for payment, delivery, damaged-item, return/refund and supplier issues. | Merchant / support owner | Written escalation route | Pending | +| Controlled form test | Submit one synthetic test only after separate approval; confirm recipient, acknowledgement, spam behaviour and escalation handoff. | Support owner | Sanitized test evidence | Not authorized | + +## LP-3B.2 Handoff + +The expanded returns, cancellation, shipping, payment, Customer Service, Contact, tax and legal decision package is in `docs/lp-3b-2-support-page-publication-matrix.md`. It does not close the recipient, owner, acknowledgement, privacy, spam or controlled-test decisions in this register. + +## LP-3B.3 Operational Handoff + +`docs/lp-3b-3-merchant-operational-decisions.md` recommends an internal solo-founder support model and case-handling procedures. It does not assign an actual recipient, owner or public response promise, and it does not authorize a Contact-form submission. + +## Publication Gate + +The support pages remain unpublished. They are not ready for customer-visible menus until the remaining shipping, payment, legal and support-operation decisions are resolved and each page is separately approved for publication. + +## No-Change Confirmation + +LP-3B.1 changed local documentation only. No Shopify Admin setting, page publication, menu, policy, Contact form, payment setting, shipping rate, order, refund, fulfilment, CJ order or live storefront state changed. diff --git a/get-yours-shopify-theme/docs/lp-3b-2-support-page-publication-matrix.md b/get-yours-shopify-theme/docs/lp-3b-2-support-page-publication-matrix.md new file mode 100644 index 00000000000..d26ed23adaf --- /dev/null +++ b/get-yours-shopify-theme/docs/lp-3b-2-support-page-publication-matrix.md @@ -0,0 +1,206 @@ +# LP-3B.2 Support-Page Publication Readiness And Operational Policy Decisions + +## Executive Summary + +The six support-page drafts are aligned to the approved R770, South Africa-only, route-dependent and provider-neutral launch position. They are **draft aligned; merchant and professional review required**, not approved for publication. + +No support page, Contact page, policy, menu, theme, payment, shipping, order, refund, fulfilment, CJ, product, collection or live-store state changed in LP-3B.2. + +## Support-Page Readiness Matrix + +| Destination | Source draft | Intended Shopify title | Handle / policy URL | Intended menu label | Current publication | Content alignment | Merchant decisions | Operational / support dependency | Tax dependency | Legal-review dependency | Eligibility | Exact block reason | +| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | +| Help | `docs/admin-ready-pages/help.md` | Help | `help` | Help Centre | Unpublished | A | Public address, recipient mailbox and support model partly approved | Shopify Contact delivery and tracking-reference process | None in page body | Linked-policy review | F | Contact delivery, tracking and page approval remain open. | +| Customer Service | `docs/admin-ready-pages/customer-service.md` | Customer Service | `customer-service` | Customer Service | Unpublished | A | Public address, recipient mailbox, hours and no-response-time promise approved | Shopify Contact delivery, backup coverage, retention and escalation evidence | None in page body | Limited legal review | F | Contact delivery, retention and publication approval remain open. | +| Shipping Information | `docs/admin-ready-pages/shipping-information.md` | Shipping Information | `shipping-information` | Shipping Information | Unpublished | A | Standard/Express decision, regional exceptions | Route evidence, remote-area, failed-delivery and address-correction process | VAT/customs/import treatment | Delivery and consumer-rights review | F | Admin rate wording, tax/import and route decisions remain open. | +| Returns & Refunds | `docs/admin-ready-pages/returns-and-refunds.md` | Returns & Refunds | `returns-and-refunds` | Returns & Refunds | Unpublished | A | Return/refund policy values | Evidence, return address, supplier-direct restrictions, approval authority | Credit-note and refund-record process | South African consumer/returns review | F | Return windows, exclusions and responsibility are unconfirmed. | +| Payment Information | `docs/admin-ready-pages/payment-information.md` | Payment Information | `payment-information` | Payment Information | Unpublished | A | PayPal, Payflex, Test Gateway and final method decisions | Failed/duplicate/pending payment and dispute process | VAT/payment receipt treatment | Payment/refund wording review | F | Final payment configuration and process are unconfirmed. | +| FAQ | `docs/admin-ready-pages/faq.md` | FAQ | `faq` | FAQ | Unpublished | A | Mirrors all shipping, return, cancellation and payment decisions | Support escalation process | Tax/import answers | Policy answer review | F | It cannot be final until the pages it summarizes are final. | +| Contact | Existing Shopify Contact page / `docs/admin-ready-pages/contact-page-content.md` | Contact | `contact` | Contact Us | Published | C | Public mailbox, primary owner and hours approved; hosted submission succeeds | Shopify routes native submissions to a different private Sender email; acknowledgement mismatch, backup coverage and privacy wording remain | None in page body | Privacy/data-handling review | F | Storefront submission works, but destination alignment, delivery retest, acknowledgement and privacy gates remain open. | +| Privacy Policy | Shopify policy record | Privacy Policy | Shopify policy URL | Privacy Policy | Policy link observed; content not approved | D | Business identity and data-processing decisions | Privacy escalation owner | None | South African privacy/electronic-communications review | F | Legal review and policy confirmation required. | +| Terms of Use | Shopify policy record | Terms of Use | Shopify policy URL | Terms of Use | Not verified as final public URL | D | Business identity, governing law and dispute terms | Customer-support dispute handling | Tax/consumer disclosures | South African legal review | F | Policy content and URL are not approved. | +| Refund Policy | Shopify policy record | Refund Policy | Shopify policy URL | Refund Policy | Not verified as final public URL | D | Refund values and exclusions | Provider-pending and refund-authority process | Credit-note/refund records | South African consumer-rights review | F | Must match the final Returns & Refunds process. | +| Shipping Policy | Shopify policy record | Shipping Policy | Shopify policy URL | Shipping Policy | Not verified as final public URL | D | Standard/Express, R770 and service-area decisions | Route, exception and delivery-investigation process | VAT/customs/import wording | Delivery/consumer-rights review | F | Must match approved Admin rates and route evidence. | + +Classification key: **A** Draft aligned; merchant review required. **B** Merchant-approved; legal review required. **C** Operational dependency outstanding. **D** Tax/legal dependency outstanding. **E** Ready for LP-3C publication. **F** Blocked. No item is classified E. + +## Returns And Refund Decisions + +| Decision | Current safe customer wording | Required determination | Required review | Publication state | +| --- | --- | --- | --- | --- | +| Customer reporting window | Contact Customer Service as soon as possible. | Define the customer reporting window. | Merchant decision required; South African legal review required. | Blocked | +| Return-request window | Contact Get Yours before returning an item. | Define request period and eligibility. | Merchant decision required; South African legal review required. | Blocked | +| Damaged/incorrect reporting window | Clear photos may help assessment. | Define window separately for damaged and incorrect items. | Merchant decision required; operational confirmation required. | Blocked | +| Evidence and photographs | Photos of item and packaging may help. | Decide required evidence, exceptions and accessibility alternatives. | Merchant decision required; legal review required. | Blocked | +| Packaging retention | No customer rule is published. | Decide whether packaging must be retained and when exceptions apply. | Merchant decision required; legal review required. | Blocked | +| Unused/unopened requirement | No customer rule is published. | Define condition requirements for change-of-mind cases. | Merchant decision required; legal review required. | Blocked | +| Hygiene/safety exclusions | No exclusions are published. | Decide applicable categories and statutory exceptions. | Merchant decision required; South African legal review required. | Blocked | +| Personalised/final-sale treatment | No exclusions are published. | Decide whether such items exist and the lawful treatment. | Merchant decision required; South African legal review required. | Blocked | +| Customer-remorse treatment | Eligibility is considered under the final policy. | Define approval rule, costs and exceptions. | Merchant decision required; legal review required. | Blocked | +| Defective/incorrect treatment | Contact us first; no return before instructions. | Define replacement, repair, refund and evidence process. | Merchant decision required; operational confirmation required; legal review required. | Blocked | +| Return shipping responsibility | No responsibility is published. | Decide who pays for each return type. | Merchant decision required; legal review required. | Blocked | +| Supplier-direct returns | No return address is published. | Define restrictions and return-address disclosure process. | Operational confirmation required; merchant decision required. | Blocked | +| Approval before return | Customers must receive instructions first. | Keep this rule and define approval authority. | Merchant decision required. | Aligned but not final | +| Refund authority | Refunds are approved under policy/process. | Name authority, evidence and escalation thresholds. | Merchant decision required. | Blocked | +| Replacement versus refund | No final rule is published. | Define when each remedy is offered. | Merchant decision required; legal review required. | Blocked | +| Original payment method | Where possible, approved refunds use original method. | Confirm exceptions and recordkeeping. | Merchant decision required; accountant/tax-practitioner confirmation required. | Blocked | +| Provider-pending wording | Refund may remain pending after submission; no immediate settlement promise. | Retain this wording. | Operational confirmation required. | Aligned | +| Non-refundable shipping | No customer rule is published. | Define treatment by return reason. | Merchant decision required; legal review required. | Blocked | +| Cancellation after supplier commitment | Availability depends on order stage. | Define the cutoff and supplier-response process. | Merchant decision required; supplier confirmation required. | Blocked | +| Chargeback/dispute escalation | No customer rule is published. | Define evidence, response owner and provider escalation route. | Merchant decision required; legal review required. | Blocked | + +## Cancellation-Stage Register + +Operational principle: **Contact Customer Service as soon as possible. Cancellation availability depends on the stage of the order.** + +| Stage | Cancellation may be possible? | Merchant approval | Supplier dependency | Refund dependency | Customer wording | Stop condition | Escalation owner | +| --- | --- | --- | --- | --- | --- | --- | +| 1. Checkout attempted; no confirmed order | Potentially, but do not assume a failed attempt. | Required if a charge/order is unclear. | None. | Investigate duplicate/pending payment before retry. | Check order confirmation and charge status before trying again. | Payment or order status cannot be confirmed. | Payments owner | +| 2. Order created; payment not confirmed | Potentially. | Required. | None. | Payment status must be investigated before cancellation. | Contact support with order details. | Pending/unclear payment. | Payments owner | +| 3. Paid order awaiting review | Potentially. | Required. | Stock/cost review may be required. | Refund authority required if cancelled. | Contact support as soon as possible. | Supplier or fulfilment review begins. | Support owner | +| 4. Paid order approved; CJ order not placed | Potentially. | Required. | Confirm no supplier order exists. | Refund authority required. | Cancellation availability depends on order stage. | Supplier order is placed. | Fulfilment owner | +| 5. CJ order placed; not processed | Uncertain. | Required. | Supplier confirmation required. | Refund depends on supplier/provider outcome. | No cancellation promise after supplier commitment. | Supplier begins processing or refuses cancellation. | Fulfilment owner | +| 6. Supplier processing started | Usually uncertain. | Required. | Supplier confirmation required. | Refund/replacement decision required. | We will review available options. | Supplier cannot stop processing. | Fulfilment owner | +| 7. Supplier shipped | Cancellation normally not assumed. | Required for any exception. | Carrier/supplier return process required. | Returns process, not cancellation, may apply. | Contact support; return instructions may be required. | Valid tracking or delivery event. | Returns owner | +| 8. Delivered | Cancellation is not applicable. | Returns authority required. | Return route may be supplier-dependent. | Returns/refunds policy applies. | Contact support before returning anything. | Return eligibility/exclusion applies. | Returns owner | + +## Shipping-Information Dependencies + +| Item | Current position | Required decision or evidence | Classification | +| --- | --- | --- | --- | +| Market | South Africa only | Confirm no unsupported international rates or wording appear. | Operational confirmation required | +| Standard charge | R100 observed in prior controlled checkout evidence | Approve the customer-facing Standard label and charge. | Merchant decision required | +| Express charge | R150 observed in prior controlled checkout evidence | Decide whether Express remains customer-facing; no express-speed promise is approved. | Merchant decision required; operational confirmation required | +| Free Standard | R770 approved threshold | Conduct controlled checkout verification below and at/above R770. | Operational confirmation required | +| Delivery duration | Route-dependent wording only | Obtain SKU/destination/supplier-route evidence before publishing any duration. | Operational confirmation required | +| Supplier fulfilment | May apply | Maintain generic disclosure; verify SKU route and cost before launch. | Operational confirmation required | +| Tracking | Valid reference required before communication | Define source, owner and customer-update process. | Operational confirmation required | +| Delivery exceptions | No final rule | Define failed delivery, remote-area, regional exclusion and incorrect-address process/costs. | Merchant decision required; operational confirmation required | +| Tax/import | No customer claim | Confirm VAT, customs and import treatment before policy publication. | Accountant/tax-practitioner confirmation required; South African legal review required | + +## Payment-Information Dependencies + +| Decision | Current safe public position | Required determination | Classification | +| --- | --- | --- | --- | +| PayFast | Do not name provider; show methods available at checkout. | Confirm live activation and final method set. | Merchant decision required | +| PayPal | Not named in public support copy. | Decide retain/remove before launch. | Merchant decision required | +| Payflex | Not named in public support copy. | Decide inclusion after fee/margin review. | Merchant decision required | +| Mobicred | Not named in public support copy. | Remains disabled unless separately approved. | Merchant decision required | +| Test Payment Gateway | Never named publicly. | Decide removal before live launch. | Merchant decision required | +| Payment logos | Dynamic theme output. | Align logos and accelerated controls with final enabled methods. | Merchant decision required; operational confirmation required | +| Failed/duplicate payment | Customer must verify order/charge before retry. | Define support investigation evidence and escalation. | Operational confirmation required | +| Pending payment | No final customer process is published. | Define review/hold/cancellation process. | Merchant decision required; operational confirmation required | +| Refund notification | No guarantee is published. | Confirm notification sender, timing and failure handling. | Operational confirmation required | +| Disputes/chargebacks | No customer rule is published. | Define evidence retention, owner and provider escalation. | Merchant decision required; legal review required | + +## Customer Service Operating Register + +| Operating field | Required state | Classification | +| --- | --- | --- | +| Public support email | Approved public address, if one will be published. | Merchant decision required | +| Recipient mailbox | Confirm exact monitored Contact destination. | Operational confirmation required | +| Primary/backup owner | Named accountable people or roles. | Merchant decision required | +| Inbox cadence | Document business-day monitoring cadence. | Operational confirmation required | +| Spam review | Confirm Shopify/mailbox filtering and human review. | Operational confirmation required | +| Escalations | Payment, fulfilment, damaged-item, refund and privacy handoffs documented. | Operational confirmation required | +| Record retention | Define what support evidence is retained and for how long. | Merchant decision required; South African legal review required | +| Identity verification | Define minimal order/customer verification before disclosure or account changes. | Operational confirmation required; privacy review required | +| Response wording/hours | No exact response time or hours until coverage is approved. | Merchant decision required | + +## Contact Launch Gate + +All items below must close before Contact is launch-ready: + +- Recipient confirmed and monitored. +- Primary and backup owner confirmed. +- Inbox test completed with synthetic data under separate approval. +- Acknowledgement wording approved and observed in the controlled test. +- Privacy wording and Privacy Policy link approved. +- Spam handling and escalation path confirmed. +- Customer-visible response promise approved, or omitted. + +Recommended acknowledgement baseline: + +> Thanks for contacting Get Yours. Your message has been received. +> +> Please keep your order number available if your enquiry relates to an order. Do not send card details, banking passwords, one-time PINs, account passwords or other sensitive payment information through this form. +> +> We will review your message and respond through the contact details you provided. + +## Tax And Legal Dependencies + +| Topic | Page impact | Required confirmation | +| --- | --- | --- | +| VAT registration and price treatment | Shipping Information, FAQ, Payment Information, policies | Accountant/tax-practitioner confirmation required | +| Tax display, invoices and credit notes | Payment Information, Returns & Refunds, policies | Accountant/tax-practitioner confirmation required | +| Imported goods, customs and duties | Shipping Information, FAQ, Shipping Policy | Merchant decision required; South African legal review required | +| Consumer rights, returns and defective goods | Returns & Refunds, FAQ, Refund Policy | South African legal review required | +| Delivery obligations and cancellation wording | Shipping Information, FAQ, Shipping Policy | South African legal review required | +| Privacy/data handling and electronic communications | Contact, Privacy Policy, Terms of Use | South African legal review required | +| Business identity, governing law and dispute resolution | Terms of Use, policies | Merchant decision required; South African legal review required | + +## Page Publication Classification + +All six support pages are **A: Draft aligned; merchant review required**, with additional C/D blockers as recorded above. Contact and all four policy destinations are F: Blocked. No destination is E: Ready for LP-3C publication. + +## LP-3B.3 Operational-Decision Impact + +LP-3B.3 provides recommended internal starter procedures for support ownership, cancellations, returns, damaged/incorrect items, tracking, delivery exceptions, refund authority, payment support and Contact operations. It closes no publication gate by itself: all merchant assignments and approvals remain outstanding, supplier/CJ facts require case-specific confirmation, payment-provider matters require provider evidence, and tax/legal matters require professional review. See `docs/lp-3b-3-merchant-operational-decisions.md`. + +| Publication blocker group | LP-3B.3 result | Remaining gate | +| --- | --- | --- | +| Support and Contact workflow | Recommended internal model documented. | Merchant must assign mailbox, owners, cadence, escalation, privacy treatment and controlled-test approval. | +| Cancellations, returns and remedies | Recommended case-handling and authority model documented. | Merchant approval, supplier-return facts and South African legal review. | +| Damaged, incorrect, missing and delivery cases | Evidence and escalation SOP documented. | Supplier/carrier case evidence, merchant authority and legal review. | +| Tracking and delivery exceptions | Neutral operating process documented. | Supplier/CJ route facts, carrier evidence and merchant cost decisions. | +| Payment support and refunds | Duplicate/pending/refund monitoring procedure documented. | Provider confirmation, refund terminal state, merchant authority and later controlled tests. | +| Tax, imports and legal policies | Professional questions separated from merchant operations. | Accountant/tax-practitioner confirmation and South African legal review. | + +LP-3B.4 records selected merchant operating approvals in `docs/lp-3b-4-merchant-operational-approval-register.md`. Recipient-mailbox, supplier/provider, professional legal/tax and controlled-test gates remain open. No destination advances to E: Ready for LP-3C publication. + +## LP-3C Controlled Publication Sequence + +LP-3C requires separate explicit approval and must execute in this order: + +1. Record merchant approval of each support page. +2. Record legal/tax confirmation where required. +3. Confirm final page titles and handles. +4. Publish one approved support page at a time. +5. Verify each public URL. +6. Confirm no placeholder text remains. +7. Confirm R770 wording. +8. Confirm neutral delivery wording. +9. Confirm provider-neutral payment wording. +10. Confirm sensitive-information warning. +11. Confirm South Africa-only scope. +12. Confirm Contact destination. +13. Configure or confirm policy URLs. +14. Wire Main menu. +15. Wire Footer Shop. +16. Wire Footer Support. +17. Wire Footer Legal. +18. Assign menus to the development theme. +19. Verify desktop navigation. +20. Verify mobile navigation. +21. Verify keyboard behaviour. +22. Verify every destination. +23. Run broken-link check. +24. Confirm Search is removed from Support and Legal. +25. Confirm no unsupported functionality is linked. + +## Merchant Decisions Required + +- Returns, cancellation, evidence, exclusions, costs and supplier-return controls. +- Standard/Express presentation, R770 checkout confirmation and delivery-exception treatment. +- PayPal, Payflex, Test Gateway and final payment-method presentation. +- Public support address, owners, monitoring, response approach and escalation model. +- Business identity, imported-goods and dispute-resolution decisions. + +## Professional Confirmations Required + +- Accountant/tax-practitioner confirmation for VAT, tax display, invoices and credit notes. +- South African legal review for policies, consumer rights, returns, cancellation, delivery obligations, privacy, electronic communications and terms. + +## Strict No-Change Confirmation + +LP-3B.2 updated local planning documentation only. No Shopify page, policy, menu, Contact form, payment, shipping, order, refund, fulfilment, CJ, product, collection, theme or live-store mutation occurred. diff --git a/get-yours-shopify-theme/docs/lp-3b-3-merchant-operational-decisions.md b/get-yours-shopify-theme/docs/lp-3b-3-merchant-operational-decisions.md new file mode 100644 index 00000000000..9bf6e48f3b3 --- /dev/null +++ b/get-yours-shopify-theme/docs/lp-3b-3-merchant-operational-decisions.md @@ -0,0 +1,214 @@ +# LP-3B.3 Merchant Operational Policy Decisions + +## Executive Summary + +This package turns the unresolved LP-3B.2 operational items into recommended, zero-budget starter procedures for a solo-founder launch. They are internal recommendations only: they do not create customer promises, determine statutory rights, set tax treatment or authorize publishing. + +The proposed operating principle is: verify the Shopify order and payment state first, verify the supplier and delivery facts second, then communicate only confirmed information. Do not request card details, banking passwords, one-time PINs or account passwords through any support channel. + +## Decision Ownership Classification + +| Open area | Recommended owner class | Required decision or evidence | +| --- | --- | --- | +| Support mailbox, owners, cadence and escalation | A. Merchant operational decision | Assign named owners or roles and confirm the monitored mailbox. | +| Cancellation handling, evidence collection, return approval and refund authority | A. Merchant operational decision | Approve the internal workflow and approval thresholds. | +| Stock, route, return address, cancellation after supplier commitment and supplier disputes | B. Supplier/CJ confirmation required | Confirm against the actual product, supplier order and carrier record. | +| VAT, price display, invoices, credit notes, refund accounting and imports | C. Accountant or tax-practitioner confirmation required | Obtain written professional guidance. | +| Returns, cancellation, defective goods, privacy, terms, delivery obligations and policy wording | D. South African legal review required | Obtain a South African legal review before publication. | +| Provider refund state, dispute route, live payment-method set and settlement process | E. Payment-provider confirmation required | Verify through approved provider records without exposing credentials. | +| R770 checkout behaviour, notification delivery, Contact recipient and later payment/fulfilment tests | F. Controlled technical test required | Run only with separate approval and sanitized evidence. | + +## Support Operating Model + +### Recommended Solo-Founder Baseline + +- Review the monitored inbox at least twice on each business day; this is an internal operating target, not a customer-facing response-time promise. +- Prioritize possible duplicate charges, unclear payment states, damaged/incorrect items and address corrections before routine enquiries. +- Log every order enquiry by Shopify order number. Record the issue, evidence requested, current state, owner, next action and customer update. +- Verify the customer against the order using only the minimum necessary details before disclosing order information or changing an address. +- Do not accept card details, passwords, banking credentials or one-time PINs via email, contact form, social media or chat. +- Escalate supplier, payment-provider, privacy and refund issues only with the minimum relevant order data. + +### Merchant Input Register + +| Field | Recommended starter rule | Merchant approval required | +| --- | --- | --- | +| Public support email | Publish only a monitored address intended for customer use. | Yes | +| Recipient mailbox | Keep the Contact form pointed at a mailbox the owner can access every business day. | Yes | +| Primary owner | One accountable support owner performs first triage. | Yes | +| Backup owner | One named backup covers absence and receives escalation instructions. | Yes | +| Inbox monitoring cadence | At least twice each business day. | Yes | +| Spam review cadence | Review filtered Contact and mailbox spam during each inbox check. | Yes | +| Payment escalation owner | Merchant owner until a separate payments role exists. | Yes | +| Fulfilment escalation owner | Merchant owner until a separate fulfilment role exists. | Yes | +| Damaged-item escalation owner | Merchant owner, with supplier evidence escalation after order verification. | Yes | +| Refund authority | Merchant owner only until written delegation is approved. | Yes | +| Privacy escalation owner | Merchant owner; seek legal advice for privacy incidents or requests. | Yes | +| Record-retention owner | Merchant owner maintains a minimal order-support record. Retention period requires legal/tax advice. | Yes | +| Emergency absence coverage | Backup owner receives only the access and information needed for triage. | Yes | + +## Cancellation-Stage Policy + +Baseline operational wording: **Cancellation is most likely before the supplier order is placed. After supplier commitment, cancellation depends on supplier status and cannot be guaranteed.** This is not a legal conclusion. + +| Stage | Recommended request process and likely possibility | Supplier confirmation | Refund dependency | Customer communication | Escalation owner | Stop condition | +| --- | --- | --- | --- | --- | --- | +| 1. Checkout attempted; no confirmed order | Check Shopify order and payment activity before any retry. Cancellation is not assumed. | No | Investigate a duplicate or pending charge first. | Confirm that the first attempt must be checked before retrying. | Payments owner | Payment or order state is unclear. | +| 2. Order created; unpaid | Record the request and inspect payment state. Cancellation may be possible. | No | Do not refund until a paid state is verified. | Explain that payment status is being checked. | Payments owner | Pending or unclear payment. | +| 3. Paid and under merchant review | Hold supplier action while the request is assessed. Cancellation may be possible. | Stock/cost review may be needed. | Merchant refund approval required. | Confirm the request is under review. | Support owner | Supplier/fulfilment review starts. | +| 4. Paid and approved; no CJ order placed | Verify no supplier order exists, then decide. Cancellation is normally most feasible here. | Confirm no CJ order was placed. | Merchant refund approval required. | Do not promise an outcome until verification completes. | Fulfilment owner | A supplier order is placed. | +| 5. CJ order placed; not processed | Ask supplier whether cancellation is possible. | Yes | Depends on supplier and payment outcome. | State that availability depends on supplier status. | Fulfilment owner | Supplier starts processing or declines cancellation. | +| 6. Supplier processing started | Escalate to supplier; no cancellation promise. | Yes | Remedy requires merchant decision after supplier response. | Say available options are being reviewed. | Fulfilment owner | Supplier cannot stop processing. | +| 7. Supplier shipped | Treat as a delivery/returns enquiry, not a routine cancellation. | Carrier/supplier return process may apply. | Do not issue refund before approved outcome. | Direct customer to contact support before returning anything. | Returns owner | Valid tracking or delivery event. | +| 8. Delivered | Route through the final returns process. | Return route may be supplier-dependent. | Refund/replacement needs approved eligibility. | Explain that return instructions are required first. | Returns owner | Policy eligibility or exclusion applies. | + +## Returns-Handling Model + +### Recommended Internal Rules + +1. Require the order number, item name and a concise description before reviewing a return. +2. Ask the customer to contact Get Yours before sending anything. Do not disclose a supplier return address until a return has been approved. +3. Request clear photographs only where relevant to the issue, such as an incorrect, damaged, incomplete or transit-damaged item. +4. Ask customers to retain relevant packaging while the issue is reviewed, where practical; do not treat packaging as an automatic outcome decision. +5. Keep customer-remorse cases separate from supplier-fault, damaged, incorrect and missing-item cases. +6. Do not authorize an automatic supplier-warehouse return or remedy. Record the approving owner, supplier response and final customer communication. +7. Select refund, replacement or another remedy only after the case is reviewed against the final approved policy and applicable professional advice. + +### Merchant Decisions Before Publication + +| Decision | Starter recommendation | Additional required review | +| --- | --- | --- | +| Reporting and return-request windows | Set only after a written merchant decision. | South African legal review | +| Unused-item requirement | Apply only to approved change-of-mind rules; do not use it to pre-judge defect cases. | South African legal review | +| Packaging requirement | Request retention where relevant; define exceptions. | South African legal review | +| Hygiene/safety, clearance/final-sale and personalised-item treatment | Do not publish exclusions until product categories and lawful treatment are reviewed. | South African legal review | +| Customer-remorse shipping responsibility | Decide after cost and supplier-route review. | Merchant decision; legal review | +| Defective-item shipping responsibility | Decide after supplier evidence and legal review. | Merchant decision; legal review | +| Refund and replacement authority | Keep with merchant owner until delegated in writing. | Merchant decision | + +## Damaged, Incorrect And Missing-Item SOP + +1. Receive the order number and verify the customer against the Shopify order. +2. Record the product, quantity, issue type and date reported. +3. Request only relevant evidence: product photographs, packaging photographs, shipping-label photograph, short issue description and missing-component list. +4. Compare the Shopify order, variant/SKU and the internal CJ mapping. +5. Confirm supplier fulfilment state, supplied reference and any carrier event. +6. Open a supplier dispute or enquiry where appropriate; do not promise the supplier outcome. +7. Escalate the case to the merchant refund/replacement authority. +8. Decide the approved remedy under the final policy and record why. +9. Send the customer a factual update without promising immediate settlement or replacement timing. +10. Reconcile supplier outcome, refund/payment status and internal case record before closing. + +Do not request unnecessary identity, payment or financial information. Statutory and consumer-right implications require South African legal review. + +## Tracking And Delivery-Exception Process + +- Verify the customer address before placing a supplier order; do not assume an address can be changed later. +- Communicate tracking only after a valid reference exists. Record supplier status and carrier status separately. +- Do not invent a tracking event, delivery date or carrier outcome. +- Investigate failed delivery before promising redelivery, replacement or refund. +- Escalate incorrect-address, remote-area and regional-exception cases before supplier commitment where possible. +- For delayed, lost or delivered-but-not-received cases, verify the supplier/carrier record and preserve the customer case record. +- Route transit damage through the damaged-item SOP. + +| Merchant decision | Recommended operating position | Further dependency | +| --- | --- | --- | +| Remote-area treatment | Confirm availability and cost before supplier order; do not publish a promise yet. | Supplier/CJ confirmation | +| Redelivery, incorrect-address and failed-delivery costs | Do not allocate costs until a case and supplier/carrier facts are verified. | Merchant decision; legal review | +| Lost-parcel authority | Merchant owner approves investigation outcome. | Supplier/carrier confirmation; legal review | +| Replacement authority | Merchant owner approves until written delegation exists. | Supplier confirmation; legal review | + +## Refund Authority Matrix + +No real refund is authorized by this document. Verify original payment, refund eligibility and any existing refund before action. Refund to the original method where possible, record the approving owner, and never promise immediate settlement. + +| Situation | Evidence | Supplier dependency | Refund authority | Customer wording | +| --- | --- | --- | --- | --- | +| Duplicate payment | Shopify payment history and provider state | No | Merchant owner after duplicate verification | We are checking the payment records before any refund is issued. | +| Cancelled before supplier order | Paid order and confirmation that no CJ order exists | Confirm no supplier order | Merchant owner | We are reviewing the cancellation before supplier commitment. | +| Supplier out of stock / unable to ship | SKU mapping, supplier response and available alternatives | Yes | Merchant owner | We are reviewing the available options for the affected item. | +| Incorrect item | Order/SKU comparison and relevant evidence | Yes | Merchant owner | We are reviewing the order and fulfilment details. | +| Damaged item | Relevant photographs and supplier/carrier record | Usually | Merchant owner | We are reviewing the evidence and available next steps. | +| Missing item | Order, delivery and missing-component evidence | Usually | Merchant owner | We are checking the fulfilment and delivery records. | +| Lost parcel | Supplier/carrier investigation | Yes | Merchant owner | We are investigating the delivery record before confirming an outcome. | +| Customer-remorse request | Order state, product condition and final policy eligibility | May apply | Merchant owner | Return eligibility is being reviewed under the approved policy. | +| Refund already provider-pending | Existing Shopify/provider refund record | Provider confirmation | Payments owner monitors; no duplicate refund | The refund remains under provider processing and is being monitored. | +| Provider refund failure/mismatch | Shopify and provider records | Provider confirmation | Merchant owner plus payments escalation | We are investigating the refund status with the payment process. | +| Chargeback/dispute | Provider notice and preserved order evidence | Provider confirmation | Merchant owner; legal escalation where needed | We are reviewing the dispute through the appropriate payment process. | + +## Payment-Support Process + +| Situation | Internal procedure | Safe customer treatment | +| --- | --- | --- | +| Failed payment | Check whether Shopify has an order or charge before suggesting another attempt. | Before trying checkout again, confirm that the first attempt did not create an order or charge. | +| Cancelled payment | Confirm whether the customer returned before payment completed and whether an order exists. | We can check the order status if you share the order details. | +| Pending payment | Verify Shopify and provider state; do not fulfil. | Payment is still being checked before the order can proceed. | +| Duplicate-charge concern | Compare order, payment and provider records; do not refund twice. | We are checking the payment records before any action. | +| Order exists but payment is unclear | Hold fulfilment and escalate to payments owner. | We are confirming the payment status before fulfilment. | +| Charge appears but no confirmation | Search by order/customer details and provider state; preserve evidence. | We are checking whether an order was created for the payment. | +| Refund submitted | Record timestamp, amount, original payment and provider state. | The refund has been submitted where applicable and may remain provider-pending. | +| Refund pending | Monitor the existing record; never retry without a verified failure and approval. | The payment provider is still processing the refund. | +| Refund completed | Verify both applicable records before closing. | The provider has reported the refund as completed; the payment method may update according to its own processing cycle. | +| Refund failed/mismatched | Preserve sanitized evidence and escalate to provider support only with approval. | We are investigating the refund status and will provide an update when confirmed. | + +Public support-page copy remains provider-neutral. Internal provider confirmation must not expose credentials, keys, banking information or customer payment details. + +## Contact Operating Gate + +| Input | Required before Contact is operationally ready | +| --- | --- | +| Public support address | Merchant approves the exact customer-facing address, if published. | +| Recipient mailbox | Confirm monitored delivery destination without documenting private credentials. | +| Primary and backup owner | Assign accountable people or roles. | +| Monitoring and spam process | Approve cadence, filters and human review. | +| Escalation path | Document payment, fulfilment, damaged-item, refund and privacy handoffs. | +| Acknowledgement wording | Confirm Shopify can send it and it contains no unsupported response promise. | +| Privacy wording | Approve warning against sending payment credentials and link to approved Privacy Policy. | +| Synthetic test identity | Create only synthetic details after separate approval. | +| Expected recipient and acknowledgement result | Define expected safe mailbox delivery and customer acknowledgement. | +| Controlled-test approval | Required before submitting any Contact form. | + +## Accountant/Tax Review Brief + +Request written professional guidance on the following; this document does not answer them: + +- VAT registration state and whether displayed prices include or exclude VAT. +- Checkout tax display, shipping tax treatment and customer receipts/invoices. +- Credit notes, refund accounting and reconciliation records. +- Imported goods, customs/duties treatment and related disclosures. +- Minimum finance and support record-retention requirements. + +## South African Legal-Review Brief + +Request South African legal review of the following; this document does not reach a legal conclusion: + +- Returns, refunds, cancellation rights and defective/incorrect goods. +- Cooling-off or distance-selling implications. +- Delivery obligations, delivery exceptions and cancellation wording. +- Return windows, evidence, packaging, exclusions and shipping-cost treatment. +- Privacy, customer-support records and electronic communications. +- Business identity, governing law, dispute resolution and policy wording. + +## Merchant Approvals Required + +1. Support address, owners, monitoring, escalation and Contact test plan. +2. Internal cancellation, returns, evidence, refund and replacement authority model. +3. Standard/Express presentation, R770 verification plan and delivery-exception cost treatment. +4. PayPal, Payflex, Test Gateway and final customer-facing payment-method presentation. +5. Supplier/CJ confirmation workflow, including return-address and route verification. + +## Remaining LP-3C Blockers + +- Each support page remains unpublished and blocked until its merchant, supplier, provider, technical, tax and legal gates are closed. +- The existing PayFast sandbox refund remains a separate payment-phase blocker; do not retry it. +- No policy destination is ready without professional review and approved content/URLs. +- Contact requires a monitored recipient, owners, privacy treatment and separately approved synthetic test. +- R770, Standard/Express and delivery wording require controlled checkout and supplier-route confirmation. + +## LP-3B.4 Approval Handoff + +`docs/lp-3b-4-merchant-operational-approval-register.md` records the merchant's selected launch-period operating approvals. The confirmed recipient mailbox is `info@getyours.online`; Shopify Contact-form delivery, supplier/provider facts, professional legal/tax questions and controlled tests remain separate open gates. + +## Strict No-Change Confirmation + +LP-3B.3 changes local planning documentation only. No Shopify page, policy, menu, Contact form, payment, shipping, order, refund, fulfilment, CJ, product, theme or live-store mutation occurred. diff --git a/get-yours-shopify-theme/docs/lp-3b-4-merchant-operational-approval-register.md b/get-yours-shopify-theme/docs/lp-3b-4-merchant-operational-approval-register.md new file mode 100644 index 00000000000..5a55df5c8df --- /dev/null +++ b/get-yours-shopify-theme/docs/lp-3b-4-merchant-operational-approval-register.md @@ -0,0 +1,151 @@ +# LP-3B.4 Merchant Operational Approval Register + +## Scope And Current State + +LP-3B.4 records the approval state of the LP-3B.3 recommendations. The merchant approved selected launch-period operating rules. `info@getyours.online` is both the approved public support address and the confirmed recipient mailbox; manual Outlook send/receive capability has been verified. LP-3B.5 was environment-blocked because Shopify connection verification rejected the local proxy after human hCaptcha completion; neither the mailbox nor the Contact form is classified as failed. + +This is an internal register. It does not publish customer-facing rules, determine statutory rights, or authorize Shopify changes. + +## Status Key + +| Status | Meaning | +| --- | --- | +| Approved | Merchant explicitly adopted the recommendation. | +| Approved with amendment | Merchant adopted a documented changed version. | +| Merchant input still required | A decision or private operating detail has not been supplied. | +| Supplier/provider confirmation required | CJ, carrier or payment-provider evidence is required. | +| Professional legal confirmation required | South African legal review is required. | +| Professional tax confirmation required | Accountant or tax-practitioner confirmation is required. | +| Deferred pending controlled technical test | A separately approved, controlled test is required. | + +## Support Ownership And Inbox Monitoring + +| Recommendation | Current status | Required input or next step | +| --- | --- | --- | +| Publish only a monitored public support address. | Approved | `info@getyours.online` is approved for public use. | +| Route Contact messages to a monitored recipient mailbox. | Approved with amendment | `info@getyours.online` is the merchant-approved recipient and is functional, but LP-3B.5C found Shopify's current native Contact destination is a different private Sender email. Admin alignment requires separate approval. | +| Assign one primary support owner. | Approved | Store Owner. | +| Assign a backup support owner for absence and escalations. | Approved with amendment | Unassigned for launch; Store Owner accepts the temporary single-owner operational risk. | +| Review inboxes at least twice each business day. | Approved | Internal minimum cadence; no guaranteed customer response time. | +| Review spam during inbox checks. | Approved | Daily spam review by Store Owner. | +| Publish support hours and message availability. | Approved | Monday-Friday, 09:00-17:00 SAST, excluding South African public holidays. Messages may be submitted at any time. | +| Publish a response-time commitment. | Rejected | Do not publish a guaranteed response time at launch. | +| Prioritize payment, duplicate-charge and address-change concerns. | Approved | Store Owner prioritizes these concerns during triage. | +| Log enquiries against Shopify order numbers. | Approved | Shopify order number is the internal support reference. | +| Do not accept card details, passwords or OTPs through support. | Merchant input still required | Existing customer-safety guidance remains recommended but requires formal adoption. | +| Assign payment, fulfilment, damaged-item, refund and privacy escalation owners. | Approved | Store Owner is the payment, fulfilment, refund and privacy escalation owner; damaged-item cases follow the same owner unless amended. | +| Define support-record retention. | Professional legal confirmation required | Legal/privacy retention requirements remain open; tax retention also needs separate tax advice. | + +## Cancellation Operations + +Internal baseline: cancellation is most likely before a supplier order is placed. After supplier commitment, cancellation depends on supplier status and cannot be guaranteed. This remains an operating rule, not a legal conclusion. + +| Order stage | Recommended handling | Current status | Required input or confirmation | +| --- | --- | --- | --- | +| Checkout attempted; no confirmed order | Check Shopify order and payment state before suggesting another checkout attempt. | Merchant input still required | Payment-support procedure still needs formal adoption. | +| Order created; unpaid | Take no supplier action; verify payment state. | Merchant input still required | Payment-support procedure still needs formal adoption. | +| Paid and under merchant review | Hold supplier action while the cancellation request is assessed. | Merchant input still required | Confirm operational hold rule. | +| Paid; no CJ order placed | Cancellation is normally possible where operationally feasible after payment verification and confirmation that no supplier order exists. | Approved with amendment | Merchant adopted the feasibility qualification. | +| CJ order placed; not processed | Cancellation is supplier-dependent and not guaranteed. | Approved with amendment | Confirm actual CJ cancellation workflow for the supplier/order. | +| Supplier processing started | Cancellation is supplier-dependent and not guaranteed. | Approved with amendment | Confirm supplier process case by case. | +| Supplier shipped | Treat as a delivery/returns matter rather than routine cancellation. | Merchant input still required | Returns process remains subject to legal review. | +| Delivered | Route to final approved returns process. | Professional legal confirmation required | Final process depends on merchant decision and South African legal review. | + +## Returns, Damaged And Incorrect-Goods Operations + +| Recommendation | Current status | Required input or confirmation | +| --- | --- | --- | +| Require customers to contact Get Yours before returning anything. | Approved | Confirm eligibility, destination and instructions before return. | +| Require an order number, item name and issue description for review. | Approved | Relevant order details and issue description may be required. | +| Request relevant photographs for damaged, incorrect or incomplete items. | Approved with amendment | Photographs may be required where relevant; accessibility exceptions remain open. | +| Ask customers to retain relevant packaging and labels while a case is reviewed. | Approved | Relevant packaging and shipping labels should be retained. | +| Do not disclose a supplier return address until a return is approved. | Approved | Return destination is confirmed only after approval. | +| Do not direct customers to a CJ/supplier warehouse without written instructions. | Approved | Customers must not return goods directly to CJ or another supplier without written Get Yours instructions. | +| Prioritize defective and incorrect-item cases over customer-remorse cases. | Merchant input still required | Triage priority has not been formally adopted. | +| Separate customer-remorse cases from supplier-fault cases. | Merchant input still required | Case categorization remains open. | +| Require recorded approval for refund, replacement or another remedy. | Approved | Store Owner authority applies, subject to order, evidence, supplier, stock, cost and shipping verification. | +| Define reporting window, return-request window and unused-item requirement. | Professional legal confirmation required | Merchant decision plus South African legal review. | +| Define hygiene/safety, clearance/final-sale and personalised-item treatment. | Professional legal confirmation required | Review product categories and South African legal position. | +| Define customer-remorse and defective-item shipping responsibility. | Professional legal confirmation required | Merchant cost decision, supplier facts and legal review. | + +## Damaged, Incorrect And Missing-Item SOP + +| SOP control | Current status | Required input or confirmation | +| --- | --- | --- | +| Verify customer and Shopify order before discussing or changing a case. | Merchant input still required | Minimum-verification procedure has not been adopted. | +| Record item, quantity, issue type and report date. | Merchant input still required | Approve record format. | +| Compare Shopify order, variant/SKU and CJ mapping. | Supplier/provider confirmation required | Complete LP-2 product mapping and supplier access process. | +| Confirm supplier fulfilment, carrier event and valid tracking reference. | Supplier/provider confirmation required | Obtain actual supplier/carrier records case by case. | +| Open supplier dispute or enquiry where appropriate. | Merchant input still required | Confirm who may open and monitor supplier cases. | +| Reconcile supplier and payment outcome before closing. | Merchant input still required | Confirm close-out owner and record. | + +## Tracking And Delivery Exceptions + +| Recommendation | Current status | Required input or confirmation | +| --- | --- | --- | +| Communicate tracking only after receiving a valid supplier/carrier reference. | Approved | Formally adopted. | +| Check tracking references where practical. | Approved | Do not describe limited tracking as real-time tracking. | +| Record supplier and carrier statuses separately. | Merchant input still required | Approve tracker fields and owner. | +| Do not invent tracking events or delivery dates. | Approved | Provide best-available status and estimated ranges only; do not guarantee arrival dates. | +| Confirm address before supplier order. | Merchant input still required | Address-verification check has not been adopted. | +| Investigate failed delivery before promising redelivery, replacement or refund. | Merchant input still required | Approve escalation and communication route. | +| Investigate incorrect-address, remote-area and regional-exception cases before commitment where possible. | Supplier/provider confirmation required | Obtain route/cost facts from supplier or carrier. | +| Investigate lost parcel and delivered-but-not-received reports with supplier/carrier. | Supplier/provider confirmation required | Confirm evidence, escalation and final authority. | +| Give delayed-order updates without guaranteed arrival dates. | Approved | Communicate material delays and delivery exceptions when known. | +| Define remote-area, redelivery, incorrect-address and failed-delivery costs. | Professional legal confirmation required | Merchant commercial decision, supplier facts and legal review. | + +## Refund Authority And Payment Support + +| Recommendation | Current status | Required input or confirmation | +| --- | --- | --- | +| Merchant owner is the launch-period refund authority. | Approved | Store Owner only. | +| Merchant owner is the launch-period replacement authority. | Approved with amendment | Store Owner only, subject to order, evidence, supplier, stock, cost and shipping verification. | +| Verify original transaction and current/refunded state before any refund. | Approved | Original-payment and duplicate-refund checks are mandatory. | +| Prefer the original payment method where supported. | Supplier/provider confirmation required | Confirm provider workflow and exceptions. | +| Never promise immediate refund settlement. | Merchant input still required | Existing safe wording remains recommended but was not explicitly adopted in this checkpoint. | +| Monitor provider-pending refunds without retrying automatically. | Supplier/provider confirmation required | Confirm provider status/escalation route; existing sandbox refund remains separate. | +| Check whether a first attempt created an order or charge before suggesting another checkout attempt. | Merchant input still required | Failed/duplicate-payment control has not been adopted. | +| Hold fulfilment where an order exists but payment is unclear. | Merchant input still required | Payment-escalation process has not been adopted. | +| Treat chargebacks/disputes as a separate escalation. | Professional legal confirmation required | Merchant procedure plus provider and legal escalation guidance. | +| Confirm final live payment methods and any public provider references. | Supplier/provider confirmation required | Merchant decision and payment-provider confirmation; public copy remains provider-neutral meanwhile. | + +## Contact Operations + +| Recommendation | Current status | Required input or confirmation | +| --- | --- | --- | +| Confirm recipient mailbox and primary/backup owners. | Approved with amendment | Recipient is `info@getyours.online`; primary owner is Store Owner. Backup is unassigned for launch, with temporary single-owner risk accepted. Shopify Contact-form delivery remains untested. | +| Approve acknowledgement wording without a guaranteed response time. | Approved | Approved text is retained below. LP-3B.5B showed Shopify's current message says `We'll get back to you as soon as possible`; implementation alignment remains open. | +| Approve privacy wording and an approved Privacy Policy link. | Professional legal confirmation required | South African legal review and merchant approval. | +| Document spam filtering and escalation route. | Approved | Daily spam review; payment, fulfilment, refund and privacy escalation owner is Store Owner. | +| Define a synthetic Contact test identity and expected results. | Merchant input still required | Test plan details remain open; do not submit yet. | +| Run a synthetic Contact test. | Deferred pending controlled technical test | LP-3B.5B hosted submission was accepted. LP-3B.5C found it was routed to a different configured private Sender email; destination alignment and a later retest remain open. | + +## Professional And External Confirmation Register + +| Area | Current status | Required confirmation | +| --- | --- | --- | +| VAT, price display, checkout tax, invoices, credit notes and refund accounting | Professional tax confirmation required | Accountant or tax-practitioner guidance. | +| Imports, customs and related customer wording | Professional tax confirmation required | Accountant/tax-practitioner guidance, with separate South African legal review. | +| Returns, cancellations, defective goods, delivery obligations and exclusions | Professional legal confirmation required | South African legal review. | +| Privacy, electronic communications, business identity, terms and dispute wording | Professional legal confirmation required | South African legal review. | +| CJ stock, route, supplier cancellation, return address and dispute process | Supplier/provider confirmation required | Supplier/CJ evidence for each launch SKU or case. | +| Payment method set, refunds, disputes and settlement process | Supplier/provider confirmation required | Payment-provider evidence and merchant decision. | +| R770 checkout threshold, notifications, Contact delivery and later fulfilment tests | Deferred pending controlled technical test | Separately approved controlled technical tests. | + +## Approval Summary And LP-3C Impact + +The merchant has adopted the listed support, cancellation, returns, tracking, refund-authority and Contact controls. All rows marked Merchant input still required, Supplier/provider confirmation required, Professional legal confirmation required, Professional tax confirmation required or Deferred pending controlled technical test remain open. + +LP-3C remains blocked. Before support-page publication or menu wiring, the merchant must adopt applicable operating rules, obtain required supplier/provider and professional confirmations, and separately approve the relevant Shopify mutations. + +## Approved Contact Acknowledgement + +> Thanks for contacting Get Yours. Your message has been received. +> +> Please keep your order number available if your enquiry relates to an order. Do not send card details, banking passwords, one-time PINs, account passwords or other sensitive payment information through this form. +> +> We will review your message and respond through the contact details you provided. + +## Strict No-Change Confirmation + +LP-3B.4 updated local planning documentation only. No Shopify page, policy, menu, Contact form, payment, shipping, order, refund, fulfilment, CJ, product, theme or live-store mutation occurred. diff --git a/get-yours-shopify-theme/docs/lp-3b-5-contact-form-verification.md b/get-yours-shopify-theme/docs/lp-3b-5-contact-form-verification.md new file mode 100644 index 00000000000..bfde0b2328b --- /dev/null +++ b/get-yours-shopify-theme/docs/lp-3b-5-contact-form-verification.md @@ -0,0 +1,73 @@ +# LP-3B.5 Controlled Contact-Form Verification + +## Scope + +Two synthetic Contact-form attempts were separately authorized: an initial automated attempt and one human-hCaptcha follow-up. No Contact content, recipient configuration, Shopify Admin setting, page, policy, menu, payment, shipping, order, refund, fulfilment, CJ, theme or live-store state was changed. + +## Initial Test Record + +| Item | Result | +| --- | --- | +| Page used | Development-theme preview: `/pages/contact` | +| Attempt timestamp | 2026-07-13 03:31:29 SAST | +| Synthetic name | Get Yours QA | +| Synthetic message subject | `[TEST] Get Yours Contact Form Verification` | +| Customer/order/payment data | None used | +| Form labels | Name, Email, Phone number and Comment were visible and labelled. | +| Attempt count | One initial attempt. No retry was made under the initial approval. | +| Storefront result | No success message or redirect appeared after the single Send action. | +| Form state | Name, email and comment remained visible in the rendered form after the attempt. | +| Challenge state | `Protected by hCaptcha` appeared after the Send action. No CAPTCHA was solved. | +| Console result | No warning or error was captured. | +| Network result | No safe HTTP failure was observed from the available storefront inspection. | + +## Approved Human-hCaptcha Follow-Up + +The merchant separately approved one follow-up attempt and agreed to complete hCaptcha manually. + +| Item | Result | +| --- | --- | +| Follow-up attempt timestamp | 2026-07-13 03:53:24 SAST | +| Form data | Same synthetic name and harmless launch-readiness message; no customer, order or payment data. | +| hCaptcha | Completed manually by the merchant. | +| Post-hCaptcha result | Shopify displayed `Your connection needs to be verified before you can proceed`. | +| Page title | `Verifying your connection...` | +| Resulting URL | Local development preview `/contact#ContactForm` | +| Contact success message | None. | +| Console result | No warning or error was captured. | +| Submission conclusion | Shopify connection verification blocked the local development proxy before a Contact submission was accepted. | + +## Classification + +**Environment-blocked; not classified as a broken or failed Contact form.** The Contact page rendered and the merchant completed hCaptcha, but Shopify's second connection-verification layer did not accept the POST through `127.0.0.1`. The form submission, storefront acknowledgement and mailbox routing were therefore not tested. + +No additional submission is authorized under LP-3B.5. Any further test requires separate explicit approval and should avoid treating the local-preview connection-verification result as a mailbox failure. + +## Merchant Mailbox Result + +The merchant confirmed that no LP-3B.5 test message was received at `info@getyours.online`. The merchant also supplied evidence that the mailbox can send and receive ordinary test email through Outlook. This separates mailbox health from the local-proxy limitation. Because Shopify did not accept the Contact POST, Inbox/Junk routing was not tested. + +| Check | Result | +| --- | --- | +| Inbox/Junk result | Not tested; Shopify did not accept the Contact submission. | +| Mailbox send/receive capability | Active; independently verified by the merchant. | +| Shopify Contact-form delivery | Unverified. | +| Storefront acknowledgement | Not tested. | +| Spam-routing conclusion | Not tested. | + +## Follow-Up + +1. Retain this as a local-preview environment limitation, not a Contact-form or mailbox defect. +2. Obtain separate approval before another synthetic form submission or any anti-spam/configuration change. +3. A future controlled test should use an approved Shopify-hosted storefront path or normal merchant browser context and still stop if Shopify presents another verification barrier. +4. Keep Contact and support-page publication blocked pending a completed controlled form test and privacy/legal review. + +## LP-3B.5B Handoff + +The merchant later completed one hosted storefront submission successfully. Shopify displayed a success acknowledgement, but no message was found at the target mailbox. See `docs/lp-3b-5b-hosted-contact-form-verification.md`. The local-proxy limitation remains useful QA evidence but is not itself a launch defect. + +LP-3B.5C later established that Shopify's native Contact destination is a different private Sender email. See `docs/lp-3b-5c-contact-routing-inspection.md`. + +## Strict No-Change Confirmation + +LP-3B.5 performed two separately approved synthetic storefront attempts: the initial hCaptcha-blocked attempt and one human-hCaptcha follow-up that Shopify connection verification blocked through the local proxy. No Contact POST was accepted, and no Shopify configuration, content, menu, policy, payment, shipping, order, refund, fulfilment, CJ, theme or live-store mutation occurred. diff --git a/get-yours-shopify-theme/docs/lp-3b-5b-hosted-contact-form-verification.md b/get-yours-shopify-theme/docs/lp-3b-5b-hosted-contact-form-verification.md new file mode 100644 index 00000000000..17a873f76a3 --- /dev/null +++ b/get-yours-shopify-theme/docs/lp-3b-5b-hosted-contact-form-verification.md @@ -0,0 +1,46 @@ +# LP-3B.5B Hosted Contact-Form Verification + +## Scope + +The merchant manually submitted exactly one synthetic Contact message through the normal hosted storefront. Codex did not operate the merchant browser or access the mailbox. No Contact page, recipient configuration, Shopify Admin setting, menu, policy, theme, payment, shipping, order, refund, fulfilment or CJ state was changed. + +## Merchant-Reported Result + +| Item | Result | +| --- | --- | +| Evidence timestamp | Approximately 2026-07-13 04:06 SAST, based on the merchant-provided screenshot. | +| Page used | `https://getyours.online/pages/contact` | +| Resulting URL | `https://getyours.online/pages/contact?contact_posted=true#ContactForm` | +| Submission accepted | Yes. | +| Exact storefront message | `Thanks for contacting us. We'll get back to you as soon as possible.` | +| Form cleared | Yes; the screenshot shows empty form fields after submission. | +| Unexpected redirect | No; the Contact page retained the form anchor and added `contact_posted=true`. | +| Message received | Not found at `info@getyours.online` at the time of the merchant report. | +| Received timestamp | Not applicable. | +| Subject/body/sender verification | Not possible because no message was found. | + +## Classification + +**C. Submitted successfully but not found.** Shopify accepted the hosted Contact submission and rendered a success acknowledgement, but the merchant did not receive the message at the confirmed support mailbox. + +This closes the storefront-rendering, hosted-submission and success-state checks. It does not close delivery or Inbox/Junk routing. + +## Acknowledgement Wording Finding + +The rendered Shopify message is not the merchant-approved neutral acknowledgement. `We'll get back to you as soon as possible` creates a response expectation, while LP-3B.4 approved no guaranteed response-time commitment. The customer-facing acknowledgement must be reviewed and aligned before Contact launch readiness can close. + +## Remaining Technical Checks + +1. Inspect the Shopify Contact notification destination and sender configuration in a separately approved read-only Admin phase. +2. Confirm Inbox and Junk/Spam after allowing for normal delivery delay. +3. Review sender-domain authentication and mailbox filtering only with separate approval and without exposing credentials. +4. After any approved correction, run one separately approved hosted synthetic retest. +5. Complete Contact privacy presentation review. + +## LP-3B.5C Routing Finding + +Read-only inspection found that Shopify's native Contact destination is the configured Sender email, which is a different private mailbox rather than `info@getyours.online`. The theme implementation is native and valid. See `docs/lp-3b-5c-contact-routing-inspection.md`. + +## Strict No-Change Confirmation + +LP-3B.5B records one merchant-operated synthetic hosted submission and its reported result. No Shopify configuration, content, menu, policy, theme, payment, shipping, order, refund, fulfilment or CJ mutation occurred. diff --git a/get-yours-shopify-theme/docs/lp-3b-5c-contact-routing-inspection.md b/get-yours-shopify-theme/docs/lp-3b-5c-contact-routing-inspection.md new file mode 100644 index 00000000000..743e60257ea --- /dev/null +++ b/get-yours-shopify-theme/docs/lp-3b-5c-contact-routing-inspection.md @@ -0,0 +1,140 @@ +# LP-3B.5C Contact Notification Routing And Message-Source Inspection + +## Executive Summary + +The read-only inspection found that Shopify is not currently routing native Contact-form submissions to `info@getyours.online`. Shopify's store/contact email and the Notifications > Sender email field all use the same private, non-public address. Shopify documents that native online-store Contact submissions are delivered to the store's Sender email. + +A separate sender warning is visible because the configured sender uses a public email domain. Shopify displays a `store+@shopifyemail.com` fallback identity to customers. This outbound sender/authentication warning does not, by itself, prove the cause of any inbound Contact-delivery failure. + +The theme implementation is Dawn-native and correct. The current success message comes from the English Dawn locale, not Shopify Admin or a section setting. + +## Prior LP-3B.5B Evidence + +- Hosted Contact submission was accepted. +- The form cleared and `contact_posted=true` appeared in the URL. +- Shopify rendered a success message. +- No message was found at `info@getyours.online` at the time of the merchant report. +- The public mailbox is independently verified as functional. + +## Shopify Email Configuration + +| Item | Read-only finding | +| --- | --- | +| Store email | A private non-public address is configured. It is not `info@getyours.online`. | +| Admin API `contactEmail` | The same private non-public address. | +| Sender email | The same private non-public address is visible in Notifications. | +| Customer-facing sender identity | Shopify warns that the public-domain sender cannot support custom sending and customers see a `store+@shopifyemail.com` fallback identity. | +| Authentication status | No branded-domain verified/pending/failed label was shown. The visible state is a public-domain limitation with fallback sender behaviour. | +| Separate Contact recipient | No separate native Contact-recipient control was visible. Shopify identifies Sender email as the Contact-form destination. | +| Approved public mailbox present | `info@getyours.online` was not present in the inspected Shopify store/contact/sender configuration. | +| Forwarding or alias | No forwarding or alias relationship was visible in the inspected Shopify interface. | + +Private addresses, account details and credentials are intentionally omitted. + +## Contact-Form Destination Findings + +Shopify's official Help Center states that native online-store Contact-form submissions are delivered to the store's Sender email. The current expected destination is therefore the configured private non-public sender mailbox, not `info@getyours.online`. + +The merchant should check that configured private mailbox's Inbox and Junk/Spam for the LP-3B.5B message before any configuration change. Codex did not access or inspect any mailbox. + +No Shopify Contact delivery log was available in the inspected interface. + +## Theme Implementation Findings + +| Item | Finding | +| --- | --- | +| Template | `templates/page.contact.json` loads the `contact-form` section. | +| Section | `sections/contact-form.liquid` | +| Form mechanism | Native Shopify `{% form 'contact' %}` with id `ContactForm`. | +| Success state | `form.posted_successfully?` | +| Fields | Name, required email, phone and comment/message are present. | +| Custom destination | None hard-coded. Shopify controls the native destination. | +| Custom JavaScript | No Contact submission interceptor was found in theme source. | +| Anti-bot customization | None found in the Contact section or theme JavaScript. Shopify supplies platform anti-bot handling. | + +The theme matches Shopify's expected native Contact implementation. Classification D does not apply. + +## Success-Message Source + +**Source classification: A. Dawn locale text.** + +| Item | Finding | +| --- | --- | +| File | `locales/en.default.json` | +| Key | `templates.contact.form.post_success` | +| Current text | `Thanks for contacting us. We'll get back to you as soon as possible.` | +| Render point | `sections/contact-form.liquid` inside `form.posted_successfully?` | +| Theme setting | None. | +| Future change required | Yes, because current text conflicts with the approved no-guaranteed-response position. | +| Approval required | Separate theme-source/content approval. No change is authorized in LP-3B.5C. | + +Approved future replacement: + +> Thanks for contacting Get Yours. Your message has been received. +> +> Please keep your order number available if your enquiry relates to an order. Do not send card details, banking passwords, one-time PINs, account passwords or other sensitive payment information through this form. +> +> We will review your message and respond through the contact details you provided. + +## Email-Domain Status + +- The configured sender is on a public email domain rather than `getyours.online`. +- Shopify displays fallback `shopifyemail.com` sender behaviour for customer-facing outbound mail. +- No branded-domain authentication success was visible for the current sender. +- No DNS, SPF, DKIM, DMARC, sender or forwarding setting was changed. +- The sender-domain warning is evidence for a future branding/authentication correction; it is not proof of the missing inbound Contact delivery. + +## Classification + +**F. Multiple configuration issues found.** + +1. **Confirmed routing issue:** Shopify's native Contact destination is a different private mailbox, not `info@getyours.online`. +2. **Confirmed sender warning:** public-domain sender configuration causes Shopify fallback sender behaviour. +3. **Confirmed content mismatch:** Dawn's success locale differs from the approved neutral acknowledgement. +4. **Not an issue:** the theme uses Shopify's native Contact form correctly. + +## Confirmed Facts + +- `info@getyours.online` is an independently working mailbox. +- Shopify's store/contact/sender configuration uses a different private address. +- Native Shopify Contact submissions are expected at the configured Sender email. +- Hosted form submission and success rendering work. +- The current success text is stored in `locales/en.default.json`. +- No separate Contact recipient or Contact delivery log was visible. + +## Unresolved Questions + +- Whether the LP-3B.5B message arrived at the currently configured private Sender email. +- Whether the merchant wants Shopify's Sender email and native Contact destination changed to `info@getyours.online`. +- Whether `getyours.online` sender-domain authentication is ready for Shopify CNAME/DMARC requirements. +- Whether any mailbox forwarding, quarantine or tenant filtering exists outside Shopify. +- Whether the final acknowledgement should be updated in other enabled locales after English is approved. + +## Recommended Correction Plan + +Treat each action as a separately approved phase: + +1. **Merchant mailbox evidence:** check the currently configured private Sender mailbox Inbox/Junk for the LP-3B.5B message. Do not expose its address or credentials. +2. **Destination decision:** approve or reject changing Shopify Sender email to `info@getyours.online`. Do not apply without explicit approval. +3. **Domain-authentication plan:** if the branded sender is approved, prepare Shopify-required DNS records and Hostinger/DNS-owner steps. Do not change DNS in this phase. +4. **Acknowledgement correction:** separately approve replacing the English Dawn locale value with the approved text; review other enabled locales. Do not edit theme source in this phase. +5. **Hosted retest:** after approved corrections, submit exactly one merchant-operated synthetic Contact test and verify Inbox/Junk delivery. +6. **Support escalation:** if routing is confirmed correct but delivery remains missing, prepare a sanitized Shopify Support case with timestamp, destination class and success URL; do not include credentials or private mailbox details. + +## Remaining Contact Launch Gates + +- Merchant decision on the Shopify Sender email/native Contact destination. +- Branded sender-domain authentication plan and evidence. +- Confirmed Contact delivery and Inbox/Junk routing after correction. +- Approved acknowledgement implemented and retested. +- Contact privacy presentation and South African legal review. +- Backup support coverage. + +## Shopify References + +- [Add a Contact Us page to your store](https://help.shopify.com/en/manual/online-store/themes/customizing-themes/common-customizations/add-contact-page): native Contact submissions are sent to the store's Sender email. +- [Setting up your email](https://help.shopify.com/en/manual/intro-to-shopify/initial-setup/setup-your-email): explains Store email, Sender email, domain authentication and fallback sender behaviour. + +## Strict No-Change Confirmation + +LP-3B.5C used read-only Admin GraphQL, Shopify Admin UI, official Shopify documentation and local theme inspection. No Contact submission, Shopify setting, email address, notification recipient, DNS record, page, policy, menu, theme source, payment, shipping, order, refund, fulfilment or CJ state changed. diff --git a/get-yours-shopify-theme/docs/lp-3b-navigation-content-readiness.md b/get-yours-shopify-theme/docs/lp-3b-navigation-content-readiness.md new file mode 100644 index 00000000000..4663c42880e --- /dev/null +++ b/get-yours-shopify-theme/docs/lp-3b-navigation-content-readiness.md @@ -0,0 +1,162 @@ +# LP-3B Navigation, Support Content And Contact Readiness + +## Executive Summary + +LP-3B is a read-only navigation and content readiness review. No Shopify menu, page, policy, collection, product, theme setting, payment, order, refund, fulfilment or CJ state changed. + +The current storefront navigation is insufficient for launch: `Catalog` should become `Shop`; the footer Support and Legal columns both point to Search; and the six intended support pages remain unpublished. The safe path is to approve content and policies first, then run a separately approved LP-3C Admin mutation phase. + +## Current Navigation + +| Menu | Current label | Current destination | Working | Correct target | Action required | +| --- | --- | --- | --- | --- | --- | +| Main menu | Home | `/` | Yes | Yes | Retain. | +| Main menu | Catalog | `/collections/all` | Yes | Destination is correct; label is not approved for launch. | Rename to `Shop`; make it the Shop parent or direct Shop All link. | +| Main menu | Contact | `/pages/contact` | Yes | Yes, but Contact is not operationally ready. | Retain only after Contact readiness is approved; otherwise keep as a controlled draft decision. | +| Footer Shop | Home / Catalog / Contact | `main-menu` | Yes | No. This duplicates header navigation rather than shop categories. | Assign a dedicated approved Footer Shop menu in LP-3C. | +| Footer Support | Search | `/search` | Yes | No. Search is not a support destination. | Replace only after approved support pages are published. | +| Footer Legal | Search | `/search` | Yes | No. Search is not a legal destination. | Replace only after policies are reviewed and available. | +| Footer policy bar | Privacy policy | Shopify dynamic policy URL | Observed | Partial. Only Privacy was observed in the preview. | Preserve dynamic policy rendering; do not add policy placeholders. | +| Social | None | N/A | N/A | Yes. | Keep hidden until real profiles are approved. | +| Payment presentation | Shopify dynamic payment types | N/A | Rendered | Pending provider decision. | Do not hard-code payment links or icons. | + +The header uses the same `main-menu` for desktop and mobile. The footer currently assigns `main-menu` to Shop and the same `footer` menu to both Support and Legal, which explains the duplicated/misassigned links. + +## Approved Header Architecture + +The desired information architecture is appropriate, but two proposed grouping collections do not exist yet. Do not wire `Tech & Office` or `Travel & Lifestyle` as single destinations until their collection scope is approved and created. + +### LP-3C Launch-Safe Header Proposal + +| Label | Intended URL | Current handle/state | Readiness | Required approval | +| --- | --- | --- | --- | --- | +| Home | `/` | N/A | Ready | None beyond LP-3C menu approval. | +| Shop | `/collections/all` | `all` | Ready as parent destination | LP-3C menu approval. | +| Shop All | `/collections/all` | `all`, 20 products observed in QA | Ready | LP-3C menu approval. | +| Home Organisation | `/collections/home-organisation` | `home-organisation`, 8 products | Ready subject to supplier launch approval | LP-3C menu approval. | +| Office & Desk Essentials | `/collections/office-desk-essentials` | 6 products | Ready subject to supplier launch approval | LP-3C menu approval. | +| Tech Accessories | `/collections/tech-accessories` | 5 products | Ready subject to supplier launch approval | LP-3C menu approval. | +| Travel | `/collections/travel` | 4 products | Limited but usable, subject to supplier launch approval | LP-3C menu approval. | +| Lifestyle | `/collections/lifestyle` | 5 products | Limited but usable, subject to supplier launch approval | LP-3C menu approval. | +| Help | `/pages/help` | Page exists but is unpublished | Not ready for customer-visible navigation | Publish page after content approval, then separate menu approval. | +| Contact | `/pages/contact` | Published page/form observed | Ready after contact-operations approval | Contact owner and controlled form-test approval. | + +`Best Sellers`, `New Arrivals`, and Deals are excluded from launch navigation. Sales data does not validate Best Sellers, New Arrivals needs ongoing merchandising ownership, and Deals needs verified promotional pricing. + +### Header Controls + +| Control | Current state | Classification | Required action | +| --- | --- | --- | --- | +| Search | Dawn search and predictive search passed LP-QA-1 | Launch Ready | Retest after final menu work. | +| Account | Log in link redirects to customer-account flow on the primary domain | Ready after testing | Confirm customer account choice and end-to-end account journey before launch. | +| Wishlist | Not observed in the current header | Not implemented | Do not add or imply wishlist functionality. | +| Cart | Cart flow passed, but preview state updates route to primary domain and checkout is still gated | Ready after testing | Retest final cart/checkout handoff after launch settings are approved. | + +## Approved Mobile Architecture + +```text +Home +Shop + Shop All + Home Organisation + Office & Desk Essentials + Tech Accessories + Travel + Lifestyle +Help +Contact +``` + +LP-3C verification must confirm expanded/collapsed state, keyboard operation, visible focus, Escape close, focus return to the menu button, touch-target size, unique destinations and no horizontal overflow. The unapproved group labels `Tech & Office` and `Travel & Lifestyle` remain out of the mobile menu until supporting collections exist. + +## Approved Footer Shop Menu + +| Label | URL | Handle | Product count | Readiness | Dependency | +| --- | --- | --- | --- | --- | --- | +| Shop All | `/collections/all` | `all` | 20 observed in QA | Ready | LP-3C menu approval. | +| Home Organisation | `/collections/home-organisation` | `home-organisation` | 8 | Ready subject to product approval | Supplier mapping and launch shortlist. | +| Office & Desk Essentials | `/collections/office-desk-essentials` | `office-desk-essentials` | 6 | Ready subject to product approval | Supplier mapping and launch shortlist. | +| Tech Accessories | `/collections/tech-accessories` | `tech-accessories` | 5 | Ready subject to product approval | Supplier mapping and launch shortlist. | +| Travel | `/collections/travel` | `travel` | 4 | Limited but usable | Supplier mapping and launch shortlist. | +| Lifestyle | `/collections/lifestyle` | `lifestyle` | 5 | Limited but usable | Supplier mapping and launch shortlist. | + +All current collections returned no collection featured image in the read-only collection inspection. This does not prevent text navigation, but collection imagery should be reviewed before any image-led navigation is proposed. A read-only `published_status:published` collection query returned the listed collections, so their current storefront publication state is published. + +## Approved Footer Support Menu + +| Page title | Intended label | Handle | Publication | Content readiness | Dependencies and correction required | +| --- | --- | --- | --- | --- | --- | +| Help | Help Centre | `help` | Unpublished | Not ready live | R770 wording is aligned; confirm support channel and tracking process. | +| Customer Service | Customer Service | `customer-service` | Unpublished | Not ready live | Confirm inbox, owner, support hours, response wording, cancellation/refund workflow. | +| Shipping Information | Shipping Information | `shipping-information` | Unpublished | Not ready live | R770 copy is aligned; approve rate presentation, route-dependent timing and South Africa-only operation. | +| Returns & Refunds | Returns & Refunds | `returns-and-refunds` | Unpublished | Not ready live | Approve reporting window, eligibility, exclusions, refund process and legal wording. | +| Payment Information | Payment Information | `payment-information` | Unpublished | Not ready live | Confirm final PayFast/PayPal/Test Gateway public presentation; do not promise settlement or refund timing. | +| FAQ | FAQ | `faq` | Unpublished | Not ready live | Align shipping, payment, returns and support answers with approved operations. | +| Contact | Contact Us | `contact` | Published | Ready after controlled test | Confirm recipient inbox, owner, privacy wording, spam handling and realistic response wording. | + +No unpublished support page is safe for a customer-visible menu until its content is approved and it is separately published. + +LP-3B.1 aligned repository-held support drafts to the approved R770 threshold, route-dependent delivery wording and provider-neutral payment language. The pages remain operationally blocked and unpublished; see `docs/lp-3b-1-content-contact-readiness.md` for the Contact decision register. + +LP-3B.2 completed the support-page publication-readiness matrix in `docs/lp-3b-2-support-page-publication-matrix.md`. LP-3B.3 completed the recommended internal operational decision package in `docs/lp-3b-3-merchant-operational-decisions.md`. No page or policy is approved for publication; LP-3C requires separate explicit approval. + +## Approved Footer Legal Menu + +| Intended label | Source | Intended URL | Current readiness | Required approval | +| --- | --- | --- | --- | --- | +| Privacy Policy | Shopify policy | Shopify policy URL | Privacy policy link is observed; legal content was not approved in LP-3B. | Merchant and South African legal review. | +| Terms of Use | Shopify Terms of Service policy | Shopify policy URL when configured | Not verified as a customer-visible destination. | Merchant and South African legal review. | +| Refund Policy | Shopify policy | Shopify policy URL when configured | Not verified as a customer-visible destination. | Merchant/legal review; must match Returns & Refunds. | +| Shipping Policy | Shopify policy | Shopify policy URL when configured | Not verified as a customer-visible destination. | Merchant/legal review; must match approved R770 and delivery wording. | + +Do not create a Footer Legal menu or add placeholders until the policies are configured, reviewed and their URLs are verified. + +## Collection Readiness + +| Collection | Handle | Products | Featured image | Launch-navigation finding | +| --- | --- | --- | --- | --- | +| Home Organisation | `home-organisation` | 8 | None returned | Suitable. | +| Office & Desk Essentials | `office-desk-essentials` | 6 | None returned | Suitable as a separate destination; not the proposed combined Tech & Office group. | +| Tech Accessories | `tech-accessories` | 5 | None returned | Suitable as a separate destination; not the proposed combined Tech & Office group. | +| Travel | `travel` | 4 | None returned | Suitable as a separate destination; not the proposed combined Travel & Lifestyle group. | +| Lifestyle | `lifestyle` | 5 | None returned | Suitable as a separate destination; not the proposed combined Travel & Lifestyle group. | +| Best Sellers | `best-sellers` | 7 | None returned | Keep off launch navigation until genuine sales data supports the label. | +| New Arrivals | `new-arrivals` | 6 | None returned | Keep off persistent navigation unless a merchant owns the merchandising rule. | + +`Tech & Office` and `Travel & Lifestyle` do not currently exist as collections. They are **not ready for navigation** under those labels. + +## Page And Contact Readiness + +Contact is published at `/pages/contact` and has a standard Shopify form (`Name`, required `Email`, `Phone number`, `Comment`, `Send`). At 360px it had no horizontal overflow. The form posts to Shopify's contact route, but LP-3B did not submit it, so recipient configuration, confirmation/acknowledgement, spam handling and real delivery are unverified. No customer-facing privacy note, public support email, response-time promise or recipient address was observed. + +Contact becomes ready only after a monitored recipient, named escalation owner, suitable privacy wording, realistic response wording and separately approved controlled form test are complete. + +## Missing And Unsupported Links + +- Remove Search from the future Support and Legal menus; the header search control already serves search. +- Do not add Track My Order, international shipping, wishlist, reviews, social profiles, Deals, Best Sellers, Express Delivery, Payflex, Mobicred or unverified payment links. +- Do not surface `Tech & Office` or `Travel & Lifestyle` until an intentional collection exists and is populated. +- Keep the customer account menu (`Orders`, `Profile`) separate from storefront navigation. + +## LP-3C Controlled Implementation Plan + +| Step | Shopify area | Current state | Approved action | Prerequisite | Verification | +| --- | --- | --- | --- | --- | --- | +| 1 | Support content | Six pages unpublished | Approve each final page body | Shipping/payment/support/legal decisions resolved | No placeholders or unapproved claims remain. | +| 2 | Pages | Six support pages unpublished | Publish only approved support pages | Step 1 and explicit publish approval | Each intended page URL loads. | +| 3 | Policies | Only Privacy link observed; legal state not approved | Confirm/approve policy content and URLs | Legal review | Four approved policy URLs load. | +| 4 | Main menu | Home, Catalog, Contact | Rename Catalog to Shop; create approved hierarchy | Approved collection destinations and Help/Contact readiness | No duplicate or unpublished target. | +| 5 | Footer Shop | Uses `main-menu` | Create/correct dedicated Footer Shop menu | Step 4 collection decisions | All collection links load. | +| 6 | Footer Support | Search only | Create/correct dedicated Support menu | Step 2 | Every support URL is published and correct. | +| 7 | Footer Legal | Search only | Create/correct dedicated Legal menu | Step 3 | Every policy URL is configured and correct. | +| 8 | Development theme | Existing footer block assignments | Assign the three approved menu handles in the theme editor | Steps 4-7 | Header/footer show the correct menu content. | +| 9 | Desktop QA | Existing links incomplete | Verify navigation and destinations | Step 8 | Labels, routes and payment presentation match approval. | +| 10 | Mobile QA | Existing mobile menu mirrors main menu | Verify hierarchy, keyboard and Escape behaviour | Step 8 | Focus, touch size, collapse state and no overflow pass. | +| 11 | Link QA | Support/legal targets not live | Verify every destination | Steps 2-8 | No 404, Search placeholder or duplicate. | +| 12 | Expectation QA | Provider/feature decisions pending | Confirm no unsupported functionality is linked or implied | Payment and launch decisions | No wishlist, fake reviews, tracking or international promise. | + +LP-3C requires separate explicit approval. It must not combine content publication, policy edits and menu wiring unless the merchant explicitly authorizes each mutation. + +## Strict No-Change Confirmation + +LP-3B performed read-only collection, storefront, theme configuration and repository inspection. No Shopify menu, page, policy, theme source, theme-editor assignment, payment, shipping, order, refund, fulfilment, CJ, product, collection or Admin setting was changed. diff --git a/get-yours-shopify-theme/docs/phase-1-5-repo-hygiene.md b/get-yours-shopify-theme/docs/phase-1-5-repo-hygiene.md new file mode 100644 index 00000000000..f7634835a89 --- /dev/null +++ b/get-yours-shopify-theme/docs/phase-1-5-repo-hygiene.md @@ -0,0 +1,161 @@ +# Phase 1.5 Repo Hygiene + +## Status + +Phase 1.5 cleanup is complete. + +This pass only cleaned up repository hygiene for the Dawn workspace and documented the next Shopify CLI workflow. No Dawn header, footer, announcement bar, homepage, section, or static prototype conversion work was done. + +## Parent Repo Git Status Summary + +Parent repo: + +- Path: `/Users/thabisoradebe/Developer/projects/GetYours` +- Branch: `shopify-dawn-conversion` + +Current parent repo status summary: + +- Modified files: + - `.gitignore` +- Deleted tracked files: + - `374` tracked root-level files are deleted. +- Untracked files/directories: + - `AGENTS.md` + - `get-yours-shopify-theme/` + - `get-yours-static-prototype/` + +## Nested Dawn Git Metadata + +Before cleanup: + +- `get-yours-shopify-theme/.git` existed. +- `git -C get-yours-shopify-theme rev-parse --is-inside-work-tree` returned `true`. +- `git ls-files --stage get-yours-shopify-theme` returned no parent-tracked gitlink entry, so the folder had not yet been committed as a submodule, but it was an embedded Git repository risk. + +Action taken: + +```sh +rm -rf get-yours-shopify-theme/.git +``` + +After cleanup: + +- `get-yours-shopify-theme/.git` no longer exists. +- `find get-yours-shopify-theme -maxdepth 2 -type d -name .git -print` returns no nested Git metadata. +- `git status --short --untracked-files=all get-yours-shopify-theme` now lists individual Dawn theme files as normal untracked files visible to the parent repo. + +Conclusion: + +- The Dawn folder is no longer an embedded Git repo. +- The parent Get Yours repo can now track the theme files directly. + +## Root-Level Deleted File Findings + +The parent repo still has `374` deleted tracked files at the repository root. + +Deleted-file summary by top-level path: + +```text +1 GETYOURS_BRIEF.md +1 LICENSE.md +1 README.md +194 assets +2 config +2 layout +51 locales +1 release-notes.md +61 sections +40 snippets +20 templates +``` + +These deleted paths strongly look like an older Dawn theme that previously lived at the repository root: + +- `assets/` +- `config/` +- `layout/` +- `locales/` +- `sections/` +- `snippets/` +- `templates/` +- Dawn root docs such as `LICENSE.md`, `README.md`, and `release-notes.md` + +They also include Get Yours custom root-level Dawn work, for example: + +- `assets/get-yours-logo.svg` +- `assets/getyours-components.css` +- `assets/getyours-theme.css` +- `sections/getyours-brand-story.liquid` +- `sections/getyours-category-tiles.liquid` +- `sections/getyours-hero.liquid` +- `sections/getyours-product-trust.liquid` +- `sections/getyours-promo-grid.liquid` +- `sections/getyours-trust-strip.liquid` +- `snippets/getyours-sale-badge.liquid` + +Recommended cleanup approach: + +- Treat the root-level deleted files as a separate repository cleanup decision from Phase 2 visual conversion. +- If the new source of truth is `get-yours-shopify-theme/`, keep the root-level Dawn deletions and commit them intentionally as cleanup. +- If any prior Get Yours Liquid work inside the deleted root-level files is still valuable, recover or compare it before committing the deletions. +- Prefer a dedicated cleanup commit for root-level Dawn removal, separate from later header/footer/theme conversion work. + +## Recommended Commit Approach + +Recommended commit grouping: + +1. Commit Phase 1 and Phase 1.5 foundation files: + - `AGENTS.md` + - `get-yours-shopify-theme/` + - relevant documentation under `get-yours-shopify-theme/docs/` + +2. Decide separately whether to commit the root-level deleted Dawn files: + - Commit the deletions if the repository root should no longer be a Shopify theme. + - Restore or archive any useful prior Get Yours Liquid work before committing the deletions. + +3. Keep the frozen static prototype separate: + - Do not convert or edit `get-yours-static-prototype/` during Dawn conversion setup. + - Use it as visual and UX reference only. + +## Shopify CLI Store Workflow + +Preferred workflow: + +- Keep `get-yours-shopify-theme/` as the local source. +- Use Shopify CLI to preview against store data during conversion. +- Push to an unpublished development theme when ready for stakeholder preview. +- Do not push to the active live theme during Phase 2. + +Confirmed by Shopify CLI help: + +- `shopify theme dev` supports `--store` and `--path`. +- `shopify theme push` supports `--store`, `--path`, and `--unpublished`. + +Suggested future local preview command: + +```sh +shopify theme dev --store getyours-9322.myshopify.com --path get-yours-shopify-theme +``` + +Suggested future unpublished theme push: + +```sh +shopify theme push --store getyours-9322.myshopify.com --path get-yours-shopify-theme --unpublished +``` + +Warnings: + +- Do not use `--allow-live`. +- Do not use `--publish`. +- Do not push to the active live theme until the Dawn conversion has passed full QA. +- Store authentication may be requested the first time either command is run. + +## Phase 2 Readiness + +Phase 2 can begin safely from a repository structure perspective because: + +- The Dawn theme folder is no longer an embedded Git repository. +- The parent repo can track `get-yours-shopify-theme/` files normally. +- The Shopify CLI workflow for local dev and unpublished pushes is documented. + +Before committing, make a deliberate decision about the existing root-level deleted Dawn files so the commit history is clear. diff --git a/get-yours-shopify-theme/docs/phase-1-dawn-setup.md b/get-yours-shopify-theme/docs/phase-1-dawn-setup.md new file mode 100644 index 00000000000..be7fd4b424f --- /dev/null +++ b/get-yours-shopify-theme/docs/phase-1-dawn-setup.md @@ -0,0 +1,153 @@ +# Phase 1 Dawn Setup + +## Status + +Phase 1 foundation setup is complete. + +This phase created a Dawn-based Shopify theme workspace for Get Yours without converting the static prototype into Liquid templates yet. + +## Branch + +- Working branch: `shopify-dawn-conversion` + +## Theme Location + +- Dawn theme folder: `get-yours-shopify-theme/` +- Static prototype reference folder: `get-yours-static-prototype/` + +The new theme was scaffolded from Shopify Dawn using Shopify CLI: + +```sh +shopify theme init get-yours-shopify-theme --clone-url=https://github.com/Shopify/dawn.git +``` + +The scaffolded Dawn version is `15.5.0` based on `config/settings_schema.json`. + +## Files Created Or Copied + +Created: + +- `AGENTS.md` +- `get-yours-shopify-theme/assets/gy-theme.css` +- `get-yours-shopify-theme/docs/phase-1-dawn-setup.md` + +Copied from the static prototype: + +- `get-yours-shopify-theme/assets/get-yours-logo.svg` +- `get-yours-shopify-theme/docs/static-site-audit.md` +- `get-yours-shopify-theme/docs/final-ui-ux-audit.md` +- `get-yours-shopify-theme/docs/shopify-theme-roadmap.md` +- `get-yours-shopify-theme/docs/dawn-conversion-plan.md` + +## Brand Token Layer + +`get-yours-shopify-theme/assets/gy-theme.css` contains the Get Yours brand token layer only. It does not redesign Dawn or replace Dawn component styling. + +Current tokens: + +```css +--gy-blue: #0081D8; +--gy-navy: #073A66; +--gy-navy-deep: #063A66; +--gy-yellow-logo: #FFD200; +--gy-gold: #F5B700; +--gy-gold-soft: #FFF4CC; +--gy-blue-soft: #EAF6FF; +--gy-bg: #F5F7FA; +--gy-surface: #FFFFFF; +--gy-border: #E4E7EC; +--gy-text: #1F2933; +--gy-muted: #667085; +--gy-success: #16A34A; +``` + +The logo SVG confirms: + +- Primary blue: `#0081D8` +- Logo yellow: `#FFD200` + +## Theme CSS Loading + +`get-yours-shopify-theme/layout/theme.liquid` now loads the Get Yours token stylesheet immediately after Dawn `base.css`: + +```liquid +{{ 'base.css' | asset_url | stylesheet_tag }} +{{ 'gy-theme.css' | asset_url | stylesheet_tag }} +``` + +## Settings Review + +Reviewed only: + +- `get-yours-shopify-theme/config/settings_schema.json` +- `get-yours-shopify-theme/config/settings_data.json` + +No settings files were modified in Phase 1. + +Relevant future conversion notes: + +- Dawn already supports logo image and logo width settings. +- Dawn color schemes remain stock for now and should be mapped to Get Yours brand colours in a later controlled pass. +- Button radius, card radius, inputs, product cards, and section spacing are available through Dawn settings and should be adjusted later only after the first Liquid section conversion decisions are made. + +## Reversed Logo + +No `get-yours-logo-reversed.svg` was created in Phase 1. A reversed logo should be produced from the source brand artwork or approved manually before being used on navy backgrounds. + +## Shopify CLI And Auth Status + +- Shopify CLI is installed and reports version `4.4.0`. +- During scaffolding, Shopify CLI auto-upgraded via Homebrew from an older installed version. +- Store authentication was not required for local scaffold or Theme Check. +- Store connection and preview authentication still need to be handled before `shopify theme dev` or theme push workflows. + +## Validation + +Completed: + +- Verified Dawn theme files exist under `get-yours-shopify-theme/`. +- Verified copied reference docs exist under `get-yours-shopify-theme/docs/`. +- Verified `assets/get-yours-logo.svg` exists. +- Verified `assets/gy-theme.css` exists. +- Verified `layout/theme.liquid` loads `gy-theme.css`. +- Inspected Dawn settings schema and settings data without modifying them. +- Ran Shopify Theme Check. + +Theme Check result: + +- `169` files inspected. +- `8` warnings. +- `0` errors. + +Warnings reported by Theme Check: + +- `layout/password.liquid`: existing Dawn `scheme_classes` undefined-object warning. +- `layout/theme.liquid`: existing Dawn `scheme_classes` undefined-object warning. +- `sections/main-article.liquid`: existing Dawn variable naming warning for `anchorId`. +- `sections/main-list-collections.liquid`: existing Dawn variable naming warning for `moduloResult`. +- `sections/main-product.liquid`: existing Dawn unused assign warning for `seo_media`. +- `sections/main-product.liquid`: existing Dawn `continue` undefined-object warning. +- `sections/main-search.liquid`: existing Dawn unused assign warning for `product_settings`. +- `snippets/quick-order-product-row.liquid`: existing Dawn orphaned snippet warning. + +These warnings are from the stock Dawn scaffold and were not introduced by the Get Yours token layer, except that `layout/theme.liquid` is now marked modified because it loads `gy-theme.css`. + +## Known Issues + +- `get-yours-shopify-theme/` was created by cloning Dawn and currently contains its own nested `.git/` folder. This was left intact in Phase 1 to avoid destructive cleanup. Decide whether to remove nested Git metadata before committing this folder into the parent repository. +- The parent repository already had many deleted root-level Dawn files before this phase began. Those pre-existing deletions were not reverted or modified. +- Local shell startup prints a Homebrew-related warning before commands: `(eval):1: no such file or directory: $/opt/homebrew/bin/brew`. It did not block Phase 1 commands. +- No store preview was launched because no Shopify store authentication or theme target was configured in this phase. + +## Recommended Phase 2 + +Recommended next phase: header, announcement bar, footer, and brand settings mapping. + +Phase 2 should: + +- Decide whether to keep the nested Dawn folder as the main theme workspace or move/flatten it intentionally. +- Remove nested Dawn `.git/` metadata only after explicit approval or as part of a commit-prep task. +- Map Get Yours brand colours into Dawn color schemes. +- Configure or convert the header logo treatment. +- Convert the announcement bar and footer direction from the static prototype into Dawn-compatible settings and sections. +- Keep homepage product rails, product templates, collection templates, cart logic, and static content page conversion for later phases. diff --git a/get-yours-shopify-theme/docs/phase-10-shopify-admin-pages-menus-plan.md b/get-yours-shopify-theme/docs/phase-10-shopify-admin-pages-menus-plan.md new file mode 100644 index 00000000000..db76dec9a50 --- /dev/null +++ b/get-yours-shopify-theme/docs/phase-10-shopify-admin-pages-menus-plan.md @@ -0,0 +1,107 @@ +# Phase 10 Shopify Admin Pages And Menus Plan + +## Scope + +This plan maps approved Markdown drafts to Shopify Admin pages and menus. It does not create pages, policies, menus, theme code, or custom routes. + +## Create These Shopify Pages + +| Page title | Handle | Draft source | Notes | +| --- | --- | --- | --- | +| Help | `help` | `docs/content-pages/help.md` | Primary support overview. | +| Customer Service | `customer-service` | `docs/content-pages/customer-service.md` | Add confirmed support email and hours. | +| Shipping Information | `shipping-information` | `docs/content-pages/shipping-information.md` | Keep delivery estimates and rate claims conditional until confirmed. | +| Returns & Refunds | `returns-and-refunds` | `docs/content-pages/returns-and-refunds.md` | Customer information only, not final legal policy. | +| Payment Information | `payment-information` | `docs/content-pages/payment-information.md` | Match active checkout providers only. | +| FAQ | `faq` | `docs/content-pages/faq.md` | Replace confirmation markers before publishing. | + +Existing page to review: + +| Page title | Handle | Draft source | Notes | +| --- | --- | --- | --- | +| Contact | `contact` | `docs/content-pages/contact-page-notes.md` | Retain the Dawn contact template and update the Admin page content/form recipient only. | + +## Shopify Policies Versus Normal Pages + +- Use Shopify policy settings for Privacy Policy, Terms of Service, Refund Policy and Shipping Policy once the final approved policy text exists. +- Normal pages can explain support processes in plain language, but should not replace legally reviewed policy content. +- Do not publish drafts containing `[CONFIRM BEFORE LAUNCH]` markers. +- Recheck the Terms of Service route after policy setup because the prior preview returned a 502. + +## Menu Wiring Plan + +### Main Menu + +- Home -> `/` +- Shop All -> `/collections/all` +- Home Organisation -> `/collections/home-organisation` +- Office & Desk -> `/collections/office-desk-essentials` +- Kitchen & Storage -> `/collections/kitchen-storage` +- Travel -> `/collections/travel` +- Tech Accessories -> `/collections/tech-accessories` +- Help -> `/pages/help` + +### Footer Shop + +- Shop All -> `/collections/all` +- Featured Practical Finds -> `/collections/featured-practical-finds` +- New Arrivals -> `/collections/new-arrivals` +- Best Sellers -> `/collections/best-sellers` +- Home Organisation -> `/collections/home-organisation` +- Office & Desk Essentials -> `/collections/office-desk-essentials` + +### Footer Support + +- Help -> `/pages/help` +- Customer Service -> `/pages/customer-service` +- Shipping Information -> `/pages/shipping-information` +- Returns & Refunds -> `/pages/returns-and-refunds` +- Payment Information -> `/pages/payment-information` +- FAQ -> `/pages/faq` +- Contact -> `/pages/contact` + +### Footer Legal + +- Privacy Policy -> Shopify policy URL +- Terms of Service -> Shopify policy URL +- Refund Policy -> Shopify policy URL, once configured +- Shipping Policy -> Shopify policy URL, once configured + +## Theme Editor Assignment + +The existing Dawn footer supports separate menu assignment per link-list block. In **Online Store > Themes > Customize > Footer**: + +1. Keep the Shop block assigned to the final Footer Shop menu. +2. Assign a dedicated Footer Support menu to the Support block. +3. Assign a dedicated Footer Legal menu to the Legal block. +4. Review policy links and payment icons after policies/payment providers are active. + +The header uses `main-menu`. Do not use custom `/za/...` routes unless routing is approved separately. + +## Approval Checklist + +- [ ] Merchant reviewed each draft and removed all `[CONFIRM BEFORE LAUNCH]` markers. +- [ ] Legal/policy text reviewed by the appropriate business/legal adviser. +- [ ] Shipping wording matches active South Africa shipping settings. +- [ ] R500 free-shipping wording matches active shipping rates, or is removed/changed before launch. +- [ ] Payment content matches active providers at checkout. +- [ ] Support email, support hours and contact-form recipient are confirmed. +- [ ] Tax/VAT statements reviewed before publication. +- [ ] Pages created with the stated handles in Shopify Admin. +- [ ] Main, Footer Shop, Footer Support and Footer Legal menus configured. +- [ ] Footer checked on desktop and mobile. +- [ ] Help and Customer Service URLs no longer return 404. +- [ ] Policies and all linked pages reviewed in the unpublished development theme before publishing. + +## Launch Blockers + +- Any `[CONFIRM BEFORE LAUNCH]` item left unresolved in the customer-facing drafts. +- Missing Shopify policy setup and approved policy content. +- Missing support email, support hours, response-time wording, or contact-form recipient confirmation. +- PayFast not activated and tested in Shopify checkout. +- Shipping settings not aligned with the R500 free-shipping wording. +- Missing test order, failed/cancelled payment check, and refund test. + +## Recommended Phase 11 + +After approval, create the Shopify Admin pages and menus, then run final storefront QA using the real page URLs. diff --git a/get-yours-shopify-theme/docs/phase-11-content-approval-and-admin-setup.md b/get-yours-shopify-theme/docs/phase-11-content-approval-and-admin-setup.md new file mode 100644 index 00000000000..3ff82ca61cf --- /dev/null +++ b/get-yours-shopify-theme/docs/phase-11-content-approval-and-admin-setup.md @@ -0,0 +1,191 @@ +# Phase 11 Content Approval And Admin Setup + +## Scope + +This is a review and Admin-setup preparation report only. No Shopify Admin pages, menus, policies, settings, or theme files were changed. + +## Publication Status + +### Ready For Unpublished Admin Draft Creation + +After merchant review, these drafts can be created in Shopify Admin as unpublished pages with the stated handles: + +| Page | Handle | Source draft | +| --- | --- | --- | +| Help | `help` | `docs/content-pages/help.md` | +| Customer Service | `customer-service` | `docs/content-pages/customer-service.md` | +| Shipping Information | `shipping-information` | `docs/content-pages/shipping-information.md` | +| Returns & Refunds | `returns-and-refunds` | `docs/content-pages/returns-and-refunds.md` | +| Payment Information | `payment-information` | `docs/content-pages/payment-information.md` | +| FAQ | `faq` | `docs/content-pages/faq.md` | + +The existing Contact page should retain its Dawn contact form. Use `docs/content-pages/contact-page-notes.md` only to guide its future content and configuration review. + +### Live Publication Status + +**NOT READY FOR LIVE ADMIN PUBLICATION** + +Every support/information page still contains unresolved operational, policy, payment, shipping, or support-contact details. Do not publish a live page with a `[CONFIRM BEFORE LAUNCH]` marker still visible. + +## Admin-Ready Copy Assessment + +### Help + +**NOT READY FOR LIVE ADMIN PUBLICATION** + +Safe copy that can remain after review: the Get Yours introduction, product browsing guidance, order-placement steps, and generic Returns & Refunds guidance. + +Remove or replace before live publication: + +- Payment-method confirmation. +- Delivery estimate and tracking-process markers. +- Support email marker. +- Any support-page links until their destination pages exist. + +### Customer Service + +**NOT READY FOR LIVE ADMIN PUBLICATION** + +Safe copy that can remain after review: the calm support introduction, the order details customers should provide, and the reminder not to send card/account details through support channels. + +Remove or replace before live publication: + +- Delivery estimate and return-rule markers. +- Support email and support hours placeholders. +- Any response-time claim until confirmed. + +### Shipping Information + +**NOT READY FOR LIVE ADMIN PUBLICATION** + +Safe copy that can remain after review: South Africa launch focus, address-accuracy guidance, supplier-partner transparency, and the statement that shipping charges are shown at checkout. + +Remove or replace before live publication: + +- Shipping-rate marker. +- Free-shipping-over-R500 marker and related sentence if the offer is not enabled. +- Delivery estimate and tracking-process markers. +- Any language that could imply a confirmed fulfilment or delivery time. + +### Returns & Refunds + +**NOT READY FOR LIVE ADMIN PUBLICATION** + +Safe copy that can remain after review: contact support first, do not send an item back before instructions, requested order details, and damaged/incorrect-item photo guidance. + +Remove or replace before live publication: + +- Damaged/incorrect-item reporting window marker. +- Change-of-mind return-rule marker. +- Refund-processing-time marker. +- Non-returnable-items marker. +- Any draft content that is not aligned with the final approved policy. + +### Payment Information + +**NOT READY FOR LIVE ADMIN PUBLICATION** + +Safe copy that can remain after review: payments are completed through Shopify checkout and active providers, failed/cancelled-payment guidance, and the instruction not to send card/account details by email or contact form. + +Remove or replace before live publication: + +- Active payment-method marker. +- PayFast activation marker. Do not mention PayFast publicly unless it is active at checkout. +- PayPal status marker. Remove PayPal copy unless it is enabled. +- Refund-process marker and any wording not aligned with the final Returns & Refunds information and policy. + +### FAQ + +**NOT READY FOR LIVE ADMIN PUBLICATION** + +Safe copy that can remain after review: Get Yours overview, South Africa-only launch focus, supplier-partner transparency, and why delivery time can vary. + +Remove or replace before live publication: + +- Shipping-rate, free-shipping, and delivery-estimate markers. +- Cancellation and return-rule markers. +- Active payment-method marker. +- Any answer that refers to a support page before that page is created. + +### Contact Page + +**NOT READY FOR LIVE ADMIN PUBLICATION** for new support details. + +The current contact form can remain available as an existing store page. Before adding new supporting copy or links, confirm the support email, support hours, response-time wording, contact-form recipient, and destination support pages. + +## Unresolved Confirmation Markers + +The following items must be resolved or intentionally removed from live customer-facing copy: + +| Confirmation item | Affected drafts | Required live action | +| --- | --- | --- | +| Active payment methods | Help, Payment Information, FAQ | Confirm actual checkout methods, then name only active methods or retain the generic checkout wording. | +| PayFast activation | Payment Information | Confirm PayFast is active before mentioning it publicly. | +| PayPal public status | Payment Information | Remove PayPal copy unless it is enabled. | +| Refund process | Payment Information | Align with the final approved Returns & Refunds information and policy. | +| Shipping rates | Shipping Information, FAQ | Set/test rates, then publish the matching wording. | +| Free shipping over R500 | Shipping Information, FAQ, Help | Enable the offer and matching rate, or remove the offer wording. | +| Delivery estimates | Help, Customer Service, Shipping Information, FAQ | Confirm operational estimates without overpromising. | +| Tracking process | Help, Shipping Information | Confirm who supplies tracking and how customers are notified. | +| Support email | Help, Customer Service, Contact notes | Confirm a monitored address and add it consistently. | +| Support hours and response-time wording | Customer Service, Contact notes | Confirm operational capacity before publishing. | +| Damaged/incorrect item reporting window | Returns & Refunds | Set an approved reporting rule with the final policy. | +| Change-of-mind return rules | Returns & Refunds, Customer Service, FAQ | Approve eligibility, instructions, costs, and exclusions. | +| Refund processing times | Returns & Refunds | Confirm a policy-aligned timeframe. | +| Non-returnable items | Returns & Refunds | Confirm category-specific exclusions. | +| Cancellation rules | FAQ | Confirm whether cancellation is possible at each fulfilment stage. | + +## Final Menu Wiring Plan + +### Main Menu + +- Home -> `/` +- Shop All -> `/collections/all` +- Home Organisation -> `/collections/home-organisation` +- Office & Desk -> `/collections/office-desk-essentials` +- Kitchen & Storage -> `/collections/kitchen-storage` +- Travel -> `/collections/travel` +- Tech Accessories -> `/collections/tech-accessories` +- Help -> `/pages/help` + +### Footer Shop Menu + +- Shop All -> `/collections/all` +- Featured Practical Finds -> `/collections/featured-practical-finds` +- New Arrivals -> `/collections/new-arrivals` +- Best Sellers -> `/collections/best-sellers` +- Home Organisation -> `/collections/home-organisation` +- Office & Desk Essentials -> `/collections/office-desk-essentials` + +### Footer Support Menu + +- Help -> `/pages/help` +- Customer Service -> `/pages/customer-service` +- Shipping Information -> `/pages/shipping-information` +- Returns & Refunds -> `/pages/returns-and-refunds` +- Payment Information -> `/pages/payment-information` +- FAQ -> `/pages/faq` +- Contact -> `/pages/contact` + +### Footer Legal Menu + +- Privacy Policy -> Shopify policy URL +- Terms of Service -> Shopify policy URL +- Refund Policy -> Shopify policy URL, once configured +- Shipping Policy -> Shopify policy URL, once configured + +In Theme Editor, assign distinct Footer Shop, Footer Support, and Footer Legal menus to the existing Dawn footer link-list blocks. Do not change routes or menus in theme code. + +## Remaining Launch Blockers + +- All unresolved confirmation markers listed above. +- Missing approved Shopify policy setup for Privacy, Terms, Refund, and Shipping policies. +- Missing support email, hours, response-time wording, and contact-form recipient confirmation. +- PayFast activation and payment/refund testing still outstanding. +- Shipping configuration and free-shipping-over-R500 alignment still outstanding. +- Help and Customer Service pages currently do not exist, so their routes return 404. +- No full test order, failed/cancelled payment test, or refund test has been completed. + +## Recommended Next Action + +Review and approve the Phase 10 content with the required operational and policy decisions resolved. Then explicitly authorize creation of the Shopify Admin pages and menus as unpublished drafts, followed by final storefront QA against the real page URLs. diff --git a/get-yours-shopify-theme/docs/phase-11b-admin-ready-copy-review.md b/get-yours-shopify-theme/docs/phase-11b-admin-ready-copy-review.md new file mode 100644 index 00000000000..0ac25dd4b1a --- /dev/null +++ b/get-yours-shopify-theme/docs/phase-11b-admin-ready-copy-review.md @@ -0,0 +1,82 @@ +# Phase 11b Admin-Ready Copy Review + +## Scope + +This documentation-only pass creates clean customer-facing source copy for future Shopify Admin pages. No Shopify Admin pages, menus, settings, policies, theme code, templates, products, collections or checkout settings were changed. + +## Files Created + +- `docs/admin-ready-pages/help.md` +- `docs/admin-ready-pages/customer-service.md` +- `docs/admin-ready-pages/shipping-information.md` +- `docs/admin-ready-pages/returns-and-refunds.md` +- `docs/admin-ready-pages/payment-information.md` +- `docs/admin-ready-pages/faq.md` +- `docs/admin-ready-pages/contact-page-content.md` + +## Customer-Facing Placeholder Removal + +The Admin-ready copies contain no `[CONFIRM BEFORE LAUNCH]` markers. The following unconfirmed details were removed from customer-facing page bodies: + +- Support email address, support hours, WhatsApp number and response-time claims. +- Named payment providers, including PayFast and PayPal. +- Fixed shipping charges, delivery estimates and refund timeframes. +- Confirmed tracking-process claims, cancellation rules, change-of-mind eligibility and non-returnable-item lists. +- Any promise of local stock, supplier stock, dispatch timing or guaranteed delivery. + +The copy instead states that available payment methods, shipping options and charges are shown at checkout. It keeps conditional R500 wording: where enabled, free standard shipping may apply to qualifying orders over R500. + +## Unresolved Operational Decisions + +The following decisions remain outside the customer-facing body and must be completed before launch: + +- Activate and test PayFast, then verify that the payment methods displayed at checkout are correct. +- Configure and test South Africa shipping rates. +- Align the R500 free-shipping announcement with the actual shipping configuration, or remove the offer wording. +- Confirm tax and VAT treatment and any customer-facing tax statements. +- Confirm a monitored support inbox, support hours and the contact-form recipient. +- Approve final legal and policy content, including Privacy, Terms, Refund and Shipping policies. +- Confirm cancellation, damaged/incorrect-item reporting, change-of-mind, refund and non-returnable-item rules for the final policy. +- Complete an end-to-end test order, failed or cancelled payment review, fulfilment communication check and approved refund cycle. + +## Shopify Admin Draft Status + +All seven files are safe sources for **unpublished Shopify Admin draft creation** after merchant review. + +| Page | Handle | Draft status | Live publication status | +| --- | --- | --- | --- | +| Help | `help` | Ready for unpublished draft | Hold until linked support pages and launch operations are reviewed. | +| Customer Service | `customer-service` | Ready for unpublished draft | Hold until the support inbox and contact-form recipient are operating. | +| Shipping Information | `shipping-information` | Ready for unpublished draft | Hold until shipping rates and R500 offer wording are aligned. | +| Returns & Refunds | `returns-and-refunds` | Ready for unpublished draft | Hold until the final policy is approved. | +| Payment Information | `payment-information` | Ready for unpublished draft | Hold until checkout payment methods are active and tested. | +| FAQ | `faq` | Ready for unpublished draft | Hold until delivery, returns and payment operations have been reviewed. | +| Contact | `contact` | Ready as content for the existing Dawn contact page | Hold until the form recipient is monitored and support operations are ready. | + +The marker-free wording prevents unresolved details from being exposed, but it does not replace the operational and legal approvals required for live publication. + +## Menu Wiring After Admin Page Creation + +After the pages exist with the listed handles, create or update the menus in Shopify Admin: + +- Add Help to the Main menu: `/pages/help`. +- Assign Help, Customer Service, Shipping Information, Returns & Refunds, Payment Information, FAQ and Contact to the Footer Support menu. +- Keep collection links in the Footer Shop menu. +- Keep Privacy Policy, Terms of Service, Refund Policy and Shipping Policy in the Footer Legal menu only after the Shopify policies are configured. + +Use the existing Dawn header and footer menu settings. Do not add custom routes or change theme code for this wiring. + +## Remaining Launch Blockers + +- PayFast activation and checkout testing. +- Shipping rate setup and testing. +- R500 announcement wording aligned with actual shipping setup. +- Tax and VAT confirmation. +- Support email, hours and contact-form recipient confirmation. +- Final legal and policy review. +- Test order and refund cycle. +- Shopify Admin page creation and menu wiring still to be completed. + +## Recommended Next Action + +Review and approve these Admin-ready drafts, then explicitly authorize creation of the Shopify Admin pages as unpublished drafts. Wire the approved menus only after the pages and Shopify policy URLs exist, then complete real-URL storefront QA before publication. diff --git a/get-yours-shopify-theme/docs/phase-11c-admin-page-creation-pack.md b/get-yours-shopify-theme/docs/phase-11c-admin-page-creation-pack.md new file mode 100644 index 00000000000..d0436878e51 --- /dev/null +++ b/get-yours-shopify-theme/docs/phase-11c-admin-page-creation-pack.md @@ -0,0 +1,119 @@ +# Phase 11C Shopify Admin Page Creation Pack + +## Scope + +This is an execution pack for a future manual Shopify Admin session. It does not create pages, menus, policies, settings or theme changes. Use the Admin-ready Markdown copies as the customer-facing source; do not use the earlier drafts that contain confirmation markers. + +## Final Page Creation Table + +| Page title | Shopify handle | Source Markdown file | Recommended visibility | Menu placement | Notes | +| --- | --- | --- | --- | --- | --- | +| Help | `help` | `docs/admin-ready-pages/help.md` | Unpublished draft first | Main menu and Footer Support | Primary support overview. | +| Customer Service | `customer-service` | `docs/admin-ready-pages/customer-service.md` | Unpublished draft first | Footer Support | Use generic contact wording until support details are approved. | +| Shipping Information | `shipping-information` | `docs/admin-ready-pages/shipping-information.md` | Unpublished draft first | Footer Support | Keep checkout and R500 wording conditional. | +| Returns & Refunds | `returns-and-refunds` | `docs/admin-ready-pages/returns-and-refunds.md` | Unpublished draft first | Footer Support | Customer information only; it does not replace the final policy. | +| Payment Information | `payment-information` | `docs/admin-ready-pages/payment-information.md` | Unpublished draft first | Footer Support | Do not add provider names unless they are active and approved. | +| FAQ | `faq` | `docs/admin-ready-pages/faq.md` | Unpublished draft first | Footer Support | Review support-page links after the pages exist. | + +In Shopify Admin, use the equivalent hidden or unpublished state available for a page. Do not make a page visible on the Online Store until its copy, linked destinations and launch conditions have been reviewed. + +## Contact Page Update Plan + +- Source: `docs/admin-ready-pages/contact-page-content.md` +- Existing page: `/pages/contact` +- Recommendation: update the existing Contact page carefully; do not create a second Contact page. +- Keep the existing contact form where Shopify and Dawn provide one. +- Before editing, copy the current page content for rollback reference. +- Paste only the approved supporting copy around the existing form. Keep the form fields and submission handling unchanged. + +## Manual Shopify Admin Page Creation Steps + +1. Sign in to Shopify Admin. +2. Go to **Online Store > Pages**. +3. Select **Add page**. +4. Enter the page title from the final page table. +5. Paste the approved Markdown content as formatted page content. +6. Set the page handle to the exact value in the final page table. +7. Keep the page unpublished or hidden from the Online Store until final approval. +8. Save the page. +9. Repeat for the remaining five new pages. +10. Update the existing Contact page only after its current content has been copied and reviewed. +11. Open each saved page URL in the unpublished development theme before making it visible. + +## Main Menu Setup + +Configure the existing `main-menu` in Shopify Admin with these destinations: + +- Home -> `/` +- Shop All -> `/collections/all` +- Home Organisation -> `/collections/home-organisation` +- Office & Desk -> `/collections/office-desk-essentials` +- Kitchen & Storage -> `/collections/kitchen-storage` +- Travel -> `/collections/travel` +- Tech Accessories -> `/collections/tech-accessories` +- Help -> `/pages/help` + +## Footer Shop Menu Setup + +- Shop All -> `/collections/all` +- Featured Practical Finds -> `/collections/featured-practical-finds` +- New Arrivals -> `/collections/new-arrivals` +- Best Sellers -> `/collections/best-sellers` +- Home Organisation -> `/collections/home-organisation` +- Office & Desk Essentials -> `/collections/office-desk-essentials` + +## Footer Support Menu Setup + +- Help -> `/pages/help` +- Customer Service -> `/pages/customer-service` +- Shipping Information -> `/pages/shipping-information` +- Returns & Refunds -> `/pages/returns-and-refunds` +- Payment Information -> `/pages/payment-information` +- FAQ -> `/pages/faq` +- Contact -> `/pages/contact` + +## Footer Legal Menu Setup + +- Privacy Policy -> Shopify policy URL +- Terms of Service -> Shopify policy URL +- Refund Policy -> Shopify policy URL if configured +- Shipping Policy -> Shopify policy URL if configured + +Create or update these menus in Shopify Admin, then assign them to the existing Dawn footer link-list blocks in Theme Editor. Do not add custom routes or modify footer theme code. + +## Pre-Publication Blockers + +- PayFast has not been fully activated and tested. +- Shipping rates have not been fully tested. +- The R500 free-shipping announcement must match the checkout shipping setup. +- The tax and VAT position must be confirmed. +- Support email and hours still need approval if they will be shown. +- Final legal and policy review is still required. +- A test order and refund cycle are still outstanding. + +## Real URL QA After Page Creation + +Open each URL in the unpublished development theme: + +- `/pages/help` +- `/pages/customer-service` +- `/pages/shipping-information` +- `/pages/returns-and-refunds` +- `/pages/payment-information` +- `/pages/faq` +- `/pages/contact` + +For each page, verify: + +- The page loads without a 404. +- No placeholder text is visible. +- Internal page links work. +- Content is readable at 360px, 400px and 430px. +- Content remains readable at 1200px. +- Footer Support menu links work. +- The header Help link works. +- Footer Legal policy links work once their Shopify policies are configured. + +## Recommended Next Action + +Review and approve this pack and the Admin-ready copy. Then explicitly authorize a manual Shopify Admin session to create the six new pages as unpublished drafts, update the existing Contact page, and wire the approved menus. Complete real-URL QA and resolve the pre-publication blockers before making pages visible or publishing the theme. diff --git a/get-yours-shopify-theme/docs/phase-11d-admin-page-creation-report.md b/get-yours-shopify-theme/docs/phase-11d-admin-page-creation-report.md new file mode 100644 index 00000000000..c76d3ed69dd --- /dev/null +++ b/get-yours-shopify-theme/docs/phase-11d-admin-page-creation-report.md @@ -0,0 +1,64 @@ +# Phase 11D Admin Page Creation Report + +## Scope + +This report records the Phase 11E read-only verification of the six Get Yours Shopify Admin pages created in the previous phase. No pages were published or updated during verification. No menus, Contact page, theme files, templates, or Shopify settings were changed. + +Store requested: `getyours-9322.myshopify.com` + +Permanent Shopify authentication domain used: `tdaqk1-nv.myshopify.com` + +## Page Verification + +| Page title | Handle | Shopify Page ID | Published | Body status | Placeholder-marker check | Action taken | +| --- | --- | --- | --- | --- | --- | --- | +| Help | `help` | `gid://shopify/Page/110941700199` | No | Non-empty semantic HTML | No `[CONFIRM BEFORE LAUNCH]` marker found | Verified only; no update | +| Customer Service | `customer-service` | `gid://shopify/Page/110941732967` | No | Non-empty semantic HTML | No `[CONFIRM BEFORE LAUNCH]` marker found | Verified only; no update | +| Shipping Information | `shipping-information` | `gid://shopify/Page/110941765735` | No | Non-empty semantic HTML | No `[CONFIRM BEFORE LAUNCH]` marker found | Verified only; no update | +| Returns & Refunds | `returns-and-refunds` | `gid://shopify/Page/110941798503` | No | Non-empty semantic HTML | No `[CONFIRM BEFORE LAUNCH]` marker found | Verified only; no update | +| Payment Information | `payment-information` | `gid://shopify/Page/110941831271` | No | Non-empty semantic HTML | No `[CONFIRM BEFORE LAUNCH]` marker found | Verified only; no update | +| FAQ | `faq` | `gid://shopify/Page/110941864039` | No | Non-empty semantic HTML | No `[CONFIRM BEFORE LAUNCH]` marker found | Verified only; no update | + +All six Shopify Page IDs resolved successfully. Titles and handles match the approved page-creation pack, and `isPublished` is `false` for every page. + +## Body And Placeholder Review + +- Every page has non-empty HTML using headings, paragraphs, and lists where appropriate. +- Existing support-page references are rendered as internal links. +- No page body contains `[CONFIRM BEFORE LAUNCH]`. +- No body was changed during this verification. + +## Navigation Verification + +A read-only Shopify Admin navigation query returned the following current menus: + +- Main menu (`main-menu`): Home, Catalog, Contact. +- Footer menu (`footer`): Search. +- Customer account main menu: Orders, Profile. + +None of the six new page handles appears in the current navigation. No menu mutation was run during page creation or this verification. This confirms the pages have not yet been wired into the currently returned Shopify menus. + +## Contact And Theme Status + +- The existing Contact page was not queried for content changes and was not updated. +- No theme code, Liquid, CSS, JavaScript, JSON, header, footer, or menu configuration file was changed. +- No theme pull, publish, or live-theme operation was run. + +## Remaining Next Steps + +1. Review the six unpublished pages in Shopify Admin and approve their customer-facing content. +2. Resolve the remaining launch blockers before live publication: + - Complete PayFast activation and checkout testing. + - Configure and test South Africa shipping rates. + - Align the R500 free-shipping announcement with the actual checkout setup. + - Confirm tax and VAT treatment. + - Approve support email and support hours if they will be displayed. + - Complete final legal and Shopify policy review. + - Complete a test order and refund cycle. +3. Explicitly approve the separate menu-wiring phase. +4. After menu wiring, verify all page and policy URLs in the unpublished development theme at mobile and desktop widths. +5. Update the existing Contact page only under a separate approval. + +## Recommended Approval Checkpoint + +Approve the six page drafts in Shopify Admin while keeping them unpublished. The next separately authorized action should be menu wiring only, using the approved Main, Footer Shop, Footer Support, and Footer Legal plans. Contact-page changes and page publication should remain separate later approvals. diff --git a/get-yours-shopify-theme/docs/phase-11f-menu-wiring-readiness-plan.md b/get-yours-shopify-theme/docs/phase-11f-menu-wiring-readiness-plan.md new file mode 100644 index 00000000000..54d022d0eaf --- /dev/null +++ b/get-yours-shopify-theme/docs/phase-11f-menu-wiring-readiness-plan.md @@ -0,0 +1,139 @@ +# Phase 11F Menu Wiring Readiness Plan + +## Scope + +This document records the read-only Shopify Admin snapshot and prepares a future menu-wiring decision. No page, menu, Contact content, Shopify setting, theme file, or storefront configuration was changed during this phase. + +Store requested: `getyours-9322.myshopify.com` + +Permanent Shopify authentication domain used: `tdaqk1-nv.myshopify.com` + +## Current Navigation State + +| Menu title | Menu handle | Existing items | Notes | +| --- | --- | --- | --- | +| Main menu | `main-menu` | Home -> `/`; Catalog -> `/collections/all`; Contact -> `/pages/contact` | Update this menu in place after approval. Do not create a duplicate Main menu. | +| Footer menu | `footer` | Search -> `/search` | Recommended for repurposing as Footer Shop after approval, avoiding an unnecessary duplicate generic footer menu. | +| Customer account main menu | `customer-account-main-menu` | Orders; Profile | Leave unchanged. It belongs to Shopify customer-account navigation, not storefront merchandising or support navigation. | + +The current Shopify Admin navigation contains no links to the six new support pages. + +## Page Visibility Status + +| Page title | Handle | Shopify Page ID | Published | Safe for a customer-visible menu now? | +| --- | --- | --- | --- | --- | +| Help | `help` | `gid://shopify/Page/110941700199` | No | No. Publish first unless the merchant explicitly accepts controlled-QA link risk. | +| Customer Service | `customer-service` | `gid://shopify/Page/110941732967` | No | No. Publish first unless the merchant explicitly accepts controlled-QA link risk. | +| Shipping Information | `shipping-information` | `gid://shopify/Page/110941765735` | No | No. Publish first unless the merchant explicitly accepts controlled-QA link risk. | +| Returns & Refunds | `returns-and-refunds` | `gid://shopify/Page/110941798503` | No | No. Publish first unless the merchant explicitly accepts controlled-QA link risk. | +| Payment Information | `payment-information` | `gid://shopify/Page/110941831271` | No | No. Publish first unless the merchant explicitly accepts controlled-QA link risk. | +| FAQ | `faq` | `gid://shopify/Page/110941864039` | No | No. Publish first unless the merchant explicitly accepts controlled-QA link risk. | + +All six Page IDs, titles, handles, and unpublished states were confirmed through a read-only Admin GraphQL query. + +## Recommended Menu Structure + +### Main Menu + +Update the existing `main-menu` in place: + +- Home -> `/` +- Shop All -> `/collections/all` +- Home Organisation -> `/collections/home-organisation` +- Office & Desk -> `/collections/office-desk-essentials` +- Kitchen & Storage -> `/collections/kitchen-storage` +- Travel -> `/collections/travel` +- Tech Accessories -> `/collections/tech-accessories` +- Help -> `/pages/help` + +Rename the existing Catalog item to Shop All. Move Contact to Footer Support rather than retaining it in the Main menu, subject to final merchant approval. + +### Footer Shop Menu + +Repurpose the existing `footer` menu as Footer Shop after approval: + +- Shop All -> `/collections/all` +- Featured Practical Finds -> `/collections/featured-practical-finds` +- New Arrivals -> `/collections/new-arrivals` +- Best Sellers -> `/collections/best-sellers` +- Home Organisation -> `/collections/home-organisation` +- Office & Desk Essentials -> `/collections/office-desk-essentials` + +Remove Search from this menu only during the approved wiring phase. Storefront search remains available through Dawn's search interface. + +### Footer Support Menu + +Create one dedicated Footer Support menu only after explicit approval: + +- Help -> `/pages/help` +- Customer Service -> `/pages/customer-service` +- Shipping Information -> `/pages/shipping-information` +- Returns & Refunds -> `/pages/returns-and-refunds` +- Payment Information -> `/pages/payment-information` +- FAQ -> `/pages/faq` +- Contact -> `/pages/contact` + +### Footer Legal Menu + +Create one dedicated Footer Legal menu only after explicit approval and only include configured policy destinations: + +- Privacy Policy -> Shopify policy URL +- Terms of Service -> Shopify policy URL +- Refund Policy -> Shopify policy URL if configured +- Shipping Policy -> Shopify policy URL if configured + +Do not add placeholder or broken policy links. The new Footer Support and Footer Legal menus should not be created until the merchant approves menu wiring. + +## Visibility Warning + +Unpublished Shopify pages should not be added to customer-visible menus. Storefront visitors may be unable to resolve unpublished page URLs, creating broken or inaccessible support journeys. + +Menu wiring should proceed only when one of these conditions is true: + +- The six pages have been approved and published before their menu links become customer-visible. +- The store is password-protected or restricted to internal QA, and the merchant explicitly accepts that the links may not resolve for ordinary customers. + +Publishing pages and wiring menus are separate state changes. Approval for one does not imply approval for the other. + +## Execution Options + +### Option A: Publish, Then Wire + +Publish the six verified support pages first. Confirm their real URLs load, then wire the approved menus in a separate action. This is the recommended customer-safe sequence. + +### Option B: Keep Unpublished And Postpone Wiring + +Keep all six pages unpublished and leave navigation unchanged. Use this option while payment, shipping, support, policy, or operational decisions remain unresolved. + +### Option C: Controlled QA Wiring + +Wire menus only in a password-protected or otherwise controlled QA context after the merchant explicitly accepts the risk that unpublished page links may not resolve for normal customers. Do not use this option for a customer-visible storefront. + +## Exact Future Approval Wording + +### Approval To Publish Pages Only + +> I approve publishing the six verified support pages: Help, Customer Service, Shipping Information, Returns & Refunds, Payment Information, and FAQ. Do not modify menus, Contact, Shopify policies, or theme code. + +### Approval To Wire Menus Only + +> I approve wiring the Main, Footer Shop, Footer Support, and Footer Legal menus according to the Phase 11F plan. Do not publish or update pages, Contact, Shopify policies, or theme code. I confirm the storefront is a controlled QA context and accept the risk of linking to unpublished pages. + +### Approval To Publish Pages And Wire Menus Together + +> I approve publishing the six verified support pages and wiring the Main, Footer Shop, Footer Support, and Footer Legal menus according to the Phase 11F plan. Do not update Contact, Shopify policy content, customer-account navigation, or theme code. + +## Remaining Blockers + +- PayFast activation and testing. +- South Africa shipping-rate setup and testing. +- R500 free-shipping announcement alignment with checkout configuration. +- Tax and VAT confirmation. +- Support email and support-hours decision. +- Final legal and Shopify policy review. +- Complete test order and refund cycle. +- Separate approval for the Contact page update. + +## Recommended Next Approval + +Choose Option B while launch blockers remain unresolved. When the six page drafts and the relevant operational wording are approved, use the exact Option A sequence: authorize publication of the six pages only, verify their real URLs, then separately authorize menu wiring. Do not combine Contact-page work with either approval. diff --git a/get-yours-shopify-theme/docs/phase-12-payments-shipping-launch-operations-checklist.md b/get-yours-shopify-theme/docs/phase-12-payments-shipping-launch-operations-checklist.md new file mode 100644 index 00000000000..4f96f82c528 --- /dev/null +++ b/get-yours-shopify-theme/docs/phase-12-payments-shipping-launch-operations-checklist.md @@ -0,0 +1,184 @@ +# Phase 12 Payments, Shipping And Launch Operations Checklist + +## Scope + +This is a documentation-only operational checklist for moving Get Yours from theme and content preparation into commerce readiness. It does not configure Shopify Admin, payment providers, shipping, tax, checkout, pages, menus, Contact, products, fulfilment, policies, or theme code. + +Do not mark an item complete without checking the relevant Shopify Admin screen, provider dashboard, test order, or approved professional advice. Record evidence and decisions in the Notes column or the appropriate operating record. + +## Current Launch State + +- [x] Six support pages exist in Shopify Admin as unpublished drafts: Help, Customer Service, Shipping Information, Returns & Refunds, Payment Information, and FAQ. +- [x] The support pages remain unpublished. +- [x] Main and footer menus have not been wired to the support pages. +- [x] The existing Contact page has not been updated. +- [x] Phase 11F Option B remains active: keep pages unpublished and postpone menu wiring. +- [ ] The store is ready for public launch. + +The store is **not ready for public launch** until the payment, shipping, announcement, tax/VAT, support, policy, and end-to-end test blockers in this checklist are resolved. + +## Payment Setup Checklist + +### PayFast Activation And Configuration + +- [ ] Confirm the PayFast merchant account is verified and connected to the correct business and settlement account. +- [ ] Confirm PayFast is activated for the correct Shopify store. +- [ ] Review whether the current PayFast integration provides a test or sandbox mode and document the approved test method. +- [ ] Confirm the payment methods actually displayed at checkout. Do not infer them from draft content or marketing material. +- [ ] Confirm current fees, payout/settlement rules, failed-payment behaviour, cancellation handling, and refund procedure using the PayFast dashboard or current official documentation. +- [ ] Document the working-capital process for paying CJ before payment-provider funds reach the business account, if applicable. + +### Payment QA + +- [ ] Complete a successful checkout test. +- [ ] Complete a failed-payment test and confirm no paid order is created incorrectly. +- [ ] Complete a cancelled-payment test and confirm the resulting Shopify order/payment state. +- [ ] Complete an approved refund test through the intended operating workflow. +- [ ] Confirm the customer receives the expected Shopify order-confirmation email after a successful checkout. +- [ ] Review payment-method presentation and readability on mobile widths of 360px, 400px, and 430px. +- [ ] Review payment-method presentation and readability at 1200px desktop width. +- [ ] Record screenshots, order numbers, payment references, timestamps, and outcomes without storing card or account credentials. + +PayPal remains optional and later-stage. Do not activate or mention PayPal publicly unless the merchant explicitly approves it and its payment, cancellation, refund, dispute, and notification flows are tested separately. + +## Shipping Setup Checklist + +### South Africa Shipping Configuration + +- [ ] Confirm the Shopify shipping origin/location and manual dispatch process. +- [ ] Configure and verify a South Africa shipping zone. +- [ ] Configure the approved standard shipping rate. +- [ ] Configure free standard shipping over R500 only if margin review approves it and the Shopify rate is active. +- [ ] Confirm no unsupported international shipping zones or rates are available at launch. +- [ ] Confirm checkout does not offer a rate to an unsupported international address. + +### Shipping QA + +- [ ] Test a cart below R500 using a valid South African address and record the rate shown. +- [ ] Test a cart above R500 using a valid South African address and record the rate shown. +- [ ] Test representative addresses across more than one South African province. +- [ ] Confirm the displayed rate, order total, and threshold behaviour match the approved setup. +- [ ] Confirm Shipping Information, Help, FAQ, announcement, and checkout wording describe the same active shipping offer. +- [ ] Do not publish delivery estimates until fulfilment routes and service levels have been operationally confirmed. + +## R500 Announcement Alignment + +The current storefront announcement says `FREE STANDARD SHIPPING ON ORDERS OVER R500`. + +Before launch, complete exactly one approved path: + +- [ ] Configure, margin-check, and test a matching free standard shipping rate for qualifying South Africa orders over R500; or +- [ ] Change or remove the announcement before launch if the offer is not configured and sustainable. + +An announcement promising free shipping while checkout charges shipping is a launch blocker. The announcement, checkout rate, support-page wording, and FAQ must remain aligned. + +## Tax And VAT Checklist + +- [ ] Confirm whether Get Yours is VAT registered. +- [ ] Confirm whether displayed product prices include or exclude VAT. +- [ ] Confirm whether and how Shopify should calculate or display tax at checkout. +- [ ] Complete a checkout test and record the tax presentation on product totals, shipping, and the final order total. +- [ ] Confirm invoice, receipt, credit-note, and refund wording and records. +- [ ] Confirm any customer-facing VAT or tax statement before publication. +- [ ] Review Shopify tax settings only after the correct treatment is confirmed. +- [ ] Record the adviser, date, and source supporting the final decision. + +This section requires accountant and SARS-informed review before launch. It is an operational checklist, not tax advice. + +## Support Operations Checklist + +### Support Channels + +- [ ] Confirm a monitored support email address. +- [ ] Confirm the Shopify Contact form sends to the intended monitored inbox. +- [ ] Test a Contact form submission and verify receipt without updating the public Contact page. +- [ ] Confirm support hours only if they will be published. +- [ ] Confirm response-time wording only if it will be published and operationally achievable. +- [ ] Confirm which team member or role owns the support inbox and backup coverage. + +### Customer-Service Workflow + +- [ ] Document order-status query handling. +- [ ] Document payment query and failed-payment handling. +- [ ] Document shipping and tracking query handling. +- [ ] Document damaged, incorrect, or incomplete item evidence and escalation handling. +- [ ] Document cancellation and change-of-mind request handling. +- [ ] Document approved refund handling and recordkeeping. +- [ ] Confirm staff never request card or account credentials by email, social media, or Contact form. +- [ ] Prepare approved response templates without promising unconfirmed delivery or refund timelines. + +## Manual CJ Fulfilment Checklist + +Complete these checks for every manually fulfilled CJ order: + +- [ ] Match the Shopify product and variant SKU to the correct CJ supplier SKU. +- [ ] Confirm CJ stock or availability before supplier payment. +- [ ] Confirm current supplier item cost and shipping cost before supplier payment. +- [ ] Confirm the customer's delivery address and contact details. +- [ ] Confirm the Shopify payment status is paid before paying the supplier. +- [ ] Confirm the selected CJ shipping route is appropriate for the supported South Africa workflow. +- [ ] Pay the supplier only after the payment and order checks are complete. +- [ ] Record the CJ supplier order reference against the Shopify order. +- [ ] Record supplier cost, shipping cost, fulfilment status, and notes in the manual tracking record. +- [ ] Add tracking to Shopify when a valid tracking reference becomes available. +- [ ] Send the approved customer update when tracking becomes available. +- [ ] Escalate delays, cancellations, damaged items, and refunds under the approved policy and support workflow. + +Do not describe CJ stock, dispatch, delivery, or tracking as guaranteed. Keep fulfilment manual until the process consistently produces accurate orders, tracking updates, and refund records. + +## Test Order And Refund Cycle + +Use a low-value test order, approved test payment method, South African test address, and no real customer credentials beyond what is required for the controlled test. + +- [ ] Record the test date, tester, product, cart value, and expected shipping outcome. +- [ ] Place the low-value test order. +- [ ] Confirm the payment outcome in the payment provider and Shopify. +- [ ] Confirm Shopify order and payment statuses are correct. +- [ ] Confirm the order-confirmation email and any merchant notifications are received. +- [ ] Confirm the intended shipping rate or R500 threshold is applied correctly. +- [ ] Exercise the manual CJ review steps without creating an unintended supplier commitment. +- [ ] Cancel and/or refund the test order using the approved test path. +- [ ] Confirm the Shopify refund status and payment-provider refund status. +- [ ] Confirm customer-facing cancellation/refund notifications are accurate. +- [ ] Record discrepancies, owners, corrective action, and retest results before launch. +- [ ] Mark the end-to-end cycle complete only when all material issues have been resolved or formally accepted. + +## Launch Blockers + +| Blocker | Current status | Owner | Required resolution | Notes | +| --- | --- | --- | --- | --- | +| PayFast activation | Outstanding / not verified | Merchant / payments owner | Activate against the correct store and confirm the live or approved test configuration. | Do not name active methods publicly until checkout confirms them. | +| Successful, failed, and cancelled payment tests | Outstanding | Payments owner | Complete and document all three outcomes. | Retain order/payment references as evidence. | +| Refund test | Outstanding | Payments and support owners | Complete an approved refund and verify Shopify/provider states and notifications. | Do not promise a refund timeline from assumptions. | +| South Africa shipping zone and standard rate | Outstanding / not verified | Merchant / operations owner | Configure and test supported South Africa rates. | No international launch. | +| Free shipping over R500 | Decision and configuration outstanding | Merchant / finance owner | Validate margin, then configure/test the rate or remove the offer. | Must match the announcement and support copy. | +| R500 announcement alignment | Blocked by shipping decision | Merchant / storefront owner | Match the announcement to tested checkout behaviour. | Any mismatch blocks launch. | +| Tax and VAT treatment | Outstanding | Merchant with accountant/tax adviser | Confirm registration, pricing, checkout, invoice, and refund treatment. | Requires accountant/SARS-informed review. | +| Support email and Contact inbox | Outstanding / not verified | Customer-service owner | Confirm monitored inbox, form delivery, ownership, and backup coverage. | Contact-page copy remains unchanged. | +| Support hours and response wording | Decision outstanding | Customer-service owner | Approve only if accurate and sustainable, otherwise omit. | No unsupported response-time promise. | +| Customer-service procedures | Outstanding | Customer-service and operations owners | Approve workflows for order, payment, shipping, damaged item, cancellation, and refund queries. | Align with final policies. | +| Manual CJ workflow | Outstanding / untested end to end | Fulfilment owner | Verify SKU mapping, costs, payment gate, supplier reference, tracking, and updates. | No supplier guarantees. | +| Final legal and policy review | Outstanding | Merchant / legal adviser | Approve Privacy, Terms, Refund, and Shipping policies and linked customer copy. | Support pages do not replace policies. | +| Test order and refund cycle | Outstanding | Payments, operations, and support owners | Complete, document, resolve issues, and retest. | Required before public launch. | +| Support-page publication | Intentionally postponed | Merchant approval | Publish only after content and operational blockers are accepted. | All six pages remain drafts. | +| Menu wiring | Intentionally postponed | Merchant approval | Wire only after published page URLs and policies are verified. | Phase 11F Option B remains active. | +| Contact page update | Not approved | Merchant approval | Review and approve under a separate phase. | Do not combine with menu wiring. | + +## Recommended Sequence + +1. Activate and test PayFast, including successful, failed, cancelled, and refund outcomes. +2. Configure and test South Africa standard shipping and the approved R500 threshold behaviour. +3. Align or remove the R500 announcement based on the tested checkout setup. +4. Confirm tax and VAT treatment with accountant/SARS-informed review, then verify checkout and records. +5. Confirm support channels, ownership, customer-service procedures, and approved communication wording. +6. Verify the manual CJ fulfilment record and complete the end-to-end test order/refund cycle. +7. Review the six Admin page drafts against the confirmed operating setup. +8. Approve and publish the six support pages only. +9. Verify all six real storefront URLs and internal page links. +10. Separately approve and wire the Main, Footer Shop, Footer Support, and Footer Legal menus. +11. Update the existing Contact page only after separate approval and inbox verification. +12. Complete final password-protected storefront QA before any public launch decision. + +## Recommended Next Approval + +Keep Phase 11F Option B in effect. The next approval should authorize operational configuration and controlled testing of PayFast and South Africa shipping only. It should not authorize page publication, menu wiring, Contact changes, or theme changes. diff --git a/get-yours-shopify-theme/docs/phase-12b-payfast-shipping-controlled-setup-report.md b/get-yours-shopify-theme/docs/phase-12b-payfast-shipping-controlled-setup-report.md new file mode 100644 index 00000000000..85bc2223713 --- /dev/null +++ b/get-yours-shopify-theme/docs/phase-12b-payfast-shipping-controlled-setup-report.md @@ -0,0 +1,676 @@ +# Phase 12B PayFast And Shipping Controlled Setup Report + +## Scope And Outcome + +Phase 12B began with a controlled inspection attempt on 2026-07-10 at approximately 19:36 SAST and continued with authenticated Shopify Admin inspection on 2026-07-11. + +The initial inspection could not reach the authenticated Shopify Admin or PayFast configuration surfaces. The Shopify Admin browser session presented the Shopify login page, the Shopify CLI shipping-scope authorization was not completed, and the public storefront redirected to its password page. After the merchant signed in, the continuation inspected Shopify Payments, Shipping and Delivery, and Markets without changing them. The PayFast dashboard remained signed out. + +Current outcome after Phase 12M: **The global post-payment setting remains `Don't fulfill any of the order's line items automatically`. The one approved PayFast sandbox refund request for order #1002 remains Pending in Shopify after approximately 11 hours, based on the Shopify transaction timestamp. The requested 24-hour threshold has not yet elapsed. The order remains open, Paid, and Unfulfilled. No duplicate refund, tracking, fulfilment, shipping-confirmation event, CJ order, or live-money movement occurred. Order #1001 remains unchanged.** + +No sensitive credentials, payment details, customer credentials, API keys, passwords, or provider secrets were requested, entered, captured, or stored. + +## Authenticated Inspection — 2026-07-11 + +> Historical note: this inspection records the Shopify configuration visible at approximately 04:45 SAST, before the later Phase 12C verification. The current PayFast state is documented in the Phase 12C section below and supersedes the earlier inactive-provider findings. + +Authenticated Shopify Admin inspection was completed on 2026-07-11 at approximately 04:45 SAST. The PayFast dashboard at `my.payfast.io` presented its login page and was not authenticated, so private PayFast merchant verification, settlement, fee, and refund details were not inspected. + +| Area | Verified state | Evidence | Change required? | Approval required | +| --- | --- | --- | --- | --- | +| PayFast activation | Inactive / not configured in Shopify | PayFast is absent from active providers. Searching Shopify's available-provider list for `PayFast` returned `No results found.` | Yes, if PayFast remains the launch provider decision. | Explicit approval plus a supported integration path is required before connecting or configuring it. | +| PayFast merchant-account connection | No PayFast account is attached to this store | No active PayFast provider appears in Shopify. The separate PayFast dashboard was signed out. | Yes, if PayFast will be used. | Merchant must authenticate PayFast and approve the supported connection process; do not expose merchant or banking details. | +| Sandbox/test availability | PayFast-specific sandbox status unknown; Shopify Test payment gateway is active | Shopify Payments settings show `Test payment gateway`. No connected PayFast configuration exists to expose a PayFast test mode. | Decision required before PayFast testing. | Confirm supported PayFast integration and sandbox availability. If unavailable, approve an exact low-value live test amount and method later. | +| Enabled payment methods | Shopify Test payment gateway and PayPal are active; PayFast is not active | Payments settings list Test payment gateway and PayPal as active. Checkout display was not tested because the storefront is password-protected. | Yes, before launch: test gateway must not be treated as a live PayFast setup, and PayPal's active state conflicts with the earlier launch plan. | Separate approval is required for any provider activation, deactivation, or replacement. | +| Refund route | PayFast route unavailable / not verifiable | No PayFast provider or PayFast test order exists. The signed-out PayFast dashboard exposed no merchant workflow. | Yes, before PayFast launch. | Approve provider setup first, then inspect and test the documented Shopify/PayFast refund route. | +| Shipping origin | `Shop location`, South Africa | General profile shows one fulfilment location: Shop location, South Africa. | No immediate change established. | Approval required only if the origin must change. | +| South Africa zone | Configured in the General profile | Domestic zone is South Africa. One general profile covers all products and one of one location. | No zone creation required. | Approval required for any zone edit. | +| Standard rate | `Standard` — R100; displayed estimate 3–5 business days | Domestic rate list shows Standard at R100, becoming free from R770. | Decision required on whether to retain the rate name, amount, estimate, and threshold. | Merchant must approve the exact customer-facing name and rate before any edit. | +| Free shipping over R500 | Not configured | Free Standard begins at R770, not R500. | Yes, because the announcement says R500. | Merchant must approve free shipping over R500 after margin review, or separately approve changing/removing the announcement. | +| International rates | Configured but not market-enabled | International zone covers 28 countries with an R310 rate. Shopify says countries must be added to a market; Markets shows only South Africa active. | Review required; no customer-enabled international market is currently active. | Approval required before removing the dormant rate or activating any international market. | +| R500 announcement alignment | **Not aligned** | Announcement promises free standard shipping over R500; configured Standard becomes free only from R770. | Yes, before launch. | Approve either a tested R500 threshold or a later announcement change. No change was made here. | + +## Phase 12C PayFast Test-Mode Validation + +Phase 12C was performed on 2026-07-11 using the authenticated internal storefront route and PayFast test mode only. No live payment credentials or real financial details were used. + +### Current PayFast State + +- Status: **Active**. +- Store connection: **Connected to the Get Yours Shopify store**. +- Mode: **Test mode enabled**. Shopify states that all transactions are simulated and customers cannot make real purchases through PayFast while this mode is active. +- Enabled PayFast methods: Visa, Mastercard, PayFast Instant EFT, Zapper, and Payflex. +- Disabled PayFast method: Mobicred. +- PayPal remains active as a separate provider and was not changed. +- Shopify's separate Test Payment Gateway also remains visible and was not changed. + +### Validation Results + +| Test | Result | Shopify state | PayFast state | Evidence | Follow-up | +| --- | --- | --- | --- | --- | --- | +| Checkout provider visibility | Passed | Checkout displayed Test Payment Gateway, PayPal, and `Payfast, zapper and payflex` as separate options. | PayFast option showed Visa, Mastercard, Instant EFT, and two additional enabled methods; Mobicred was absent. | Observed at checkout with synthetic test customer details. | No presentation change required. Review whether the separate Test Payment Gateway should remain active before launch. | +| Successful test payment | Blocked / failed before provider handoff | Shopify displayed `There was an issue processing your payment. Try again or use a different payment method.` No order was created. | No redirect occurred and no PayFast test transaction was created. | Orders and abandoned checkouts both remained empty after the attempt. | Investigate the PayFast test-mode handoff and connection without running a live transaction. | +| Cancelled checkout | Partial verification | Checkout was exited after the failed handoff. No order, abandoned checkout, paid state, or cancellation email was recorded. | No PayFast transaction existed to cancel. | Shopify Orders and Abandoned checkouts showed no records. | Repeat a provider-level cancellation test only after the handoff works. | +| Failed payment | Provider failure procedure not reached | The checkout showed an unexpected processing error and did not create a paid order. | No official PayFast simulated failure screen or transaction was reached. | Failure occurred before redirect to PayFast. | After handoff repair, use only PayFast's official test-mode failure procedure. | +| Customer confirmation email | Not generated / not verifiable | No Shopify order was created. | No PayFast transaction was created. | Synthetic checkout email was used; no order confirmation event existed. | Verify after a successful simulated order. | +| Merchant notification | Not triggered | No order or payment notification event was created. | No provider transaction existed. | Shopify Orders remained empty. | Verify after a successful simulated order. | +| Refund test | Not available | No successful test order existed to refund. | No PayFast test transaction existed. | Refund controls could not be evaluated against an order. | Inspect and test only after a successful test-mode payment. Do not substitute a live refund. | +| Desktop presentation | Passed | Provider options, explanatory text, and shipping rates were readable at desktop width. | PayFast branding and enabled-method summary were legible. | Visual checkout inspection. | None identified. | +| Mobile presentation | Passed | Payment choices and content remained readable at 400 x 800 with no observed overlap. | PayFast option remained identifiable and usable. | Responsive checkout inspection. | A 360 px recheck can follow after the payment handoff is repaired. | +| Shipping rates observed | Passed | At R79 subtotal, Standard was R100 and Express was R150. Standard showed 3–5 business days; Express showed 1–2 business days. | Not applicable. | South African Cape Town address used in checkout. | Delivery estimates still require operational confirmation before launch. | +| R500 threshold observed | **Not aligned** | At R715 subtotal, Standard still cost R100. At R864 subtotal, Standard was free. Express remained R150. | Not applicable. | Two controlled checkout observations using the same South African address. | Approve either an actual R500 free-shipping threshold or a future announcement change. | + +### Test Evidence Summary + +- Test date: 2026-07-11 SAST. +- Product/cart used below threshold: Desk Cable Organiser, R79 subtotal. +- Product/cart used above R500: four Desk Cable Organisers plus one Rolling Storage Cart, R715 subtotal. +- Product/cart used above the configured threshold: the R715 cart plus one Adjustable Drawer Divider Set, R864 subtotal. +- Shipping destination used: Cape Town, Western Cape, South Africa, with synthetic test customer details. +- Shopify test order number: None; no order was created. +- Payment reference: None; no PayFast transaction was created. +- Shopify payment status: Not applicable; payment failed before order creation. +- PayFast transaction status: Not created. +- No credentials, OTPs, provider secrets, card details, bank details, or personal financial information were recorded. + +### Phase 12C Strict No-Change Confirmation + +- No live money moved. +- No real card, bank account, Zapper, Payflex, or customer financial details were used. +- PayFast test mode was not disabled. +- Mobicred was not activated. +- PayPal was not changed. +- Shipping settings and rates were not changed. +- The R500 announcement was not changed. +- No support page was published and no menu was wired. +- Contact, policies, and theme files were not changed. +- No CJ supplier order was created. + +## Phase 12D PayFast Handoff Investigation + +Phase 12D was performed on 2026-07-11 as read-only diagnostics plus one controlled PayFast test-mode handoff reproduction. The reproduction reached PayFast's official sandbox successfully. The sandbox payment was not completed or cancelled. + +| Diagnostic area | Result | Evidence | Root-cause relevance | Change required? | +| --- | --- | --- | --- | --- | +| PayFast merchant status | Operational dashboard access confirmed; formal verification status not confirmed | The authenticated dashboard loaded and exposed normal account and transaction surfaces without a visible restriction banner. The verification detail route subsequently required a fresh login, so verified/pending status was not safely established. | No evidence of an account restriction causing the handoff failure, but formal verification remains unknown. | No configuration change. Merchant should confirm the PayFast verification status directly in the dashboard before launch. | +| PayFast live/test capability | Test processing confirmed; live-payment permission not assessed | Shopify states PayFast test mode is on and that transactions are simulated. The reproduction reached `sandbox.payfast.co.za`. | Confirms the integration can initiate a test transaction. It does not prove live-payment readiness. | No change for this diagnostic phase. Keep test mode enabled. | +| Shopify integration status | Active and ready | Shopify's PayFast provider page showed `Active`, `Test mode is on`, and `This page is ready`. The Save button was disabled. | Strong evidence that Shopify considers provider setup complete and has no unsaved configuration. | No. | +| Store association | Connected inside the Get Yours Shopify Admin; PayFast legal-account association needs merchant confirmation | The provider page was opened under the Get Yours store. The authenticated PayFast dashboard displayed a different business-facing account name, which may be the legal merchant entity but was not independently confirmed. | Not implicated in the successful sandbox handoff, but the merchant-account association must be confirmed before live launch. | No automatic change. Merchant confirmation is required; reconnecting is explicitly out of scope. | +| Provider warnings | No setup, reconnect, permission, or authorization warning visible | The Shopify provider detail page showed Active/test mode and enabled methods only. No complete-setup or reconnect action was shown. | Makes an incomplete Shopify provider installation less likely. | No. | +| ZAR and South Africa market context | Correct for the reproduced checkout | Checkout displayed total currency ZAR, South Africa as the delivery country, and available South African shipping rates. | Makes a currency or active-market mismatch unlikely. | No. | +| Test product availability | Available in the active checkout context | The selected demo products were present in checkout and shipping methods loaded for the South African address. | Product or market availability did not block provider handoff. | No. | +| Handoff reproduction | Passed | One PayFast test-mode attempt progressed from Shopify processing to PayFast's official sandbox payment page. | The original failure was not reproducible during Phase 12D. | No configuration correction is justified from this result alone. | +| Network request | No failing request observed | The browser navigated from the Shopify checkout to `sandbox.payfast.co.za` on a sanitized payment-processing path. The available diagnostic interface did not expose a safe HTTP status or request identifier. | Confirms PayFast received the handoff; provides no failing request to classify. | No. If the error recurs, capture the timestamp and safe provider/support reference without recording payloads or credentials. | +| HTTP/error classification | No HTTP error reproduced | The sandbox page loaded and presented the simulated payment controls. No safe HTTP error code was available. | Does not support a persistent Shopify or PayFast request failure classification. | No. | +| Browser console | No warnings or errors captured | Console warning/error count was zero before and after the handoff. | No evidence of JavaScript, CSP, blocked-request, or browser-side app failure. | No. | +| PayFast logs | PayFast receipt confirmed by sandbox page; no completed transaction log | The official sandbox created a payment-processing session. The payment was intentionally left incomplete, and no completed PayFast transaction was created. | Confirms the handoff reached PayFast. It does not explain the earlier transient failure. | No. PayFast support is only indicated if the failure recurs. | +| Shopify/app logs | Shopify handoff confirmed; no provider error or safe request ID surfaced | Shopify created an abandoned checkout after redirect. Orders remained empty because the sandbox payment was not completed. No app diagnostic warning or safe request identifier was visible. | Confirms Shopify attempted the provider handoff successfully in this run. | No. | +| Root-cause classification | **G. Root cause still unknown** | The earlier failure could not be reproduced; current provider state is ready and the same checkout context reached PayFast sandbox without console errors. | A transient provider/network condition is possible, but there is insufficient evidence to classify it conclusively as F. | No configuration change should be made based on this evidence. | +| Confidence level | Medium | Current-state evidence is consistent across Shopify and the sandbox, but the original failing request was not captured. | Supports ruling out an obvious persistent setup, currency, market, or browser error; does not identify the original cause. | No. | +| Recommended corrective action | Do not change configuration. Run one separately approved end-to-end sandbox payment on a fresh low-value cart. If the failure recurs, stop and contact PayFast support with the timestamp and sanitized checkout context. | A completed sandbox test is still required to validate order creation, notifications, and refund eligibility. | This is validation rather than a configuration correction. | Merchant approval is required before creating the simulated test order. PayFast support is required only if the handoff error recurs or the sandbox transaction cannot complete. | + +### Phase 12D Safe Diagnostic Summary + +- PayFast received the reproduced attempt: **Yes**, through the official sandbox payment page. +- Safe HTTP/error status: **No failing HTTP status or provider error was reproduced or exposed**. +- Browser console: no warnings or errors captured. +- Shopify state after stopping: no order; one automatically generated abandoned checkout; no paid status. +- PayFast state after stopping: sandbox session opened; payment incomplete; no completed transaction. +- Selected root-cause classification: **G. Root cause still unknown**. +- Confidence: **Medium**. +- No configuration change is supported by the current evidence. + +### Phase 12D Strict No-Change Confirmation + +- No live payment or movement of money occurred. +- No real card, bank, Zapper, Payflex, or customer financial credentials were used. +- No provider was activated, deactivated, reinstalled, uninstalled, reconnected, or reconfigured. +- PayFast test mode and payment-method selections were not changed. +- No credential, key, passphrase, permission, or scope was changed or regenerated. +- PayPal and Shopify Test Payment Gateway were unchanged. +- No shipping, market, currency, domain, product, checkout setting, or theme file was changed. +- No page was published, no menu was wired, and Contact and policies were unchanged. +- No Shopify order, refund, or CJ supplier order was created. +- One abandoned checkout record was created automatically when Shopify handed the incomplete test checkout to PayFast sandbox; it was not edited or recovered. + +## Phase 12E Successful Sandbox Order Validation + +Phase 12E was performed on 2026-07-11 with explicit merchant approval for exactly one successful PayFast sandbox-only payment. A fresh cart and synthetic customer details were used. PayFast test mode was verified immediately before checkout and remained enabled. + +> Historical verification note: the Shopify-side items marked pending in this section were resolved during Phase 12F below. + +The sandbox payment completed successfully. Immediately afterward, the browser security policy blocked access to both the Shopify return page and Shopify Admin. The blocked access was not bypassed, and no alternate browser or API was used to reproduce the restricted verification. Shopify-side order validation therefore remains pending. + +| Validation area | Result | Shopify state | PayFast state | Evidence | Follow-up | +| --- | --- | --- | --- | --- | --- | +| Fresh low-value cart | Passed | Fresh cart contained one Desk Cable Organiser at R79. | Not applicable. | New browser cart showed one line item and no reused products from the abandoned Phase 12D checkout. | None. | +| Sandbox redirect | Passed | Shopify checkout redirected to PayFast after PayFast was selected. | Official `sandbox.payfast.co.za` payment page loaded with an explicit sandbox notice. | Redirect occurred once without the earlier handoff error. | None. | +| Successful simulated payment | Passed | Shopify return state could not be inspected after the sandbox success. | PayFast displayed `Your payment was successful!` for R179 and showed the sandbox wallet-funds path. | Official sandbox success confirmation. | Verify the corresponding Shopify order before any further payment testing. | +| Shopify order creation | Pending verification | Browser security blocked the Shopify return page and Admin after payment completion. | PayFast success indicates the simulated provider payment completed, but it does not independently prove Shopify order creation. | No safe order number was available from the sandbox success page. | Perform read-only Shopify Admin verification only after browser access is restored. Do not repeat the payment. | +| Payment status | Pending verification | Financial status could not be read in Shopify Admin. | Sandbox payment status was successful. | PayFast success confirmation only. | Confirm Shopify financial status without changing the order. | +| Fulfilment status | Pending verification | Could not be inspected. | Not applicable. | Shopify Admin access was blocked. | Confirm that the order is unfulfilled; do not fulfil it. | +| Order total | Partially verified | Expected checkout total was R179. | PayFast confirmed R179. | Shopify checkout showed R79 subtotal plus R100 Standard shipping; PayFast showed R179. | Confirm the Shopify order total matches R179. | +| Shipping rate | Verified at checkout | Standard shipping was selected at R100. | PayFast received the combined total only. | Checkout cost summary showed Standard R100. | No shipping change. | +| Tax display | Verified at checkout; order display pending | Checkout displayed R10.30 included in taxes. | Not applicable. | Shopify checkout cost summary. | Confirm the order tax display without changing tax settings. | +| Customer email | Not verifiable | A reserved synthetic customer email was used; the Shopify order and notification timeline could not be inspected. | PayFast displayed that its sandbox receipt was sent to a PayFast-owned sandbox address, not the synthetic Shopify customer address. | No customer mailbox was accessed. | Verify Shopify's notification event in the order timeline when Admin access is restored. | +| Merchant notification | Pending verification | Shopify Admin and merchant notification surfaces could not be inspected after success. | Not applicable. | Browser security block. | Check Shopify Admin notification and merchant inbox without recording message bodies or private addresses. | +| PayFast transaction | Successful simulated payment confirmed; transaction log pending | No Shopify provider reference was available after the block. | Sandbox success state and R179 amount were visible. No live payment occurred. | Official sandbox success page. | Confirm a corresponding sandbox transaction entry if available; record only sanitized status/reference. | +| Duplicate-order check | Pending verification | Orders list could not be inspected. | Only one sandbox `Complete Payment` action was performed. | No second PayFast success attempt was made. | Confirm exactly one Shopify order exists. Do not retry payment. | +| Refund eligibility | Pending verification; no refund issued | Order refund action could not be inspected. | Sandbox refund eligibility could not be inspected without the resulting order or transaction record. | No refund control was clicked. | Inspect only in a separately approved read-only follow-up; do not issue a refund yet. | +| Business-account confirmation requirement | Unresolved launch requirement | Shopify PayFast provider remains connected to Get Yours. | The visible PayFast business-facing account name differs from Get Yours. | Existing Phase 12D observation; the legal-entity relationship was not confirmed. | Merchant must confirm the intended legal merchant entity and formal PayFast verification status before live activation. Do not reconnect the account. | + +### Phase 12E Test Record + +- Product: Desk Cable Organiser. +- Subtotal: R79. +- Shipping method: Standard. +- Shipping charge: R100. +- Total: R179 ZAR. +- Checkout tax display: R10.30 included in taxes. +- Test start: approximately 16:29 SAST on 2026-07-11. +- PayFast result: successful sandbox payment. +- Handoff error recurrence: no. +- Shopify order number: pending read-only verification. + +### Phase 12E Strict No-Change Confirmation + +- Exactly one PayFast sandbox `Complete Payment` action was performed. +- No second payment attempt was made after success. +- No live money moved and no live payment method was used. +- No real card, bank, Zapper, Payflex, or customer financial credentials were used. +- No refund was issued. +- No order was fulfilled or manually marked fulfilled. +- No CJ supplier order was created. +- No payment-provider configuration, payment method, PayPal setting, or Shopify Test Payment Gateway setting was changed. +- PayFast test mode remained enabled. +- No shipping rate, delivery estimate, R500 announcement, market, domain, checkout setting, product, or theme file was changed. +- No page was published, no menu was wired, and Contact and policies were unchanged. +- Shopify-side order, notification, duplicate, and refund-eligibility checks remain pending because browser access was blocked after payment success. + +## Phase 12F Shopify Post-Payment Verification + +Phase 12F was completed on 2026-07-11 as read-only Shopify Admin inspection of the single Phase 12E PayFast sandbox payment. No order, transaction, fulfilment, notification, refund, checkout, or configuration action was performed. + +| Verification area | Result | Shopify evidence | PayFast relationship | Follow-up | +| --- | --- | --- | --- | --- | +| Order located | Passed | Exactly one matching order was present: `#1001`, internal order ID `7576446042215`, created 11 July 2026 at 16:30 SAST from Online Store. | Timeline links the order to the single Phase 12E PayFast payment. | None. | +| Test/sandbox status | Passed | Order banner states `Test order` and `Your payment gateway is in test mode.` Transaction detail shows `Test: True`. | Confirms the order is simulated and no live money moved. | Keep test mode enabled for later approved tests. | +| Financial status | Paid | Order header and payment summary both show Paid. | Shopify recorded one successful PayFast Sale transaction for R179. | None for this order. | +| Fulfilment status | **Unexpected: Fulfilled, Complete, and Archived** | Timeline states Shopify marked one item fulfilled from Shop location, then archived the order. A shipping confirmation event was generated. | Not caused by a second PayFast transaction. | Treat automatic fulfilment/archiving as a launch blocker. Inspect the relevant Shopify order-processing setting in a separately approved read-only phase before changing anything. | +| Order values | Matched | Subtotal R79; Standard shipping R100; included VAT/tax display R10.30; total and paid amount R179 ZAR. | PayFast transaction amount matches R179. | None. | +| Item and quantity | Matched | One Desk Cable Organiser, quantity 1, unit and line total R79. | Matches the Phase 12E checkout. | None. | +| Payment transaction | Passed | One transaction: Type Sale, Gateway Payfast, Status Success, Test True, created 16:29 SAST, amount R179 ZAR. Safe shortened reference: `...ydev`. | Shopify received and acknowledged PayFast's successful sandbox notification. | Do not expose or store the full provider reference. | +| Customer order confirmation | Generated/sent by Shopify; delivery unverified | Timeline states the order-confirmation email was sent at 16:30. The reserved synthetic address was not opened or checked. | Generated after PayFast success acknowledgement. | Treat actual mailbox delivery as unverified. Do not resend. | +| Customer shipping confirmation | **Generated automatically** | Timeline states a shipping-confirmation email was sent at 16:30 immediately after automatic fulfilment. | Not a PayFast function. | This wording can imply shipment before manual supplier fulfilment; resolve the auto-fulfilment workflow before launch. Do not resend. | +| Merchant notification | Unverified | The order appears in Shopify Admin, but no safe merchant email-delivery status was exposed in the order timeline. Alerts were not opened because doing so could change read state. | Not a PayFast transaction-status issue. | Verify merchant notification delivery separately without resending. | +| Duplicate-order check | Passed | Orders list contained one matching R179 order. The order has one matching PayFast transaction. | No duplicate paid or pending PayFast transaction was visible. | Do not repeat payment. | +| Abandoned checkout relationship | Separate | The earlier Phase 12D R864 abandoned checkout remains listed as Not recovered. The completed Phase 12E checkout is linked to order #1001 and is not listed as a second abandoned checkout. | Confirms the successful sandbox payment produced a distinct order. | Do not recover or edit the abandoned checkout. | +| Refund eligibility | Eligible through Shopify to original PayFast payment; no refund issued | Refund screen shows Original payment, provider Payfast, and R179 available for refund. Refund amount remained R0 and the final action was disabled. | Indicates Shopify can initiate the sandbox refund against PayFast. | Test only in the separately approved sandbox-refund phase. | +| Business-account confirmation requirement | Still unresolved | Shopify provider is connected to Get Yours. | The visible PayFast business-facing account name differs from Get Yours. | Merchant must confirm the intended legal merchant entity and formal PayFast verification status before live activation. Do not reconnect the account. | + +### Phase 12F Order Summary + +- Shopify order: `#1001`. +- Safe Shopify order ID: `7576446042215`. +- Created: 11 July 2026 at 16:30 SAST. +- Test indicator: true. +- Financial status: Paid. +- Fulfilment status: Fulfilled; order also marked Complete and Archived. +- Gateway: Payfast. +- Transaction: one successful test Sale for R179 ZAR, created at 16:29 SAST. +- Subtotal: R79. +- Shipping: Standard, R100. +- Tax display: R10.30 included, shown as VAT 15%. +- Grand total: R179 ZAR. +- Product: Desk Cable Organiser, quantity 1. +- Duplicate matching order: none. +- Earlier abandoned checkout: separate, R864, Not recovered. +- Refund availability: R179 to Original payment through Payfast; no refund started or issued. + +### Phase 12F Strict No-Change Confirmation + +- The payment was not repeated and no second order was created. +- Order #1001 was not edited, cancelled, archived, deleted, tagged, or annotated by this inspection. +- No payment was captured or marked manually. +- No refund amount was entered and no refund was issued. +- No fulfilment, delivery, tracking, or supplier action was performed. +- No customer or merchant notification was resent or opened for resend. +- The abandoned checkout was not recovered, edited, or deleted. +- No PayFast, PayPal, Test Payment Gateway, shipping, tax, market, product, customer, domain, checkout, or store setting was changed. +- No theme, page, menu, Contact, or policy change was made. +- No CJ supplier order was created. +- Fulfilment, archiving, and the shipping-confirmation event were generated automatically by Shopify at order creation; they were observed only and not changed. + +## Phase 12G Automatic Fulfilment Investigation + +Phase 12G was completed on 2026-07-11 as a read-only investigation of order #1001, Shopify order-processing settings, product and variant configuration, locations, installed apps, and automation surfaces. No setting, order, product, app, workflow, or notification was changed. + +| Investigation area | Current state | Evidence | Root-cause relevance | Change required? | +| --- | --- | --- | --- | --- | +| Order timeline | Payment at 16:29 SAST; order, fulfilment, shipping-confirmation, completion state, and archive at 16:30 SAST | Timeline records one successful PayFast Sale, Shopify fulfilment, shipping-confirmation generation, and a separate archive event. No separate completion event is shown; Complete is the resulting state after all line items were fulfilled. | Sequence matches Shopify's configured post-payment processing exactly. | No order change. Future processing settings require correction before launch. | +| Fulfilment actor/source | Shopify | Timeline states `Shopify marked 1 item as fulfilled from Shop location.` Expanded event shows Service `Manual` and fulfilment location `Shop location`. | Rules out merchant user, PayFast, Flow, API, and third-party fulfilment service as the event actor. | No. | +| Tracking/carrier | None | Order still offers `Add tracking`; no tracking number or carrier is attached. | Confirms Shopify marked fulfilment without supplier or shipment evidence. | No change to #1001. Future paid orders must remain unfulfilled until tracking is available. | +| Automatic fulfilment setting | **Enabled** | General > Order processing has `Automatically fulfill the order's line items` selected under `After an order has been paid`. | Primary cause of the immediate fulfilment. | Yes. Proposed future correction: select `Don't fulfill any of the order's line items automatically`. Requires explicit merchant approval and Save. | +| High-risk fulfilment option | Disabled | `Automatically fulfill all orders, even those with a high risk of fraud` is unchecked. | Normal-risk paid orders are affected; high-risk orders may be excluded by Shopify. | No separate change required if automatic line-item fulfilment is disabled. | +| Shipment notification setting | **Enabled** | Nested `Notify customers of their shipment` checkbox is checked beneath automatic fulfilment. | Direct cause of the shipping-confirmation email when Shopify auto-fulfilled #1001. It is downstream from the automatic-fulfilment choice. | Correcting automatic fulfilment prevents this premature trigger. The notification setting can remain relevant for later legitimate manual fulfilment, subject to merchant review. | +| Automatic archive setting | **Enabled** | `Automatically archive the order` is checked for orders that are fulfilled and paid or fully refunded. | Downstream cause of the archive event after automatic fulfilment made the paid order complete. Disabling archive alone would leave future orders incorrectly fulfilled. | Merchant decision required after automatic fulfilment is corrected. | +| Product requires shipping | Yes | Desk Cable Organiser has `Physical product` checked. | Rules out a non-shipping/digital product classification. | No. | +| Inventory management | Shopify-tracked at Shop location | Inventory tracking is enabled and the variant has stock at Shop location. | Normal store-managed physical inventory; not an app-managed product. | No. | +| Variant fulfilment service | Manual | Order fulfilment event identifies Service `Manual`. | Rules out automatic app/custom fulfilment service assignment. | No. | +| Sample product comparison | Same store-managed physical pattern | Laundry Hamper is also a physical product with Shopify-tracked inventory at Shop location. Product list shows demo inventory managed at the store location. | Indicates the root setting is store-wide rather than Desk Cable Organiser-specific. | No product changes. | +| Fulfilment locations | One active location | Locations shows one active location: Shop location, South Africa. No app-managed or custom fulfilment location is listed. | Rules out PayFast or another app location initiating fulfilment. | No. | +| Installed apps | No fulfilment app identified | Installed apps are Shopify CLI Connector, Shopify ChatGPT MCP, three wishlist/loyalty apps, and Messaging. No CJ app or dedicated fulfilment app is installed. | No app matches the order actor; timeline explicitly attributes fulfilment to Shopify. | No app changes. | +| Shopify Flow | Not installed | Shopify Flow does not appear in the installed apps list, and no Flow workflow or run is exposed. | Rules out a Flow `order paid -> fulfil order` workflow. | No. | +| API/app fulfilment evidence | None | Timeline identifies Shopify, Manual service, and Shop location; no app/API actor or custom service appears. | Makes third-party or API fulfilment unsupported by the evidence. | No. | +| Notification trigger | Automatic Shopify fulfilment | Shipping confirmation appears in the same 16:30 sequence immediately after Shopify marked the item fulfilled. The shipment-notification checkbox is enabled. | Confirms the email was a downstream consequence of the automatic fulfilment, not PayFast or a manual resend. | Fix the underlying fulfilment setting before retesting. | +| Store-wide impact | Eligible paid orders store-wide | The responsible setting is under global General > Order processing, not a product, gateway, or location rule. | Future normal-risk paid orders through PayFast or other gateways are likely to be fulfilled automatically. | Launch blocker until corrected and retested. | +| Root-cause classification | **I. Multiple interacting settings** | Automatic fulfilment is the primary trigger; shipment notification and auto-archive are enabled downstream behaviours. | Fully explains Fulfilled, Complete, shipping confirmation, and Archived states. | Yes, but no mutation is authorized in Phase 12G. | +| Confidence | **High** | Current settings and the order timeline align exactly; product, location, app, Flow, service, and gateway alternatives were ruled out. | Root cause is established. | No further diagnostic order is required. | +| Proposed correction | Disable automatic line-item fulfilment for paid orders; separately decide whether automatic archive should remain enabled | Desired manual CJ workflow requires paid orders to remain Unfulfilled. | Prevents premature fulfilment and shipping confirmation. Auto-archive becomes irrelevant until a merchant legitimately fulfils an order. | Explicit merchant approval required to change General > Order processing and Save. | +| Retest requirement | One separately approved PayFast sandbox order after correction | Must verify Paid, Unfulfilled, operationally visible/open, no shipping-confirmation email, no tracking, and no CJ order. | Confirms the corrected workflow before manual fulfilment testing. | Separate approval required; do not retest in Phase 12G. | + +### Phase 12G Root-Cause Decision + +- Classification: **I. Multiple interacting settings**. +- Primary responsible setting: `Automatically fulfill the order's line items` is selected. +- Downstream notification setting: `Notify customers of their shipment` is checked. +- Downstream archive setting: `Automatically archive the order` is checked. +- Fulfilment actor: Shopify. +- Fulfilment service: Manual. +- Fulfilment location: Shop location. +- Tracking: none. +- PayFast role: payment success only; not the fulfilment actor. +- Scope: future eligible normal-risk paid orders store-wide, not only PayFast, test orders, or Desk Cable Organiser. +- Confidence: high. + +### Proposed Correction And Retest Plan + +1. With explicit merchant approval, change General > Order processing from `Automatically fulfill the order's line items` to `Don't fulfill any of the order's line items automatically`, then Save. +2. Decide separately whether `Automatically archive the order` should remain enabled. Leaving it enabled is compatible with manual fulfilment because archiving would occur only after the merchant later fulfils the paid order; disabling it may keep completed orders visible longer. +3. Confirm the shipment-notification setting is used only when a legitimate manual fulfilment is created. Correcting automatic fulfilment should prevent premature shipping confirmation. +4. Create one separately approved PayFast sandbox retest order. +5. Verify the retest remains Paid, Unfulfilled, operationally visible/open, without tracking, without shipping confirmation, and without a CJ supplier order. +6. In a later separate phase, test the intended manual fulfilment, tracking, and customer notification workflow. + +### Phase 12G Strict No-Change Confirmation + +- Order #1001 was not edited, unarchived, cancelled, refunded, fulfilled, delivered, tagged, annotated, or given tracking. +- No notification was opened for resend or resent. +- No product, variant, inventory, location, fulfilment service, app, or Shopify Flow setting was changed. +- No Shopify order-processing, automatic fulfilment, notification, or archive setting was changed or saved. +- No PayFast, PayPal, Test Payment Gateway, shipping, tax, market, policy, page, menu, Contact, checkout, domain, or theme setting was changed. +- No payment or order was repeated or created. +- No CJ supplier order was created. + +## Phase 12H Automatic Fulfilment Correction + +Phase 12H was completed on 2026-07-12 using explicit approval to change only the global automatic-fulfilment choice under **General > Order processing**. No order, checkout, payment, refund, fulfilment, tracking, notification, provider, shipping, tax, market, product, page, menu, policy, theme, app, or CJ action was performed. + +| Area | Before | After | Verification | Notes | +| --- | --- | --- | --- | --- | +| Automatic line-item fulfilment | `Automatically fulfill the order's line items` selected | `Don't fulfill any of the order's line items automatically` selected | Saved once; verified selected after a page reload with no unsaved-change indicator. | Future eligible paid orders should remain Unfulfilled for manual CJ review. | +| Shipment notification | `Notify customers of their shipment` enabled beneath automatic fulfilment | Unchanged; conditionally hidden while automatic fulfilment is disabled | Confirmed enabled before the approved change. It disappeared from the settings surface only because the parent automatic-fulfilment option is now disabled. | It remains relevant only after a legitimate manual fulfilment. | +| Automatic archive | Enabled | Enabled | Verified checked after reload. | It can archive a paid order only after a legitimate fulfilment; it does not fulfil an order. | +| Expected manual CJ workflow | Paid orders were fulfilled automatically | Paid order should remain Unfulfilled pending merchant action | Configuration now matches the intended sequence; no order was created in this phase. | Verify payment, address, SKU, CJ availability, and supplier cost; place the CJ order manually; add tracking when available; then fulfil legitimately and send shipping confirmation. | +| Order #1001 | Fulfilled, Complete, Archived historical sandbox record | Unchanged | No interaction with the order was performed. | The historical test order was not edited, unarchived, cancelled, refunded, fulfilled, or annotated. | +| Retest | Required | Still required | No checkout or payment was created. | One separately approved PayFast sandbox retest must verify Paid + Unfulfilled, no tracking, no premature shipping confirmation, and no CJ order. | + +### Phase 12H Strict No-Change Confirmation + +- Only the approved automatic line-item fulfilment setting changed. +- Order #1001 was not changed, and no new order, checkout, payment, or refund was created. +- No fulfilment, tracking, notification resend, or CJ supplier order occurred. +- Automatic archive, shipment-notification configuration, and the high-risk fulfilment option were not changed. +- No PayFast, PayPal, Shopify Test Payment Gateway, shipping, tax, market, product, variant, inventory, location, policy, page, menu, Contact, theme, static-prototype, app, or Shopify Flow setting changed. +- No live money moved. + +## Phase 12I Post-Correction Sandbox Retest + +Phase 12I was completed on 2026-07-12 with the one explicitly approved PayFast sandbox checkout. A fresh cart and synthetic customer details were used. PayFast test mode was confirmed before checkout and remained enabled. After the single sandbox completion action, the PayFast browser page remained on its processing state; Shopify Admin is the authoritative result for this retest and recorded one successful simulated payment and one new order. + +| Validation area | Expected | Actual | Result | Follow-up | +| --- | --- | --- | --- | --- | +| Corrected setting pre-check | Manual fulfilment selected; automatic archive remains enabled; no unsaved settings | `Don't fulfill any of the order's line items automatically` remained selected. Automatic archive remained enabled. | Passed | None. | +| Sandbox payment | One PayFast sandbox-only success; no live money or real credentials | One R179 PayFast sandbox payment was completed through the official sandbox flow. | Passed | PayFast browser return remained processing after completion; do not retry. Investigate the return behaviour separately if needed. | +| Shopify order creation | Exactly one new test order | Shopify created `#1002` (safe ID `7578508296295`) on 2026-07-12 at approximately 18:19 SAST. The order banner identifies it as a test order. | Passed | None. | +| Financial status | Paid | Shopify shows Paid for R179 ZAR. | Passed | None. | +| Fulfilment status | Unfulfilled | Shopify shows `Unfulfilled` with no fulfilment action taken. | Passed | Keep unfulfilled until a future, separately approved manual fulfilment test. | +| Open/archive state | Operationally visible and not prematurely archived | `#1002` remained visible in Shopify Orders and was not archived. Shopify also displays its standard `Complete` header state alongside Paid, while the fulfilment state remains explicitly Unfulfilled. | Passed | No completion or archive action was taken; use the explicit fulfilment status for the manual-CJ decision. | +| Tracking | No tracking | No tracking number or carrier was present. | Passed | None. | +| Order confirmation | Customer order-confirmation event generated | Shopify timeline states that an order-confirmation email was sent. Actual mailbox delivery was not inspected. | Passed | Verify controlled mailbox delivery separately if required; do not resend. | +| Shipping confirmation | No shipping-confirmation event | No shipping-confirmation event appeared in the Shopify timeline. | Passed | None. | +| PayFast transaction | Exactly one matching successful sandbox transaction | Shopify timeline records one R179 payment processed on Payfast. | Passed | Do not expose or store the provider reference. | +| Duplicate-order check | No duplicate paid or pending order | Orders index showed the one new `#1002` test order; no second Phase 12I order or payment attempt was made. Historical `#1001` remained separate. | Passed | None. | +| Abandoned-checkout separation | Earlier abandoned checkout remains separate and unrecovered | The retest used a new checkout that produced `#1002`; no abandoned checkout was recovered or altered. | Passed | No further action in this phase. | +| CJ workflow readiness | Paid, Unfulfilled, no tracking, no premature shipping confirmation, and available for manual review | `#1002` meets the required pre-CJ manual-review state. No CJ supplier order or fulfilment service action occurred. | Passed | Manual supplier fulfilment, tracking, and shipping-notification testing each require separate approval. | + +### Phase 12I Order Summary + +- Shopify order: `#1002`. +- Safe Shopify order ID: `7578508296295`. +- Created: 2026-07-12 at approximately 18:19 SAST. +- Test indicator: true. +- Product: Desk Cable Organiser, quantity 1. +- Financial status: Paid. +- Fulfilment status: Unfulfilled. +- Operational state: visible in Shopify Orders; not prematurely archived. Shopify displays a `Complete` header state, but the separate fulfilment state is explicitly Unfulfilled. +- Gateway: Payfast in test mode. +- Transaction evidence: one successful simulated Payfast payment for R179 ZAR. +- Subtotal: R79. +- Shipping: Standard, R100. +- Tax display: R10.30 included, shown as VAT 15%. +- Total: R179 ZAR. +- Tracking: none. +- Customer order confirmation: generated in the Shopify timeline; delivery unverified. +- Customer shipping confirmation: not generated. + +### Phase 12I Strict No-Change Confirmation + +- Exactly one simulated Shopify order, `#1002`, was created under the explicit approval. +- No live money moved and no real financial credentials were used. +- Order `#1001` was not edited, unarchived, cancelled, refunded, fulfilled, tagged, annotated, or otherwise changed. +- No manual fulfilment, delivery, shipping, completion, archive, cancellation, refund, or tracking action was taken on order `#1002`. Shopify's displayed `Complete` header state was observed alongside its explicit Unfulfilled fulfilment status. +- No notification was resent and no message body or mailbox was opened. +- No CJ supplier order was created. +- No automatic-fulfilment, archive, notification, provider, shipping, tax, market, product, page, menu, Contact, policy, app, or theme setting was changed. +- PayFast test mode remained enabled. PayPal and all other payment settings were unchanged. + +## Phase 12J PayFast Sandbox Refund Validation + +Phase 12J was continued on 2026-07-12 after Shopify CLI authorization was completed against the permanent store domain. Shopify pre-refund verification passed: `#1002` was a test order, Paid, Unfulfilled, refundable for R179, and had one successful PayFast Sale. The Desk Cable Organiser line was refundable at quantity 1, and `Shop location` was available for the approved restock. + +The first mutation attempt was rejected before execution because the current Shopify Admin API requires an `@idempotent` key for `refundCreate`. It created no refund. The second, schema-validated request used a unique idempotency key and created exactly one Shopify refund record and one corresponding R179 PayFast refund transaction. The provider transaction is currently `PENDING`; Shopify therefore continues to show the order as Paid and total refunded as R0. No second refund was attempted. + +| Validation area | Before | Action | After | Result | Follow-up | +| --- | --- | --- | --- | --- | --- | +| Pre-refund financial state | Paid; R179 total; R0 refunded | Read-only Shopify Admin and API verification | Paid before submission | Passed | None. | +| Refundable amount | R179 available | Verified against the order record | Refundable before submission; no longer refundable after the one request | Passed | Do not submit another refund. | +| Refund composition | One R79 Desk Cable Organiser plus R100 Standard shipping | Submitted one full-refund request with full shipping and quantity 1 | One R179 PayFast refund transaction created | Submitted; pending provider completion | Await PayFast sandbox finalization; do not retry. | +| Refund destination | Original successful PayFast test Sale | Submitted with the original Sale as parent transaction | One PayFast refund transaction references the original payment | Passed; pending | None. | +| Shopify refund transaction | None | `refundCreate` submitted once with a unique idempotency key | One R179 PayFast Refund transaction, status `PENDING` | Created | Do not issue a second refund. | +| PayFast refund relationship | One original sandbox Sale; no refund | Requested refund through original PayFast payment | One Sale and one pending Refund appear in Shopify | Pending | Confirm completion through Shopify/PayFast before treating the refund as final. | +| Final financial state | Paid | One refund request submitted | Paid; total refunded R0 while provider refund is pending | Pending | Re-check only after PayFast updates the transaction. | +| Fulfilment and tracking | Unfulfilled; no tracking | No fulfilment or tracking action | Unfulfilled; no tracking | Passed | None. | +| Inventory restock | No restock yet | Restock at Shop location requested with `CANCEL` restock type | Shopify marked the line non-refundable; inventory quantity could not be independently read because the CLI token lacks `read_products` | Partially verified | Do not change inventory. Reauthorize with `read_products` only if an independent inventory read is required. | +| Customer refund notification | None | Normal customer notification requested | Notification event not independently verified | Pending verification | Do not resend. | +| Archive state | Operationally visible | No manual archive action | Paid and Unfulfilled; no archive action observed | Passed | A later archive caused by a final full refund would be downstream behaviour, not a manual action. | +| Duplicate-refund check | No refund exists | One idempotent request submitted | One refund record and one pending Refund transaction | Passed | None. | +| CJ workflow state | No CJ action | No supplier or fulfilment activity | No CJ action | Passed | None. | +| Live-money confirmation | No live money | PayFast test-mode refund request only | No live money moved | Passed | None. | + +### Phase 12J Strict No-Change Confirmation + +- Only one approved R179 PayFast sandbox refund request was submitted. The initial non-idempotent API request was rejected before execution; the idempotent request created one Pending refund transaction. +- No new order or payment was created. +- No fulfilment, cancellation, tracking, CJ order, or notification resend occurred. +- No provider, shipping, tax, market, product-policy, inventory-policy, page, menu, Contact, app, policy, or theme setting changed. +- No live money moved and no financial credentials were used or stored. + +## Phase 12K Pending Refund Finalization Check + +Phase 12K was completed on 2026-07-12 at approximately 12:58 SAST as a read-only verification of the one existing Phase 12J refund. The refund request was created at approximately 10:49 SAST, so it had remained pending for approximately two hours and nine minutes at the point of this check. + +**Final classification: B. Still pending.** Shopify shows one original successful PayFast Sale and one linked PayFast Refund for R179, with the Refund transaction still `PENDING`. There is no duplicate refund and no conflicting Shopify state. The authenticated PayFast dashboard was not available for a separate provider-side inspection in this phase; Shopify's gateway transaction status is the available evidence. + +| Verification area | Phase 12J state | Current state | Result | Follow-up | +| --- | --- | --- | --- | --- | +| Shopify financial status | Paid | Paid | Still pending | Do not retry or submit another refund. | +| Shopify refunded amount | R0 settled while refund was pending | R0 settled | Still pending | Re-check only after the existing PayFast Refund reaches a terminal state. | +| PayFast refund status | One R179 Refund, Pending | One R179 PayFast Refund, `PENDING` | Still pending | Await PayFast sandbox finalization. | +| Transaction count | One Sale; one Refund | One successful Sale and one linked pending Refund | Passed | No duplicate or follow-up transaction exists. | +| Duplicate-refund check | One refund record | One refund record and one Refund transaction | Passed | None. | +| Remaining refundable amount | Line no longer refundable | Order is not refundable; line refundable quantity remains 0 | Passed | Do not create a replacement refund. | +| Notification event | Not independently verified | No customer refund-notification event appears in the available order events; actual mailbox delivery remains unverified | Pending verification | Do not resend. | +| Fulfilment and tracking | Unfulfilled; no tracking | Unfulfilled; no shipping or fulfilment event appeared in the order events | Passed | None. | +| Inventory restock | Requested, not independently read | Shopify order event records that one item was restocked at one location | Passed from order timeline | Quantity readback remains out of scope because no additional product scope was requested. | +| Archive state | Open | Open (`closed: false`; no archive event) | Passed | Do not archive manually. | +| CJ workflow state | No CJ action | No CJ supplier order, fulfilment, or tracking event | Passed | None. | +| Live-money confirmation | Sandbox only | Test order and PayFast test transaction only; no live-money movement | Passed | None. | +| Final classification | Pending | **B. Still pending** | Stop | Failed-payment, customer-cancellation, and manual fulfilment/tracking tests remain paused. | + +### Phase 12K Strict No-Change Confirmation + +- No refund was submitted, retried, canceled, reversed, or otherwise changed. +- No order was edited, fulfilled, canceled, archived, unarchived, or given tracking. +- No notification was resent and no inventory adjustment was made manually. +- No additional API scope authorization was requested. +- No payment or order was created and no CJ supplier order was created. +- No provider, shipping, product, tax, page, menu, Contact, policy, app, or theme setting changed. +- No live money moved. + +## Phase 12L Refund Terminal-State Follow-up + +Phase 12L was completed on 2026-07-12 at approximately 23:45 SAST as a read-only follow-up. Shopify records the PayFast Refund transaction at `2026-07-12T10:49:24Z` (12:49 SAST) with no later provider or order event. The elapsed time at inspection was approximately 10 hours and 56 minutes. The PayFast dashboard was not separately available in this phase, so its status is represented by Shopify's linked Payfast gateway transaction. + +**Final classification: B. Still pending.** The existing refund has not reached a terminal state, but it has not failed or duplicated. It has been pending for less than 24 hours, so a PayFast support escalation is not yet required. + +| Area | Phase 12K state | Current state | Result | Follow-up | +| --- | --- | --- | --- | --- | +| Elapsed time | Approximately 2 hours 9 minutes pending | Approximately 10 hours 56 minutes from the Shopify Refund timestamp | Still pending, under 24 hours | Wait; do not retry. | +| Shopify financial status | Paid | Paid | Still pending | None. | +| Refunded amount | R0 settled | R0 settled | Still pending | Re-check after the existing transaction becomes terminal. | +| PayFast refund status | Pending through Shopify gateway evidence | One linked R179 Payfast Refund remains `PENDING`; no newer update or safe error is visible | Still pending | Direct PayFast dashboard status remains unverified in this phase. | +| Sale and Refund transaction counts | One Sale; one Refund | One successful R179 Sale and one linked R179 pending Refund | Passed | No duplicate or follow-up transaction exists. | +| Duplicate check | One refund record | One refund record and one Refund transaction | Passed | None. | +| Refund eligibility | Order not refundable; line quantity 0 | Unchanged | Passed | Do not create a replacement refund. | +| Notification | No refund-notification event | No refund-notification event appeared; actual mailbox delivery remains unverified | Unverified | Do not resend. | +| Fulfilment | Unfulfilled | Unfulfilled; no fulfilment or shipping-confirmation event appeared | Passed | None. | +| Tracking | None | None | Passed | None. | +| Restock | Timeline recorded one item restocked at one location | Restock event remains present | Passed from order timeline | Quantity readback remains out of scope. | +| Archive state | Open | Open (`closed: false`; no archive event) | Passed | Do not archive manually. | +| CJ state | No CJ action | No CJ supplier, fulfilment, or tracking action | Passed | None. | +| Live-money confirmation | Sandbox only | Test order and test gateway transaction only | Passed | No live money moved. | +| Support escalation requirement | Not required | Not required while pending for less than 24 hours | No escalation yet | At 24 hours, prepare sanitized PayFast support evidence only; do not submit it without approval. | +| Final classification | B. Still pending | **B. Still pending** | Stop | Failed-payment, customer-cancellation, and manual fulfilment/tracking tests remain paused. | + +### Phase 12L Strict No-Change Confirmation + +- No refund was submitted, retried, replaced, reversed, or canceled. +- No order was edited and no payment or order was created. +- No fulfilment, tracking, notification resend, inventory adjustment, or CJ action occurred. +- No provider or store configuration changed. +- No live money moved. + +## Phase 12M 24-Hour Refund Checkpoint + +Phase 12M was completed on 2026-07-12 at approximately 23:50 SAST as a read-only checkpoint. Shopify timestamps the Refund transaction at `2026-07-12T10:49:24Z`, which is 12:49 SAST. The elapsed time was therefore approximately 11 hours and 1 minute, rather than 24 hours. The authenticated PayFast dashboard was not separately available; Shopify's linked Payfast gateway transaction is the available provider-status evidence. + +**Final classification: B. Still pending.** The refund remains pending, but the 24-hour support-escalation threshold has not yet been reached. No PayFast support escalation is required yet. + +| Area | Phase 12L state | Current state | Result | Follow-up | +| --- | --- | --- | --- | --- | +| Elapsed time | Approximately 10 hours 56 minutes | Approximately 11 hours 1 minute | 24-hour threshold not reached | Wait; do not retry. | +| Shopify financial state | Paid | Paid | Still pending | None. | +| Refunded amount | R0 settled | R0 settled | Still pending | Re-check after the existing transaction becomes terminal. | +| PayFast refund status | One linked R179 Refund, Pending | One linked R179 Payfast Refund, `PENDING`; no newer status or safe error is visible | Still pending | Direct PayFast dashboard status remains unverified. | +| Transaction count | One Sale; one Refund | One successful R179 Sale and one linked R179 pending Refund | Passed | No duplicate or replacement transaction exists. | +| Duplicate check | One refund record | One refund record and one Refund transaction | Passed | None. | +| Refund eligibility | Not refundable; line quantity 0 | Unchanged | Passed | Do not create a replacement refund. | +| Refund notification | No event visible | No refund-notification event appeared; actual mailbox delivery remains unverified | Unverified | Do not resend. | +| Fulfilment and tracking | Unfulfilled; no tracking | Unfulfilled; no fulfilment, tracking, or shipping-confirmation event appeared | Passed | None. | +| Restock | Restock event present | Restock event remains present | Passed from order timeline | Quantity readback remains out of scope. | +| Archive state | Open | Open (`closed: false`; no archive event) | Passed | Do not archive manually. | +| CJ state | No CJ action | No CJ supplier, fulfilment, or tracking action | Passed | None. | +| Live-money confirmation | Sandbox only | Test order and test gateway transaction only | Passed | No live money moved. | +| Classification | B. Still pending | **B. Still pending** | Stop | Failed-payment, customer-cancellation, and manual fulfilment/tracking tests remain paused. | +| Support escalation requirement | Not required under 24 hours | Not required; 24-hour threshold has not elapsed | No escalation yet | At 24 hours, prepare sanitized PayFast support evidence only; do not submit it without approval. | + +### Phase 12M Strict No-Change Confirmation + +- No refund was retried, replaced, reversed, canceled, or otherwise altered. +- No order was edited and no payment or order was created. +- No fulfilment, tracking, notification resend, inventory adjustment, or CJ action occurred. +- No provider or store configuration changed. +- No live money moved. + +## Part 1: PayFast Setup And Testing — Historical Phase 12B Snapshot + +The following table records the earlier Phase 12B state and is superseded by the Phase 12C current-state section above. + +| Check | Status | Evidence / notes | +| --- | --- | --- | +| PayFast active or inactive for the correct Shopify store | Inactive / not configured | PayFast is absent from active providers, and provider search returned no PayFast result. No configuration action was run. | +| Connected to the correct verified merchant account | Not connected in Shopify; merchant verification unknown | No PayFast account is attached to the store. The PayFast dashboard was not authenticated, and no private account details were inspected. | +| Test or sandbox mode available | PayFast-specific availability unknown | Shopify Test payment gateway is active, but this is not evidence of PayFast sandbox support. | +| Payment methods displayed at Shopify checkout | Admin state verified; storefront display not tested | Shopify Admin lists Test payment gateway and PayPal as active. PayFast is not active. The password-protected storefront prevented checkout verification. | +| Successful payment test | Not completed | No test mode was confirmed. No real live payment was authorized. | +| Failed-payment test | Not completed | Requires an approved test/sandbox method or controlled test procedure. | +| Cancelled-payment test | Not completed | Requires an approved test/sandbox method or controlled test procedure. | +| Refund test | Not completed | Requires a completed approved test order and authenticated Shopify/PayFast workflow. | + +### Payment Evidence Record + +- Inspection date/time: initial attempt on 2026-07-10 at approximately 19:36 SAST; authenticated Shopify continuation on 2026-07-11 at approximately 04:45 SAST. +- Test order number: None created. +- Payment reference: None created. +- Shopify payment state: Not applicable; no order or transaction was created. +- PayFast/payment-provider state: PayFast inactive/not configured; Shopify Test payment gateway and PayPal active. +- Visible fee/reference note: Shopify labels PayPal with a 2% transaction fee plus PayPal processing fees. No PayFast fee, settlement, payout, cancellation, or refund reference was visible because PayFast is not connected and its dashboard was signed out. +- Screenshot/note status: Admin state and login gates observed; no sensitive screenshot or credential was captured. + +### PayFast Control Point + +Do not run a live transaction until the merchant explicitly confirms: + +- The exact low-value test amount. +- The payment method to use. +- That a live charge is acceptable. +- The test customer details to use. +- The cancellation/refund path to follow after payment. + +Preferred next outcome: confirm and use PayFast test/sandbox mode. If sandbox testing is unavailable, record `Low-value live test needed; merchant approval required` and obtain the exact approval above. + +PayPal was already active when inspected. It was not activated, deactivated, opened for reconfiguration, or tested in this phase. Its active state requires a separate merchant decision because the earlier launch plan placed PayPal later. + +## Part 2: South Africa Shipping Setup And Testing + +### Configuration Inspection + +| Check | Status | Evidence / notes | +| --- | --- | --- | +| Active shipping origin/location | Verified | General profile uses `Shop location` in South Africa, with one of one location included. | +| South Africa shipping zone | Verified | Domestic South Africa zone exists in the General profile. | +| Standard shipping rate | Verified | `Standard` is R100, shows 3–5 business days, and becomes free for orders R770 and up. | +| Additional domestic rate | Verified | `Express` is R150 and shows 1–2 business days. No claim was made that these estimates are operationally validated. | +| Free standard shipping over R500 | Not configured | The current free Standard threshold is R770, not R500. | +| Unsupported international zones/rates | Configured but not market-enabled | International zone covers 28 countries with an R310 rate. Only South Africa is an active market, and Shopify says the international countries must be added to a market before selling there. | +| Products and locations in profile | Verified | One General profile covers all products not in other profiles; no other profile is listed, new products are added by default, and Shop location is included. Demo products therefore fall under the General profile based on the visible configuration. | + +### Checkout Rate Tests + +No checkout shipping-rate tests were completed. + +- Cart below R500: Not tested. +- Cart above R500: Not tested. +- First South African province address: Not tested. +- Second South African province address: Not tested. +- Unsupported international address: Not tested. + +Reason: the customer storefront redirected to `https://getyours.online/password`, so product, cart, and checkout could not be reached without the storefront password or an authenticated preview path. No test address, email, or customer data was submitted. + +Before changing the existing Standard rate, the merchant must approve the exact rate amount, customer-facing name, and whether the displayed estimate should remain. Before changing free shipping from R770 to R500, the merchant must confirm the margin decision. + +## Part 3: R500 Announcement Alignment + +Current storefront announcement supplied for this phase: + +`FREE STANDARD SHIPPING ON ORDERS OVER R500` + +Classification: **Not aligned**. + +The configured Standard rate becomes free for orders of R770 and up, while the announcement promises free standard shipping over R500. Treat this mismatch as a launch blocker until one of these paths is completed: + +1. Confirm margin approval, configure free standard shipping over R500, and test below/above-threshold checkout behaviour; or +2. Remove or change the announcement before launch if the matching rate will not be offered. + +The announcement and theme were not changed in this phase. + +## Part 4: Launch Blocker Update — Historical Phase 12B Snapshot + +The PayFast rows below record the earlier Phase 12B state. Use the Phase 12C validation table for the current provider and testing status. + +| Area | Status | Evidence | Remaining blocker | Recommended next action | +| --- | --- | --- | --- | --- | +| PayFast activation | Inactive / not configured | PayFast absent from active providers; provider search returned no results. | Supported PayFast integration and account connection required if PayFast remains the launch choice. | Confirm supported integration path, then request separate setup approval. | +| Successful payment test | Not completed | No order or payment reference created. | Test mode and approach unconfirmed. | Confirm sandbox mode or explicitly approve exact live test amount/method. | +| Failed payment test | Not completed | No transaction attempted. | Approved failure-test method unavailable. | Define and approve provider-supported test procedure. | +| Cancelled payment test | Not completed | No transaction attempted. | Approved cancellation-test method unavailable. | Define and approve provider-supported test procedure. | +| Refund test | Not completed | No test order exists. | Successful test order and refund path required. | Complete only after payment test approval and order creation. | +| South Africa shipping zone | Configured | Domestic South Africa zone exists in General profile. | Checkout behaviour still untested. | Retain unless the merchant approves a change; later test provincial addresses. | +| Standard shipping rate | Configured | Standard R100; free from R770; displayed estimate 3–5 business days. | Merchant must approve whether these values and wording are correct. | Provide exact approved amount and customer-facing name before any edit. | +| Free shipping over R500 | Not configured | Existing free Standard threshold is R770. | R500 announcement mismatch. | Approve R500 after margin review or separately approve announcement change. | +| Unsupported international shipping | Rate configured, market inactive | International R310 rate exists for 28 countries; only South Africa market is active. | Dormant international configuration should be reviewed before launch. | Decide whether to leave dormant or remove in a separately approved change. | +| R500 announcement alignment | **Not aligned** | R500 announcement versus R770 configured threshold. | Launch-blocking mismatch. | Approve rate threshold change or later announcement change; then test checkout. | + +## Part 5: Strict No-Change Confirmation + +| Area | Changed? | Confirmation | +| --- | --- | --- | +| Support pages published | No | All publication actions remained out of scope. | +| Menus wired | No | No navigation mutation or Admin menu action was run. | +| Contact updated | No | The Contact page was not opened or changed. | +| Theme files changed | No | No Liquid, CSS, JavaScript, JSON, header, footer, announcement, or template file was changed. | +| Shopify policies changed | No | Privacy, Terms, Refund Policy, and Shipping Policy were untouched. | +| PayPal activated | No action taken | PayPal was already active before inspection; it was not activated, deactivated, or reconfigured. | +| CJ supplier order created | No | No supplier, product, fulfilment, or payment action was run. | +| Live payment completed | No | One PayFast sandbox payment was completed in Phase 12E. It was simulated; no live money moved. | +| Shipping setting changed | No | No zone, rate, origin, market, or delivery profile was changed. | + +## Tests Completed + +- Confirmed PayFast is active, connected to the Get Yours store, and in test mode. +- Confirmed Visa, Mastercard, PayFast Instant EFT, Zapper, and Payflex are enabled; Mobicred is disabled. +- Confirmed PayFast, PayPal, and the Test Payment Gateway appear separately at checkout. +- Confirmed checkout payment presentation is readable on desktop and at 400 x 800 mobile size. +- Recorded the original Phase 12C PayFast processing failure, which occurred before provider redirect. +- Reproduced the handoff once in Phase 12D; Shopify redirected successfully to PayFast's official sandbox with no console error. +- Confirmed Orders remained empty. One abandoned checkout was generated automatically because the sandbox payment was intentionally left incomplete. +- Completed exactly one PayFast sandbox payment in Phase 12E for R179; the earlier handoff error did not recur. +- Verified Shopify order #1001 in Phase 12F: test order, Paid, one successful PayFast Sale transaction, and no duplicate order. +- Confirmed Shopify automatically marked the test order Fulfilled, Complete, and Archived and generated a shipping-confirmation event. +- Confirmed R179 remains available for refund to the original PayFast payment without entering an amount or issuing a refund. +- Identified the Phase 12G root cause: global automatic line-item fulfilment, shipment notification, and automatic archive settings are enabled. +- Confirmed fulfilment actor Shopify, service Manual, location Shop location, and no tracking. +- Ruled out PayFast, product classification, app-managed fulfilment, Shopify Flow, custom locations, and Desk Cable Organiser-specific configuration. +- Corrected the global automatic line-item fulfilment setting in Phase 12H and verified after reload that `Don't fulfill any of the order's line items automatically` remains selected. +- Confirmed automatic archive remains enabled. The shipment-notification control was unchanged and is conditionally hidden while automatic fulfilment is disabled. +- Completed the approved Phase 12I post-correction PayFast sandbox retest: Shopify created exactly one new test order, `#1002`, for R179 and recorded it as Paid and Unfulfilled. +- Confirmed the Phase 12I order remains operationally visible, has no tracking, has no shipping-confirmation event, and has one matching PayFast payment event. +- Confirmed the corrected manual CJ pre-fulfilment workflow passes: payment is captured while the physical item remains available for manual review. +- Completed Shopify CLI authorization against the permanent store domain `tdaqk1-nv.myshopify.com` for the approved order and inventory workflow. +- Submitted one idempotent Phase 12J PayFast sandbox refund request for R179, covering the Desk Cable Organiser and Standard shipping. Shopify created one refund record and one PayFast Refund transaction. +- Confirmed the Phase 12J refund transaction is Pending, not duplicated; the order remains Paid and Unfulfilled, with no tracking or CJ action. +- Observed Standard at R100 and Express at R150 for a R79 subtotal. +- Observed Standard still at R100 for a R715 subtotal and free for a R864 subtotal. +- Confirmed the R500 announcement is not aligned with checkout behaviour. +- Confirmed no live payment, configuration change, page publication, menu wiring, or external order occurred. + +## Tests Not Completed + +- Official PayFast simulated failed-payment flow. +- Provider-level cancellation flow after a successful redirect. +- Actual customer mailbox delivery and merchant new-order email delivery verification. +- Completion of the submitted PayFast sandbox refund. It remains Pending, so Shopify has not yet marked the order Refunded or reported R179 as settled. +- Independent inventory readback after the requested restock; the current CLI authorization lacks `read_products`. +- Customer refund-notification event and controlled mailbox delivery verification. +- PayFast sandbox return/redirect behaviour after a successful payment; Shopify recorded the result even though the sandbox browser page remained processing. +- A separately approved manual fulfilment, tracking, and legitimate shipping-notification workflow test. +- Checkout tests for a second South African province and an unsupported international address. +- 360 px and 430 px payment-page rechecks after the handoff issue is resolved. + +## Recommended Next Approval + +Exactly one PayFast sandbox post-correction retest order has been created and verified. Do not repeat a successful payment without separate approval. + +The Phase 12H correction is complete: `Don't fulfill any of the order's line items automatically` remains selected after reload. Automatic archive remains enabled; it is not a substitute for fulfilment and should remain unchanged unless separately approved. + +The corrected manual CJ pre-fulfilment workflow has passed: `#1002` is Paid and Unfulfilled, has no tracking, has no premature shipping-confirmation event, and created no CJ supplier order. Its one approved sandbox refund is now Pending with PayFast. Do not issue another refund, fulfil the order, change shipping, or modify any other configuration. + +After the retest, the official failed-payment, provider-cancellation, and sandbox-refund workflows each require their own approval. Shipping-rate and R500-announcement decisions remain independent. + +Two independent launch decisions also remain required: + +1. Confirm whether the current `Standard` R100 and `Express` R150 rates and displayed delivery estimates are operationally approved. +2. Approve free Standard shipping over R500 after margin review, or approve a later change/removal of the R500 announcement. Checkout currently charges Standard at R715 and makes it free at R864, consistent with the configured R770 threshold rather than the advertised R500 threshold. + +First, use a read-only follow-up to confirm whether PayFast finalizes the existing Pending refund. Do not resubmit it. After it reaches a terminal state, the official failed-payment, provider-cancellation, and any remaining refund workflow each require separate approval. A manual fulfilment, tracking, and customer shipping-notification test also remains separate. Page publication, menu wiring, Contact changes, policy changes, CJ fulfilment, and theme changes remain excluded. diff --git a/get-yours-shopify-theme/docs/phase-2-5-brand-shell-preview.md b/get-yours-shopify-theme/docs/phase-2-5-brand-shell-preview.md new file mode 100644 index 00000000000..9c1de56a5a2 --- /dev/null +++ b/get-yours-shopify-theme/docs/phase-2-5-brand-shell-preview.md @@ -0,0 +1,215 @@ +# Phase 2.5 Brand Shell Preview QA + +## Status + +Phase 2.5 preview QA is complete. + +This pass reviewed the current Dawn brand shell only. No homepage sections, product cards, product templates, collection templates, cart logic, or static prototype files were modified. + +## Preview Command + +Command used: + +```sh +shopify theme dev --store getyours-9322.myshopify.com --path get-yours-shopify-theme +``` + +Not used: + +- `--allow-live` +- `--publish` + +## Authentication + +Authentication was not required during this run. Shopify CLI started the development theme preview successfully. + +## Preview URLs + +- Local preview URL: `http://127.0.0.1:9292` +- Shopify preview URL: `https://getyours-9322.myshopify.com/?preview_theme_id=141697089639` +- Theme editor URL: `https://getyours-9322.myshopify.com/admin/themes/141697089639/editor?hr=9292` +- Gift card preview URL: `http://127.0.0.1:9292/gift_cards/[store_id]/preview` + +## Viewport Checks Completed + +Checked: + +- `360px` +- `400px` +- `430px` +- `768px` +- `1200px` +- `1440px` desktop wide + +Result: + +- No real horizontal page overflow was detected after the logo fix. +- Header controls remain visible at mobile widths. +- Footer remains readable after the contrast fix. + +## Announcement Bar Findings + +Result: Pass. + +- Background uses deep navy: `rgb(7, 58, 102)`. +- Text is white and readable. +- Message is correct: `FREE STANDARD SHIPPING ON ORDERS OVER R500`. +- It reads as a calm shipping/trust strip, not a warning or aggressive sale banner. +- At `360px`, the bar wraps/takes more height but remains readable. + +## Header Findings + +Initial issue found: + +- The fallback Get Yours SVG logo existed in the DOM but rendered at `0x0`, so it was invisible. + +Fix made: + +- Updated `assets/gy-theme.css` so `.gy-header-logo` has an explicit responsive width instead of relying on `width: auto`. + +After fix: + +- Logo renders clearly: + - `135px x 33px` on narrow mobile. + - `150px x 36px` at tablet/desktop widths. +- Header spacing feels calm. +- Desktop navigation is readable. +- Mobile menu trigger, search trigger and cart trigger remain visible. +- Account link appears where Dawn/customer account settings expose it. +- No horizontal overflow was detected at `360px`, `400px`, `430px`, `768px`, `1200px` or `1440px`. + +## Search Findings + +Result: Pass for Phase 2.5. + +- Dawn search modal opens correctly. +- Search input is visible. +- Form action remains `/search`. +- Predictive search wrapper is present, so predictive search hooks are not broken. +- Search trigger is easy enough to find as a header icon. + +Recommendation: + +- A more prominent desktop search bar may still be worth considering later if ecommerce browsing requires it, but it should be handled as a scoped Dawn search enhancement rather than replacing Dawn search behavior now. + +## Footer Findings + +Initial issue found: + +- Footer headings and text appeared too muted on the deep navy background because the generic footer `.rte` colour rule overrode the heading colour. + +Fix made: + +- Updated `assets/gy-theme.css` so footer headings explicitly remain white and general footer text/link colour uses a stronger readable white value. + +After fix: + +- Footer background uses deep navy: `rgb(6, 58, 102)`. +- Footer headings are white and readable. +- Footer text and links are readable. +- Footer block structure feels credible for the current Dawn shell: + - Brand text + - Shop links + - Support links + - Legal links +- Payment icons render. +- Policy links render where Shopify policies exist. +- Brand text fallback is acceptable for Phase 2.5. + +Reversed logo decision: + +- A reversed logo asset is still recommended later if the footer should display the logo on navy. +- Do not generate or invent one; it should come from approved brand artwork. + +## Colour Findings + +Result: Pass. + +- Navy, blue and gold usage is consistent in the shell. +- Announcement and footer use the intended navy family. +- Gold remains restrained. +- No obvious arbitrary blue conflicts were found in the shell surfaces reviewed. +- Default Dawn homepage demo content remains present, but homepage conversion is intentionally out of scope for this phase. + +## Dawn Behaviour Findings + +Result: Pass. + +Checked: + +- Mobile drawer opens. +- Mobile drawer closes after Dawn's normal animation settles. +- Search modal opens. +- Predictive search wrapper remains present. +- Cart link points to `/cart`. +- Account link points to Shopify's customer-authentication route when customer accounts are enabled. +- Footer menus render or fail gracefully depending on menu content. +- Payment icons render. + +## Fixes Made + +Files changed during Phase 2.5: + +- `assets/gy-theme.css` + +Fixes: + +- Corrected fallback logo rendering by assigning explicit responsive width to `.gy-header-logo`. +- Improved footer contrast by overriding footer heading colour after generic `.rte` rules and strengthening footer text/link colour. + +No Liquid, JSON settings, homepage, product, collection, cart or static prototype changes were made during Phase 2.5. + +## QA Commands + +Completed: + +```sh +git diff --check +shopify theme check --path get-yours-shopify-theme +``` + +Theme Check result: + +- `169` files inspected. +- `0` errors. +- `8` warnings. + +Warnings are the same stock Dawn warnings already documented in Phase 1 and Phase 2: + +- `layout/password.liquid`: `scheme_classes` undefined-object warning. +- `layout/theme.liquid`: `scheme_classes` undefined-object warning. +- `sections/main-article.liquid`: variable naming warning for `anchorId`. +- `sections/main-list-collections.liquid`: variable naming warning for `moduloResult`. +- `sections/main-product.liquid`: unused assign warning for `seo_media`. +- `sections/main-product.liquid`: `continue` undefined-object warning. +- `sections/main-search.liquid`: unused assign warning for `product_settings`. +- `snippets/quick-order-product-row.liquid`: orphaned snippet warning. + +## Screenshots Captured + +Temporary local screenshots were captured for review: + +- `/private/tmp/gy-phase-2-5-mobile-400.png` +- `/private/tmp/gy-phase-2-5-desktop-1200.png` +- `/private/tmp/gy-phase-2-5-footer-desktop-fixed.png` + +## Remaining Visual Issues + +- Dawn's default homepage demo hero/products are still visible. This is expected because homepage section conversion has not started. +- Header search remains icon/modal based. Consider a more prominent search treatment later if needed. +- Footer menu labels currently depend on default Shopify menus and policies; final menu setup should be done in Shopify/admin content work. +- Footer still uses brand text fallback instead of a reversed logo asset. +- Account link appears because Shopify customer accounts are enabled; hide or keep intentionally before launch depending on customer-account strategy. + +## Recommendation + +Phase 3 can begin. + +Recommended Phase 3 scope: + +- Homepage promo grid hero. +- Shop by Category. +- Reusable featured collection rail. +- Trust / Delivery / WhatsApp support section. + +Continue to avoid product template, collection template and cart conversion until their dedicated phases. diff --git a/get-yours-shopify-theme/docs/phase-2-brand-shell.md b/get-yours-shopify-theme/docs/phase-2-brand-shell.md new file mode 100644 index 00000000000..a0bf7c207fe --- /dev/null +++ b/get-yours-shopify-theme/docs/phase-2-brand-shell.md @@ -0,0 +1,199 @@ +# Phase 2 Brand Shell + +## Status + +Phase 2 brand shell setup is complete. + +This phase only touched the Dawn shell: + +- Announcement bar +- Header +- Footer +- Logo fallback treatment +- Dawn colour scheme mapping +- Supporting CSS in `assets/gy-theme.css` + +No homepage sections, product rails, product templates, collection templates, cart logic, or static prototype files were modified. + +## Files Changed + +- `assets/gy-theme.css` +- `config/settings_data.json` +- `sections/header.liquid` +- `sections/header-group.json` +- `sections/footer-group.json` + +## Announcement Bar + +Changes: + +- Set the default announcement text to `FREE STANDARD SHIPPING ON ORDERS OVER R500`. +- Set the announcement section to use the navy colour scheme. +- Disabled the line separator for a cleaner solid navy trust strip. +- Added targeted CSS so the bar uses `--gy-navy` with white uppercase text. + +The text remains merchant-editable through Dawn's announcement block settings. + +## Header + +Changes: + +- Preserved Dawn's native header structure, menu rendering, mobile drawer, search modal, predictive search hooks, account link, cart bubble and accessibility attributes. +- Added a Get Yours SVG asset fallback when no merchant logo is uploaded in Shopify settings. +- Set default logo width to `150`. +- Set mobile logo alignment to left. +- Disabled country/language selectors in the header defaults to keep the shell clean at this stage. +- Reduced header vertical padding from the stock default. +- Added targeted CSS for logo sizing, active/hover nav colour, cart bubble colour, and search modal proportions. + +Search decision: + +- Dawn's native search modal was preserved instead of rebuilding a custom full-width search bar. +- This keeps predictive search and accessibility behavior stable. +- A more prominent desktop search input can be considered later only if it can be implemented without breaking Dawn search behavior. + +Wishlist decision: + +- Dawn does not include wishlist functionality natively. +- Wishlist was not added in Phase 2. +- Add wishlist later through an app or a scoped custom feature if it becomes a launch requirement. + +## Footer + +Changes: + +- Set the footer to the deep navy colour scheme. +- Added footer block defaults: + - Brand information + - Shop links + - Support links + - Legal links +- Set the brand headline to `Get Yours`. +- Added a clean brand statement through Dawn global brand settings. +- Disabled newsletter, Follow on Shop, social links, country selector and language selector in the default footer shell for now. +- Kept payment icons and policy links enabled where Shopify data supports them. +- Added targeted CSS for deep navy background, readable text/links, uppercase headings and payment icon alignment. + +Logo treatment decision: + +- The normal Get Yours logo is not used in the footer because it is not designed for navy backgrounds. +- The footer uses a clean text fallback through Dawn's brand information block. +- A proper reversed logo asset should be created later from approved source artwork if footer logo display is required. + +## Colour Scheme Mapping + +Updated Dawn preset colour schemes in `config/settings_data.json`: + +- `scheme-1`: white surface with Get Yours text and blue actions. +- `scheme-2`: soft background with Get Yours text and blue actions. +- `scheme-3`: deep navy surface with white text. +- `scheme-4`: restrained soft gold accent scheme. +- `scheme-5`: primary blue surface with white text. + +Other setting changes: + +- `buttons_radius`: `8` +- `inputs_radius`: `8` +- `logo_width`: `150` +- `brand_headline`: `Get Yours` +- `brand_description`: clean-value brand statement + +`settings_schema.json` was not modified. + +## Dawn Behaviour Preserved + +Preserved: + +- Header drawer/menu behavior +- Desktop dropdown menu behavior +- Search modal and predictive search hooks +- Cart bubble/count behavior +- Customer account link behavior +- Localization forms in Dawn, although disabled by default in the shell +- Footer payment icon rendering +- Footer policy rendering +- Dawn section schema compatibility +- Theme editor block structure + +## QA Results + +Completed: + +- Confirmed JSON validity for: + - `config/settings_data.json` + - `sections/header-group.json` + - `sections/footer-group.json` +- Ran `git diff --check`. +- Confirmed no files under `get-yours-static-prototype/` were modified. +- Ran Shopify Theme Check. + +Theme Check result: + +- `169` files inspected. +- `0` errors. +- `8` warnings. + +Remaining warnings are stock Dawn warnings already present in Phase 1: + +- `layout/password.liquid`: `scheme_classes` undefined-object warning. +- `layout/theme.liquid`: `scheme_classes` undefined-object warning. +- `sections/main-article.liquid`: variable naming warning for `anchorId`. +- `sections/main-list-collections.liquid`: variable naming warning for `moduloResult`. +- `sections/main-product.liquid`: unused assign warning for `seo_media`. +- `sections/main-product.liquid`: `continue` undefined-object warning. +- `sections/main-search.liquid`: unused assign warning for `product_settings`. +- `snippets/quick-order-product-row.liquid`: orphaned snippet warning. + +Shopify Liquid validator note: + +- The Shopify Liquid skill validation helper was attempted, but its plugin-cache Node dependencies were not installed locally. +- Shopify CLI Theme Check was used as the authoritative validation pass for this phase. + +## Preview Status + +`shopify theme dev` was not run in Phase 2. + +Reason: + +- Store authentication/preview setup was not required for this code pass. +- Running `theme dev` uploads a development theme to the store, so it should be done intentionally when ready for visual review. + +Recommended preview command: + +```sh +shopify theme dev --store getyours-9322.myshopify.com --path get-yours-shopify-theme +``` + +Do not use: + +- `--allow-live` +- `--publish` + +## Known Issues + +- Header search remains Dawn's modal search rather than the static prototype's full desktop search bar. +- Footer uses text brand fallback instead of a reversed logo. +- Footer link groups depend on Shopify menus existing and being assigned correctly. +- Account appears only when Shopify customer accounts are enabled. +- Wishlist is not implemented because Dawn has no native wishlist. +- No browser/device visual QA was completed because a Shopify preview was not launched. +- Local shell startup still prints: `(eval):1: no such file or directory: $/opt/homebrew/bin/brew`. + +## Recommended Phase 3 + +Before building homepage sections, run a visual preview of the brand shell against Shopify: + +- Check desktop and mobile header rhythm. +- Confirm logo sizing in the live Shopify preview. +- Confirm announcement bar contrast. +- Confirm footer readability and menu availability. +- Confirm account/cart/search links still behave as Dawn expects. + +After brand shell approval, begin homepage section conversion in a separate phase: + +- Promo grid hero +- Shop by Category +- Reusable featured collection rail +- Trust / Delivery / WhatsApp support section + +Keep product template, collection template and cart conversion for later phases. diff --git a/get-yours-shopify-theme/docs/phase-3-5-homepage-preview.md b/get-yours-shopify-theme/docs/phase-3-5-homepage-preview.md new file mode 100644 index 00000000000..bc9b7822639 --- /dev/null +++ b/get-yours-shopify-theme/docs/phase-3-5-homepage-preview.md @@ -0,0 +1,197 @@ +# Phase 3.5 Homepage Preview QA + +## Status + +Phase 3.5 homepage preview QA is complete. + +This pass reviewed only the newly created Get Yours homepage sections in the Shopify Dawn development preview. Product templates, collection templates, cart logic, search templates, content pages, header/footer structure and the frozen static prototype were not modified. + +## Preview Command + +Command used: + +```sh +shopify theme dev --store getyours-9322.myshopify.com --path get-yours-shopify-theme +``` + +Not used: + +- `--allow-live` +- `--publish` + +## Preview URLs + +- Local preview URL: `http://127.0.0.1:9292` +- Shopify preview URL: `https://getyours-9322.myshopify.com/?preview_theme_id=141697089639` +- Theme editor URL: `https://getyours-9322.myshopify.com/admin/themes/141697089639/editor?hr=9292` + +## Theme Editor Findings + +The homepage sections are present in `templates/index.json`, render in the Shopify dev preview and pass Shopify Theme Check schema validation. + +Sections reviewed: + +- `gy-promo-grid-hero` +- `gy-category-grid` +- Five separate `gy-featured-collection` instances +- `gy-trust-grid` + +Editor/schema readiness: + +- Promo hero settings expose merchant-editable images, copy, links and overlay strength. +- Category grid exposes merchant-editable category blocks with collection/fallback links. +- Product rails expose collection selection, product limit, view-all behaviour, columns, image ratio and Dawn card options. +- Trust grid exposes editable trust blocks with optional links. +- Category and trust blocks include `block.shopify_attributes`, so Shopify editor block selection/reordering should work as expected. + +Direct manual content editing in the Shopify admin editor was not performed during this pass; the review used the dev preview render, JSON template structure and Theme Check schema validation. + +## Viewport Checks + +Checked: + +- `360px` +- `400px` +- `430px` +- `768px` +- `1200px` +- `1440px` + +Automated rendered-width results: + +- `scrollWidth` matched the viewport width at every checked size. +- All expected homepage section headings/content were present. +- Category cards rendered: `6`. +- Product rails rendered: `5`. +- Product cards rendered: `20`. +- Trust cards rendered: `3`. +- A Dawn search input inside the inactive search modal appears outside the viewport in DOM geometry checks on mobile, but it does not increase page `scrollWidth` or create horizontal page overflow. + +Screenshots captured: + +- `/private/tmp/gy-phase35-cdp-360.png` +- `/private/tmp/gy-phase35-cdp-400.png` +- `/private/tmp/gy-phase35-cdp-430.png` +- `/private/tmp/gy-phase35-cdp-768.png` +- `/private/tmp/gy-phase35-cdp-1200.png` +- `/private/tmp/gy-phase35-cdp-1440.png` +- `/private/tmp/gy-phase35-mobile-category.png` +- `/private/tmp/gy-phase35-mobile-product-rail-fixed.png` +- `/private/tmp/gy-phase35-mobile-trust.png` +- `/private/tmp/gy-phase35-desktop-product-rail.png` +- `/private/tmp/gy-phase35-desktop-trust.png` + +## Homepage Visual Findings + +Pass: + +- Promo-grid hero renders in the correct first position. +- Hero stacks cleanly on mobile. +- Announcement/header/footer remain intact. +- Category grid renders cleanly as two columns on mobile and six cards on desktop. +- Product rails render in the requested order. +- Product cards preserve Dawn card rendering. +- Trust grid stacks cleanly on mobile and transitions into the footer without a hard visual clash. +- No horizontal page overflow was detected at the required viewport widths. + +Notes: + +- Placeholder hero artwork is visually busy behind white text. This is acceptable for development placeholders but should be replaced with real approved imagery before launch. +- The mobile hero is readable after the narrow-width typography guard, but final imagery should be checked again because image composition can affect contrast. +- Product rails currently show Shopify placeholder products because real collections/products are not assigned. + +## Section Behaviour Findings + +Confirmed: + +- Sections render with default settings. +- Hero renders without selected images by using Shopify placeholder SVGs. +- Product rails render without populated collections. +- Empty/default collections fail gracefully after the placeholder fix. +- View-all links are merchant-editable through section settings or collection assignment. +- Category and trust links are merchant-editable. + +## Collection Assignment Status + +Real development collections still need to be created and assigned in Shopify admin/theme editor. + +Recommended collections: + +- Featured Practical Finds +- New Arrivals +- Best Sellers +- Home Organisation +- Office & Desk Essentials + +No collections were created in code during this phase. + +## Image Assignment Status + +Real homepage imagery still needs to be assigned through the Shopify theme editor. + +No images were generated or added during this phase. + +## Fixes Made + +### Mobile text and overflow guard + +File changed: + +- `assets/gy-theme.css` + +Fixes: + +- Added stronger narrow-width announcement text wrapping/sizing. +- Added scoped Phase 3 section overflow guards. +- Reduced narrow mobile hero heading and text widths so live text wraps within the tile. + +### Product rail placeholder fix + +File changed: + +- `sections/gy-featured-collection.liquid` + +Fix: + +- Changed placeholder product image cycling to use Dawn-safe `product-apparel-1` through `product-apparel-4`. +- This removed the mobile product rail `Liquid error` caused by an unsupported placeholder SVG name. + +## QA Commands + +Completed: + +```sh +git diff --check +shopify theme check --path get-yours-shopify-theme +``` + +Theme Check result: + +- `173` files inspected. +- `0` errors. +- `8` warnings. + +Warnings are unchanged stock Dawn warnings already documented in prior phases: + +- `layout/password.liquid`: `scheme_classes` undefined-object warning. +- `layout/theme.liquid`: `scheme_classes` undefined-object warning. +- `sections/main-article.liquid`: variable naming warning for `anchorId`. +- `sections/main-list-collections.liquid`: variable naming warning for `moduloResult`. +- `sections/main-product.liquid`: unused assign warning for `seo_media`. +- `sections/main-product.liquid`: `continue` undefined-object warning. +- `sections/main-search.liquid`: unused assign warning for `product_settings`. +- `snippets/quick-order-product-row.liquid`: orphaned snippet warning. + +## Remaining Homepage Issues + +- Real Shopify collections and products are still required. +- Real hero/category imagery is still required. +- Product rail titles and collection assignments should be tuned in the Shopify editor once collections exist. +- Category/trust icons are simple text marks for now; a dedicated icon snippet can be considered later if visual refinement is needed. +- Manual Shopify admin editor editing/reordering should be checked when the merchant content setup starts. + +## Recommendation + +Phase 4 can begin. + +The homepage section foundation is stable enough for the next scoped conversion phase, provided Phase 4 does not broaden into product, collection, cart or search template work unless explicitly requested. diff --git a/get-yours-shopify-theme/docs/phase-3-6-demo-content-prep.md b/get-yours-shopify-theme/docs/phase-3-6-demo-content-prep.md new file mode 100644 index 00000000000..da1e626bc53 --- /dev/null +++ b/get-yours-shopify-theme/docs/phase-3-6-demo-content-prep.md @@ -0,0 +1,154 @@ +# Phase 3.6 Demo Content Prep + +## Status + +Phase 3.6 demo content preparation is complete. + +The original prompt path pointed to Desktop, but the corrected source folder was found under Downloads. Optimised JPG copies were created under the theme documentation workspace so the Shopify development store can be populated with realistic demo products, collections and homepage images. + +## Source Folder Findings + +Checked: + +- `/Users/thabisoradebe/Desktop/GY_Demo_Content` +- `~/Desktop/GY_Demo_Content` +- `/Users/thabisoradebe/Downloads/GY_Demo_Content` + +Result: + +- Desktop folder not found. +- Downloads folder found. +- Hero images found: `2`. +- Product images found: `28`. +- Total source files found: `31`, including `.DS_Store`. +- PNG image files found: `30`. +- Non-conforming source files found: `2` (`.DS_Store` and `ProductAdjustableMetalLaptopStand.png`, which is missing the `Product-` separator). +- Duplicate/unusable source images found: `0`. + +No Desktop source files were modified. + +## Files Created + +- `docs/demo-content/original-inventory.md` +- `docs/demo-content/demo-products.csv` +- `docs/demo-content/demo-collections.csv` +- `docs/demo-content/homepage-section-assignments.md` +- `docs/demo-content/image-upload-plan.md` +- `docs/demo-content/shopify-import-notes.md` +- `docs/demo-content/optimised-images/` +- `docs/phase-3-6-demo-content-prep.md` + +## Normalised Naming Convention + +The planning files use lowercase kebab-case filenames: + +- content type prefix retained: `hero-` or `product-` +- lowercase only +- hyphen-separated +- no spaces +- no special characters +- `.jpg` target format for optimised web output + +Examples: + +- `hero-main-image.jpg` +- `hero-office-desk.jpg` +- `hero-travel-accessories.jpg` +- `product-adjustable-drawer-divider-set.jpg` + +## Collections Planned + +Planned demo collections: `9`. + +- Featured Practical Finds +- New Arrivals +- Best Sellers +- Home Organisation +- Office & Desk Essentials +- Kitchen & Storage +- Lifestyle +- Travel +- Tech Accessories + +Recommendation: use manual collections for this demo phase. + +## Products Planned + +Planned demo products: `20`. + +The product catalogue plan includes practical low-to-mid-price ecommerce items, draft status, vendor `Get Yours`, intended collection assignments, image filename placeholders, alt text, product type, tags, short descriptions and bullet highlights. + +## Image Optimisation Results + +Images optimised: `31`. + +Optimised image output: + +- Hero/candidate images: `3`. +- Product images: `28`. +- Output format: `.jpg`. +- Hero image dimensions: `1800x1350`. +- Product image dimensions: mostly `1200x1200`; `product-travel-accessories.jpg` is `1200x900`. + +Observed file sizes: + +- Hero images: about `352KB-543KB`. +- Product images: mostly about `99KB-300KB`. +- A few product images are slightly above the target range (`317KB`, `353KB`, `370KB`) but acceptable for demo use without obvious quality damage. + +Special note: + +- No dedicated travel hero source image was present. `hero-travel-accessories-candidate.jpg` was generated from `Product-TravelAccessories.png` as a temporary homepage candidate. + +## Shopify Upload Limitations + +- Product images should become Shopify product media. +- Hero images should be uploaded or selected through the Shopify theme editor or Shopify Files. +- Homepage product rails must remain collection-driven. +- Demo images should not be hard-coded into product rail Liquid. +- Shopify CLI theme commands should not be assumed to create products or upload product media. + +No Shopify Admin API product creation was attempted. + +## Automated Product Creation Recommendation + +Automated product creation is not recommended until: + +1. The source images are available. +2. The product/collection plan is approved. +3. Shopify Admin API credentials and scopes are confirmed. +4. The user explicitly approves an automated product creation run. + +For now, use Shopify admin manual setup or a Shopify-format CSV import derived from the planning CSV. + +## QA + +Completed: + +- Confirmed the corrected Downloads source folder was present. +- Confirmed no source files were modified. +- Created the required `docs/demo-content/` planning files. +- Created optimised JPG image copies in `docs/demo-content/optimised-images/`. +- Created `shopify-import-notes.md`. +- Created this Phase 3.6 report. +- CSV content is simple comma-separated planning data with quoted text where needed. +- Confirmed `demo-products.csv` parses with 20 rows. +- Confirmed `demo-collections.csv` parses with 9 rows. + +Not completed: + +- Shopify admin product or collection creation, because this phase only prepares content. + +## Recommended Next Step Before Phase 4 + +Phase 4 should wait until demo collections/products are created in the Shopify development store if Phase 4 depends on realistic product data. + +Immediate next manual/admin steps: + +1. Create the nine planned collections in Shopify admin. +2. Create/import the 20 planned products as draft products. +3. Attach product images as Shopify product media using the optimised JPGs. +4. Assign the homepage sections to the matching collections/images in the theme editor. +5. Decide whether `hero-travel-accessories-candidate.jpg` is acceptable or whether a dedicated travel hero image should be supplied. + +If Phase 4 is purely another theme-code phase that does not depend on product data, it can begin, but homepage visual QA will remain limited until realistic demo content exists. diff --git a/get-yours-shopify-theme/docs/phase-3-7-shopify-demo-content-loading.md b/get-yours-shopify-theme/docs/phase-3-7-shopify-demo-content-loading.md new file mode 100644 index 00000000000..ddb5d3df83d --- /dev/null +++ b/get-yours-shopify-theme/docs/phase-3-7-shopify-demo-content-loading.md @@ -0,0 +1,154 @@ +# Phase 3.7 Shopify Demo Content Loading + +## Status + +Phase 3.7 content-loading preparation is complete. + +This phase did not create Shopify products, did not upload media and did not modify theme Liquid, JSON templates, product templates, collection templates, cart logic, search templates or the frozen static prototype. + +## Why Placeholders Are Still Visible + +The homepage sections are already collection-driven, but the Shopify development store still needs real Shopify content: + +- Products must exist in Shopify Admin. +- Product images must be attached as Shopify product media. +- Manual collections must be created and populated. +- Homepage product rail sections must be assigned to those collections in the theme editor. +- Hero images must be selected through the theme editor or Shopify Files. + +The optimised images in `docs/demo-content/optimised-images/` are local files. Shopify storefront sections cannot display them until they are uploaded to Shopify through Admin product media, Shopify Files or theme editor image settings. + +## Files Created + +- `docs/demo-content/shopify-products-import.csv` +- `docs/demo-content/shopify-admin-demo-setup-checklist.md` +- `docs/demo-content/product-collection-matrix.md` +- `docs/demo-content/image-upload-map.md` +- `docs/demo-content/scripts/prepare-demo-content-summary.py` + +## Products Planned + +Products validated: `20`. + +All planned products have: + +- unique handles +- matching optimised image filenames +- vendor `Get Yours` +- draft status in the planning CSV +- ZAR pricing +- product type +- tags +- collection assignments +- short descriptions +- bullet highlights +- image alt text + +## Collections Planned + +Collections validated: `9`. + +Planned manual collections: + +- Featured Practical Finds +- New Arrivals +- Best Sellers +- Home Organisation +- Office & Desk Essentials +- Kitchen & Storage +- Lifestyle +- Travel +- Tech Accessories + +All planned collections have handles. + +## Shopify Import CSV + +`shopify-products-import.csv` was created using Shopify-style product import columns, including: + +- `Handle` +- `Title` +- `Body (HTML)` +- `Vendor` +- `Product Category` +- `Type` +- `Tags` +- `Published` +- `Option1 Name` +- `Option1 Value` +- `Variant SKU` +- `Variant Inventory Qty` +- `Variant Inventory Tracker` +- `Variant Inventory Policy` +- `Variant Fulfillment Service` +- `Variant Price` +- `Variant Compare At Price` +- `Variant Requires Shipping` +- `Variant Taxable` +- `Image Src` +- `Image Position` +- `Image Alt Text` +- `Status` + +`Image Src` is intentionally blank because local file paths are not public Shopify-importable image URLs. Attach optimised images manually as product media after import, or use a later approved Admin API/media workflow. + +## Image Upload Requirements + +Images validated: + +- Optimised JPG files available: `31`. +- Product image references matched: `20 / 20`. +- Hero image references matched: `3 / 3`. + +Upload strategy: + +- Product images: upload as Shopify product media. +- Hero images: upload/select through the Shopify theme editor or Shopify Files. +- Extra unassigned images: keep as optional product media candidates for future products. + +Do not hard-code demo images into Liquid. + +## Import And Manual Setup Recommendation + +Recommended approach for this phase: + +1. Create the nine manual collections in Shopify Admin. +2. Import `shopify-products-import.csv` or create products manually. +3. Keep products as draft until the preview needs them visible; switch to active only when required. +4. Attach optimised images manually as product media. +5. Assign products to collections using `product-collection-matrix.md`. +6. Assign homepage images and collection sections in the theme editor using `homepage-section-assignments.md`. + +## Automated Product Creation + +Automated product creation was not attempted. + +Before considering automation, confirm: + +- Shopify Admin API credentials are available. +- Required scopes are available. +- Exact products, images and collections to create are approved. +- Products should be draft or active. +- Media upload behavior is understood and reversible. + +Automated creation can be considered later, but it should be a separate approved task. + +## QA Results + +Completed: + +- Parsed `demo-products.csv`: `20` rows. +- Parsed `demo-collections.csv`: `9` rows. +- Parsed `shopify-products-import.csv`: `20` rows. +- Confirmed product image references match optimised files. +- Confirmed hero image references match optimised files. +- Confirmed product handles are unique. +- Confirmed collection handles are unique. +- Ran `scripts/prepare-demo-content-summary.py`. + +## Phase 4 Recommendation + +Phase 4 should wait if the next work depends on realistic storefront rendering of product cards, product media or collection rails. + +If Phase 4 is code-only and does not depend on real Shopify content, it can begin, but homepage preview QA will continue to show placeholders until Shopify Admin content is created and assigned. + diff --git a/get-yours-shopify-theme/docs/phase-3-homepage-sections.md b/get-yours-shopify-theme/docs/phase-3-homepage-sections.md new file mode 100644 index 00000000000..2905ce28c97 --- /dev/null +++ b/get-yours-shopify-theme/docs/phase-3-homepage-sections.md @@ -0,0 +1,205 @@ +# Phase 3 Homepage Sections + +## Status + +Phase 3 homepage section conversion is complete. + +This phase only touched the Dawn homepage composition and new Get Yours homepage sections. Product templates, collection templates, cart logic, search templates, content pages, header, footer and the frozen static prototype were not modified. + +## Files Created + +- `sections/gy-promo-grid-hero.liquid` +- `sections/gy-category-grid.liquid` +- `sections/gy-featured-collection.liquid` +- `sections/gy-trust-grid.liquid` +- `docs/phase-3-homepage-sections.md` + +## Files Modified + +- `templates/index.json` +- `assets/gy-theme.css` + +## Sections Created + +### Promo Grid Hero + +`gy-promo-grid-hero.liquid` converts the static prototype's promo-grid direction into a Shopify section with merchant-editable images, copy, links and overlay strength. + +Default homepage copy: + +- Main tile: `Smart everyday finds for less.` +- Secondary tile 1: `Office & Desk Essentials` +- Secondary tile 2: `Travel & Daily Accessories` + +If no images are selected, Shopify placeholder SVGs render so the homepage does not break. + +### Shop by Category + +`gy-category-grid.liquid` provides a merchant-editable six-card category navigation section. + +Default categories: + +- Home Organisation +- Office & Desk +- Kitchen & Storage +- Lifestyle +- Travel +- Tech Accessories + +Each block can link to a selected collection or fallback URL. The section is navigation-only and does not implement filtering. + +### Featured Collection Rail + +`gy-featured-collection.liquid` is a reusable collection-driven rail used five times on the homepage: + +- Featured Practical Finds +- New Arrivals +- Best Sellers +- Home Organisation Picks +- Office & Desk Essentials + +The section preserves Dawn product card rendering by using the existing `card-product` snippet. It supports collection selection, product limit, view-all link, desktop/mobile columns, image ratio, secondary image, vendor, rating and Dawn quick add settings. + +If no collection is selected or a collection has no products, Dawn placeholder product cards render with a short editor-facing message. + +### Trust Grid + +`gy-trust-grid.liquid` adds the homepage trust/support section below the product rails. + +Default cards: + +- Reliable delivery +- Easy support +- Secure checkout + +WhatsApp is not hard-coded in this phase because the real support number/link still needs to be configured. + +## Homepage Template Changes + +`templates/index.json` now uses this section order: + +1. `gy-promo-grid-hero` +2. `gy-category-grid` +3. `gy-featured-collection` - Featured Practical Finds +4. `gy-featured-collection` - New Arrivals +5. `gy-featured-collection` - Best Sellers +6. `gy-featured-collection` - Home Organisation Picks +7. `gy-featured-collection` - Office & Desk Essentials +8. `gy-trust-grid` + +The stock Dawn demo image banner and stock featured collection sections were removed from the homepage JSON template. + +## Schema And Settings Decisions + +- Kept copy, links and images merchant-editable through section settings. +- Used collection selectors for product rails and category blocks. +- Used simple selectable icon labels for category/trust cards to avoid adding external assets or dependencies. +- Kept product card behavior delegated to Dawn's `card-product` snippet. +- Kept default collection assignments pointed at `all` so the homepage can render immediately in a fresh development store. + +## Styling Decisions + +Phase 3 styles were appended to `assets/gy-theme.css` and scoped with `gy-` class names. + +The CSS uses the existing Get Yours tokens: + +- `--gy-blue` +- `--gy-navy` +- `--gy-navy-deep` +- `--gy-gold` +- `--gy-gold-soft` +- `--gy-blue-soft` +- `--gy-bg` +- `--gy-surface` +- `--gy-border` +- `--gy-text` +- `--gy-muted` + +No large gold/yellow backgrounds were added. Product rails remain light and restrained; blue stays focused on links, icons and actions. + +## QA Results + +Completed: + +- Parsed `templates/index.json` successfully with Node. +- Ran `git diff --check`. +- Attempted the Shopify Liquid validator helper. +- Ran Shopify Theme Check. +- Ran Shopify dev preview. +- Captured homepage screenshots at `360px`, `400px`, `430px`, `768px`, `1200px` and `1440px`. +- Reviewed the narrow mobile and desktop captures for section order, hero readability, header/footer continuity and obvious stacking issues. + +Theme Check result: + +- `173` files inspected. +- `0` errors. +- `8` warnings. + +The warnings are the same stock Dawn warnings documented in earlier phases: + +- `layout/password.liquid`: `scheme_classes` undefined-object warning. +- `layout/theme.liquid`: `scheme_classes` undefined-object warning. +- `sections/main-article.liquid`: variable naming warning for `anchorId`. +- `sections/main-list-collections.liquid`: variable naming warning for `moduloResult`. +- `sections/main-product.liquid`: unused assign warning for `seo_media`. +- `sections/main-product.liquid`: `continue` undefined-object warning. +- `sections/main-search.liquid`: unused assign warning for `product_settings`. +- `snippets/quick-order-product-row.liquid`: orphaned snippet warning. + +Shopify Liquid validator helper result: + +- Failed because the plugin-cache script cannot resolve local package `@shopify/theme-check-common`. +- Shopify CLI Theme Check was used as the authoritative validation pass. + +Preview command: + +```sh +shopify theme dev --store getyours-9322.myshopify.com --path get-yours-shopify-theme +``` + +Not used: + +- `--allow-live` +- `--publish` + +Preview URLs: + +- Local preview URL: `http://127.0.0.1:9292` +- Shopify preview URL: `https://getyours-9322.myshopify.com/?preview_theme_id=141697089639` +- Theme editor URL: `https://getyours-9322.myshopify.com/admin/themes/141697089639/editor?hr=9292` + +Screenshots captured: + +- `/private/tmp/gy-phase3-360.png` +- `/private/tmp/gy-phase3-400.png` +- `/private/tmp/gy-phase3-430.png` +- `/private/tmp/gy-phase3-768.png` +- `/private/tmp/gy-phase3-1200.png` +- `/private/tmp/gy-phase3-1440.png` +- `/private/tmp/gy-phase3-360-fixed.png` +- `/private/tmp/gy-phase3-400-fixed.png` +- `/private/tmp/gy-phase3-360-fixed2.png` +- `/private/tmp/gy-phase3-360-fixed3.png` + +Mobile QA note: + +- The first `360px` capture showed clipping in the announcement bar and hero copy. +- Added scoped mobile CSS guards for announcement wrapping, section overflow clipping, promo-grid min-width handling and smaller narrow-width hero typography. +- A final manual browser pass is still recommended after assigning real hero imagery and real collections, because static placeholder artwork can visually exaggerate cropping. + +## Known Issues + +- Homepage product rails all point to the `all` collection by default until real Shopify collections are created and assigned. +- Hero/category imagery uses Shopify placeholders until merchant images are selected. +- Category and trust icons are simple text-based marks for this phase; a dedicated icon snippet can be considered later. +- Real WhatsApp/support details are not wired yet. +- The homepage has merchandising structure, but final product data and imagery are still required before launch. + +## Recommended Phase 4 + +Recommended next phase: + +- Visual preview of the homepage sections in Shopify dev theme. +- Assign real development collections and images in the theme editor or fixture content. +- Tune spacing only if live Shopify content exposes issues. +- Keep product template, collection template and cart conversion in their own later phases. diff --git a/get-yours-shopify-theme/docs/phase-4-collection-product-card-refinement.md b/get-yours-shopify-theme/docs/phase-4-collection-product-card-refinement.md new file mode 100644 index 00000000000..90cef5067ed --- /dev/null +++ b/get-yours-shopify-theme/docs/phase-4-collection-product-card-refinement.md @@ -0,0 +1,59 @@ +# Phase 4 Collection And Product Card Refinement + +## Scope + +Phase 4 refines collection browsing and the shared Dawn product-card presentation. The frozen static prototype, product template, cart, search, header, footer, and homepage order remain unchanged. + +## Files Inspected + +- `templates/collection.json` +- `sections/main-collection-banner.liquid` +- `sections/main-collection-product-grid.liquid` +- `snippets/card-product.liquid` +- `snippets/price.liquid` +- `snippets/facets.liquid` +- `assets/component-card.css` +- `assets/component-price.css` +- `assets/component-facets.css` +- `assets/gy-theme.css` +- `sections/gy-featured-collection.liquid` + +## Implementation Decisions + +- Kept Dawn's collection banner, product grid, `card-product`, price, facets, sorting, filtering, pagination, and quick-add markup intact. +- Applied product-card styling through scoped CSS in `assets/gy-theme.css` so the collection grid and Get Yours homepage rails share the same presentation. +- Set the collection template image ratio to square for consistent product crops. +- Added Dawn's existing three-column tablet grid class when the selected desktop grid is three columns or wider. Desktop still uses the merchant-selected desktop setting; mobile remains two columns. +- Corrected homepage category-card links in `templates/index.json` to their intended Shopify collection handles. Product-rail View all links remain collection-driven. + +## Product Card Changes + +- Soft neutral media area, subtle border, 12px rounded outer card, calm hover treatment, readable titles, navy pricing, muted compare-at pricing, and restrained soft-gold card badges. +- Preserved product URLs, accessibility markup, image loading, and Dawn quick-add behavior. No product-card Liquid was modified. + +## Collection And Facet Changes + +- Added a quieter collection hero treatment and clearer collection toolbar spacing. +- Styled existing desktop facet controls, sort select, product count, active-filter chips, and mobile filter trigger without changing their Dawn behavior or JavaScript hooks. + +## QA + +- `templates/collection.json` and `templates/index.json` parse successfully. +- `git diff --check` passes. +- `shopify theme check --path get-yours-shopify-theme` passes. +- Local Shopify preview was already running at `http://127.0.0.1:9292` and rendered the real demo content. +- `featured-practical-finds` has 9 cards and was checked at 360px, 400px, 430px, 768px, 1200px, and 1440px with no horizontal overflow. It renders two columns at the mobile widths, three at 768px, and four at desktop widths. +- The native mobile filter drawer opens at 360px. Desktop facets, sort options, product count, product links, sale price, and compare-at price render correctly. +- Direct collection-sort URL verification using `?sort_by=price-ascending` renders price-ordered products. Browser automation changed the select value but did not update its URL, so a final manual sort interaction is still recommended in Shopify preview. +- Homepage QA found five product rails, 20 visible product cards, and the expected View all destinations. Category cards now route to their intended collection pages. +- Real product cards and images render for `featured-practical-finds` (9), `new-arrivals` (6), `best-sellers` (7), `home-organisation` (8), and `office-desk-essentials` (6). + +## Remaining Issues + +- Collection descriptions, filters, and sort options depend on Shopify Admin data and the Shopify Search & Discovery configuration. +- `kitchen-storage`, `travel`, and `tech-accessories` currently render Dawn's valid empty-collection state because they have no product membership in Shopify Admin. Assign products to those collections before visual sign-off. +- Final visual review requires authenticated preview access because the storefront is password protected. + +## Recommended Phase 5 + +Convert and refine the product detail template, then validate the product-to-cart journey while retaining Dawn's variant, quantity, and accessibility behavior. diff --git a/get-yours-shopify-theme/docs/phase-5-product-detail-buy-box-refinement.md b/get-yours-shopify-theme/docs/phase-5-product-detail-buy-box-refinement.md new file mode 100644 index 00000000000..1d8349c2518 --- /dev/null +++ b/get-yours-shopify-theme/docs/phase-5-product-detail-buy-box-refinement.md @@ -0,0 +1,53 @@ +# Phase 5 Product Detail And Buy Box Refinement + +## Scope + +Phase 5 refines the Dawn product detail page with its existing product media, form, quantity, variant, dynamic checkout, disclosures, related-products, and accessibility behavior preserved. + +## Files Inspected + +- `templates/product.json` +- `sections/main-product.liquid` +- `sections/disclosures.liquid` +- `snippets/product-media-gallery.liquid` +- `snippets/product-thumbnail.liquid` +- `snippets/buy-buttons.liquid` +- `snippets/quantity-input.liquid` +- `snippets/price.liquid` +- `assets/section-main-product.css` +- `assets/component-price.css` +- `assets/component-product-model.css` +- `assets/product-info.js` +- `assets/product-form.js` +- `assets/gy-theme.css` + +## Implementation Decisions + +- Kept `main-product.liquid`, the media/gallery snippets, `buy-buttons.liquid`, quantity input, price markup, and product JavaScript unchanged. +- Moved Dawn's dynamic product description before variant selection and buying controls in the JSON block order. +- Kept dynamic checkout, gift-card recipient handling, related products, and the separate disclosures section enabled. +- Added a generic reassurance block and merchant-editable Dawn collapsibles for delivery, returns, and support through `templates/product.json`. +- Added scoped `product-info` CSS in `assets/gy-theme.css` for the gallery, buy box, price, quantity, primary add-to-cart button, reassurance content, and collapsibles. + +## QA + +- `templates/product.json` passes strict JSON validation and `git diff --check` passes. +- Shopify Theme Check passes. +- Local preview at `http://127.0.0.1:9292` was used without starting a second development server. +- `adjustable-drawer-divider-set` was checked at 360px, 400px, 430px, 768px, 1200px, and 1440px. Media, price, quantity, add to cart, reassurance, and three collapsibles render with no horizontal overflow at every width. +- Quantity increases and decreases correctly. The delivery disclosure opens and renders its configured content. +- Add to cart was tested with `adjustable-drawer-divider-set`: Dawn showed its item-added dialog, the cart count updated to one, and the quantity label reflected one item in cart. No console errors were recorded. +- `adjustable-drawer-divider-set`, `ergonomic-aluminium-laptop-stand`, `jewelry-organizer-box`, `travel-pouch-set`, and `kitchen-sink-organizer` all render with a real image, price, quantity input, and add-to-cart control at 1200px with no horizontal overflow. +- `ergonomic-aluminium-laptop-stand` renders both sale and compare-at prices. The current demo products use only default variants, so no live variant picker was available for interaction testing. +- The native gallery media-modal trigger remains present. Its viewport interaction could not be automated after mobile resizing, so perform one manual lightbox check in Shopify preview. + +## Remaining Issues + +- Delivery, returns, and support copy is generic until approved store policies and support details are available. +- Product information, options, availability, pickup, and related products remain dependent on Shopify Admin data. +- The add-to-cart QA leaves one test item in the local preview browser cart session; no product or theme data was changed. +- Add variant-bearing demo products before final variant-picker QA. + +## Recommended Phase 6 + +Refine the cart drawer and cart page after the product-to-cart journey is verified end to end. diff --git a/get-yours-shopify-theme/docs/phase-6-cart-drawer-cart-page-refinement.md b/get-yours-shopify-theme/docs/phase-6-cart-drawer-cart-page-refinement.md new file mode 100644 index 00000000000..53cfdc36d09 --- /dev/null +++ b/get-yours-shopify-theme/docs/phase-6-cart-drawer-cart-page-refinement.md @@ -0,0 +1,69 @@ +# Phase 6 Cart Drawer And Cart Page Refinement + +## Scope + +Phase 6 refines the existing Dawn cart notification, cart drawer, and cart page without changing cart JavaScript, checkout behavior, product/collection templates, search, or the frozen static prototype. + +## Files Inspected + +- `templates/cart.json` +- `snippets/cart-drawer.liquid` +- `snippets/cart-notification.liquid` +- `sections/main-cart-items.liquid` +- `sections/main-cart-footer.liquid` +- `snippets/quantity-input.liquid` +- `snippets/price.liquid` +- `assets/cart.js` +- `assets/cart-drawer.js` +- `assets/cart-notification.js` +- `assets/component-cart.css` +- `assets/component-cart-items.css` +- `assets/component-cart-drawer.css` +- `assets/component-cart-notification.css` +- `assets/gy-theme.css` + +## Implementation Decisions + +- Preserved Dawn's native cart item rendering, quantity AJAX updates, remove links, cart count, live regions, loading states, checkout buttons, and dynamic checkout behavior. +- Added `snippets/gy-cart-reassurance.liquid`, rendered by the cart notification, cart drawer, and cart page summary so one localized message is used consistently. +- Added the two English messages in `locales/en.default.json`: + - Free standard shipping on orders over R500. + - Need a hand before checkout? Our support team is here to help. +- Added scoped cart rules to `assets/gy-theme.css` only. They improve image framing, quantity-control targets, checkout CTA, order-summary surface, notification treatment, focus states, and mobile drawer width without replacing Dawn components. +- Kept the primary checkout action blue and reserved gold for Shopify-provided accelerated checkout buttons only. + +## Current Store Configuration + +- The active development theme setting is `cart_type: notification`. +- Add to cart therefore opens Dawn's cart notification in the current preview. The cart drawer is not rendered by this setting, but its styles and shared reassurance content are ready if a merchant switches the Dawn setting to drawer. +- No cart setting was changed during this phase. + +## QA + +- `templates/cart.json` and `locales/en.default.json` pass strict JSON parsing. +- `git diff --check` passes. +- Shopify Theme Check completed with eight pre-existing Dawn warnings in unrelated files. It reported no new errors or warnings from the Phase 6 files. +- The local preview at `http://127.0.0.1:9292` was used without starting a second development server. +- Cart page checks at 360px, 400px, 430px, 768px, and 1200px found no horizontal overflow. The cart content and order summary stack cleanly on mobile. +- At 360px, the cart page, quantity control, remove action, notice, order summary, and checkout CTA were visually reviewed. +- Product add-to-cart, cart notification, View cart navigation, quantity increase/decrease, remove, and empty-cart flows were tested. The cart was restored to empty after QA. +- Homepage product rail routing was checked with `travel-pouch-set`; its product page add-to-cart flow updated the cart successfully. +- Home Organisation collection routing was checked with `laundry-hamper`; its product page add-to-cart flow updated the cart successfully. +- `adjustable-drawer-divider-set` has inventory limited to one in the demo store. Dawn displayed its native availability message when a higher quantity was requested, which confirms the error state remains intact. + +## Lifestyle Collection Check + +- Shopify Admin was authenticated through its permanent store domain, `tdaqk1-nv.myshopify.com`, using the minimum `write_products` scope. +- The existing `Lifestyle` collection already contains all requested products: Jewelry Organizer Box, Travel Toiletry Organizer, Travel Pouch Set, Bathroom Wall Shelf Organizer, and Laundry Hamper. +- No Shopify Admin mutation was required and no collection data was changed. + +## Remaining Items + +- Confirm the cart drawer visually in Shopify preview if the merchant changes the Dawn cart type from notification to drawer. +- Replace the generic support reassurance copy with approved support-channel details before launch. +- Shipping and tax text remains Dawn's dynamic output and depends on Shopify shipping, tax, and policy configuration. +- Accelerated checkout buttons remain Shopify-controlled and can vary by payment configuration and customer browser. + +## Recommended Next Phase + +Phase 7 can proceed with search and support/content pages while preserving the cart behavior verified here. diff --git a/get-yours-shopify-theme/docs/phase-7-search-content-pages-refinement.md b/get-yours-shopify-theme/docs/phase-7-search-content-pages-refinement.md new file mode 100644 index 00000000000..c8244d62eee --- /dev/null +++ b/get-yours-shopify-theme/docs/phase-7-search-content-pages-refinement.md @@ -0,0 +1,73 @@ +# Phase 7 Search And Content Pages Refinement + +## Scope + +Phase 7 refines the Dawn search page and the shared presentation of Admin-managed content and policy pages. It does not change the frozen static prototype, homepage, product, collection, cart, checkout, or search JavaScript. + +## Files Inspected + +- `templates/search.json` +- `sections/main-search.liquid` +- `templates/page.json` +- `sections/main-page.liquid` +- `templates/404.json` +- `sections/main-404.liquid` +- `snippets/card-product.liquid` +- `snippets/price.liquid` +- `assets/component-search.css` +- `assets/component-card.css` +- `assets/section-main-page.css` +- `assets/gy-theme.css` +- `config/settings_data.json` +- `sections/header-group.json` +- `sections/footer-group.json` + +## Files Changed + +- `sections/main-search.liquid` +- `locales/en.default.json` +- `assets/gy-theme.css` + +## Implementation Decisions + +- Preserved the Dawn search form, predictive search hooks, query handling, filters, sorting, pagination, product/article/page result handling, product-card rendering, price rendering, and loading states. +- Kept the existing Dawn `card-product` and `price` snippets. Search product cards now receive scoped Get Yours CSS consistent with the Phase 4 collection and homepage rails. +- Replaced the default no-results sentence with a localized, semantic empty-search panel containing a safe `routes.all_products_collection_url` link to `/collections/all`. +- Added only scoped CSS for search controls, search results, empty search presentation, generic Admin page typography, and Shopify policy typography/tables. +- Did not modify `main-page.liquid`, create a support section, or draft policy/legal text. Generic Help and policy content remains owned by Shopify Admin. + +## Header And Footer Link Readiness + +- Header uses the Shopify `main-menu` menu. Its current visible links are Home, Catalog, and Contact. +- Footer Shop uses `main-menu`; both Footer Support and Footer Legal currently use the Shopify `footer` menu. +- Current preview footer links are Home, Catalog, Contact, Search, and the automatically rendered Privacy policy link. +- Help, Customer Service, Shipping Policy, and Terms of Use links are not configured in the current Shopify menus. +- `/pages/help` and `/pages/customer-service` currently return the Dawn 404 template because the Shopify Admin pages have not been created. +- Recommended Phase 8 Admin setup: + - Create Help and Customer Service pages, then add their menu entries. + - Configure approved Shopify shipping, privacy, and terms policies, then add policy links to the appropriate footer menu. + - Confirm the desired URL approach before using any previously proposed custom `/za/...` routes. No custom route was forced by this phase. + +## QA + +- `templates/search.json`, `templates/page.json`, and `locales/en.default.json` pass strict JSON parsing. +- `git diff --check` passes. +- Shopify Theme Check completes with eight existing Dawn baseline warnings in unrelated files and no new Phase 7 findings. +- The local preview at `http://127.0.0.1:9292` was used without starting a second development server. +- `/search?q=storage` shows 18 results, a contained search field, native filter/sort UI, and consistent product cards at 1200px. +- `/search?q=laptop` was checked at 360px, 400px, 430px, 768px, and 1200px. Search input, two-column mobile results, and desktop grid all render without horizontal overflow. +- `/search?q=zzzznoresult` renders the localized empty state and one working Browse all products link to `/collections/all` at 360px with no overflow. +- `/pages/contact` confirms the generic page template remains readable at 360px with no overflow. +- `/policies/privacy-policy` confirms the policy layout remains readable at 360px with no overflow. + +## Remaining Issues + +- `/pages/help` and `/pages/customer-service` need Shopify Admin page creation and approved content before they can be linked. +- `/policies/terms-of-service` currently returns a Shopify preview 502. This is a store policy-data/preview issue, not a route or theme-template failure. +- Privacy policy text is Shopify-provided boilerplate and requires legal/business review before launch. +- Footer Support and Legal duplicate the same `footer` menu, so their intended final destinations must be configured in Shopify Admin. +- The Shopify Liquid skill validator could not run because its bundled `@shopify/theme-check-common` package is missing. Canonical Shopify Theme Check was used for validation. + +## Recommended Phase 8 + +Proceed with Navigation, footer links, store settings, and a launch-readiness checklist. Avoid further feature additions until the approved support, policy, shipping, payment, and menu data is configured in Shopify Admin. diff --git a/get-yours-shopify-theme/docs/phase-8-navigation-store-settings-launch-readiness.md b/get-yours-shopify-theme/docs/phase-8-navigation-store-settings-launch-readiness.md new file mode 100644 index 00000000000..f1972e4ef02 --- /dev/null +++ b/get-yours-shopify-theme/docs/phase-8-navigation-store-settings-launch-readiness.md @@ -0,0 +1,185 @@ +# Phase 8 Navigation, Store Settings And Launch Readiness + +## Scope + +Phase 8 is a documentation-only launch-readiness audit. No Liquid, JSON, CSS, Shopify Admin settings, menus, policies, payments, shipping, tax, markets, domains, checkout, or static-prototype files were changed. + +## Files Inspected + +- `config/settings_data.json` +- `config/settings_schema.json` +- `sections/header.liquid` +- `sections/header-group.json` +- `sections/footer.liquid` +- `sections/footer-group.json` +- `templates/page.json` +- `templates/page.contact.json` +- `templates/search.json` +- `templates/404.json` +- `assets/gy-theme.css` + +## Current Theme Navigation State + +### Header + +- The announcement bar is configured with `FREE STANDARD SHIPPING ON ORDERS OVER R500`. +- The header uses the merchant-editable Shopify menu handle `main-menu` with Dawn dropdown navigation. +- Current preview links are Home, Catalog, and Contact. +- Predictive search is enabled. Cart behavior is set to Dawn's cart notification. +- The header does not need a theme-code change; its final destinations are Shopify Admin menu data. + +### Footer + +- Footer blocks are Brand, Shop, Support, and Legal. +- Shop currently references `main-menu`. +- Support and Legal both reference the `footer` menu, which duplicates destinations. +- Each Dawn `link_list` block exposes its own menu picker in Theme Editor. Assigning separate menus is safe and does not require Liquid modification. +- Footer payment icons and automatic policy links are enabled. Their actual output depends on Shopify payment and policy configuration. + +## Recommended Shopify Admin Menu Setup + +### Main Menu + +- Home -> `/` +- Shop All -> `/collections/all` +- Home Organisation -> `/collections/home-organisation` +- Office & Desk -> `/collections/office-desk-essentials` +- Kitchen & Storage -> `/collections/kitchen-storage` +- Travel -> `/collections/travel` +- Tech Accessories -> `/collections/tech-accessories` +- Help -> `/pages/help` + +Keep the visible desktop menu short where necessary. Collections can be grouped under Shop All if the top-level menu becomes too dense. + +### Footer Shop Menu + +- Shop All -> `/collections/all` +- Featured Practical Finds -> `/collections/featured-practical-finds` +- New Arrivals -> `/collections/new-arrivals` +- Best Sellers -> `/collections/best-sellers` +- Home Organisation -> `/collections/home-organisation` +- Office & Desk Essentials -> `/collections/office-desk-essentials` + +### Footer Support Menu + +- Help -> `/pages/help` +- Customer Service -> `/pages/customer-service` +- Contact -> `/pages/contact` +- Shipping Policy -> Shopify policy URL, or an approved page URL +- Returns & Exchanges -> approved policy/page URL + +### Footer Legal Menu + +- Privacy Policy -> Shopify policy URL +- Terms of Service -> Shopify policy URL +- Refund Policy -> Shopify policy URL, once configured +- Shipping Policy -> Shopify policy URL, once configured + +In **Online Store > Themes > Customize > Footer**, set Shop, Support, and Legal to separate Shopify navigation menus. Do not force the proposed custom `/za/...` routes in theme code; decide routing only after the final Shopify Admin information architecture is approved. + +## Shopify Admin Setup Checklist + +### Store Profile And Brand + +- [ ] Confirm store name, legal business name, sender email, customer support email, phone number, and business address. +- [ ] Confirm South African currency and timezone. +- [ ] Review staff access and remove unused collaborator/staff accounts. +- [ ] Confirm billing plan and payment of Shopify subscription. +- [ ] Upload final logo, favicon, social sharing image, and approved social links. +- [ ] Review brand description and all empty social settings in Theme settings. + +### Pages And Policies + +- [ ] Create Help page at `/pages/help` with approved customer-facing content. +- [ ] Create Customer Service page at `/pages/customer-service` with approved support/contact process. +- [ ] Confirm Contact page details and contact-form recipient. +- [ ] Configure Shopify Privacy Policy and review all Shopify-generated wording. +- [ ] Configure and approve Terms of Service. +- [ ] Configure Shipping Policy, Refund/Returns Policy, and payment information. +- [ ] Add order tracking guidance only after the operational tracking process is confirmed. +- [ ] Have supplier/dropshipping delivery disclosure reviewed for commercial and legal accuracy before publishing. + +Current audit result: Help and Customer Service pages do not exist and return 404. Privacy Policy renders. The Terms route returned a Shopify preview 502 and must be verified after policy setup. + +### Payments + +- [ ] Confirm PayFast setup, merchant verification, settlement/payout timing, and test transactions. +- [ ] Confirm PayPal setup only if it will be offered. +- [ ] Review displayed accelerated checkout options and payment icons after payment providers are active. +- [ ] Test successful payment, failed payment, cancelled payment, refund, and customer order-confirmation flows. + +### Shipping And Fulfilment + +- [ ] Configure South African shipping zones and rates. +- [ ] Decide whether international shipping is offered; otherwise ensure it is unavailable. +- [ ] Align any free-shipping setup with the R500 announcement before launch. +- [ ] Confirm shipping method names, delivery estimates, packaging rules, and supplier constraints. +- [ ] Confirm tracking availability and customer communication path. +- [ ] Test shipping-rate calculation with representative cart values and provinces. + +### Tax, Markets, Domain And Access + +- [ ] Confirm VAT registration position and tax display/invoice requirements with an appropriate adviser. +- [ ] Review tax settings, inclusive/exclusive price display, and refund tax handling. +- [ ] Set South Africa as the primary launch market; defer other markets until pricing, tax, and shipping are ready. +- [ ] Connect and verify the production domain, www/non-www redirect, SSL, and domain email sender authentication. +- [ ] Confirm password protection remains enabled until final pre-launch testing is complete. +- [ ] Keep the current development/preview theme unpublished until launch approval. + +### SEO And Social + +- [ ] Set homepage meta title and meta description. +- [ ] Add collection meta titles/descriptions for the primary collections. +- [ ] Review product SEO titles, descriptions, handles, and image alt text. +- [ ] Confirm the storefront social sharing image and favicon render correctly. +- [ ] Verify `sitemap.xml`, Shopify robots defaults, canonical URLs, and Search Console ownership after the production domain is connected. + +### Analytics And Launch Tracking + +- [ ] Review Shopify Analytics baseline reports. +- [ ] Prepare Google Analytics and Search Console access if planned. +- [ ] Prepare Meta/TikTok pixels only if approved; do not install trackers without consent and measurement requirements. +- [ ] Define a UTM convention for launch campaigns. +- [ ] Test the conversion path: landing page -> collection -> product -> add to cart -> checkout handoff -> order confirmation. + +## Final Theme QA Checklist + +- [ ] Homepage sections, category links, and collection assignments. +- [ ] Collection filters, sort, product cards, and empty collection state. +- [ ] Product images, prices, availability, quantity controls, disclosure blocks, add to cart, and dynamic checkout presence. +- [ ] Search results, search empty state, predictive search, and filters. +- [ ] Cart notification, cart page, empty cart, quantity change, remove action, and checkout handoff presence. +- [ ] Header logo, navigation links, search, account, and cart count. +- [ ] Footer Shop, Support, Legal, payment icons, and policy links after menu/policy setup. +- [ ] Contact, Help, Customer Service, shipping, returns, and legal-policy pages. +- [ ] 404 page and redirects for removed/out-of-stock URLs where applicable. +- [ ] Image loading and alt text spot checks. +- [ ] No horizontal overflow at 360px, 400px, 430px, 768px, 1200px, and 1440px. +- [ ] Shopify Theme Check and `git diff --check` before each preview/push. +- [ ] Test only against an unpublished/development theme until the launch decision is approved. + +## Launch Blockers + +- Help and Customer Service pages are absent. +- Footer Support and Legal menus are not separated or populated with approved destinations. +- Shipping, refund, privacy, terms, and payment information require approved Admin configuration. +- Terms of Service must be configured and rechecked because preview currently returns a 502. +- Payment, shipping, tax, domain, sender email, and password-protection settings require operational verification. +- A full test order and cancellation/refund workflow must be completed before launch. + +## Nice To Have After Launch + +- Add approved social profiles and a newsletter journey. +- Add measurement pixels after a consent/measurement plan exists. +- Add customer review, post-purchase, and order-tracking tooling only after operational readiness. +- Refine search synonyms and merchandising from live search and conversion data. + +## Validation + +- No theme implementation files were changed. +- Header/footer configuration remains merchant-editable using native Dawn menu settings. +- Phase 7 was already committed as `e26e658 Refine search and content page presentation` before this audit. + +## Recommended Phase 9 + +Proceed with payment gateway, shipping, tax, and operational workflow setup in Shopify Admin. Create Help and Customer Service pages only after their approved content and support process are available. diff --git a/get-yours-shopify-theme/docs/phase-9-payments-shipping-tax-operations.md b/get-yours-shopify-theme/docs/phase-9-payments-shipping-tax-operations.md new file mode 100644 index 00000000000..8ff6eb12dcd --- /dev/null +++ b/get-yours-shopify-theme/docs/phase-9-payments-shipping-tax-operations.md @@ -0,0 +1,194 @@ +# Phase 9 Payments, Shipping, Tax And Operations + +## Decisions Confirmed + +- Launch payment priority: PayFast first. +- Launch market: South Africa only. +- Launch shipping: flat standard shipping. +- Free shipping over R500: enable only after margin validation confirms it is sustainable. +- Fulfilment: manual CJ Dropshipping workflow first. +- No international launch, CJ API integration, custom automation, or paid operational apps at this stage. +- PayPal is verified but should remain a later activation decision until PayFast and the manual operating flow are proven. + +## Scope + +This is a documentation-only operational runbook. No theme code, Shopify Admin settings, checkout configuration, payment gateway, shipping rate, tax, market, policy, or supplier setting was changed. + +## PayFast Launch Readiness + +### Activate And Verify + +- [ ] Confirm the PayFast account is verified and linked to the correct legal business and settlement bank account. +- [ ] Activate PayFast as the Shopify payment provider using the current PayFast/Shopify setup instructions. +- [ ] Confirm which payment methods will appear at checkout and whether test/sandbox mode is available for the chosen integration. +- [ ] Confirm current PayFast fees, settlement/payout timing, minimum payout rules, failed-payment behavior, cancellation handling, and refund procedure in the PayFast merchant dashboard or current official PayFast documentation. +- [ ] Verify the checkout displays PayFast correctly on desktop and mobile. +- [ ] Run successful, failed, and cancelled test payments before launch. +- [ ] Run and document a refund test before accepting live customer orders. + +Do not infer payout timing from another merchant's experience. The PayFast dashboard and official merchant documentation are the source of truth. + +## PayPal Position + +- [ ] Confirm the verified PayPal account is a business account and has an approved withdrawal path. +- [ ] Confirm current PayPal fees, payout timing, currency conversion, refund, dispute, and chargeback rules in the PayPal dashboard/documentation. +- [ ] Decide after PayFast testing whether PayPal adds enough customer value to justify its operational complexity. +- [ ] If enabled later, test successful payment, cancellation, refund, and customer order notifications separately. + +Recommended starter position: do not activate or advertise PayPal until PayFast, shipping, refunds, and manual CJ fulfilment have been tested end to end. + +## First-Orders Cash Flow + +Customer payment and supplier funding are separate events: + +1. A customer pays Get Yours through Shopify using PayFast. +2. The payment provider processes the charge and releases funds according to its payout schedule. +3. CJ Dropshipping normally requires payment before it fulfils the supplier order. +4. The supplier may need to be paid before the gateway payout arrives in the business bank account. + +This creates a working-capital risk. A customer can pay today while CJ needs payment today and the gateway payout arrives later. Without an operating float, fulfilment can be delayed. + +Starter rules: + +- Keep early products low-cost and avoid expensive upfront fulfilment. +- Build a small fulfilment float as soon as cash flow permits. +- Confirm actual stock, supplier cost, shipping method, and address before paying CJ. +- Do not promise same-day or next-day fulfilment. +- Keep the launch South Africa-only until the domestic workflow is reliable. + +## Manual CJ Dropshipping Workflow + +1. Customer places an order in Shopify. +2. Confirm Shopify payment status is paid. +3. Confirm the product SKU and CJ supplier mapping. +4. Confirm the customer shipping address and contact details. +5. Confirm CJ availability, supplier cost, and available shipping method. +6. Pay the CJ order manually. +7. Save the CJ order reference against the Shopify order. +8. Add tracking when CJ provides it. +9. Send the approved customer update. +10. Handle delays, cancellations, and refunds under the approved policy. + +### Starter Tracking Spreadsheet + +Use one row per Shopify order with these columns: + +- Shopify order number +- Customer name +- Product +- Shopify payment status +- Supplier SKU +- CJ order number +- Supplier cost +- Shipping cost +- Payment gateway used +- Gateway payout status +- Fulfilment status +- Tracking number +- Customer update sent +- Notes + +Do not automate this workflow until the manual process produces accurate orders, tracking updates, and refund handling consistently. + +## South Africa Shipping Setup + +### Shopify Admin Checklist + +- [ ] Confirm the shipping origin/location and dispatch process. +- [ ] Create a South Africa shipping zone only. +- [ ] Do not enable international zones or rates at launch. +- [ ] Configure one clear flat standard shipping rate below R500. +- [ ] Decide whether free standard shipping above R500 is profitable after reviewing average order value, CJ product cost, CJ shipping cost, gateway fees, refunds, and packaging/operational costs. +- [ ] Test rates below R500 and above R500 using addresses across several South African provinces. +- [ ] Confirm no international address accidentally receives a rate. +- [ ] Publish delivery estimates only when actual CJ routes and service levels are operationally confirmed. + +### Critical Alignment Gate + +The current theme announcement says `FREE STANDARD SHIPPING ON ORDERS OVER R500`. Do one of the following before launch: + +1. Enable a matching free-shipping rate after margin validation; or +2. Change the announcement before launch so it does not promise an unavailable benefit. + +Do not launch with the announcement and checkout shipping settings out of alignment. + +## Tax And VAT Readiness + +- [ ] Confirm whether Get Yours is VAT registered. +- [ ] Confirm whether product prices include VAT and whether tax should be charged at checkout. +- [ ] Confirm invoice/receipt requirements and refund tax handling. +- [ ] Review Shopify manual tax settings only after confirming the correct treatment. +- [ ] Obtain accountant and SARS guidance before launch where required. + +This runbook does not provide tax advice and does not configure tax automatically. + +## Customer Content And Communication Checklist + +Before launch, prepare and approve content for: + +- [ ] Shipping Policy +- [ ] Returns/Refund Policy +- [ ] Help page +- [ ] Customer Service page +- [ ] Contact page and support inbox recipient +- [ ] Payment information +- [ ] Order tracking guidance +- [ ] Careful, legally reviewed dropshipping delivery disclosure + +Operational communication sequence: + +- Shopify order confirmation after successful payment. +- Manual confirmation only after CJ order payment/availability is checked. +- Tracking update once a valid tracking reference is available. +- Delay/cancellation/refund updates using approved policy wording. + +Do not invent delivery dates, stock guarantees, refund eligibility, or support commitments before policy and operations are approved. + +## Test-Order Plan + +Keep password protection enabled and use test products, low-value transactions, and no real customer data. + +- [ ] PayFast successful payment. +- [ ] PayFast failed payment. +- [ ] PayFast cancelled payment. +- [ ] PayPal successful payment only if PayPal is activated. +- [ ] Shopify order confirmation email. +- [ ] Customer address capture. +- [ ] Flat shipping below R500. +- [ ] Free shipping above R500 only if enabled. +- [ ] Order cancellation. +- [ ] Refund. +- [ ] Manual CJ order reference and tracking-note workflow. +- [ ] Customer tracking/fulfilment notification. +- [ ] Abandoned checkout behavior, if available on the Shopify plan. + +## Launch Gates + +- [ ] PayFast activation and tests complete. +- [ ] Payout timing, fees, and working-capital process understood. +- [ ] South Africa shipping rates tested. +- [ ] R500 announcement matches checkout shipping behavior. +- [ ] Tax/VAT position confirmed. +- [ ] Shipping, refund, privacy, terms, payment, and support content approved. +- [ ] Help and Customer Service pages created. +- [ ] Footer Support and Legal menus configured. +- [ ] Domain, SSL, sender email, and password-protection process verified. +- [ ] One end-to-end test order completed. +- [ ] Cancellation and refund workflow tested. +- [ ] Customer notifications reviewed. +- [ ] Theme remains unpublished until final approval. + +## Current Launch Blockers + +- PayFast still needs Shopify activation and test-order validation. +- Shipping rate and free-shipping margin decision are not yet configured/tested. +- The R500 announcement must be reconciled with the final shipping setup. +- Tax/VAT treatment needs confirmation. +- Help, Customer Service, shipping, returns, payment, and final policy content need Admin setup/approval. +- Footer Support and Legal menus need separate, approved destinations. +- CJ SKU mappings, availability checks, and manual supplier-funding process need testing. +- A full payment-to-refund test cycle is outstanding. + +## Recommended Phase 10 + +Create approved Help, Customer Service, Shipping, Returns, Payment, and FAQ page content, then create the corresponding Shopify Admin pages and wire the final header/footer menus. Continue using manual CJ fulfilment until the operational workflow is proven. diff --git a/get-yours-shopify-theme/docs/pr-1-production-staging-readiness-report.md b/get-yours-shopify-theme/docs/pr-1-production-staging-readiness-report.md new file mode 100644 index 00000000000..1661fe61774 --- /dev/null +++ b/get-yours-shopify-theme/docs/pr-1-production-staging-readiness-report.md @@ -0,0 +1,58 @@ +# PR-1 Production Staging Readiness Report + +## Outcome + +The production-relevant Stitch-to-Dawn shell is complete for private staging. PR-1 fixed the remaining P1 navigation, footer and Contact-copy gaps without redesigning the storefront. Development theme `141697089639` was updated and QA passed, but it was not published because Shopify storefront password protection is currently off. The active theme remains `Dawn` (`141692731495`) as the rollback reference. + +Production classification: **E. Partially unverified due to the unmet password-protection gate.** + +## Visible Changes + +- Header navigation: Home; Shop dropdown/submenu; Contact. +- Shop destinations: Shop All, Home Organisation, Office & Desk Essentials, Tech Accessories, Travel and Lifestyle. +- Footer: brand and dedicated Shop menu only. Unapproved Support and Legal groups are hidden; no Search placeholder remains. +- Account: retained. Customer accounts are optional and the login route redirects to Shopify customer accounts. +- Contact: approved acknowledgement applied, plus a warning not to submit card, banking, OTP, password or other sensitive payment information. +- Announcement and reassurance copy remain aligned to free Standard shipping on orders of R770 or more. + +## Shopify Configuration + +- Created `get-yours-main-menu` and `get-yours-footer-shop`; existing default menus were not overwritten. +- Development-theme source assigns both new menu handles. +- Contact routing remains unresolved: native Shopify Contact delivery is configured through a different private Sender email, not `info@getyours.online`. Shopify Admin must align the sender/destination and address the visible fallback-sender warning before a controlled hosted retest. No private address is recorded here. +- Shipping profile: South Africa Standard is R100, free from R770, with a 3-5 business-day estimate; Express is R150 with a 1-2 business-day estimate. Estimated delivery dates are globally off. A dormant R310 international rate exists but its countries are not in an active market. +- Required shipping follow-up: validate supplier routes, then retain/rename/remove Standard and Express, remove unsupported exact estimates, and test carts below R770, at R770 and above R770. +- Dynamic footer payment output shows Visa, Mastercard, American Express, PayPal, Diners Club and Discover. PayPal is active; PayFast is in test mode. Admin must align customer-facing methods to the approved launch baseline after the PayPal and Payflex decisions. No payment settings changed. + +## QA + +- Local preview and hosted development preview passed the changed shell at 360, 400, 430, 768 and 1200px with no measured horizontal overflow. +- Desktop Shop dropdown and mobile Shop submenu expose all six approved destinations. Escape closes the desktop dropdown; mobile Escape returns from the submenu and then closes the drawer. +- Search opens and closes with Escape. Search and Cart remain present. +- Contact acknowledgement, safety warning and accessible description association render at 360/430px without overflow. The form was not submitted. +- All approved collection destinations, Contact, three representative products, search and cart returned HTTP 200; the controlled missing route returned 404. +- Footer contains only Get Yours and Shop headings. No Support/Legal Search placeholders remain. +- Hosted storefront console produced no errors or warnings in a fresh storefront-only tab. `/sf_private_access_tokens` HTTP 400 remains monitor-only because no visible feature failed. +- Theme Check passed with no errors and eight inherited Dawn warnings. The auxiliary Shopify Liquid validator could not load its bundled `@shopify/theme-check-common` dependency; no theme defect was reported by Theme Check. + +## Deployment Gate + +Shopify Preferences showed **Password protection: off**. Therefore development theme `141697089639` was not published and production-domain acceptance QA was not run against it as the active theme. `getyours.online` must not be treated as password-protected staging in its current state. + +## Remaining Blockers + +| Blocker | Owner | +| --- | --- | +| Enable and verify storefront password before separately approving private-staging publication | Merchant / Shopify Admin | +| Align Contact sender/destination to `info@getyours.online`, fix sender authentication warning and retest | Merchant / Shopify Admin / email host | +| Validate CJ SKUs, stock, supplier cost, routes, restrictions and margins | Merchant / CJ | +| Resolve the pending PayFast sandbox refund and finish held payment tests | PayFast / Merchant | +| Decide PayPal and Payflex launch presentation; keep Mobicred disabled | Merchant / PayFast/PayPal | +| Approve shipping rate names, route support and checkout threshold behaviour | Merchant / CJ / Shopify Admin | +| Confirm VAT/tax treatment | Accountant | +| Review policies and support copy | South African legal review / Merchant | +| Publish approved support/legal content before adding those footer groups | Merchant / Shopify Admin | + +## Strict Confirmation + +No support or legal page was published; no Contact form was submitted; no checkout, payment, order, refund, fulfilment, inventory, shipping-rate, provider, policy or CJ action occurred. The live theme was not changed. Password protection was not changed and remains off. diff --git a/get-yours-shopify-theme/docs/pr-2-production-candidate-promotion-report.md b/get-yours-shopify-theme/docs/pr-2-production-candidate-promotion-report.md new file mode 100644 index 00000000000..5569e9295f4 --- /dev/null +++ b/get-yours-shopify-theme/docs/pr-2-production-candidate-promotion-report.md @@ -0,0 +1,105 @@ +# PR-2 Production Candidate Promotion Report + +## Outcome + +**Published for password-protected private staging.** Theme `141877674087`, `Get Yours — Production Candidate`, was promoted to MAIN after the required local and remote pre-publication checks passed. + +The storefront remains password protected. This is not a public launch. + +## Pre-Publication Evidence + +| Check | Result | Evidence | +| --- | --- | --- | +| Branch | Passed | `shopify-dawn-conversion` | +| Whitespace integrity | Passed | `git diff --check` passed before publication | +| Theme Check | Passed with inherited warnings | 174 files inspected; 8 existing Dawn warnings; no errors | +| Candidate target | Passed | `141877674087`, `Get Yours — Production Candidate`, role `unpublished` | +| Existing MAIN | Passed | `141692731495`, `Dawn`, role `live` | +| CLI development theme | Passed | `141697089639`, role `development` | +| Processing state | Passed | Theme listing contained only `live`, `unpublished` and `development` roles; no processing or failed theme was reported | +| Storefront password protection | Passed | Shopify Admin/API state was independently confirmed enabled. The earlier browser result was invalid because it reused an existing authorized storefront session. | + +## Canonical Source Review + +The canonical local theme contains the completed production-surface configuration requested for promotion: + +- homepage sections and configured Get Yours imagery; +- `R770` free-standard-shipping wording in the announcement bar and product reassurance; +- header assignment to `get-yours-main-menu` and footer assignment to `get-yours-footer-shop`; +- Shop submenu labels for Shop All, Home Organisation, Office & Desk Essentials, Tech Accessories, Travel and Lifestyle; +- Contact navigation, acknowledgement copy and a warning against submitting sensitive payment information; +- product, collection, search and cart JSON templates. + +The candidate previously received the complete canonical local-repository push. Its remote metadata matched the requested identity before publication. + +## Publication Result + +Shopify CLI published exactly `141877674087`. It reported: + +`The theme 'Get Yours — Production Candidate' (#141877674087) is now live.` + +No theme pull was run. The development theme was not published. The former MAIN theme was not edited, deleted or overwritten; Shopify retained it as the unpublished rollback theme. + +## Final Theme Roles + +| Theme ID | Theme | Final Role | +| --- | --- | --- | +| `141877674087` | Get Yours — Production Candidate | MAIN / live private staging | +| `141692731495` | Dawn | Unpublished rollback theme | +| `141697089639` | Development (2d9b02-Thabisos-MacBook-Pro) | CLI development | + +The post-publication theme listing reported no processing or failed theme. + +## Password Protection And Production Domain + +- Shopify Admin/API verification: storefront password protection is enabled. +- During the authorized browser session, `https://getyours.online/` rendered the new Get Yours storefront. +- After reloading for responsive checks, the same browser session was returned to `https://getyours.online/password`. This confirms the password boundary remains active; it also ended the automation session's storefront access. +- No password, credential or password-protection setting was requested, recorded or changed. + +## Focused Production QA + +| Area | Result | Notes | +| --- | --- | --- | +| Homepage rendering | Passed in existing authorized session | Get Yours header, completed promo grid imagery, category grid, product rails and trust section rendered. | +| Announcement | Passed | `FREE STANDARD SHIPPING ON ORDERS OF R770 OR MORE` rendered. | +| Desktop navigation | Passed | Home, Shop dropdown trigger and Contact rendered. | +| Shop destinations | Passed in rendered navigation/footer | Shop All, Home Organisation, Office & Desk Essentials, Tech Accessories, Travel and Lifestyle rendered with intended destinations. | +| Footer Shop links | Passed | Dedicated Shop group rendered; Support and Legal placeholder groups were absent. | +| Account link | Passed | Shopify customer-account login link rendered. | +| Contact copy | Not rechecked after publication | Requires an authorized merchant session because the browser returned to the password page before the route review. | +| Collections, representative products, search and cart | Not completed | Password boundary returned during responsive-reload sequence. No cart mutation was made; an existing one-item cart was observed but left unchanged. | +| 360px, 430px, 768px and 1200px | Blocked | Viewport checks began, then the password boundary ended the authorized storefront session. No measured horizontal overflow was observed on the returned password page. | +| Console and network | Not completed | Deferred to a fresh password-authorized merchant-session QA pass. | + +## Remaining Launch Blockers + +- Complete the remaining password-authorized production QA: Contact copy, three product routes, collection routes, search, cart lifecycle, responsive layouts, keyboard/Escape behaviour and console/network review. +- Align native Shopify Contact notification routing with the approved public and receiving mailbox, then complete a controlled hosted Contact submission. +- Validate CJ SKU mapping, supplier cost, shipping routes, restrictions and contribution margins. +- Resolve the pending PayFast sandbox refund and complete the held payment tests. +- Confirm shipping-route support, rate names and checkout threshold behaviour. +- Confirm VAT/tax treatment and complete South African legal/policy review. +- Publish approved support and legal pages only after their separate operational and legal gates pass. + +## Rollback And Source Of Truth + +- Rollback theme: `141692731495` (Dawn), now unpublished and retained unchanged. +- Development theme: `141697089639`, unchanged. +- Git repository remains the source of truth. Do not use `shopify theme pull` in this workflow. + +Permanent workflow: + +`Git repository -> CLI Development theme -> Unpublished Production Candidate -> Password-protected MAIN theme` + +## Naming Follow-Up + +The current remote names remain unchanged. A later explicit approval may rename the themes to: + +- `141877674087` to `Get Yours — Production`; +- `141692731495` to `Dawn — Legacy Backup — Do Not Edit`; +- `141697089639` to `Get Yours — CLI Development`. + +## Strict No-Change Confirmation + +The only Shopify mutation was publication of exactly `141877674087` as MAIN. No password setting, payment, shipping, product, collection, inventory, page, policy, order, refund, fulfilment, CJ, domain, customer-data or development-theme configuration was changed. No checkout, Contact submission, order, payment or refund was created. No cart item was added, changed or removed. diff --git a/get-yours-shopify-theme/docs/shopify-theme-roadmap.md b/get-yours-shopify-theme/docs/shopify-theme-roadmap.md new file mode 100644 index 00000000000..a671526323f --- /dev/null +++ b/get-yours-shopify-theme/docs/shopify-theme-roadmap.md @@ -0,0 +1,52 @@ +# Shopify Theme Roadmap + +## Goal + +Convert the approved static prototype into a premium-feeling Shopify Online Store 2.0 theme based on Dawn. + +## Recommended Sequence + +1. Finalise static visual QA. +2. Confirm brand copy, support copy, legal placeholders and product sample data. +3. Map static components to Dawn architecture: + - header + - footer + - promo-grid hero + - category tiles + - featured products + - collection filters/product grid + - product information/trust block + - cart drawer + - cart page +4. Create Shopify sections and snippets from the approved static HTML. +5. Move repeated product card, trust card and navigation patterns into snippets. +6. Wire theme settings and schema controls. +7. Replace static sample data with Shopify objects and metafields where needed. +8. Implement Shopify cart drawer logic using Dawn patterns. +9. Run Shopify CLI theme checks and browser QA. + +## Shopify Implementation Notes + +- Use Dawn as the base rather than porting this static prototype directly as a full theme. +- Preserve the Smart Value Marketplace direction: light surfaces, blue CTAs, restrained gold accents and trust-first ecommerce structure. +- Avoid adding unnecessary app dependencies during the first theme conversion. +- Keep legal, delivery and returns pages editable from Shopify admin pages or theme templates. +- Convert duplicated static header/footer markup into Dawn-compatible sections and snippets early. +- Preserve the Phase 3 mobile fixes when rebuilding the header, especially shrink-safe grid/flex behaviour for the logo, search, cart and mobile menu. +- Preserve the cropped horizontal SVG logo treatment or export a production-ready horizontal logo asset before theme build-out. +- Map the final static brand token set into Dawn CSS custom properties early: exact Get Yours blue, hover blue, deep navy, gold accent, soft gold, surface, border, text and muted tokens. +- Rebuild the mobile header in Dawn with the same three-part structure proven in the static prototype: logo/actions, full-width search and collapsible navigation. +- Product tabs should degrade gracefully; in Shopify, use accessible disclosure/tab patterns that keep product information available without brittle JavaScript. +- Decide whether remote Stitch product images should become Shopify product media before theme implementation starts. +- Collection filters should use Shopify's native filtering patterns rather than the current static checkbox mockup. +- Static footer/header duplication is now visually aligned, but Shopify should replace it with one section/snippet source of truth to avoid future drift. + +## Future Work + +- Product media gallery powered by Shopify product media. +- Dynamic collection filters using Shopify filtering. +- Predictive search based on Shopify search. +- Cart drawer connected to Shopify cart endpoints. +- Theme editor controls for hero, tiles, trust cards and homepage collections. +- Accessibility and performance pass before launch. +- Mobile device QA for header, collection filters, product gallery, cart drawer and footer. diff --git a/get-yours-shopify-theme/docs/static-site-audit.md b/get-yours-shopify-theme/docs/static-site-audit.md new file mode 100644 index 00000000000..f975538e9e2 --- /dev/null +++ b/get-yours-shopify-theme/docs/static-site-audit.md @@ -0,0 +1,115 @@ +# Static Site Audit + +## Current State + +This folder is a cleaned static HTML/CSS/vanilla JS prototype built from the extracted Stitch export. It is not Shopify Liquid, not React, and not a backend implementation. + +## Completed In Phase 2 + +- Added a normal static frontend structure. +- Standardised one shared header pattern across all pages. +- Standardised one shared deep-blue footer pattern across all pages. +- Replaced inconsistent Stitch logo usage with `assets/brand/get-yours-logo.svg`. +- Created a root `index.html` using the correct `get_yours_homepage_promo_grid_hero` visual direction. +- Created requested page routes under `pages/`. +- Added one shared `assets/css/styles.css`. +- Added one shared `assets/js/main.js`. +- Added a reusable cart drawer overlay on every page. +- Added mobile-friendly layout rules for header, navigation, grids, collection filters, product detail, cart drawer and footer. + +## QA Fixes Completed In Phase 3 + +- Reviewed all static HTML pages, the shared CSS, shared JavaScript, logo asset, docs and README. +- Confirmed all required page routes exist. +- Confirmed all major internal links resolve to existing static files. +- Confirmed the footer is identical across all pages. +- Confirmed the header uses one shared structure; active navigation state differs by page as expected. +- Added a visual polish pass across the static prototype without converting to Shopify Liquid, React, TypeScript or backend functionality. +- Standardised the brand token layer around the exact Get Yours blue and gold, plus a separate deep navy token for high-contrast footer/trust surfaces. +- Cropped the SVG logo viewBox to a horizontal logo band so normal height-based CSS sizing works without large empty whitespace. +- Replaced text-only footer branding with the same SVG logo asset across all static pages. +- Tightened mobile header sizing so the logo, cart, menu and search row no longer force horizontal overflow at narrow widths. +- Shortened the search placeholder to prevent mobile input overflow. +- Added explicit shrink behaviour for grid/flex children in the header. +- Reworked the mobile header into a logo/actions row, full-width search row and collapsible stacked navigation row. +- Added mobile-specific hero text sizing to prevent large heading overflow. +- Added additional small-screen rules for category grids, product grids, collection filters, product detail media, cart layout, drawer item layout and drawer width. +- Preserved two-column category and product card layouts on narrow mobile where practical, with reduced spacing and card padding for 360px screens. +- Improved keyboard focus visibility for links, buttons, inputs and selects. +- Added mobile tap-target sizing to header controls, search controls, navigation links and card action buttons. +- Improved cart drawer JavaScript state handling with `aria-expanded` updates and safer null checks. +- Improved mobile navigation behaviour so the menu closes after link activation or Escape. +- Changed product tabs to progressive enhancement: all content is visible without JavaScript, then JavaScript activates the tabbed view. +- Confirmed all local and remote image URLs currently return HTTP 200. +- Confirmed all `` elements have alt text. + +## Focused Brand Polish Pass + +- Re-checked `assets/brand/get-yours-logo.svg` and confirmed the logo source colours are `#0081D8` for primary blue and `#FFD200` for logo yellow. +- Updated the CSS token layer so logo yellow is kept as `--gy-yellow-logo`, while restrained UI gold uses `--gy-gold: #F5B700`. +- Set the announcement bar to `--gy-navy` with white text and preserved the exact message: `FREE STANDARD SHIPPING ON ORDERS OVER R500`. +- Set the footer to the same deep navy family using `--gy-navy-deep` and kept footer text/link contrast readable on the dark background. +- Updated category icon circles to use `--gy-blue-soft` with `--gy-blue` foreground icons. +- Reduced the desktop search bar stretch by constraining the header search track/form to a maximum of 760px while preserving the full-width mobile search row. +- Confirmed no red or large yellow/gold full-width background treatment is used for the announcement bar or footer. + +## Homepage Product Rails Pass + +- Added four static ecommerce merchandising rails beneath `Featured Practical Finds`: `New Arrivals`, `Best Sellers`, `Home Organisation Picks` and `Office & Desk Essentials`. +- Reused the existing `section`, `section-head`, `product-grid`, `product-card`, `product-media`, `product-info`, `delivery-label` and `price-row` patterns without introducing a new component design. +- Wired each new rail's `View all` link to `/pages/collection-home-organisation.html`. +- Wired all new product image/title links to `/pages/product-adjustable-drawer-divider.html`. +- Kept Add to Cart buttons as static prototype triggers using the existing `data-cart-open` cart drawer behavior. +- Kept the existing trust/delivery/WhatsApp support section as the single trust section after the new product rails. +- Static limitation: product rails reuse representative sample product data and remote Stitch-generated product images for now. +- Shopify conversion note: these rails should map to Dawn/Online Store 2.0 featured collection sections or configurable homepage collection blocks during Liquid conversion. + +## Technical Debt + +- Product and hero imagery from Stitch is still served from generated remote `lh3.googleusercontent.com` URLs where those were the actual image sources in the HTML export. Local PNG screen assets from the Stitch export were copied into `assets/images/` for the promo-grid hero where available. +- There is no build step, bundler, CSS minification, image optimisation pipeline or automated accessibility testing yet. +- Cart drawer, quantity controls and product tabs are static prototype interactions only. +- Search is a static route, not a real search implementation. +- Homepage product rails are static repeated markup and should become Shopify featured collection sections/snippets during Dawn conversion. +- Legal pages contain placeholders and require final South African ecommerce legal review. +- Header/footer markup is duplicated into each static HTML file because this is intentionally framework-free static HTML. Shopify conversion should replace that duplication with sections/snippets. +- Navigation active state is static per exported page, not route-aware. + +## Remaining Static Issues + +- Full visual review is still needed in a real browser across desktop, tablet and mobile. +- Check keyboard focus order on drawer, navigation and forms. +- Active navigation states are static and should be reviewed against the final information architecture. +- Replace placeholder support/contact content with approved copy. +- Decide whether to localise all remote generated images before Shopify theme work. +- Add final product/content copy and replace representative sample products if needed. +- Perform one final human visual pass for brand colour perception after product imagery and final copy are approved. + +## Mobile Limitations + +- Mobile layout has been improved for the current prototype, including the 360px-430px header/search issue, but it still needs manual visual QA on real mobile devices. +- Collection filters currently stack above products rather than becoming a collapsible filter drawer. +- Header navigation stacks as a simple mobile menu; it is not a full mega-menu. +- Product cards now stay two-up on mobile where space allows; extremely long product names may still need final merchandising copy edits. + +## Image Limitations + +- Local hero/promo PNG assets are copied from Stitch. +- Product images still rely on remote Stitch-generated `lh3.googleusercontent.com` URLs. +- No new images were generated during QA. +- If the prototype is shared outside this local environment, consider downloading and optimising the remaining remote product images. + +## Recommended Final Static Polish + +- Run a full manual browser pass at 360px, 400px, 430px, 768px and 1200px widths. +- Add a simple static contact form layout if contact-page visual detail becomes important. +- Improve static search page with representative product result cards. +- Add final policy/support copy placeholders approved by the business owner. +- Consider localising all remote product imagery before starting Shopify theme conversion. + +## Out Of Scope For This Phase + +- Shopify Liquid sections/snippets/templates. +- Shopify cart, customer accounts, checkout or product data. +- API calls, authentication, localStorage and backend logic. +- React, TypeScript or any framework conversion. diff --git a/layout/password.liquid b/get-yours-shopify-theme/layout/password.liquid similarity index 100% rename from layout/password.liquid rename to get-yours-shopify-theme/layout/password.liquid diff --git a/layout/theme.liquid b/get-yours-shopify-theme/layout/theme.liquid similarity index 99% rename from layout/theme.liquid rename to get-yours-shopify-theme/layout/theme.liquid index 43aeb6ddb6d..d4239f7225c 100644 --- a/layout/theme.liquid +++ b/get-yours-shopify-theme/layout/theme.liquid @@ -279,6 +279,7 @@ {% endstyle %} {{ 'base.css' | asset_url | stylesheet_tag }} + {{ 'gy-theme.css' | asset_url | stylesheet_tag }} {%- if settings.cart_type == 'drawer' -%} diff --git a/locales/bg.json b/get-yours-shopify-theme/locales/bg.json similarity index 100% rename from locales/bg.json rename to get-yours-shopify-theme/locales/bg.json diff --git a/locales/cs.json b/get-yours-shopify-theme/locales/cs.json similarity index 100% rename from locales/cs.json rename to get-yours-shopify-theme/locales/cs.json diff --git a/locales/cs.schema.json b/get-yours-shopify-theme/locales/cs.schema.json similarity index 100% rename from locales/cs.schema.json rename to get-yours-shopify-theme/locales/cs.schema.json diff --git a/locales/da.json b/get-yours-shopify-theme/locales/da.json similarity index 100% rename from locales/da.json rename to get-yours-shopify-theme/locales/da.json diff --git a/locales/da.schema.json b/get-yours-shopify-theme/locales/da.schema.json similarity index 100% rename from locales/da.schema.json rename to get-yours-shopify-theme/locales/da.schema.json diff --git a/locales/de.json b/get-yours-shopify-theme/locales/de.json similarity index 100% rename from locales/de.json rename to get-yours-shopify-theme/locales/de.json diff --git a/locales/de.schema.json b/get-yours-shopify-theme/locales/de.schema.json similarity index 100% rename from locales/de.schema.json rename to get-yours-shopify-theme/locales/de.schema.json diff --git a/locales/el.json b/get-yours-shopify-theme/locales/el.json similarity index 100% rename from locales/el.json rename to get-yours-shopify-theme/locales/el.json diff --git a/locales/en.default.json b/get-yours-shopify-theme/locales/en.default.json similarity index 92% rename from locales/en.default.json rename to get-yours-shopify-theme/locales/en.default.json index a2dee4fc3f9..a8f437dbb56 100644 --- a/locales/en.default.json +++ b/get-yours-shopify-theme/locales/en.default.json @@ -219,6 +219,9 @@ "templates": { "search": { "no_results": "No results found for “{{ terms }}”. Check the spelling or use a different word or phrase.", + "no_results_heading": "No results found", + "no_results_help": "Try a simpler search, or browse practical finds for home, desk, travel and daily routines.", + "browse_all_products": "Browse all products", "page": "Page", "products": "Products", "results_pages_with_count": { @@ -257,7 +260,8 @@ "phone": "Phone number", "comment": "Comment", "send": "Send", - "post_success": "Thanks for contacting us. We'll get back to you as soon as possible.", + "post_success": "Thanks for contacting Get Yours. Your message has been received. We will review your message and respond through the contact details you provided.", + "safety_notice": "Do not send card details, banking passwords, one-time PINs, account passwords or other sensitive payment information through this form.", "error_heading": "Please adjust the following:" } }, @@ -277,12 +281,34 @@ "header": { "announcement": "Announcement", + "all_categories": "All Categories", + "cart_label": "Cart", + "category_navigation": "Browse product categories", + "home_organisation": "Home Organisation", + "kitchen_storage": "Kitchen & Storage", + "lifestyle": "Lifestyle", + "login_register": "Login / Register", "menu": "Menu", + "office_desk_essentials": "Office & Desk Essentials", + "search_placeholder": "Search for products...", + "shop_all": "Shop All", + "tech_accessories": "Tech Accessories", + "travel": "Travel", + "welcome": "Welcome", "cart_count": { "one": "{{ count }} item", "other": "{{ count }} items" } }, + "gy_product_card": { + "add_to_cart": "Add {{ product }} to cart", + "bestseller": "Bestseller", + "choose_collection": "Choose a collection in the theme editor to show products.", + "choose_options": "Choose options for {{ product }}", + "empty_collection": "The selected collection has no products yet.", + "from_price": "From", + "in_stock": "In stock" + }, "cart": { "title": "Your cart", "caption": "Cart items", @@ -292,6 +318,8 @@ "note": "Order special instructions", "checkout": "Check out", "empty": "Your cart is empty", + "free_shipping_reassurance": "Free standard shipping on orders of R770 or more.", + "support_reassurance": "Need a hand before checkout? Our support team is here to help.", "product_disclosure": "Product disclosure", "product_disclosures": "Product disclosures", "cart_error": "There was an error while updating your cart. Please try again.", diff --git a/locales/en.default.schema.json b/get-yours-shopify-theme/locales/en.default.schema.json similarity index 100% rename from locales/en.default.schema.json rename to get-yours-shopify-theme/locales/en.default.schema.json diff --git a/locales/es.json b/get-yours-shopify-theme/locales/es.json similarity index 100% rename from locales/es.json rename to get-yours-shopify-theme/locales/es.json diff --git a/locales/es.schema.json b/get-yours-shopify-theme/locales/es.schema.json similarity index 100% rename from locales/es.schema.json rename to get-yours-shopify-theme/locales/es.schema.json diff --git a/locales/fi.json b/get-yours-shopify-theme/locales/fi.json similarity index 100% rename from locales/fi.json rename to get-yours-shopify-theme/locales/fi.json diff --git a/locales/fi.schema.json b/get-yours-shopify-theme/locales/fi.schema.json similarity index 100% rename from locales/fi.schema.json rename to get-yours-shopify-theme/locales/fi.schema.json diff --git a/locales/fr.json b/get-yours-shopify-theme/locales/fr.json similarity index 100% rename from locales/fr.json rename to get-yours-shopify-theme/locales/fr.json diff --git a/locales/fr.schema.json b/get-yours-shopify-theme/locales/fr.schema.json similarity index 100% rename from locales/fr.schema.json rename to get-yours-shopify-theme/locales/fr.schema.json diff --git a/locales/hr.json b/get-yours-shopify-theme/locales/hr.json similarity index 100% rename from locales/hr.json rename to get-yours-shopify-theme/locales/hr.json diff --git a/locales/hu.json b/get-yours-shopify-theme/locales/hu.json similarity index 100% rename from locales/hu.json rename to get-yours-shopify-theme/locales/hu.json diff --git a/locales/id.json b/get-yours-shopify-theme/locales/id.json similarity index 100% rename from locales/id.json rename to get-yours-shopify-theme/locales/id.json diff --git a/locales/it.json b/get-yours-shopify-theme/locales/it.json similarity index 100% rename from locales/it.json rename to get-yours-shopify-theme/locales/it.json diff --git a/locales/it.schema.json b/get-yours-shopify-theme/locales/it.schema.json similarity index 100% rename from locales/it.schema.json rename to get-yours-shopify-theme/locales/it.schema.json diff --git a/locales/ja.json b/get-yours-shopify-theme/locales/ja.json similarity index 100% rename from locales/ja.json rename to get-yours-shopify-theme/locales/ja.json diff --git a/locales/ja.schema.json b/get-yours-shopify-theme/locales/ja.schema.json similarity index 100% rename from locales/ja.schema.json rename to get-yours-shopify-theme/locales/ja.schema.json diff --git a/locales/ko.json b/get-yours-shopify-theme/locales/ko.json similarity index 100% rename from locales/ko.json rename to get-yours-shopify-theme/locales/ko.json diff --git a/locales/ko.schema.json b/get-yours-shopify-theme/locales/ko.schema.json similarity index 100% rename from locales/ko.schema.json rename to get-yours-shopify-theme/locales/ko.schema.json diff --git a/locales/lt.json b/get-yours-shopify-theme/locales/lt.json similarity index 100% rename from locales/lt.json rename to get-yours-shopify-theme/locales/lt.json diff --git a/locales/nb.json b/get-yours-shopify-theme/locales/nb.json similarity index 100% rename from locales/nb.json rename to get-yours-shopify-theme/locales/nb.json diff --git a/locales/nb.schema.json b/get-yours-shopify-theme/locales/nb.schema.json similarity index 100% rename from locales/nb.schema.json rename to get-yours-shopify-theme/locales/nb.schema.json diff --git a/locales/nl.json b/get-yours-shopify-theme/locales/nl.json similarity index 100% rename from locales/nl.json rename to get-yours-shopify-theme/locales/nl.json diff --git a/locales/nl.schema.json b/get-yours-shopify-theme/locales/nl.schema.json similarity index 100% rename from locales/nl.schema.json rename to get-yours-shopify-theme/locales/nl.schema.json diff --git a/locales/pl.json b/get-yours-shopify-theme/locales/pl.json similarity index 100% rename from locales/pl.json rename to get-yours-shopify-theme/locales/pl.json diff --git a/locales/pl.schema.json b/get-yours-shopify-theme/locales/pl.schema.json similarity index 100% rename from locales/pl.schema.json rename to get-yours-shopify-theme/locales/pl.schema.json diff --git a/locales/pt-BR.json b/get-yours-shopify-theme/locales/pt-BR.json similarity index 100% rename from locales/pt-BR.json rename to get-yours-shopify-theme/locales/pt-BR.json diff --git a/locales/pt-BR.schema.json b/get-yours-shopify-theme/locales/pt-BR.schema.json similarity index 100% rename from locales/pt-BR.schema.json rename to get-yours-shopify-theme/locales/pt-BR.schema.json diff --git a/locales/pt-PT.json b/get-yours-shopify-theme/locales/pt-PT.json similarity index 100% rename from locales/pt-PT.json rename to get-yours-shopify-theme/locales/pt-PT.json diff --git a/locales/pt-PT.schema.json b/get-yours-shopify-theme/locales/pt-PT.schema.json similarity index 100% rename from locales/pt-PT.schema.json rename to get-yours-shopify-theme/locales/pt-PT.schema.json diff --git a/locales/ro.json b/get-yours-shopify-theme/locales/ro.json similarity index 100% rename from locales/ro.json rename to get-yours-shopify-theme/locales/ro.json diff --git a/locales/ru.json b/get-yours-shopify-theme/locales/ru.json similarity index 100% rename from locales/ru.json rename to get-yours-shopify-theme/locales/ru.json diff --git a/locales/sk.json b/get-yours-shopify-theme/locales/sk.json similarity index 100% rename from locales/sk.json rename to get-yours-shopify-theme/locales/sk.json diff --git a/locales/sl.json b/get-yours-shopify-theme/locales/sl.json similarity index 100% rename from locales/sl.json rename to get-yours-shopify-theme/locales/sl.json diff --git a/locales/sv.json b/get-yours-shopify-theme/locales/sv.json similarity index 100% rename from locales/sv.json rename to get-yours-shopify-theme/locales/sv.json diff --git a/locales/sv.schema.json b/get-yours-shopify-theme/locales/sv.schema.json similarity index 100% rename from locales/sv.schema.json rename to get-yours-shopify-theme/locales/sv.schema.json diff --git a/locales/th.json b/get-yours-shopify-theme/locales/th.json similarity index 100% rename from locales/th.json rename to get-yours-shopify-theme/locales/th.json diff --git a/locales/th.schema.json b/get-yours-shopify-theme/locales/th.schema.json similarity index 100% rename from locales/th.schema.json rename to get-yours-shopify-theme/locales/th.schema.json diff --git a/locales/tr.json b/get-yours-shopify-theme/locales/tr.json similarity index 100% rename from locales/tr.json rename to get-yours-shopify-theme/locales/tr.json diff --git a/locales/tr.schema.json b/get-yours-shopify-theme/locales/tr.schema.json similarity index 100% rename from locales/tr.schema.json rename to get-yours-shopify-theme/locales/tr.schema.json diff --git a/locales/vi.json b/get-yours-shopify-theme/locales/vi.json similarity index 100% rename from locales/vi.json rename to get-yours-shopify-theme/locales/vi.json diff --git a/locales/zh-CN.json b/get-yours-shopify-theme/locales/zh-CN.json similarity index 100% rename from locales/zh-CN.json rename to get-yours-shopify-theme/locales/zh-CN.json diff --git a/locales/zh-CN.schema.json b/get-yours-shopify-theme/locales/zh-CN.schema.json similarity index 100% rename from locales/zh-CN.schema.json rename to get-yours-shopify-theme/locales/zh-CN.schema.json diff --git a/locales/zh-TW.json b/get-yours-shopify-theme/locales/zh-TW.json similarity index 100% rename from locales/zh-TW.json rename to get-yours-shopify-theme/locales/zh-TW.json diff --git a/locales/zh-TW.schema.json b/get-yours-shopify-theme/locales/zh-TW.schema.json similarity index 100% rename from locales/zh-TW.schema.json rename to get-yours-shopify-theme/locales/zh-TW.schema.json diff --git a/release-notes.md b/get-yours-shopify-theme/release-notes.md similarity index 100% rename from release-notes.md rename to get-yours-shopify-theme/release-notes.md diff --git a/get-yours-shopify-theme/sections/announcement-bar.liquid b/get-yours-shopify-theme/sections/announcement-bar.liquid new file mode 100644 index 00000000000..f7be2ed705c --- /dev/null +++ b/get-yours-shopify-theme/sections/announcement-bar.liquid @@ -0,0 +1,112 @@ +
+
+
+ {%- for block in section.blocks -%} +
+ + {%- if block.settings.link != blank -%} + {{ block.settings.text | escape }} + {%- else -%} + {{ block.settings.text | escape }} + {%- endif -%} +
+ {%- endfor -%} +
+ +
+
+ +{% schema %} +{ + "name": "Get Yours utility bar", + "class": "announcement-bar-section", + "enabled_on": { + "groups": ["header"] + }, + "settings": [ + { + "type": "text", + "id": "track_order_label", + "label": "Track order label", + "default": "Track Order" + }, + { + "type": "url", + "id": "track_order_link", + "label": "Track order link" + }, + { + "type": "text", + "id": "newsletter_label", + "label": "Newsletter label", + "default": "Newsletter" + }, + { + "type": "url", + "id": "newsletter_link", + "label": "Newsletter link" + } + ], + "max_blocks": 3, + "blocks": [ + { + "type": "reassurance", + "name": "Reassurance item", + "settings": [ + { + "type": "select", + "id": "icon", + "label": "Icon", + "options": [ + { "value": "deal", "label": "Deal" }, + { "value": "secure", "label": "Secure payment" }, + { "value": "support", "label": "Support" } + ], + "default": "deal" + }, + { + "type": "text", + "id": "text", + "label": "Text", + "default": "Opening deals" + }, + { + "type": "url", + "id": "link", + "label": "Optional link" + } + ] + } + ], + "presets": [ + { + "name": "Get Yours utility bar", + "blocks": [ + { "type": "reassurance", "settings": { "icon": "deal", "text": "Opening deals" } }, + { "type": "reassurance", "settings": { "icon": "secure", "text": "Secure payments" } }, + { "type": "reassurance", "settings": { "icon": "support", "text": "WhatsApp support" } } + ] + } + ] +} +{% endschema %} diff --git a/sections/apps.liquid b/get-yours-shopify-theme/sections/apps.liquid similarity index 100% rename from sections/apps.liquid rename to get-yours-shopify-theme/sections/apps.liquid diff --git a/sections/bulk-quick-order-list.liquid b/get-yours-shopify-theme/sections/bulk-quick-order-list.liquid similarity index 100% rename from sections/bulk-quick-order-list.liquid rename to get-yours-shopify-theme/sections/bulk-quick-order-list.liquid diff --git a/sections/cart-drawer.liquid b/get-yours-shopify-theme/sections/cart-drawer.liquid similarity index 100% rename from sections/cart-drawer.liquid rename to get-yours-shopify-theme/sections/cart-drawer.liquid diff --git a/sections/cart-icon-bubble.liquid b/get-yours-shopify-theme/sections/cart-icon-bubble.liquid similarity index 100% rename from sections/cart-icon-bubble.liquid rename to get-yours-shopify-theme/sections/cart-icon-bubble.liquid diff --git a/sections/cart-live-region-text.liquid b/get-yours-shopify-theme/sections/cart-live-region-text.liquid similarity index 100% rename from sections/cart-live-region-text.liquid rename to get-yours-shopify-theme/sections/cart-live-region-text.liquid diff --git a/sections/cart-notification-button.liquid b/get-yours-shopify-theme/sections/cart-notification-button.liquid similarity index 100% rename from sections/cart-notification-button.liquid rename to get-yours-shopify-theme/sections/cart-notification-button.liquid diff --git a/sections/cart-notification-product.liquid b/get-yours-shopify-theme/sections/cart-notification-product.liquid similarity index 100% rename from sections/cart-notification-product.liquid rename to get-yours-shopify-theme/sections/cart-notification-product.liquid diff --git a/sections/collage.liquid b/get-yours-shopify-theme/sections/collage.liquid similarity index 100% rename from sections/collage.liquid rename to get-yours-shopify-theme/sections/collage.liquid diff --git a/sections/collapsible-content.liquid b/get-yours-shopify-theme/sections/collapsible-content.liquid similarity index 100% rename from sections/collapsible-content.liquid rename to get-yours-shopify-theme/sections/collapsible-content.liquid diff --git a/sections/collection-list.liquid b/get-yours-shopify-theme/sections/collection-list.liquid similarity index 100% rename from sections/collection-list.liquid rename to get-yours-shopify-theme/sections/collection-list.liquid diff --git a/sections/contact-form.liquid b/get-yours-shopify-theme/sections/contact-form.liquid similarity index 97% rename from sections/contact-form.liquid rename to get-yours-shopify-theme/sections/contact-form.liquid index 3a5679cf19f..afd6d105f5c 100644 --- a/sections/contact-form.liquid +++ b/get-yours-shopify-theme/sections/contact-form.liquid @@ -51,6 +51,9 @@ {%- endif -%} +

+ {{ 'templates.contact.form.safety_notice' | t }} +

{{- form.body -}} diff --git a/sections/custom-liquid.liquid b/get-yours-shopify-theme/sections/custom-liquid.liquid similarity index 100% rename from sections/custom-liquid.liquid rename to get-yours-shopify-theme/sections/custom-liquid.liquid diff --git a/sections/disclosures.liquid b/get-yours-shopify-theme/sections/disclosures.liquid similarity index 100% rename from sections/disclosures.liquid rename to get-yours-shopify-theme/sections/disclosures.liquid diff --git a/sections/email-signup-banner.liquid b/get-yours-shopify-theme/sections/email-signup-banner.liquid similarity index 100% rename from sections/email-signup-banner.liquid rename to get-yours-shopify-theme/sections/email-signup-banner.liquid diff --git a/sections/featured-blog.liquid b/get-yours-shopify-theme/sections/featured-blog.liquid similarity index 100% rename from sections/featured-blog.liquid rename to get-yours-shopify-theme/sections/featured-blog.liquid diff --git a/sections/featured-collection.liquid b/get-yours-shopify-theme/sections/featured-collection.liquid similarity index 100% rename from sections/featured-collection.liquid rename to get-yours-shopify-theme/sections/featured-collection.liquid diff --git a/sections/featured-product.liquid b/get-yours-shopify-theme/sections/featured-product.liquid similarity index 100% rename from sections/featured-product.liquid rename to get-yours-shopify-theme/sections/featured-product.liquid diff --git a/get-yours-shopify-theme/sections/footer-group.json b/get-yours-shopify-theme/sections/footer-group.json new file mode 100644 index 00000000000..7fb7382e124 --- /dev/null +++ b/get-yours-shopify-theme/sections/footer-group.json @@ -0,0 +1,45 @@ +{ + "name": "t:sections.footer.name", + "type": "footer", + "sections": { + "footer": { + "type": "footer", + "blocks": { + "brand": { + "type": "brand_information", + "settings": { + "show_social": false + } + }, + "shop": { + "type": "link_list", + "settings": { + "heading": "Shop", + "menu": "get-yours-footer-shop" + } + } + }, + "block_order": [ + "brand", + "shop" + ], + "settings": { + "color_scheme": "scheme-3", + "newsletter_enable": false, + "newsletter_heading": "Get practical finds and updates", + "enable_follow_on_shop": false, + "show_social": false, + "enable_country_selector": false, + "enable_language_selector": false, + "payment_enable": true, + "show_policy": true, + "margin_top": 0, + "padding_top": 52, + "padding_bottom": 32 + } + } + }, + "order": [ + "footer" + ] +} diff --git a/sections/footer.liquid b/get-yours-shopify-theme/sections/footer.liquid similarity index 100% rename from sections/footer.liquid rename to get-yours-shopify-theme/sections/footer.liquid diff --git a/get-yours-shopify-theme/sections/gy-category-grid.liquid b/get-yours-shopify-theme/sections/gy-category-grid.liquid new file mode 100644 index 00000000000..e293a996be2 --- /dev/null +++ b/get-yours-shopify-theme/sections/gy-category-grid.liquid @@ -0,0 +1,143 @@ +
+
+
+
+ {%- if section.settings.heading != blank -%} +

{{ section.settings.heading }}

+ {%- endif -%} + {%- if section.settings.subtitle != blank -%} +
{{ section.settings.subtitle }}
+ {%- endif -%} +
+ {%- if section.settings.show_view_all and section.settings.view_all_label != blank -%} + {%- assign view_all_url = section.settings.view_all_link | default: routes.collections_url -%} + + {{ section.settings.view_all_label }} + + + {%- endif -%} +
+ +
+ {%- for block in section.blocks -%} + {%- liquid + assign category_collection = block.settings.collection + assign category_label = block.settings.display_label + if category_label == blank and category_collection != blank + assign category_label = category_collection.title + endif + -%} + {%- if category_collection != blank -%} + + + {% render 'gy-icon', icon: block.settings.icon %} + + {{ category_label | escape }} + + {%- else -%} +
+ + {% render 'gy-icon', icon: block.settings.icon %} + + {{ category_label | default: 'Category' | escape }} +
+ {%- endif -%} + {%- endfor -%} +
+
+
+ +{% schema %} +{ + "name": "Get Yours category grid", + "tag": "section", + "class": "section", + "max_blocks": 6, + "disabled_on": { + "groups": ["header", "footer"] + }, + "settings": [ + { + "type": "inline_richtext", + "id": "heading", + "label": "Heading", + "default": "Shop by Category" + }, + { + "type": "richtext", + "id": "subtitle", + "label": "Supporting text", + "default": "

Find exactly what you need to organise your life.

" + }, + { + "type": "checkbox", + "id": "show_view_all", + "label": "Show view all link", + "default": true + }, + { + "type": "text", + "id": "view_all_label", + "label": "View all label", + "default": "View all" + }, + { + "type": "url", + "id": "view_all_link", + "label": "Optional view all link" + }, + { + "type": "color_scheme", + "id": "color_scheme", + "label": "Color scheme", + "default": "scheme-1" + } + ], + "blocks": [ + { + "type": "category", + "name": "Category", + "settings": [ + { + "type": "collection", + "id": "collection", + "label": "Collection" + }, + { + "type": "text", + "id": "display_label", + "label": "Display label", + "default": "Category" + }, + { + "type": "select", + "id": "icon", + "label": "Icon", + "options": [ + { "value": "home", "label": "Home storage" }, + { "value": "desk", "label": "Desk" }, + { "value": "kitchen", "label": "Kitchen storage" }, + { "value": "lifestyle", "label": "Lifestyle" }, + { "value": "travel", "label": "Travel" }, + { "value": "tech", "label": "Tech" } + ], + "default": "home" + } + ] + } + ], + "presets": [ + { + "name": "Get Yours category grid", + "blocks": [ + { "type": "category", "settings": { "display_label": "Home Organisation", "icon": "home" } }, + { "type": "category", "settings": { "display_label": "Office & Desk", "icon": "desk" } }, + { "type": "category", "settings": { "display_label": "Kitchen & Storage", "icon": "kitchen" } }, + { "type": "category", "settings": { "display_label": "Lifestyle", "icon": "lifestyle" } }, + { "type": "category", "settings": { "display_label": "Travel", "icon": "travel" } }, + { "type": "category", "settings": { "display_label": "Tech Accessories", "icon": "tech" } } + ] + } + ] +} +{% endschema %} diff --git a/get-yours-shopify-theme/sections/gy-featured-collection.liquid b/get-yours-shopify-theme/sections/gy-featured-collection.liquid new file mode 100644 index 00000000000..ad15b74d047 --- /dev/null +++ b/get-yours-shopify-theme/sections/gy-featured-collection.liquid @@ -0,0 +1,253 @@ +{{ 'component-card.css' | asset_url | stylesheet_tag }} +{{ 'component-price.css' | asset_url | stylesheet_tag }} + +{%- liquid + assign products_to_display = section.settings.collection.products.size + if products_to_display > section.settings.products_to_show + assign products_to_display = section.settings.products_to_show + endif +-%} + +
+
+
+
+ {%- if section.settings.eyebrow != blank -%} +

{{ section.settings.eyebrow }}

+ {%- endif -%} + {%- if section.settings.heading != blank -%} +

{{ section.settings.heading }}

+ {%- endif -%} + {%- if section.settings.subtitle != blank -%} +
{{ section.settings.subtitle }}
+ {%- endif -%} +
+ {%- if section.settings.show_view_all and section.settings.collection != blank -%} + + {{ section.settings.view_all_label }} + + {%- endif -%} +
+ +
    + {%- if section.settings.collection.products.size > 0 -%} + {%- assign skip_card_product_styles = false -%} + {%- for product in section.settings.collection.products limit: section.settings.products_to_show -%} +
  • + {% render 'card-product', + card_product: product, + media_aspect_ratio: section.settings.image_ratio, + image_shape: 'default', + show_secondary_image: section.settings.show_secondary_image, + show_vendor: section.settings.show_vendor, + show_rating: section.settings.show_rating, + lazy_load: true, + skip_styles: skip_card_product_styles, + section_id: section.id, + quick_add: section.settings.quick_add, + product_view_context: 'home' + %} +
  • + {%- assign skip_card_product_styles = true -%} + {%- endfor -%} + {%- else -%} + {%- for i in (1..section.settings.products_to_show) -%} +
  • + {%- assign placeholder_index = forloop.index0 | modulo: 4 | plus: 1 -%} + {%- assign placeholder_image = 'product-apparel-' | append: placeholder_index -%} + {% render 'card-product', + show_vendor: section.settings.show_vendor, + media_aspect_ratio: section.settings.image_ratio, + image_shape: 'default', + lazy_load: true, + placeholder_image: placeholder_image + %} +
  • + {%- endfor -%} + {%- endif -%} +
+ + {%- if section.settings.collection == blank -%} +

Choose a collection in the theme editor to show real products.

+ {%- elsif products_to_display == 0 -%} +

This collection has no products yet.

+ {%- endif -%} +
+
+ +{% schema %} +{ + "name": "Get Yours product rail", + "tag": "section", + "class": "section", + "disabled_on": { + "groups": ["header", "footer"] + }, + "settings": [ + { + "type": "collection", + "id": "collection", + "label": "Collection" + }, + { + "type": "text", + "id": "eyebrow", + "label": "Eyebrow" + }, + { + "type": "inline_richtext", + "id": "heading", + "label": "Heading", + "default": "Featured Practical Finds" + }, + { + "type": "richtext", + "id": "subtitle", + "label": "Subtitle", + "default": "

Simple, useful products selected for everyday value.

" + }, + { + "type": "range", + "id": "products_to_show", + "min": 2, + "max": 12, + "step": 1, + "label": "Maximum products to show", + "default": 4 + }, + { + "type": "checkbox", + "id": "show_view_all", + "label": "Show view all link", + "default": true + }, + { + "type": "text", + "id": "view_all_label", + "label": "View all label", + "default": "View all" + }, + { + "type": "select", + "id": "background_style", + "label": "Background style", + "options": [ + { + "value": "plain", + "label": "Plain" + }, + { + "value": "soft", + "label": "Soft" + } + ], + "default": "plain" + }, + { + "type": "color_scheme", + "id": "color_scheme", + "label": "Color scheme", + "default": "scheme-1" + }, + { + "type": "select", + "id": "columns_desktop", + "label": "Desktop columns", + "options": [ + { + "value": "3", + "label": "3 columns" + }, + { + "value": "4", + "label": "4 columns" + }, + { + "value": "5", + "label": "5 columns" + } + ], + "default": "4" + }, + { + "type": "select", + "id": "columns_mobile", + "label": "Mobile columns", + "options": [ + { + "value": "1", + "label": "1 column" + }, + { + "value": "2", + "label": "2 columns" + } + ], + "default": "2" + }, + { + "type": "select", + "id": "image_ratio", + "label": "Image ratio", + "options": [ + { + "value": "adapt", + "label": "Adapt to image" + }, + { + "value": "portrait", + "label": "Portrait" + }, + { + "value": "square", + "label": "Square" + } + ], + "default": "square" + }, + { + "type": "checkbox", + "id": "show_secondary_image", + "label": "Show second image on hover", + "default": false + }, + { + "type": "checkbox", + "id": "show_vendor", + "label": "Show vendor", + "default": false + }, + { + "type": "checkbox", + "id": "show_rating", + "label": "Show rating", + "default": false + }, + { + "type": "select", + "id": "quick_add", + "label": "Quick add", + "options": [ + { + "value": "none", + "label": "None" + }, + { + "value": "standard", + "label": "Standard" + }, + { + "value": "bulk", + "label": "Bulk" + } + ], + "default": "none" + } + ], + "presets": [ + { + "name": "Get Yours product rail" + } + ] +} +{% endschema %} diff --git a/get-yours-shopify-theme/sections/gy-featured-products.liquid b/get-yours-shopify-theme/sections/gy-featured-products.liquid new file mode 100644 index 00000000000..18f4363571a --- /dev/null +++ b/get-yours-shopify-theme/sections/gy-featured-products.liquid @@ -0,0 +1,125 @@ +{%- if section.settings.show_quick_add -%} + +{%- endif -%} + + + +{% schema %} +{ + "name": "Get Yours product rail", + "tag": "section", + "class": "section", + "disabled_on": { + "groups": ["header", "footer"] + }, + "settings": [ + { + "type": "inline_richtext", + "id": "heading", + "label": "Heading", + "default": "Featured Practical Finds" + }, + { + "type": "richtext", + "id": "subtitle", + "label": "Supporting text", + "default": "

Our most popular solutions for everyday organisation.

" + }, + { + "type": "collection", + "id": "collection", + "label": "Collection" + }, + { + "type": "range", + "id": "product_limit", + "min": 2, + "max": 8, + "step": 1, + "label": "Product limit", + "default": 4 + }, + { + "type": "checkbox", + "id": "show_availability", + "label": "Show availability", + "default": true + }, + { + "type": "checkbox", + "id": "show_quick_add", + "label": "Show quick add", + "default": true + }, + { + "type": "checkbox", + "id": "show_view_all", + "label": "Show view all link", + "default": true + }, + { + "type": "text", + "id": "view_all_label", + "label": "View all label", + "default": "View all" + }, + { + "type": "color_scheme", + "id": "color_scheme", + "label": "Color scheme", + "default": "scheme-1" + } + ], + "presets": [ + { + "name": "Get Yours product rail" + } + ] +} +{% endschema %} diff --git a/get-yours-shopify-theme/sections/gy-promo-grid-hero.liquid b/get-yours-shopify-theme/sections/gy-promo-grid-hero.liquid new file mode 100644 index 00000000000..65bbac32441 --- /dev/null +++ b/get-yours-shopify-theme/sections/gy-promo-grid-hero.liquid @@ -0,0 +1,363 @@ +
+
+ {%- if section.settings.accessibility_heading != blank -%} +

{{ section.settings.accessibility_heading }}

+ {%- 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 + -%} + +
+ {%- if main_block != blank -%} +
+
+ {%- 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 -%} + {{ main_block.settings.heading | strip_html | escape }} + {%- endif -%} +
+
+ {%- if main_block.settings.eyebrow != blank -%} +

+ + {{ main_block.settings.eyebrow }} +

+ {%- endif -%} + {%- if main_block.settings.heading != blank -%} +

{{ main_block.settings.heading }}

+ {%- endif -%} + {%- if main_block.settings.text != blank -%} +
{{ main_block.settings.text }}
+ {%- endif -%} + {%- if main_block.settings.button_label != blank and main_block.settings.button_link != blank -%} + + {{ main_block.settings.button_label }} + + {%- endif -%} +
+
+ {%- endif -%} + +
+ {%- if office_block != blank -%} +
+
+ {%- 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 -%} + {{ office_block.settings.heading | strip_html | escape }} + {%- endif -%} +
+
+ {%- if office_block.settings.eyebrow != blank -%} +

{{ office_block.settings.eyebrow }}

+ {%- endif -%} + {%- if office_block.settings.heading != blank -%} +

{{ office_block.settings.heading }}

+ {%- endif -%} + {%- if office_block.settings.text != blank -%} +
{{ office_block.settings.text }}
+ {%- endif -%} + {%- if office_block.settings.button_label != blank and office_block.settings.button_link != blank -%} + + {{ office_block.settings.button_label }} + + {%- endif -%} +
+
+ {%- endif -%} + + {%- if travel_block != blank -%} +
+
+ {%- 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 -%} + {{ travel_block.settings.heading | strip_html | escape }} + {%- endif -%} +
+
+ {%- if travel_block.settings.eyebrow != blank -%} +

{{ travel_block.settings.eyebrow }}

+ {%- endif -%} + {%- if travel_block.settings.heading != blank -%} +

{{ travel_block.settings.heading }}

+ {%- endif -%} + {%- if travel_block.settings.text != blank -%} +
{{ travel_block.settings.text }}
+ {%- endif -%} + {%- if travel_block.settings.button_label != blank and travel_block.settings.button_link != blank -%} + + {{ travel_block.settings.button_label }} + + {%- endif -%} +
+
+ {%- endif -%} +
+
+
+
+ +{% 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": "

Curated essentials for an organized home.

" + }, + { + "type": "text", + "id": "button_label", + "label": "Button label", + "default": "Shop Now" + }, + { + "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" + }, + { + "type": "text", + "id": "button_label", + "label": "Button label", + "default": "Explore" + }, + { + "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 & Accessories 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" + }, + { + "type": "text", + "id": "button_label", + "label": "Button label", + "default": "View All" + }, + { + "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 %} diff --git a/get-yours-shopify-theme/sections/gy-trust-grid.liquid b/get-yours-shopify-theme/sections/gy-trust-grid.liquid new file mode 100644 index 00000000000..6a1a24d471c --- /dev/null +++ b/get-yours-shopify-theme/sections/gy-trust-grid.liquid @@ -0,0 +1,134 @@ +
+
+

+ {{ section.settings.heading }} +

+ +
+ {%- for block in section.blocks -%} + {%- capture card_content -%} + + {% render 'gy-icon', icon: block.settings.icon %} + +
+ {%- if block.settings.title != blank -%} +

{{ block.settings.title }}

+ {%- endif -%} + {%- if block.settings.description != blank -%} +
{{ block.settings.description }}
+ {%- endif -%} +
+ {%- endcapture -%} + + {%- if block.settings.link != blank -%} + + {{ card_content }} + + {%- else -%} +
+ {{ card_content }} +
+ {%- endif -%} + {%- endfor -%} +
+
+
+ +{% schema %} +{ + "name": "Get Yours trust grid", + "tag": "section", + "class": "section", + "max_blocks": 3, + "disabled_on": { + "groups": ["header", "footer"] + }, + "settings": [ + { + "type": "inline_richtext", + "id": "heading", + "label": "Heading", + "default": "Why shop with Get Yours" + }, + { + "type": "checkbox", + "id": "show_heading", + "label": "Show heading", + "default": false + }, + { + "type": "color_scheme", + "id": "color_scheme", + "label": "Color scheme", + "default": "scheme-2" + } + ], + "blocks": [ + { + "type": "trust_item", + "name": "Trust item", + "settings": [ + { + "type": "select", + "id": "icon", + "label": "Icon", + "options": [ + { "value": "secure", "label": "Secure payments" }, + { "value": "delivery", "label": "Delivery" }, + { "value": "support", "label": "Support" } + ], + "default": "secure" + }, + { + "type": "inline_richtext", + "id": "title", + "label": "Title", + "default": "Secure Payments" + }, + { + "type": "richtext", + "id": "description", + "label": "Description", + "default": "

Secure checkout through trusted payment providers.

" + }, + { + "type": "url", + "id": "link", + "label": "Optional link" + } + ] + } + ], + "presets": [ + { + "name": "Get Yours trust grid", + "blocks": [ + { + "type": "trust_item", + "settings": { + "icon": "secure", + "title": "Secure Payments", + "description": "

Secure checkout through trusted payment providers.

" + } + }, + { + "type": "trust_item", + "settings": { + "icon": "delivery", + "title": "Clear Delivery", + "description": "

Clear delivery estimates and tracking updates where available.

" + } + }, + { + "type": "trust_item", + "settings": { + "icon": "support", + "title": "WhatsApp Support", + "description": "

Get order help from the Get Yours support team on WhatsApp.

" + } + } + ] + } + ] +} +{% endschema %} diff --git a/get-yours-shopify-theme/sections/header-group.json b/get-yours-shopify-theme/sections/header-group.json new file mode 100644 index 00000000000..2f5b80fd75c --- /dev/null +++ b/get-yours-shopify-theme/sections/header-group.json @@ -0,0 +1,81 @@ +/* + * ------------------------------------------------------------ + * IMPORTANT: The contents of this file are auto-generated. + * + * This file may be updated by the Shopify admin theme editor + * or related systems. Please exercise caution as any changes + * made to this file may be overwritten. + * ------------------------------------------------------------ + */ +{ + "name": "t:sections.header.name", + "type": "header", + "sections": { + "announcement-bar": { + "type": "announcement-bar", + "blocks": { + "opening-deals": { + "type": "reassurance", + "settings": { + "icon": "deal", + "text": "Opening deals", + "link": "" + } + }, + "secure-payments": { + "type": "reassurance", + "settings": { + "icon": "secure", + "text": "Secure payments", + "link": "" + } + }, + "whatsapp-support": { + "type": "reassurance", + "settings": { + "icon": "support", + "text": "WhatsApp support", + "link": "" + } + } + }, + "block_order": [ + "opening-deals", + "secure-payments", + "whatsapp-support" + ], + "settings": { + "track_order_label": "Track Order", + "track_order_link": "", + "newsletter_label": "Newsletter", + "newsletter_link": "" + } + }, + "header": { + "type": "header", + "settings": { + "logo_position": "middle-left", + "mobile_logo_position": "left", + "primary_navigation_menu": "get-yours-primary-navigation", + "browse_categories_label": "Browse Categories", + "menu_type_desktop": "dropdown", + "sticky_header_type": "always", + "show_line_separator": true, + "promotion_text": "", + "promotion_link": "", + "color_scheme": "scheme-1", + "menu_color_scheme": "scheme-1", + "enable_country_selector": false, + "enable_language_selector": false, + "enable_customer_avatar": true, + "margin_bottom": 0, + "padding_top": 16, + "padding_bottom": 16 + } + } + }, + "order": [ + "announcement-bar", + "header" + ] +} diff --git a/sections/header.liquid b/get-yours-shopify-theme/sections/header.liquid similarity index 74% rename from sections/header.liquid rename to get-yours-shopify-theme/sections/header.liquid index af5ff9ac238..be865e0f785 100644 --- a/sections/header.liquid +++ b/get-yours-shopify-theme/sections/header.liquid @@ -77,12 +77,8 @@ {%- style -%} - .header { - padding: {{ section.settings.padding_top | times: 0.5 | round: 0 }}px 3rem {{ section.settings.padding_bottom | times: 0.5 | round: 0 }}px 3rem; - } - .section-header { - position: sticky; /* This is for fixing a Safari z-index issue. PR #2147 */ + position: sticky; margin-bottom: {{ section.settings.margin_bottom | times: 0.75 | round: 0 }}px; } @@ -92,12 +88,6 @@ } } - @media screen and (min-width: 990px) { - .header { - padding-top: {{ section.settings.padding_top }}px; - padding-bottom: {{ section.settings.padding_bottom }}px; - } - } {%- endstyle -%} @@ -136,13 +126,15 @@ assign localization_forms = true endif -%} -
{%- endif -%} + + {{ 'sections.header.cart_label' | t }} + {{ cart.total_price | money }} +
+ + {% render 'gy-header-search', + input_id: 'GyMobileSearch', + class: 'gy-header-search--mobile' + %} + + + +
+
+
+ + {{- 'icon-hamburger.svg' | inline_asset_content -}} + {{ section.settings.browse_categories_label | escape }} + + +
+ + {%- if section.settings.primary_navigation_menu != blank -%} + {% render 'header-dropdown-menu', + menu: section.settings.primary_navigation_menu, + menu_color_scheme: section.settings.menu_color_scheme + %} + {%- endif -%} + + {%- if section.settings.promotion_text != blank and section.settings.promotion_link != blank -%} + + + {{ section.settings.promotion_text | escape }} + + {%- endif -%} +
+
@@ -424,6 +484,53 @@ } customElements.define('sticky-header', StickyHeader); + + const gyHeaderDisclosures = document.querySelectorAll('[data-gy-header-disclosure]'); + + gyHeaderDisclosures.forEach((details) => { + const summary = details.querySelector('summary'); + + const syncExpandedState = () => { + summary?.setAttribute('aria-expanded', details.open ? 'true' : 'false'); + }; + + details.addEventListener('toggle', () => { + syncExpandedState(); + if (!details.open) return; + + gyHeaderDisclosures.forEach((otherDetails) => { + if (otherDetails !== details) otherDetails.removeAttribute('open'); + }); + + document.querySelectorAll('.gy-header header-menu details[open]').forEach((menuDetails) => { + menuDetails.removeAttribute('open'); + }); + }); + + details.addEventListener('keydown', (event) => { + if (event.key !== 'Escape') return; + details.removeAttribute('open'); + syncExpandedState(); + summary?.focus(); + }); + + details.querySelectorAll('a').forEach((link) => { + link.addEventListener('click', () => { + details.removeAttribute('open'); + syncExpandedState(); + }); + }); + + syncExpandedState(); + }); + + document.addEventListener('click', (event) => { + gyHeaderDisclosures.forEach((details) => { + if (!details.open || details.contains(event.target)) return; + details.removeAttribute('open'); + details.querySelector('summary')?.setAttribute('aria-expanded', 'false'); + }); + }); {% endjavascript %} + + diff --git a/get-yours-static-prototype/pages/cart.html b/get-yours-static-prototype/pages/cart.html new file mode 100644 index 00000000000..f57993f16b1 --- /dev/null +++ b/get-yours-static-prototype/pages/cart.html @@ -0,0 +1,133 @@ + + + + + + Cart | Get Yours + + + + + + + +

Shopping Cart

Review your products before checkout.

Adjustable drawer divider set

Adjustable Drawer Divider Set

4 Pack · Fast delivery

R 149.00
Bamboo cutlery organiser

Expandable Bamboo Cutlery Organiser

Standard delivery

R 289.00
Continue Shopping
+ + + + + + diff --git a/get-yours-static-prototype/pages/collection-home-organisation.html b/get-yours-static-prototype/pages/collection-home-organisation.html new file mode 100644 index 00000000000..57eb9d6053c --- /dev/null +++ b/get-yours-static-prototype/pages/collection-home-organisation.html @@ -0,0 +1,150 @@ + + + + + + Home Organisation | Get Yours + + + + + + + +
+ +

Home Organisation

Smart storage and organising finds for your home.

+
+ +

Showing 1-12 of 48 products

+
+
+ + + + + + diff --git a/get-yours-static-prototype/pages/contact.html b/get-yours-static-prototype/pages/contact.html new file mode 100644 index 00000000000..ec1959942d2 --- /dev/null +++ b/get-yours-static-prototype/pages/contact.html @@ -0,0 +1,103 @@ + + + + + + Contact Support | Get Yours + + + + + + + +

Contact Support

Support should feel visible, human and easy to access.

WhatsApp support

Placeholder for WhatsApp support details and support hours.

Email support

Placeholder for email/contact form content. No backend is connected in this static prototype.

+ + + + + + diff --git a/get-yours-static-prototype/pages/faq.html b/get-yours-static-prototype/pages/faq.html new file mode 100644 index 00000000000..e2e287068e4 --- /dev/null +++ b/get-yours-static-prototype/pages/faq.html @@ -0,0 +1,103 @@ + + + + + + FAQ | Get Yours + + + + + + + +

FAQ

Common customer questions for the static prototype.

How long does delivery take?

Delivery timing will be shown before checkout and depends on fulfilment setup.

Are payments secure?

The final Shopify theme should use trusted payment providers and clear reassurance near checkout.

Can I return an item?

Return rules will be finalised before launch.

+ + + + + + diff --git a/get-yours-static-prototype/pages/privacy.html b/get-yours-static-prototype/pages/privacy.html new file mode 100644 index 00000000000..4ea2aa61dad --- /dev/null +++ b/get-yours-static-prototype/pages/privacy.html @@ -0,0 +1,103 @@ + + + + + + Privacy Policy | Get Yours + + + + + + + +

Privacy Policy

Placeholder privacy structure for later replacement with proper legal content.

Information collected

Placeholder: describe data collected through Shopify, payment providers and support channels.

How information is used

Placeholder: describe order fulfilment, support and legal compliance usage.

Customer rights

Placeholder: align with applicable South African privacy requirements before launch.

+ + + + + + diff --git a/get-yours-static-prototype/pages/product-adjustable-drawer-divider.html b/get-yours-static-prototype/pages/product-adjustable-drawer-divider.html new file mode 100644 index 00000000000..4bfbf60c39e --- /dev/null +++ b/get-yours-static-prototype/pages/product-adjustable-drawer-divider.html @@ -0,0 +1,139 @@ + + + + + + Adjustable Drawer Divider Set | Get Yours + + + + + + + +
+ +
+

Adjustable Drawer Divider Set (4 Pack)

★★★★☆ 128 Reviews

R 149

check_circle In Stock / Fast Delivery

Organize kitchen, office, or bedroom drawers with durable adjustable dividers. This 4-pack set expands to fit most standard drawers securely.

Buy Now
Secure PaymentsClear DeliveryWhatsApp SupportEasy Returns
+

Description

A practical everyday organiser for drawers in kitchens, desks, wardrobes and utility spaces. The clean white finish keeps the product feeling useful and modern.

Delivery

Delivery estimates are shown before checkout. Standard delivery applies unless a fast-delivery label is shown.

Returns

Return rules will be finalised before Shopify launch. This placeholder keeps the static prototype flow visible.

FAQs

FAQs will cover sizing, installation, delivery timing and support channels.

+ +
+ + + + + + diff --git a/get-yours-static-prototype/pages/returns.html b/get-yours-static-prototype/pages/returns.html new file mode 100644 index 00000000000..574e56ede88 --- /dev/null +++ b/get-yours-static-prototype/pages/returns.html @@ -0,0 +1,103 @@ + + + + + + Returns & Exchanges | Get Yours + + + + + + + +

Returns & Exchanges

Placeholder returns content for static prototype review.

Return window

Final returns policy must be drafted for South African ecommerce requirements before Shopify launch.

Support

Customers should be guided to WhatsApp or contact support for return questions.

+ + + + + + diff --git a/get-yours-static-prototype/pages/search.html b/get-yours-static-prototype/pages/search.html new file mode 100644 index 00000000000..92755c2ff26 --- /dev/null +++ b/get-yours-static-prototype/pages/search.html @@ -0,0 +1,103 @@ + + + + + + Search | Get Yours + + + + + + + +

Search

Search the static catalogue prototype. Results are representative only.

Search prototype

Use the shared header search bar to land here. Static search results can be connected later in Shopify.

Suggested searches

Home organisation, drawer dividers, desk accessories, kitchen storage and travel organisers.

+ + + + + + diff --git a/get-yours-static-prototype/pages/shipping.html b/get-yours-static-prototype/pages/shipping.html new file mode 100644 index 00000000000..c7dd06660fd --- /dev/null +++ b/get-yours-static-prototype/pages/shipping.html @@ -0,0 +1,103 @@ + + + + + + Shipping Info | Get Yours + + + + + + + +

Shipping Info

Clear delivery expectations are part of the Get Yours trust promise.

Standard shipping

Free standard shipping is presented for orders over R500 in this prototype. Final thresholds and timelines must be confirmed before launch.

Tracking

Track Order currently routes here until a Shopify order-status flow exists.

+ + + + + + diff --git a/get-yours-static-prototype/pages/terms.html b/get-yours-static-prototype/pages/terms.html new file mode 100644 index 00000000000..53593e6f8fd --- /dev/null +++ b/get-yours-static-prototype/pages/terms.html @@ -0,0 +1,103 @@ + + + + + + Terms of Service | Get Yours + + + + + + + +

Terms of Service

Placeholder terms structure for later replacement with proper legal content.

Store terms

Placeholder: define purchase, payment, delivery and support terms.

Product information

Placeholder: clarify product descriptions, pricing and availability.

Limitations

Placeholder: legal review required before publishing.

+ + + + + + diff --git a/sections/announcement-bar.liquid b/sections/announcement-bar.liquid deleted file mode 100644 index 0eff298d6bc..00000000000 --- a/sections/announcement-bar.liquid +++ /dev/null @@ -1,262 +0,0 @@ -{{ 'component-slideshow.css' | asset_url | stylesheet_tag }} -{{ 'component-slider.css' | asset_url | stylesheet_tag }} - -{%- liquid - assign social_icons = true - if settings.social_facebook_link == blank and settings.social_instagram_link == blank and settings.social_youtube_link == blank and settings.social_tiktok_link == blank and settings.social_twitter_link == blank and settings.social_pinterest_link == blank and settings.social_snapchat_link == blank and settings.social_tumblr_link == blank and settings.social_vimeo_link == blank - assign social_icons = false - endif - if section.settings.enable_country_selector or section.settings.enable_language_selector - assign language_country_selector = true - endif - if section.blocks.size > 0 - assign announcement_bar = true - endif --%} - -{% if social_icons %} - {{ 'component-list-social.css' | asset_url | stylesheet_tag }} -{% endif %} - - - -{% schema %} -{ - "name": "t:sections.announcement-bar.name", - "max_blocks": 12, - "class": "announcement-bar-section", - "enabled_on": { - "groups": ["header"] - }, - "settings": [ - { - "type": "checkbox", - "id": "auto_rotate", - "label": "t:sections.announcement-bar.settings.auto_rotate.label", - "default": false - }, - { - "type": "range", - "id": "change_slides_speed", - "min": 3, - "max": 10, - "step": 1, - "unit": "s", - "label": "t:sections.announcement-bar.settings.change_slides_speed.label", - "default": 5 - }, - { - "type": "color_scheme", - "id": "color_scheme", - "label": "t:sections.all.colors.label", - "default": "scheme-4" - }, - { - "type": "checkbox", - "id": "show_line_separator", - "default": true, - "label": "t:sections.header.settings.show_line_separator.label" - }, - { - "type": "header", - "content": "t:sections.announcement-bar.settings.heading_utilities.content" - }, - { - "type": "paragraph", - "content": "t:sections.announcement-bar.settings.paragraph.content" - }, - { - "type": "checkbox", - "id": "show_social", - "default": false, - "label": "t:sections.announcement-bar.settings.show_social.label", - "info": "t:sections.announcement-bar.settings.show_social.info" - }, - { - "type": "checkbox", - "id": "enable_country_selector", - "default": false, - "label": "t:sections.announcement-bar.settings.enable_country_selector.label", - "info": "t:sections.announcement-bar.settings.enable_country_selector.info" - }, - { - "type": "checkbox", - "id": "enable_language_selector", - "default": false, - "label": "t:sections.announcement-bar.settings.enable_language_selector.label", - "info": "t:sections.announcement-bar.settings.enable_language_selector.info" - } - ], - "blocks": [ - { - "type": "announcement", - "name": "t:sections.announcement-bar.blocks.announcement.name", - "settings": [ - { - "type": "text", - "id": "text", - "default": "t:sections.announcement-bar.blocks.announcement.settings.text.default", - "label": "t:sections.announcement-bar.blocks.announcement.settings.text.label" - }, - { - "type": "url", - "id": "link", - "label": "t:sections.announcement-bar.blocks.announcement.settings.link.label" - } - ] - } - ], - "presets": [ - { - "name": "t:sections.announcement-bar.presets.name", - "blocks": [ - { - "type": "announcement" - } - ] - } - ] -} -{% endschema %} diff --git a/sections/footer-group.json b/sections/footer-group.json deleted file mode 100644 index 6234f01624f..00000000000 --- a/sections/footer-group.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "name": "t:sections.footer.name", - "type": "footer", - "sections": { - "footer": { - "type": "footer", - "blocks": {}, - "block_order": [], - "settings": { - "color_scheme": "scheme-1", - "newsletter_enable": true, - "newsletter_heading": "Subscribe to our emails", - "enable_follow_on_shop": true, - "show_social": true, - "enable_country_selector": true, - "enable_language_selector": true, - "payment_enable": true, - "show_policy": true, - "margin_top": 0, - "padding_top": 36, - "padding_bottom": 36 - } - } - }, - "order": [ - "footer" - ] -} diff --git a/sections/header-group.json b/sections/header-group.json deleted file mode 100644 index 33c3876654c..00000000000 --- a/sections/header-group.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "name": "t:sections.header.name", - "type": "header", - "sections": { - "announcement-bar": { - "type": "announcement-bar", - "settings": { - "color_scheme": "scheme-1", - "show_line_separator": true, - "show_social": false, - "auto_rotate": false, - "change_slides_speed": 5, - "enable_country_selector": false, - "enable_language_selector": false - }, - "blocks": { - "announcement-bar-0": { - "type": "announcement", - "settings": { - "text": "Welcome to our store", - "text_alignment": "center", - "color_scheme": "scheme-1", - "link": "" - } - } - }, - "block_order": [ - "announcement-bar-0" - ] - }, - "header": { - "type": "header", - "settings": { - "color_scheme": "scheme-1", - "menu_color_scheme": "scheme-1", - "logo_position": "middle-left", - "menu": "main-menu", - "menu_type_desktop": "dropdown", - "sticky_header_type": "on-scroll-up", - "show_line_separator": true, - "enable_country_selector": true, - "enable_language_selector": true, - "enable_customer_avatar": true, - "mobile_logo_position": "center", - "margin_bottom": 0, - "padding_top": 20, - "padding_bottom": 20 - } - } - }, - "order": [ - "announcement-bar", - "header" - ] -} diff --git a/templates/index.json b/templates/index.json deleted file mode 100644 index f5b6ea329d9..00000000000 --- a/templates/index.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "sections": { - "image_banner": { - "type": "image-banner", - "blocks": { - "heading": { - "type": "heading", - "settings": { - "heading": "Browse our latest products", - "heading_size": "h0" - } - }, - "button": { - "type": "buttons", - "settings": { - "button_label_1": "Shop all", - "button_link_1": "shopify://collections/all", - "button_style_secondary_1": true, - "button_label_2": "", - "button_link_2": "", - "button_style_secondary_2": false - } - } - }, - "block_order": [ - "heading", - "button" - ], - "settings": { - "image_overlay_opacity": 40, - "image_height": "large", - "desktop_content_position": "bottom-center", - "show_text_box": false, - "image_behavior": "none", - "desktop_content_alignment": "center", - "color_scheme": "scheme-3", - "mobile_content_alignment": "center", - "stack_images_on_mobile": false, - "show_text_below": false - } - }, - "featured_collection": { - "type": "featured-collection", - "settings": { - "title": "Featured products", - "heading_size": "h2", - "description": "", - "show_description": false, - "description_style": "body", - "collection": "all", - "products_to_show": 8, - "columns_desktop": 4, - "color_scheme": "scheme-1", - "full_width": false, - "show_view_all": true, - "view_all_style": "solid", - "enable_desktop_slider": false, - "swipe_on_mobile": false, - "image_ratio": "adapt", - "image_shape": "default", - "show_secondary_image": true, - "show_vendor": false, - "show_rating": false, - "quick_add": "none", - "columns_mobile": "2", - "padding_top": 44, - "padding_bottom": 36 - } - } - }, - "order": [ - "image_banner", - "featured_collection" - ] -}