Handover Dashboard

Technical Handover Dashboard

Central reference for McCalls website management and the custom Outfit Builder.

ShopifyReact BuilderLocal BuildShopify Theme Assets

Overview

Scope and ownership of the systems being handed over.

Scope summary Confirmed
What BCA inherited versus developed.
⌄
Area Position
McCalls website Pre-existing Shopify website. BCA took over ongoing management, fixes and requested changes; BCA did not originally develop the website.
Outfit Builder The principal custom development undertaken by BCA, including the Shopify-focused redevelopment/migration and subsequent maintenance.
Handover scope Documents the actual systems, code, services and configurations used. Generic infrastructure that does not exist is not applicable.
Non-technical overview McCalls reference
Where the Outfit Builder sits and what McCalls controls.
⌄

The Outfit Builder is a custom feature that runs within the existing McCalls Shopify website. McCalls does not need a separate server or BabyCEO-owned service for it to operate.

Area Simple explanation
Live Builder The customer-facing Builder runs on the McCalls Shopify website at https://www.mccalls.co.uk/pages/outfit-builder.
Products & content Products shown in the Builder are controlled through McCalls' Shopify products, Outfit Builder collections and relevant metafields.
Builder imagery The base mannequin, thumbnails and garment overlay images used by the live Builder are hosted within McCalls' Shopify environment.
Editable source The Builder is a React project. The complete editable source has been handed over to McCalls and is now held in the McCalls-owned GitHub repository. A ZIP copy is also stored in McCalls' own Shopify Files.
Live code in Shopify The Shopify theme contains the compiled outfit-builder.css and outfit-builder.js. These are generated from the editable React source.
Future code changes A developer edits and tests the React project locally, runs npm run build, then replaces the two compiled Builder files in Shopify.
Hire enquiries The Builder sends hire-enquiry data to McCalls' Make.com automation, which handles the relevant email workflow.
Analytics Builder tracking uses McCalls' existing GA4 setup; there is no separate BabyCEO-owned Builder analytics account.
Future developer access A future developer needs McCalls Shopify access, the handed-over React source (ZIP/GitHub), and Make.com access when working on the hire-enquiry workflow.
In short: Shopify is the live platform and product/content source; the React project is the editable source; the two compiled CSS/JS files run the Builder in Shopify; and Make.com handles the hire-enquiry automation.

Shopify Website

Core website platform and relevant customisations.

Platform Active
⌄
Item Details
Platform Shopify
Hosting Shopify-managed for the main website.
Original website development Not developed by BCA.
BCA work Ongoing management, requested theme/code changes, fixes, integrations and related digital work.
Generic infrastructure N/A unless specifically listed
⌄

There is no separate BCA-built server/database/SSL/CDN infrastructure for the main Shopify website. Any external service that genuinely applies is listed under Apps & Integrations.

Outfit Builder

Primary custom-development handover.

Architecture Current
⌄
Component Current setup
Front end Custom React application.
Commerce/data Shopify products, variants and Builder-specific product data/metafields.
Preview Transparent garment layers are composed over a shared mannequin base.
Hire / Buy Separate availability and product-selection logic within the Builder.
Cart Completed selections are converted into the relevant Shopify cart items/properties.
Development & deployment Editable React source is held locally. Development/testing uses npm run dev; production assets are generated with npm run build and the resulting CSS/JavaScript is manually copied into the relevant Shopify theme files via Edit code.
Outfit codes Current production logic
McCalls-compatible selection encoding and reconstruction.
⌄

Each Outfit Builder product has a Shopify custom.outfit_code metafield. The Builder loads this value as outfitCode and uses it to build the existing McCalls enquiry-system outfit code.

Active format: K[t:4][s:3]H[sh:2]N[nk:2][so:1][j:2]L[h:2][B|H] — 21 characters when all expected components are present.

Component Length / meaning
Tartan 4 characters
Sporran 3 characters
Shirt 2 characters
Neckwear 2 characters
Shoes 1 character
Jacket 2 characters
Hose 2 characters
Final character B = Buy, H = Hire

The encoder finds each selected item by its internal ref or code, reads its outfitCode, and assembles the result using the fixed K, H, N and L separators. This preserves compatibility with the existing McCalls enquiry system.

The decoder accepts the existing 21-character format beginning with K, extracts the fixed-position component codes and matches them back to Builder products using their outfitCode values.

Important: the source also contains an index-based Base-36 fallback format, but it is currently disabled/commented out for both encoding and decoding. The live Builder therefore relies on the Shopify outfit-code metafields. If encoding cannot produce the old-format code, the current public encoder returns an empty string.
Preview alignment exceptions Maintenance note
⌄

Some source mannequin images are positioned differently within their transparent canvas. These are corrected individually in OutfitPreview.jsx; do not use a global jacket transform to fix a single image.

Image key Garment Correction
contemporary-lightgrey Light Grey Contemporary Tweed x +3 / y -3
crail_black_herringbone Black Crail Herringbone Tweed x +3 / y -3
jacket_3805 Dark Green Crail Tweed x +2 / y -2
crail_black_5 Black Crail Oban 5 Button x +3 / y -2
charlie_black_5 Black Prince Charlie 5 Button x +3 / y -3
sherrifmuir-lightgrey Grey Sherrifmuir x +4 / y -3

Products & Metafields

How products are made available to the Outfit Builder and the product-level data the Builder uses.

How Builder products are organised Shopify-managed
⌄

The Outfit Builder uses Shopify collections to determine which products are available within the Hire and Buy sides of the Builder. Builder collections follow the naming convention Outfit Builder - Hire... or Outfit Builder - Buy.... Sub-collections are used for the relevant garment/product groups such as jackets, sporrans, shoes, hose, shirts, neckwear and kilts.

Important: there is no separate external product-mapping database. The Builder product setup is managed through the relevant Shopify collections together with the product metafields described below.
Product metafields
⌄
Metafield / data Purpose
Outfit code (custom.outfit_code) McCalls-compatible product code. The Builder loads this as outfitCode and uses it when encoding and decoding complete outfit selections.
Outfit Builder Title The product name/title displayed within the Outfit Builder.
Outfit Builder Mannequin Image Shopify CDN URL for the transparent mannequin/garment layer used in the live outfit preview.
Outfit Builder Thumbnail Thumbnail image used for the product's selection card in the Builder.
Hide from search Used to prevent Builder-only products from appearing in normal storefront search.
Hide product Where used, the value 1 marks the product as hidden from internal search/site-map behaviour.
The exact fields visible on a product may include other McCalls metafields unrelated to the Outfit Builder. The fields above are the relevant Builder/product-visibility fields used when maintaining Builder products.
Adding a product to the Outfit Builder
Routine Shopify content maintenance — no React code change is normally required.
⌄
  1. Create or open the required product in Shopify.
  2. Add the product to the appropriate collection beginning Outfit Builder - Hire or Outfit Builder - Buy, including the relevant garment/category collection where applicable.
  3. Enter the product's Outfit code (custom.outfit_code). Use the correct code length/value for that product type because the live McCalls outfit code is assembled directly from these metafield values.
  4. Enter the Outfit Builder Title that should appear in the Builder.
  5. Add the Outfit Builder Thumbnail.
  6. Add the Outfit Builder Mannequin Image / Shopify-hosted preview layer where the product requires an overlay image.
  7. Set the relevant product visibility metafield(s), including Hide from search and Hide product, where the product should remain Builder-only.
  8. Save the product and verify it appears in the correct Hire/Buy section of the live Outfit Builder.
Normal workflow: adding or maintaining Builder products is done directly in Shopify through collections and metafields. A source-code rebuild is only required if the Builder's actual functionality or logic needs to change.

Imagery

Current Shopify-hosted image setup and legacy image-system status.

Current setup Shopify-hosted
⌄
Area Details
Base mannequin Shopify CDN image.
Garment overlays Transparent PNG/WebP imagery hosted in Shopify and referenced by the Builder.
Cloudinary Legacy / no longer required. The live Builder imagery is Shopify-hosted. Cloudinary is not part of the current image-management workflow and no Cloudinary account or image-management process is required to operate or maintain the current Builder.
Do not assume a source image is aligned simply because its canvas dimensions match another image. Check the garment's position inside the transparent canvas.

Source & Deployment

How the Outfit Builder source is transferred, developed, built and published.

Source & production setup Current
⌄
Item Details
Source repository McCalls-owned GitHub repository. This is the preferred source/version-control location for future development.
Editable source The complete React project has been handed over and is available in the McCalls-owned GitHub repository.
Source handover Complete. In addition to GitHub, a ZIP copy of the editable project is stored in McCalls' own Shopify Files/CDN.
Local development Open the project in an IDE and run npm run dev to start the local development version for testing.
Production build Run npm run build. This creates the compiled production CSS and JavaScript assets.
Hosting Shopify. There is no separate Render or other external production host for the Outfit Builder.
Live Builder https://www.mccalls.co.uk/pages/outfit-builder
Deployment After npm run build, the generated production assets are copied into exactly two Shopify theme files under Online Store → Themes → Edit code: outfit-builder.css and outfit-builder.js. These are the only two Shopify code files that need to be edited/replaced when deploying Builder code changes.
Shopify files to edit ONLY THESE TWO
⌄
Shopify theme file What goes into it
outfit-builder.css The compiled production CSS generated after running npm run build.
outfit-builder.js The compiled production JavaScript generated after running npm run build.
Deployment rule: make functional/code changes in the local React source project — not directly in compiled Shopify code. Test locally using npm run dev, then run npm run build. Copy the resulting CSS into outfit-builder.css and JavaScript into outfit-builder.js. For normal Builder development/deployment, no other Shopify theme files need to be changed.
Developer workflow
⌄
  1. Clone/download the current Outfit Builder source from the McCalls-owned GitHub repository. The Shopify Files ZIP can be retained as an additional handover copy.
  2. Open the project locally in an IDE.
  3. Run npm run dev and make/test the required changes locally.
  4. When the changes are verified, run npm run build.
  5. Take the generated production CSS and JavaScript from the build output.
  6. Open the McCalls Shopify theme and go to Online Store → Themes → Edit code.
  7. Update outfit-builder.css with the newly built CSS.
  8. Update outfit-builder.js with the newly built JavaScript.
  9. Do not edit any other Shopify theme code files for a normal Outfit Builder code deployment.
  10. Save both files and test the live Builder at https://www.mccalls.co.uk/pages/outfit-builder.
Important: the editable React source does not run on Shopify. Changes should be made from the McCalls-owned GitHub source in a local development copy, tested with npm run dev, and compiled with npm run build. For deployment, only the resulting CSS and JavaScript are copied to Shopify, into outfit-builder.css and outfit-builder.js respectively. These are the only two Shopify theme files that should need editing for Builder code changes.
Recovery / rollback after a deployment Shopify
How to return the Outfit Builder to the previous working production version.
⌄

A normal Outfit Builder deployment changes only outfit-builder.css and outfit-builder.js. If a deployment causes a problem, revert those files to their previous working versions using Shopify's code-editor version history.

  1. Go to Shopify Admin → Online Store → Themes → Edit code for the affected theme.
  2. Open outfit-builder.css and use Shopify's file/version history to restore the last known working version from before the deployment.
  3. Open outfit-builder.js and restore the matching previous working version.
  4. Save the restored files where required.
  5. Test the live Builder and verify loading, selections, preview rendering and the relevant Hire/Buy flow.
Important: restore both Builder assets from the same previous working deployment so the JavaScript and CSS remain matched. A normal Builder rollback does not require restoring the entire Shopify website or changing unrelated theme files.

If the problem originated in the editable React source, return to the last known working source version, test locally with npm run dev, run npm run build, and redeploy the resulting outfit-builder.css and outfit-builder.js.

Code Structure

File-by-file guide to the React source supplied in the Outfit Builder ZIP.

Top-level application files Start here
Core entry points for the local React project.
⌄
File Purpose
src/main.jsx Application entry point. Boots the React application and mounts the Outfit Builder into the page.
src/App.jsx Main application controller/layout. Connects the Builder steps, state, selected products and major components together.
src/styles/main.css Main source stylesheet for the Outfit Builder before production compilation. CSS changes should be made here rather than directly in the compiled Shopify outfit-builder.css.
Components
Reusable UI and workflow pieces under src/components/.
⌄
File Purpose
BuyModal.jsx Buy-side modal used when the customer proceeds with a purchase flow.
DetailsPanel.jsx Legacy / currently unused. Present in the source but not imported by the active application flow.
ElementMenu.jsx Controls the menu/navigation for Builder element categories.
ElementSelector.jsx Reusable selector for choosing products/options within a Builder category.
EnquiryModal.jsx Legacy / currently unused. It is not imported by the active application. Current hire enquiries are submitted from SizeModal.jsx directly to the McCalls Make.com webhook.
HireBuyToggle.jsx Legacy / currently unused. Present in the source but not imported by the active application flow.
OutfitDesignerApp.jsx Primary Outfit Builder application component. Coordinates the main Builder experience and selected outfit state.
OutfitPreview.jsx Renders the mannequin preview and layered garment images. Also contains individual garment alignment corrections where source images require offsets.
PriceDisplay.jsx Legacy / currently unused. Present in the source but not imported by the active application flow.
ShareModal.jsx Handles sharing a configured outfit / share-related UI.
SizeModal.jsx Active hire-enquiry form. Collects customer details and measurements, then posts the enquiry payload directly to the McCalls Make.com webhook.
TartanSelector.jsx Tartan-specific product/variant selector and UI behaviour.
UpsellModal.jsx Displays optional upsell products returned from Shopify upsell metafields.
Library / logic files
Non-visual logic under src/lib/.
⌄
File Purpose
analytics.js GA4 tracking helper. Sends Builder-specific events such as ob_click and ob_field_change through McCalls' existing window.gtag.
cloudinary.js Legacy. Cloudinary is no longer required by the current Shopify-hosted imagery workflow. Any remaining helper/import references are remnants of the older implementation and may be removed as code cleanup, provided the related import/call references are removed together so the project still builds.
email.js Legacy / unused. This file belongs to the older EnquiryModal.jsx/EmailJS flow and is not part of the current live hire-enquiry workflow. Current submissions go from SizeModal.jsx to Make.com.
outfitCode.js Encodes and decodes the existing McCalls 21-character outfit code using Shopify custom.outfit_code metafields.
pricing.js Legacy / currently unused. Present in the source but not imported by the active application.
shopify.js Main Shopify integration layer. Uses the Shopify Storefront GraphQL API to discover Outfit Builder collections/products, read metafields, pricing, variants and upsells, resolve selected products to variants, and hand items to the native Shopify cart.
Icons folder
⌄

src/icons/ contains local icon assets/components used by the Outfit Builder interface. These are part of the source project and will be bundled when npm run build is run.

How a future developer should use this structure Important
⌄
  1. Start with src/App.jsx and src/components/OutfitDesignerApp.jsx to understand the overall application flow.
  2. Use src/components/ for UI-specific changes.
  3. Use src/lib/shopify.js for Shopify product, Storefront API, variant, upsell and cart behaviour.
  4. Use src/lib/outfitCode.js for outfit-code encoding/decoding behaviour.
  5. Use src/lib/analytics.js for tracking changes.
  6. Use src/styles/main.css for visual styling changes.
  7. Test locally with npm run dev.
  8. Build production assets with npm run build.
  9. Deploy only the compiled output to Shopify by updating outfit-builder.css and outfit-builder.js.
Do not edit the compiled Shopify JavaScript as the primary source. The handed-over local ZIP is the editable source of truth. Shopify only contains the built production output.

Apps & Integrations

External services relevant to the current McCalls setup, including the hire-enquiry automation.

Current services Active
⌄
Service Purpose Handover position
Shopify Main website, products, checkout, Outfit Builder production assets and current Builder imagery. McCalls-owned primary live platform.
Make.com Receives Outfit Builder hire enquiries from SizeModal.jsx, routes each enquiry to the selected branch, sends the internal branch notification and sends the customer confirmation email. McCalls-owned account and scenario.
Gmail / Google Email connection Used by the Make.com scenario to send branch notifications and customer confirmations. Scenario uses McCalls' Google email connection.
Powerful Form Builder Separate Shopify contact-form functionality, including branch-based dynamic email routing where configured. Managed through the Shopify app/store setup; it is not the Outfit Builder hire-enquiry automation.
Make.com — McCalls Hire Automation Active
Where to look if the hire-enquiry workflow needs changing.
⌄

The active Make.com scenario is named McCalls Hire Automation. The Outfit Builder's SizeModal.jsx sends the hire-enquiry payload to the scenario's custom webhook. Make then routes the submission according to the customer's selected branch.

Stage What it does Where to change it
1. Custom webhook Receives the Outfit Builder submission, including outfit code/link, selected outfit items, customer details, event information, measurements and address. Make.com scenario → first module, Hire Automation Webhook. The sending code is in src/components/SizeModal.jsx.
2. Router Checks the submitted branch value and sends the bundle down the matching branch route. Make.com scenario → router immediately after the webhook.
3. Internal branch email Sends the selected branch the hire request, readable outfit selection, outfit code/link, customer details, measurements and address. First Gmail/Google Email module inside the relevant branch route.
4. Customer confirmation Sends a confirmation email back to the email address submitted by the customer. Second Gmail/Google Email module inside the relevant branch route.
Important: this workflow does not use src/lib/email.js. The current live Builder posts directly from SizeModal.jsx to Make.com.
Make.com branch routes 8 routes
Current routing destinations in the handed-over scenario.
⌄
Branch Internal branch recipient
Aberdeen hire@mccalls.co.uk + levi@mccalls.co.uk
Broughty Ferry bferry@mccalls.co.uk + levi@mccalls.co.uk
Dundee dundee@mccalls.co.uk + levi@mccalls.co.uk
Edinburgh edinburgh@mccalls.co.uk + levi@mccalls.co.uk
Elgin elgin@mccalls.co.uk + levi@mccalls.co.uk
Glasgow glasgow@mccalls.co.uk + levi@mccalls.co.uk
Inverurie inverurie@mccalls.co.uk + levi@mccalls.co.uk
Tillicoultry daiglen@mccalls.co.uk + levi@mccalls.co.uk

Each route contains an internal branch email followed by a customer confirmation email sent to the submitted customer email address.

Common Make.com changes
⌄
If this changes… Update here
Branch email recipient Edit the To field of that branch's first email module.
Internal hire email wording/layout Edit the HTML content of the first email module in each applicable branch route.
Customer confirmation wording/layout Edit the HTML content of the second email module in each applicable branch route.
Add/remove a branch Update the branch options in SizeModal.jsx and add/remove the corresponding Make router route and email modules.
Change submitted fields Update the payload in SizeModal.jsx, then update the webhook data structure/mappings and any affected email modules in Make.com.
Troubleshooting: first check the Make.com scenario run history. Confirm the webhook received the submission, then identify which router route ran and whether the internal/customer email module succeeded. Customer confirmation requires a valid submitted email address.
Legacy service status Not required
⌄
Service / item Status
Cloudinary Legacy and not required by the current Builder. Live Builder imagery is hosted in Shopify.
mapping.json Legacy and not required by the current product-loading path. Products are discovered dynamically from Shopify Outfit Builder collections and metafields.

Shopify Storefront API

How the Outfit Builder reads Shopify collections, products, metafields, variants, prices and upsells.

API setup Active
Direct browser-to-Shopify GraphQL requests.
⌄
Item Current setup
API Shopify Storefront GraphQL API
Shopify domain mccalls-highlandwear.myshopify.com
API version 2026-04
Endpoint https://mccalls-highlandwear.myshopify.com/api/2026-04/graphql.json
Authentication Public Storefront access token sent in the X-Shopify-Storefront-Access-Token header.
Request method POST with JSON containing GraphQL query and variables.
Important: this is a public Storefront token intended for frontend/browser use. Do not replace it with a Shopify Admin API secret or any private credential.
How products are discovered
No hard-coded product list is required.
⌄

The Builder queries Shopify collections matching Outfit and then filters them by collection handle:

  • Hire collections start with outfit-builder-hire-.
  • Buy collections start with outfit-builder-buy-.

The collection handle determines the Builder category — tartans, sporrans, shirts, shoes, hose, jackets or neckwear. This is why adding a product to the correct Shopify Outfit Builder collection normally makes it available without changing React code.

Collection metafields read by the Builder
⌄
Metafield Purpose
custom.collection_icon Collection/category icon.
custom.outfit_collection_title Builder-facing collection title.
custom.outfit_description Builder-facing collection description.
Product & variant metafields read through Storefront API
⌄
Metafield Purpose
custom.outfit_builder_thumbnail_image Product-level thumbnail.
custom.outfit_builder_mannequin_image Product-level mannequin/overlay image.
custom.outfit_builder_title Product-level Builder display title.
custom.outfit_code Product-level McCalls-compatible outfit code.
custom.outfit_thumbnail_image Variant-level thumbnail used for variant-based tartans.
custom.outfit_builder_mannequin_image Variant-level mannequin/overlay image where required.
custom.outfit_title Variant-level Builder title.
custom.outfit_varriant_show Controls whether a variant is shown. A value of false skips it.
custom.outfit_code Variant-level outfit code; for tartan variants this can override the parent product's code.
Upsells
Loaded from Shopify reference metafields.
⌄
Metafield Behaviour
custom.outfit_builder_upsells Variant-specific upsells. Used first when present.
custom.product_upsell Parent-product fallback when a selected variant has no variant-specific upsells.

The Builder resolves the referenced products and reads their handle, title, image, price, currency, default/selected variant and availability. Upsell failure is non-critical; the Builder continues loading even if the upsell query fails.

Prices, availability & variant resolution
⌄

The Builder reads current Shopify prices and availableForSale directly from the Storefront API. It can resolve products by handle and can use a Shopify title search fallback for certain categories.

When adding to cart, the Builder resolves the correct Shopify variant based on selected options:

  • Hire tartan/kilt: selected Jacket & Waistcoat option.
  • Shirt: Collar size.
  • Jacket: Chest + Length.
  • Shoes: selected Shopify shoe size.
  • Hose: derived from shoe size — Small 4–7, Medium 8–10, Large 11–13.
Cart hand-off to Shopify
Storefront API resolves variants; Shopify's normal cart endpoint receives the order items.
⌄

After variant IDs are resolved, the Builder creates a standard HTML form and posts directly to:

https://www.mccalls.co.uk/cart/add

Hire items receive internal line-item properties including _outfit_builder=hire and _outfit_code. Customer measurements and event details are attached to the first cart item.

Customer/cart property Purpose
Waist / Seat / Height / Kilt Length Hire measurements.
Collar Size Shirt measurement.
Jacket Size / Sleeve Length Jacket measurement.
Shoe Size / size system / displayed size Shoe selection details.
Accidental Damage Insurance Selected insurance option.
Occasion / Event Information Customer event information.
Date of Collection Hire collection date.
Measurement Disclaimer Confirmed Customer acknowledgement.
Outfit Code Generated McCalls outfit code.
Legacy mapping helpers Not required for normal product loading
⌄

The current source notes that mapping.json is no longer needed by the active product-loading path. Current Builder elements are discovered dynamically from Shopify Outfit Builder collections and metafields. Some older helper functions remain in source; verify actual call sites before removing legacy code.

Analytics & Tracking

Builder-specific GA4 event tracking implemented in the frontend.

Tracking setup Active
⌄

The Outfit Builder uses McCalls' existing GA4 implementation through window.gtag. The Builder does not own or require a separate GA4 account.

All Builder events are sent with:

app: 'outfit_builder'

If window.gtag is unavailable, the tracking helper returns immediately and does not interrupt Builder functionality.

Tracked events 2 custom events
⌄
Event Trigger Parameters
ob_click Any click on a button or a element. app = outfit_builder
text = button/link text, title or aria-label, truncated to 80 characters
tag = element tag name
url = element href or current page URL
ob_field_change Any change event on INPUT, SELECT or TEXTAREA. app = outfit_builder
field_type = input type or element type
field_name = field name, placeholder or class name
How it is installed
Global listeners mean individual components do not need separate tracking code.
⌄

The helper trackEvent(eventName, params) sends the GA4 event:

window.gtag('event', eventName, {
  app: 'outfit_builder',
  ...params
});

installGlobalTracking() installs document-level listeners for clicks and field changes. Because the listeners are global, new buttons, links and form controls are automatically tracked without adding an individual GA4 call to every React component.

Account ownership McCalls-owned
⌄

GA4, Google Ads, Merchant Center and Meta are already owned and controlled by McCalls. No BCA account transfer is required. The only handover item here is the custom Outfit Builder event implementation described above.

Maintenance Guide

Common Builder administration and developer tasks.

Adding / changing a Builder product
⌄
  1. Create or update the Shopify product/variant.
  2. Apply the correct Builder classification/availability data.
  3. Populate the required Builder title/code fields.
  4. Upload/update thumbnail imagery where used.
  5. Upload the transparent mannequin layer to Shopify and update its Builder image reference.
  6. Test the product in the Builder locally.
  7. Verify preview alignment, outfit-code behaviour and cart output.
Troubleshooting
⌄
Problem First checks
Product/image missing Check product data, Builder code and mannequin-image URL.
One garment misaligned Check source-image registration and use an individual correction if required.
Outfit code fails Check that every selected Builder product has the correct custom.outfit_code metafield and that each value uses the expected length for its product type. The index-based fallback is disabled in the current production code.
Local works, production does not Confirm the latest production build was generated and the correct compiled CSS/JS files were copied into Shopify; then clear browser/cache before changing source code.
Outfit Builder hire enquiry/email fails Check the McCalls Hire Automation run history in Make.com. Confirm the webhook received the payload, the correct branch route ran, and the relevant Gmail modules completed. Customer confirmation also requires a valid submitted email address.

Known Issues / Notes

Current maintenance notes and legacy items a future developer may see in the handed-over source.

Current notes Handover status
⌄
Area Note
Garment imagery Some mannequin assets require individual alignment offsets. These are intentional per-image corrections rather than a global preview transform.
Cloudinary Legacy / no longer required. Current live imagery is Shopify-hosted. Remaining Cloudinary helper/import references in source are old implementation remnants and may be removed together as code cleanup.
mapping.json Legacy / no longer required. Current products are loaded dynamically from Shopify Outfit Builder collections and metafields. The file may be removed from the maintained source.
Legacy source files EnquiryModal.jsx, email.js, DetailsPanel.jsx, HireBuyToggle.jsx, PriceDisplay.jsx and pricing.js are not part of the current active application flow. They remain only as older source unless removed during cleanup.
Hire automation The active hire-enquiry workflow is SizeModal.jsx → Make.com McCalls Hire Automation → selected branch email → customer confirmation email.
No separate Cloudinary or mapping-file setup is required to maintain the current live Builder.

Access & Transfer

What McCalls already owns and what has been supplied for the technical handover.

Access & source status Current
⌄
System / item Status Details
Shopify Already owned by McCalls McCalls owns and controls the Shopify store and granted BCA access. No Shopify ownership or access transfer is required from BCA.
Outfit Builder source / GitHub Provided The complete editable React source has been handed over in the McCalls-owned GitHub repository. An additional ZIP handover copy is stored on McCalls' own Shopify CDN:

https://cdn.shopify.com/s/files/1/0940/2751/4238/files/mccalls-outfit-builder-main.zip?v=1788935407
Make.com Already owned by McCalls The McCalls Hire Automation scenario is in McCalls' Make.com account. No ownership transfer is required. Its workflow and maintenance points are documented under Apps & Integrations.
Analytics / advertising accounts Already owned by McCalls GA4, Google Ads, Merchant Center and Meta are already owned and controlled by McCalls. No BCA ownership transfer is required.
Cloudinary Phased out Legacy only. Cloudinary is not required by the current live Builder; current Builder imagery is hosted in Shopify.
Technical handover dashboard Provided This dashboard is the ongoing technical reference for the website changes and Outfit Builder handover.
Source of truth: future Builder development should be carried out from the McCalls-owned GitHub repository. The Shopify Files ZIP is an additional handover copy. The Shopify theme contains only the compiled production files outfit-builder.css and outfit-builder.js.