Back to all documents
Workstream 01

Shopify store: catalogue, theme, redirects

Internal working notes, pulled 1 Sep 2026. Not the client deliverable. Second person and byline treatment happens at the report-writing stage (docs/audit/90-friction-register.md and beyond).

Scope per the controller ruling on this task: record catalogue state as raw fact (status, inventory, whether a field is populated or empty, handles, variants, publish state, redirects, theme wiring). This file does not write SEO recommendations or SEO findings. Task 4 owns SEO interpretation and its own finding IDs. Where an SEO-shaped fact is recorded here (an empty title field, for example), it appears in the raw appendix as a fact only, with no class, tier, or finding ID attached, so it cannot double-enter the merged register under two IDs.

What would falsify these findings

These findings die if Nuuk's Stage 1 has already shipped them. Stage 1 (Nuuk's June 2026 audit plus the signed Stage 1 SOW) scoped: duplicate-product consolidation into one canonical listing, description-to-accordion conversion, Add to Cart above the fold, a repositioned Judge.me reviews widget, an About Us rebuild, a /pt unpublish, a post-purchase upsell app, and an email capture/lifecycle setup replacing the direct-discount mechanic.

Checked directly against the 1 Sep 2026 pull, not assumed:

still exist (see catalogue below), including the DRAFT [Nuuk]-named one. Not shipped.

task's business regardless; see Task 4).

exist for specific /pt/products/* paths; the bare /pt and /pt/ paths still return 404 on direct curl, 1 Sep. Not shipped, or shipped partially.

templates/product.json but is explicitly disabled: true.** Not live-enabled.

absent from templates/product.json's section order.** Not wired in, so not live regardless of whether the file was written for Stage 1 or predates it.

sections/main-product.liquid (101,760 chars) turns up 13 hits for "accordion", 2 for <details, 4 for "sticky", and 12 for "reviews", with 0 for "judge.me"/"judgeme". Something accordion- and sticky-shaped already exists in the live product section. Whether that is Stage 1 landing in-flight, an earlier build, or unrelated theme scaffolding is not determined here. Task 6 (CRO/offer) should check Stage 1's actual shipped state against this before writing any product-page finding, precisely because this is the highest prior-art-risk workstream in the whole audit.

Net: as of 1 Sep 2026, none of Stage 1's SOW-scoped deliverables have shipped in a way this pull can confirm, with one open flag (accordion/sticky markup already present) handed to Task 6 rather than resolved here. If a later pull shows any of the above shipped, the corresponding claim below dies and should be struck, not softened.

Prior-art exclusion list

Derived from reading Nuuk's June 2026 CRO Audit Report (22 pages) and the Stage 1 SOW in full, not from the brief's summary. Verified against the documents directly.

#What Nuuk already found or scopedWhere
PA-1Single-SKU-with-variants model; recommends splitting into multiple SKUs, one per designAudit, Category Page section, p.10-11; 7P section
PA-2Duplicate product listings should be consolidated into one canonical listingSOW, Product Page CRO (Core), £1,200 line
PA-3No true collection/category page exists; no grid, filters, sort, or behaviour tagsAudit, Category Page section, score 24% (LOW)
PA-4Direct "25% Off Limited Time Launch Sale" discount mechanic, to be replaced by an email-capture offerAudit, First Impression + 7P sections; SOW, Email Lifecycle Setup, £850 line
PA-5/pt (Portuguese storefront) should be unpublished, and theme/ad elements routing to it should be flaggedSOW, Add-Ons, "/pt Page Unpublish", £100
PA-6Product description should move from one text block to an accordion (Description / How It Works / Specifications / Shipping & Returns); Add to Cart should sit above the foldAudit, Product Page section, P1 recs; SOW, "Structural fixes: Add to Cart above the fold, description converted to accordion"
PA-7Reviews/star rating missing between title and price; Judge.me widget should be repositioned thereAudit, Product Page section; SOW, "Judge.me reviews widget repositioned near title/price"
PA-8Theme migration to Berlin, recommended as the fix for the visual/structural ceilingAudit, First Impression + UI sections, P1/P2
PA-9About Us page is generic; rebuild as Origin Story -> Mission -> Founder Quote -> Values -> R&D/lab story -> CTAAudit, 7P section; SOW, "About Us Page Rebuild", £150
PA-10Checkout button colour clash, Shop Pay vs Apple Pay as primary express optionAudit, Checkout Process section
PA-11Footer restructure (3-column, guarantees, newsletter, legal address), no mega menu, currency dropdown defaults everyone to USDAudit, Menu Navigation section
PA-12No post-purchase upsell mechanism; recommends 1-Click Post-Purchase Upsell appSOW, Add-Ons, £250 (+app subscription)
PA-13No related-products carousel, deferred until multi-SKU ships; no mobile sticky Add to Cart barAudit, Product Page section, P1/P3
PA-14No newsletter/email capture, no welcome or abandoned-cart flowAudit, 7P section; SOW, Email Lifecycle Setup
PA-15Currency dropdown shows countries but defaults all to USDAudit, Menu Navigation + 7P sections
PA-16Generic SEO opportunity from per-design URLs once multi-SKU ships (not the same claim as an empty meta-title field, which Nuuk's audit never inspects)Audit, Category Page + 7P sections

Anything below flagged PRIOR-ART maps to one of these rows and is excluded from client-facing use. Everything else in the findings table below was not found in either document (grepped and read in full; no SKU, inventory quantity, publish-status, redirect-target, or theme-file-wiring claim appears anywhere in the 22-page audit or the 13-page SOW).

Findings

ID format SHOP-nn. Class: BLOCKS / CORRUPTS / WASTES / SUPPRESSES. Tier: HARD (pulled from a system, dated) / DERIVED (arithmetic on HARD) / INFERRED (reasoned from HARD facts) / UNKNOWN. Remit: unowned / CRO scope / media / client.

IDFindingEvidenceClassTierRemitPRIOR-ART
SHOP-01SKU SP-GPC-BLK-001 is assigned to two separate product records with live, non-zero inventory each: the UNLISTED "String Protech® Guitar String Protection Case" (942 units) and the DRAFT "[Nuuk] String Protech®..." product's "The Beatles" variant (947 units). Inventory items are confirmed distinct (no shared stock pool), so the same SKU string reports two different physical counts depending which record is read.gql products query, 1 Sep 2026, data/_snapshots/2026-09-01/shopify-catalogue.jsonCORRUPTSHARDunownedNo
SHOP-02The DRAFT product "[Nuuk] String Protech® Guitar String Protection Case" carries publishedAt: null and holds 947 units of inventory. Draft products cannot be purchased, so this stock cannot generate revenue while it stays in this state, regardless of what happens to the record itself.Same pull as aboveWASTESHARDclientPartial. PA-1/PA-2 (Nuuk flagged the duplicate product itself, recommending consolidation). The 947-unit inventory lock was not quantified anywhere in their audit or SOW; that number is new.
SHOP-03"String Protech® Guitar String Protection Case" (the $59.99 case, SKU SP-GPC-BLK-001, 942 units) carries status: UNLISTED. UNLISTED means absent from collections and on-site search, reachable only by direct link. No sales-volume claim is made here; that needs order-level data outside this task's scope.Same pullSUPPRESSESHARDclientNo
SHOP-04Two of eight variants on "Custom Vinyl Sticker" (ACTIVE) carry sku: null ("Taylor Swift - Ophelia", "Taylor Swift - Snakes"). All eight variants of "Guitar String Protection Case with Custom Vinyl Sticker" (ACTIVE) carry sku: null. Every variant on the store's second-largest product by variant count has no SKU at all.Same pullCORRUPTSHARDunownedNo
SHOP-05The product handle for the case is string-pro-tech® (registered-trademark character, literal in the handle). Confirmed 200 OK on direct curl when correctly percent-encoded, 1 Sep 2026. The character's presence in an ad click-through URL, QR code, or manually typed link is a plausible failure point in paid channels; that specific fragility is not itself tested here. Handle is FROZEN per repo guardrails (it is the live URL); changing it needs a manual 301, which this repo's write scope cannot safely perform.curl -o /dev/null -w '%{http_code}', 1 Sep 2026, data/_snapshots/2026-09-01/shopify-url-status-codes.txtWASTESHARD (resolves 200) / INFERRED (ad-channel fragility)clientNo
SHOP-06/pt redirect coverage is partial and one existing redirect sends traffic to the wrong place. Two urlRedirects exist: /pt/products/string-pro-tech -> / (the flagship product's old URL dumps visitors on the homepage, not the equivalent live product), and /pt/products/guitar-string-protection-case-and-custom-vinyl-sticker -> the correct English product page. The bare /pt and /pt/ paths still return 404 on direct curl, 1 Sep.gql query + curl, 1 Sep 2026, data/_snapshots/2026-09-01/shopify-nav-redirects-scripts.json and shopify-url-status-codes.txtSUPPRESSESHARDclientYes. PA-5 (the /pt topic is explicitly scoped in Nuuk's SOW add-on). The specific facts here (partial coverage, and one redirect landing on the homepage rather than the matching product) are new detail not present in either Nuuk document, recorded for completeness but excluded from client-facing use per the topic-level flag.
SHOP-07The store's only Collection object is frontpage ("Home page"), a manual collection (no rule set) holding 0 products. Confirmed not currently referenced by any section in the live theme's templates/index.json, so it renders nothing today rather than rendering an empty grid.gql query, 1 Sep 2026, data/_snapshots/2026-09-01/shopify-nav-redirects-scripts.json; theme scan in shopify-theme-diff-notes.txtSUPPRESSESHARDCRO scopeYes. PA-3 (no real collection/category page exists is the same underlying gap Nuuk scored at 24%/LOW). The zero-product manual-collection fact is more specific than their narrative claim but sits on the same finding.
SHOP-08The live theme's templates/product.json includes a related-products section in its section order with "disabled": true. The capability is already present in the theme; it is switched off, not unbuilt.Theme file pull, 1 Sep 2026, data/_snapshots/2026-09-01/shopify-theme-diff-notes.txtWASTESHARDCRO scopeYes. PA-13 (Nuuk's audit frames related products as something to add once multi-SKU ships, not as an already-built, disabled section). The wiring-status detail is new; the topic is theirs.
SHOP-09sections/sticky-add-to-cart.liquid exists in the live theme's asset list (19,011 chars) but does not appear anywhere in templates/product.json's section order. It is a dead file, not an active feature, regardless of when it was written.Theme file pull, 1 Sep 2026, same snapshotWASTESHARDCRO scopeYes. PA-13 (Nuuk's audit recommends adding a mobile sticky Add to Cart bar as if none exists). The file's presence-but-not-wired status is new detail; the topic is theirs.

Theme roster (Step 5, brief's exact question)

Live: "Updated copy of [Nuuk] Copy of Dawn" (166011470074), created 2026-08-13. Five unpublished themes alongside: Dawn (152593137914, created 2025-07-21), guitare (153191940346, 2025-08-07), Copy of guitare (155359936762, 2025-10-10), guitare with Installments message (156092530938, 2025-10-31), [Nuuk] Copy of Dawn (165271273722, 2026-07-24).

Is any of the five unpublished themes newer than live? No, by creation date. Live is the newest theme on the store, created 13 Aug 2026, and is literally a copy of the newest unpublished one ([Nuuk] Copy of Dawn, 24 Jul 2026), consistent with "the live one is a copy of a copy" already recorded in the repo guardrails.

updatedAt on all six themes clusters within about 90 seconds of each other (2026-08-20T11:00:03Z to 2026-08-20T11:01:30Z). That reads as a platform-side event (a reindex or migration touching every theme on the store at once), not evidence that any one theme was recently hand-edited. updatedAt is not used as a recency signal anywhere in this file for that reason.

Full theme diff against the store's own unpublished "Dawn" theme (used as the cleanest available in-store reference; not a fresh pull from Shopify's public Dawn repository, and that caveat should travel with any claim built on it) is in data/_snapshots/2026-09-01/shopify-theme-diff-notes.txt. One item was checked and ruled out rather than reported as a finding: the live theme is missing all 14 classic customer-account files present in the Dawn baseline (main-login.liquid, main-account.liquid, and similar). This reads as broken account pages at first glance. Confirmed not a defect: shop. customerAccounts is OPTIONAL, and direct curl of /account, /account/login, and /account/register all return 302 to account.stringprotech.com, Shopify's hosted new-customer-accounts domain. The classic templates are correctly absent.

Appendix: raw catalogue state

Pulled 1 Sep 2026 via ./scripts/shopify-guard.sh gql, saved to data/_snapshots/2026-09-01/shopify-catalogue.json. SEO and alt-text columns are recorded as presence/absence fact only; no SEO finding is drawn from them in this file (Task 4's remit).

TitleHandleStatusPublishedTotal inventorySEO titleSEO descriptionFeatured image alt text
String Protech® Guitar String Protection Casestring-pro-tech®UNLISTED2026-06-03942emptypresentempty
Custom Vinyl Sticker - String Protech®custom-vinyl-stickerACTIVE2026-06-16296emptypresentempty
Guitar String Protection Case with Custom Vinyl Stickerguitar-string-protection-case-and-custom-vinyl-stickerACTIVE2026-06-16296emptyemptyempty
[Nuuk] String Protech® Guitar String Protection Casenuuk-string-protech®-guitar-string-protection-caseDRAFTnot published947emptypresentempty

Variant detail (price, SKU, inventory), by product:

String Protech® Guitar String Protection Case (UNLISTED, 942 units)

VariantPriceSKUInventory
Default Title59.99SP-GPC-BLK-001942

Custom Vinyl Sticker - String Protech® (ACTIVE, 296 units)

VariantPriceSKUInventory
The Beatles9.99CVS-BEATLES-00129
Metallica9.99CVS-METALLICA-00143
Ozzy Osbourne9.99CVS-OZZY-00149
Red Hot Chili Peppers9.99CVS-RHCP-00149
Van Halen9.99CVS-VANHALEN-00145
Hendrix9.99CVS-HENDRIX-00142
Taylor Swift - Ophelia9.99(empty)20
Taylor Swift - Snakes9.99(empty)19

Guitar String Protection Case with Custom Vinyl Sticker (ACTIVE, 296 units)

VariantPriceSKUInventory
The Beatles59.99(empty)29
Metallica59.99(empty)43
Ozzy Osbourne59.99(empty)49
Red Hot Chili Peppers59.99(empty)49
Van Halen59.99(empty)45
Hendrix59.99(empty)42
Taylor Swift - Ophelia59.99(empty)20
Taylor Swift - Snakes59.99(empty)19

[Nuuk] String Protech® Guitar String Protection Case (DRAFT, 947 units)

VariantPriceSKUInventory
No Sticker54.99SP-GPC-BLK-0090
The Beatles59.99SP-GPC-BLK-001947
Metallica59.99SP-GPC-BLK-0020
Ozzy Osbourne59.99SP-GPC-BLK-0030
Red Hot Chilli Peppers59.99SP-GPC-BLK-0040
Van Halen59.99SP-GPC-BLK-0050
Hendrix59.99SP-GPC-BLK-0060
Taylor Swift - Ophelia59.99SP-GPC-BLK-0070
Taylor Swift - Snakes59.99SP-GPC-BLK-0080

Collections, pages, redirects, script tags

Pulled 1 Sep 2026, data/_snapshots/2026-09-01/shopify-nav-redirects-scripts.json.

products, no rule set.

/pt/products/guitar-string-protection-case-and-custom-vinyl-sticker -> /products/guitar-string-protection-case-and-custom-vinyl-sticker.

URL status codes, checked directly 1 Sep 2026

URLStatus
/pt404
/pt/404
/pt/products/string-pro-tech301 -> /
/pt/products/guitar-string-protection-case-and-custom-vinyl-sticker301 -> correct English product
/products/string-pro-tech%C2%AE (registered-trademark handle, encoded)200
/products/custom-vinyl-sticker200
/products/guitar-string-protection-case-and-custom-vinyl-sticker200
/products/nuuk-string-protech%C2%AE-guitar-string-protection-case (DRAFT product)404 (expected; draft is not published)
/collections/frontpage200
/collections/all200
/account, /account/login, /account/register302 -> account.stringprotech.com

Raw command outputs: data/_snapshots/2026-09-01/shopify-catalogue.json, shopify-nav-redirects-scripts.json, shopify-url-status-codes.txt, shopify-theme-list.txt, shopify-themes-detail.json, shopify-theme-live-filelist.txt, shopify-theme-dawn-baseline-filelist.txt, shopify-theme-diff-notes.txt.