Memory That Lasts

Worn with Love. Kept Forever.

Live-verified 2026-08-05. Theme role=main asserted (159936544917 MTL-LIVE-818PM). Every item below was checked against the live store or live Etsy, not against our files.

NEEDS YOU

10

Sorted by revenue impact, highest first. Each item carries one researched recommendation, not a question.

1

Price parity is broken on the 12 zodiac bar necklaces.

Etsy lists them at $44, Shopify at $39. Verified by Etsy API (12 listings: 4503120475, 4503127760, 4503119501, 4503126824, 4503119245, 4503119151, 4503126520, 4503126362, 4503126246, 4503118639, 4503116025, 4503080117) and Shopify Admin API. Identical-price parity is a locked rule, so this is a live rule breach on the single best keyword opportunity we have: eRank shows "zodiac coin necklace" at 894 avg searches, 1,930 Etsy competition, KD 17 - a 46:1 searches-to-competition ratio, the strongest in the catalog.

Recommendation

Raise Shopify to $44 rather than cut Etsy to $39.

Why

Etsy has already been selling at $44 with no conversion objection, $44 protects margin against the 60-70% net target, and cutting 12 SKUs by $5 gives away roughly 11% of revenue on our best-positioned family for no demand reason. One-line Shopify price update, fully reversible.

Shopify products admin
2

Shipping copy is non-compliant on every single surface.

The required wording is "Ships within 2 to 5 days". Live reality: 88 of 88 Etsy descriptions and 88 of 88 Shopify product descriptions render "Ships within 2-5 Days" with an EN DASH. On Shopify there are ~150+ further occurrences: 27 en-dash instances across 8 theme assets (mtl-pdp-sticky-eta.js, mtl-pdp-trust-row.js, mtl-birth-flower-picker-deep.liquid, mtl-how-it-works-strip.liquid, mtl-personalization-proper.liquid, mtl-personalization.liquid, mtl-trust-row.liquid, mtl-zodiac-picker.liquid), 7 hyphen instances across 5 more files, 16 uses of the word "delivered", and the shop-level SEO description still says "ships within 2-5 business days" which renders as the meta description sitewide. The compliant string appears ZERO times.

Recommendation

Run it as one scripted pass in three stages - theme assets first on DEV, then the 88 Shopify product descriptions, then the 88 Etsy descriptions via API - with a backup before each stage.

Why

It is a locked compliance rule, it is a delivery-versus-process claim risk, and it is currently wrong everywhere, so a partial fix leaves the store inconsistent.

Live PDP showing the wording
3

The banned word is theme-level, not the single product-description instance we recorded.

Live scan of the banned word: 0 in product titles, 0 in product descriptions, but 24 hits across 18 theme files. Specifically the PDP eyebrow badge renders it on live product pages (from mtl-personalization.liquid and mtl-personalization-proper.liquid, plus a hard-coded eyebrow in 15 product template JSONs, including the birth flower, pre-engraved and zodiac variants), the gift toggle renders "Optional: printed on a ... card", and 15 of 40 collection descriptions contain the word.

Recommendation

Replace the eyebrow default with "Personalized Piece" and the gift line with "Optional: printed on a gift card", then sweep the 15 collection descriptions.

Why

It is a named banned word, it is rendering on every personalized product page, and our previous scan missed it because it only looked at product descriptions.

Live PDP with the eyebrow badge
4

Mobile header bug: 44px of the logo is un-tappable on every mobile page load.

At 390px the account icon overlays the last 44.0px of the wordmark. Measured on the live main theme with role asserted: logo link spans x 88-300, header-actions spans x 256-388, and document.elementFromPoint at y 69 returns the account element from x 256 through x 299. So 44 of the logo link's 212px (20.8%) routes to the account dialog instead of home. Root cause is not z-index - it is a grid track overflow. The mobile grid gives header-actions a single 44px track but mtl-wishlist-nav.js injects a third 44px icon at runtime, making the box 132px wide, and justify-self:flex-end pushes the overflow 44px leftward into the logo track. Confirmed at 320, 360, 375, 390, 393, 412 and 414px; visible overlap stops at 500px; the hit-area theft never fully stops but is harmless above 750px where it lands on empty padding.

Recommendation

Append a 3-line CSS rule to assets/mtl-global-fixes.css hiding .mtl-wnav below 750px, tested on DEV first.

Why

It is contained to one already-loaded asset, a live DOM removal test proved it returns header-actions to x 300 (exactly the logo's right edge) with zero overlap and bit-identical geometry everywhere else, desktop is untouched by the media query, and the wishlist stays reachable from the product-card save buttons.

Header directions preview
5

The brand lockup cannot be read at 390px, and resizing will not fix it.

Measured: rendered cap height 7.45px (we had estimated 8), aspect ratio 8.350:1, wordmark gold #AF832F on cream #FAF6F0 at 3.19:1 contrast, which fails WCAG AA. Because of the aspect ratio, a legible 12px cap height needs a 342px-wide image, 88% of a 390px viewport. There are also two different golds in the header - lockup #AF832F versus announcement bar #B8960C, with the injected wishlist icon using a third at #b8960c - and the favicon is a navy #314354 spiral heart with no diamond, a different mark entirely from the gold heart-with-diamond in the header.

Recommendation

Re-cut the wordmark as a stacked or condensed lockup with a tighter aspect ratio and darken the gold to clear 4.5:1, and align the favicon to the header mark.

Why

This is a brand-asset problem, not a CSS problem, so no amount of layout work will solve it, and six worked-through directions are already built and hosted for review.

Six built directions
6

93px of permanently pinned chrome on mobile.

Verified: div#header-group is position:sticky, top:0, z-index 8, height 92.4px (announcement 45.8 + header 46.6) against an 844px viewport - 10.95% of the screen, versus a peer median around 60px. A Klaviyo teaser is additionally position:fixed at the bottom.

Recommendation

Relocate the USD currency selector out of the top-left into the footer, and let the announcement bar scroll away rather than stick.

Why

Canada is a live market so a Canadian shopper genuinely needs to understand pricing currency - the selector should be RELOCATED, not removed - but top-left on mobile is the most valuable real estate on the page and the selector does not need to be persistently visible. This is decided, not an open question.

Header directions preview
7

Etsy alt text is at 17 of 749 images (2.3%).

Only two listings have any alt text at all (4510220095 Leo coin, 4503119398 January carnation heart), and both are fully covered; the other 86 listings have zero across 732 images. Note for whoever picks this up: the endpoint matters - GET /shops/{id}/listings/active?includes=Images does NOT return images and GET /shops/{shop}/listings/{id}/images returns 404; only GET /v3/application/listings/batch?listing_ids=...&includes=Images works. Anyone auditing with the first two gets a false zero.

Recommendation

Do this in the Etsy native editor, not the API - a bounded API test on listing 4520706733 detached a photo (8 down to 7) and it had to be restored. All 740 strings are already written and 261 are scoped. The native alt field only appears when the browser window is under about 950px wide.

Why

It is real SEO and accessibility value on 88 listings, the copy is already done, and the API route is proven unsafe.

Etsy listings manager
8

Three Etsy listings are in the wrong section.

Verified against live section assignments: 4503080215 (a paw product) sits in "Zodiac Necklaces", and 4520706733 (Ladybug) sits in "Pet Memorial & Pet Mom". Correction to a previous note: 4503082020 is in "Personalized Names", NOT in Zodiac as our docs claimed. Section counts are Zodiac Necklaces 25, Zodiac Rings 24, Birth Flower Necklaces 24, Pet Memorial & Pet Mom 7, Personalized Names 4, Hidden Message Necklaces 2, Faith & Cross 1, Names Dates & Initials 1 - which is why Zodiac Necklaces reads 25 rather than 24.

Recommendation

Move 4503080215 to Pet Memorial & Pet Mom and 4520706733 out of Pet Memorial.

Why

A shopper browsing Zodiac currently finds a paw necklace, and the section counts are the thing we navigate by.

Etsy sections
9

Four unused Etsy shipping profiles are a latent free-shipping trap.

All 88 active listings use profile 307526338912 "Free Standard - Accessories" (US $0.00, CA $9.39). Four profiles have zero listings: 305843634152 (US $4.49), 305844427626 (US $5.69), 306878327092 (US $0.00, CA $4.90, 26 EU countries at $9.00, default $5.50) and 305871504372 "Personalised" (US $0.00). Our docs flagged three; there are four.

Recommendation

Delete all four, but check draft and expired listings first since those can still reference a profile and block deletion. Do NOT use the _o13_profiles.py script - it issues an unguarded live DELETE.

Why

Any new listing that lands on one of these silently starts charging shipping, and the EU-enabled one would open destinations we have not decided on.

Etsy shipping profiles
10

A live returns contradiction on listing 4510848456.

Etsy's structured policy (return_policy_id 1486966195565) grants an unconditional 30-day return and exchange, and the public page shows "Accepted within 30 days", while the listing's own description says returns are accepted only if the item arrives damaged, defective or incorrect. Etsy's structured policy is the one Etsy enforces. The same restrictive paragraph appears on 76 of 88 listings and a harder "final sale" paragraph on 12 of 88, against only two shop return policies (1486966195565 = returns and exchanges, 30 days; 1491286035087 = no returns).

Recommendation

Keep the 30-day structured policy, which matches the Shopify decision already made on 2026-05-31, and rewrite the description paragraph to match it rather than contradict it.

Why

The structured policy wins in any dispute, so the description is simply telling buyers something untrue.

Live Etsy listing 4510848456

RUNNING

5

In flight. Scoped, started, or declared, but not finished.

DONE AND LIVE-VERIFIED

12

Verified today unless noted. These are closed.

GENUINELY ABANDONED

7

Paid for, drafted, or half-built, then dropped. Nothing here is moving.