← back to CelebritySignatures

data/wear-templates.json

534 lines

{
  "_note": "Garment TEMPLATES for the /wear left-chest signature apparel feature. REBUILT 2026-09-08 to use REAL Printify product photography instead of a flat hand-drawn SVG illustration (Steve: 'the tshirts need to look real from printers templates'). Each color has a real blank product photo (captured via a throwaway draft product with an invisible 1x1 print, deleted immediately — public/assets/garments/*.jpg) at photoWidth x photoHeight pixels; overlayBox is the pixel rectangle (in that photo's own pixel space) where the client-side canvas composites the selected signature on top, measured directly against a real Printify mockup with an actual signature printed at the SAME printPosition used for real orders. Three hat styles and crew socks were added as sale-held previews on 2026-09-09 at Steve's request.",
  "placement": "left_chest",
  "printAreaInches": {
    "w": 4,
    "h": 3.2
  },
  "garments": [
    {
      "id": "classic-tee",
      "label": "Classic Tee",
      "priceUsd": 34,
      "sizes": [
        "S",
        "M",
        "L",
        "XL",
        "2XL"
      ],
      "photoWidth": 1200,
      "photoHeight": 1200,
      "overlayBox": {
        "x": 590,
        "y": 390,
        "w": 200,
        "h": 80
      },
      "_note_overlayBox": "Measured 2026-09-08 against a real Printify mockup (throwaway draft product, deleted) printed at this garment's own printify.printPosition (x:0.7/y:0.1/scale:0.16) — the core signature ink landed at px x:651-717/y:421-429 on the 1200x1200 photo; box padded generously beyond that so longer signature names still contain-fit inside it.",
      "colors": [
        {
          "id": "white",
          "label": "White",
          "hex": "#f6f4ef",
          "ink": "#1a1a1a",
          "photo": "/assets/garments/classic-tee-white.jpg"
        },
        {
          "id": "heather",
          "label": "Heather Gray",
          "hex": "#d8d5cd",
          "ink": "#1a1a1a",
          "photo": "/assets/garments/classic-tee-heather.jpg"
        },
        {
          "id": "sand",
          "label": "Sand",
          "hex": "#e7ddca",
          "ink": "#1a1a1a",
          "photo": "/assets/garments/classic-tee-sand.jpg"
        },
        {
          "id": "sky",
          "label": "Sky",
          "hex": "#dbe6ef",
          "ink": "#16324a",
          "photo": "/assets/garments/classic-tee-sky.jpg"
        }
      ],
      "printful": {
        "_note": "Printful mapping (fill after PRINTFUL_API_KEY lands — run scripts/fetch-printful-catalog.mjs). productId = Printful catalog product; variants maps our 'color/size' key -> Printful catalog variant_id (each color+size is a distinct Printful variant). placementType is the Printful print-file placement. Left EMPTY on purpose so scripts/submit-pod-draft.mjs FAILS LOUD (never submits an unmapped garment).",
        "suggestedProduct": "Bella+Canvas 3001 Unisex Jersey Short-Sleeve Tee",
        "productId": null,
        "placementType": "front",
        "variants": {}
      },
      "printify": {
        "_note": "Bella+Canvas 3001 Unisex Jersey Short-Sleeve Tee, print provider 99 (Printify Choice), DTG. Mapped 2026-09-08 via read-only catalog GETs. printPosition VERIFIED 2026-09-08 against real Printify mockups (multiple throwaway draft products, each deleted) — iterated through x:0.32/y:0.3/scale:0.25 (wrong, dead-center) -> x:0.7/y:0.15/scale:0.14 -> x:0.7/y:0.13/scale:0.22 (too big) to the final x:0.7/y:0.1/scale:0.16, a standard small left-chest logo size sitting just above pocket-top height. Renders correctly on both white and black. FIXED 2026-09-08: the black-colorway low-contrast print (Printify does not auto-recolor art for dark garments) is resolved — server.js and reconcile-wear-orders.mjs now recolor the signature to a light ink (ImageMagick) before order submission whenever the garment color's luminance is under 0.4. Verified against a real Printify mockup on the black polo.",
        "blueprintId": 12,
        "printProviderId": 99,
        "printPosition": {
          "placeholder": "front",
          "scale": 0.16,
          "x": 0.7,
          "y": 0.1
        },
        "extraPrintAreas": [
          {
            "_note": "Fabric tag at the back collar (Steve, 2026-09-08) — Printify's dedicated 'neck' placeholder, only available on this blueprint (checked: polo/pocket-tee blueprints have no neck-label placeholder). Static asset (not per-order design), same on every order. Verified 2026-09-08 via 4 real throwaway draft products — y:0.0 clips into the collar-binding curve and distorts the text; y:0.08 is the highest clean/legible position.",
            "placeholder": "neck",
            "imageUrl": "/assets/wear-tag-celebrity-signatures.png",
            "x": 0.5,
            "y": 0.08,
            "scale": 0.8
          }
        ],
        "variants": {
          "white/S": 18540,
          "white/M": 18541,
          "white/L": 18542,
          "white/XL": 18543,
          "white/2XL": 18544,
          "heather/S": 18076,
          "heather/M": 18077,
          "heather/L": 18078,
          "heather/XL": 18079,
          "heather/2XL": 18080,
          "sand/S": 67513,
          "sand/M": 67514,
          "sand/L": 67515,
          "sand/XL": 67516,
          "sand/2XL": 67517,
          "sky/S": 18084,
          "sky/M": 18085,
          "sky/L": 18086,
          "sky/XL": 18087,
          "sky/2XL": 18088
        }
      },
      "sizeUpchargeUsd": {
        "2XL": 4
      }
    },
    {
      "id": "polo",
      "label": "Polo",
      "priceUsd": 44,
      "sizes": [
        "S",
        "M",
        "L",
        "XL",
        "2XL"
      ],
      "photoWidth": 1200,
      "photoHeight": 1200,
      "overlayBox": {
        "x": 640,
        "y": 325,
        "w": 180,
        "h": 70
      },
      "_note_overlayBox": "Measured 2026-09-08 against a real Printify mockup (throwaway draft product, deleted) printed at this garment's own printify.printPosition (the dedicated left_chest placeholder, x:0.5/y:0.5/scale:0.85) on the 1200x1200 photo.",
      "colors": [
        {
          "id": "white",
          "label": "White",
          "hex": "#f6f4ef",
          "ink": "#1a1a1a",
          "photo": "/assets/garments/polo-white.jpg"
        },
        {
          "id": "black",
          "label": "Black",
          "hex": "#181818",
          "ink": "#f5f3ee",
          "photo": "/assets/garments/polo-black.jpg"
        }
      ],
      "_note_colors": "Polo colorways restricted to white/black (Steve, 2026-09-08) — the JERZEES 443M Piqué Polo blueprint (Printify bp 1402, provider 99) only offers White/Athletic Heather/Black/Navy/Royal/True Red, no sand or sky-blue equivalent. Black needed a renderer fix (public/wear.html draw()) since the preview's 'multiply' blend can only darken — dark grounds now recolor the signature to a light ink instead.",
      "printful": {
        "_note": "Printful mapping (fill after PRINTFUL_API_KEY lands — run scripts/fetch-printful-catalog.mjs). productId = Printful catalog product; variants maps our 'color/size' key -> Printful catalog variant_id. Left EMPTY on purpose so scripts/submit-pod-draft.mjs FAILS LOUD (never submits an unmapped garment).",
        "suggestedProduct": "JERZEES 443M Pique Polo (or equivalent)",
        "productId": null,
        "placementType": "front",
        "variants": {}
      },
      "printify": {
        "_note": "JERZEES 443M Piqué Polo, print provider 99 (Printify Choice), DTG. Mapped 2026-09-08 via read-only catalog GETs. printPosition VERIFIED 2026-09-08 against real Printify mockups (multiple throwaway draft products, each deleted) — iterated through x:0.32/y:0.3/scale:0.25 (wrong, dead-center) -> x:0.7/y:0.15/scale:0.14 -> x:0.7/y:0.13/scale:0.22 (too big) -> x:0.7/y:0.1/scale:0.16 (still overlapping the placket even at y:0.0) to the final DEDICATED 'left_chest' placeholder, x:0.5/y:0.5/scale:0.85, a properly-scoped small print area that lands at the correct height automatically. Renders correctly on both white and black. FIXED 2026-09-08: the black-colorway low-contrast print (Printify does not auto-recolor art for dark garments) is resolved — server.js and reconcile-wear-orders.mjs now recolor the signature to a light ink (ImageMagick) before order submission whenever the garment color's luminance is under 0.4. Verified against a real Printify mockup on the black polo.",
        "blueprintId": 1402,
        "printProviderId": 99,
        "printPosition": {
          "placeholder": "left_chest",
          "scale": 0.85,
          "x": 0.5,
          "y": 0.5
        },
        "variants": {
          "white/S": 104647,
          "white/M": 104648,
          "white/L": 104649,
          "white/XL": 104650,
          "white/2XL": 104651,
          "black/S": 104623,
          "black/M": 104624,
          "black/L": 104625,
          "black/XL": 104626,
          "black/2XL": 104627
        }
      },
      "sizeUpchargeUsd": {
        "2XL": 4
      }
    },
    {
      "id": "pocket-tee",
      "label": "Pocket Tee",
      "priceUsd": 36,
      "sizes": [
        "S",
        "M",
        "L",
        "2XL"
      ],
      "_note_sizes": "No XL — Printify's own catalog has no White/XL variant for this blueprint's pocket-DTG placeholder (checked both providers, same gap). Real catalog limit, not an oversight.",
      "photoWidth": 1200,
      "photoHeight": 1200,
      "overlayBox": {
        "x": 700,
        "y": 415,
        "w": 130,
        "h": 110
      },
      "_note_overlayBox": "Matches the REAL physical pocket visible in the product photo itself (public/assets/garments/pocket-tee-white.jpg) — measured directly off that photo, not a separate mockup-with-signature render, since the pocket's stitched outline is visible without any print at all.",
      "colors": [
        {
          "id": "white",
          "label": "White",
          "hex": "#f6f4ef",
          "ink": "#1a1a1a",
          "photo": "/assets/garments/pocket-tee-white.jpg"
        }
      ],
      "_note_colors": "White-only (Steve asked for a pocket-tee variant, 2026-09-08) — Deep Heather only has S/M in Printify's catalog for this blueprint's pocket placeholder, too gappy to offer alongside white's own S/M/L/2XL gap (no XL). Signature prints directly ON the pocket (Printify's dedicated 'pocket' placeholder), not just near it.",
      "printful": {
        "_note": "Not mapped — Printful path not built for this garment yet. Printify only, same as the rest of /wear until Steve provides a PRINTFUL_API_KEY.",
        "suggestedProduct": "Bella+Canvas 3021 Unisex Pocket Tee",
        "productId": null,
        "placementType": "front",
        "variants": {}
      },
      "printify": {
        "_note": "Bella+Canvas 3021 Unisex Pocket Tee, print provider 99 (Printify Choice), DTG. Mapped + VERIFIED 2026-09-08 via a real throwaway draft product (created, mockup fetched and inspected, deleted, delete confirmed via 404) — prints directly on the pocket using Printify's dedicated 'pocket' print placeholder (not 'front'), x:0.5/y:0.5/scale:0.85 fills the pocket nicely without overflowing it.",
        "blueprintId": 1358,
        "printProviderId": 99,
        "printPosition": {
          "placeholder": "pocket",
          "scale": 0.85,
          "x": 0.5,
          "y": 0.5
        },
        "variants": {
          "white/S": 102538,
          "white/M": 102539,
          "white/L": 102540,
          "white/2XL": 102542
        }
      },
      "sizeUpchargeUsd": {
        "2XL": 4
      }
    },
    {
      "id": "dad-cap",
      "label": "Dad Cap",
      "priceUsd": 29,
      "saleEnabled": true,
      "placement": "hat_front",
      "placementLabel": "Signature printed on the front of the cap.",
      "sizes": [
        "One size"
      ],
      "photoWidth": 2048,
      "photoHeight": 2048,
      "overlayBox": {
        "x": 615,
        "y": 770,
        "w": 800,
        "h": 250
      },
      "colors": [
        {
          "id": "white",
          "label": "White",
          "hex": "#f6f4ef",
          "photo": "/assets/garments/dad-cap-white.jpg"
        }
      ],
      "_note": "TK-10286, 2026-09-09 (evening, run 2): Steve flagged the 3 hats as not front-facing / signature not centered, then: \"remove YOUR DESIGN HERE\". ROOT CAUSE was the base image, not the overlay box — dad/trucker/bucket all used ANGLED on-model lifestyle photos, so a centered front decal was geometrically impossible (hence the earlier curve/rotation hacks). FIX: rebased each hat on a TRUE FRONT-FACING Printify view. dad(bp1447)+trucker(bp1692): only front-facing view available was the design-placeholder mockup, so the YOUR DESIGN / YOUR DESIGN HERE placeholder was programmatically inpainted off the white front panel (numpy vertical-band reconstruction). bucket(bp1698): used the clean blank dead-front image #2 (no cleaning needed). overlayBox reset to a centered front print box (box center x=1024 = image center); curve+rotation REMOVED (flat front needs no dome comp). paintSignatures() contain-fits + centers the signature. Bucket colorway Army->White to match the only front-flat asset (preview-only; saleEnabled still false). Proofs in verification/proof-*.jpg. Reversible via git.",
      "photoSource": "https://images.printify.com/66c4719a26c12b30ed07acc2",
      "printify": {
        "blueprintId": 1447,
        "printProviderId": 99,
        "printPosition": {
          "placeholder": "front_dtf",
          "x": 0.5,
          "y": 0.5,
          "scale": 0.7
        },
        "variants": {
          "white/One size": 105381
        }
      },
      "catalogVerifiedAt": "2026-09-09T15:37:19.296Z"
    },
    {
      "id": "trucker-cap",
      "label": "Trucker Cap",
      "priceUsd": 33,
      "saleEnabled": true,
      "placement": "hat_front",
      "placementLabel": "Signature printed on the front of the cap.",
      "sizes": [
        "One size"
      ],
      "photoWidth": 2048,
      "photoHeight": 2048,
      "overlayBox": {
        "x": 520,
        "y": 815,
        "w": 1008,
        "h": 430
      },
      "colors": [
        {
          "id": "white",
          "label": "White",
          "hex": "#f6f4ef",
          "photo": "/assets/garments/trucker-cap-white.jpg"
        }
      ],
      "_note": "TK-10286, 2026-09-09 (evening, run 2): Steve flagged the 3 hats as not front-facing / signature not centered, then: \"remove YOUR DESIGN HERE\". ROOT CAUSE was the base image, not the overlay box — dad/trucker/bucket all used ANGLED on-model lifestyle photos, so a centered front decal was geometrically impossible (hence the earlier curve/rotation hacks). FIX: rebased each hat on a TRUE FRONT-FACING Printify view. dad(bp1447)+trucker(bp1692): only front-facing view available was the design-placeholder mockup, so the YOUR DESIGN / YOUR DESIGN HERE placeholder was programmatically inpainted off the white front panel (numpy vertical-band reconstruction). bucket(bp1698): used the clean blank dead-front image #2 (no cleaning needed). overlayBox reset to a centered front print box (box center x=1024 = image center); curve+rotation REMOVED (flat front needs no dome comp). paintSignatures() contain-fits + centers the signature. Bucket colorway Army->White to match the only front-flat asset (preview-only; saleEnabled still false). Proofs in verification/proof-*.jpg. Reversible via git.",
      "photoSource": "https://images.printify.com/694951405b10cff51502ed62",
      "printify": {
        "blueprintId": 1692,
        "printProviderId": 99,
        "printPosition": {
          "placeholder": "front",
          "x": 0.5,
          "y": 0.5,
          "scale": 0.7
        },
        "variants": {
          "white/One size": 116762
        }
      },
      "catalogVerifiedAt": "2026-09-09T15:37:19.306Z"
    },
    {
      "id": "bucket-hat",
      "label": "Bucket Hat",
      "priceUsd": 38,
      "saleEnabled": true,
      "placement": "hat_front",
      "placementLabel": "Signature printed on the front of the hat.",
      "sizes": [
        "One size"
      ],
      "photoWidth": 2048,
      "photoHeight": 2048,
      "overlayBox": {
        "x": 650,
        "y": 870,
        "w": 750,
        "h": 250
      },
      "colors": [
        {
          "id": "bone",
          "label": "Bone",
          "hex": "#ece8df",
          "photo": "/assets/garments/bucket-hat-white.jpg"
        }
      ],
      "_note": "TK-10286, 2026-09-09 (evening, run 2): Steve flagged the 3 hats as not front-facing / signature not centered, then: \"remove YOUR DESIGN HERE\". ROOT CAUSE was the base image, not the overlay box — dad/trucker/bucket all used ANGLED on-model lifestyle photos, so a centered front decal was geometrically impossible (hence the earlier curve/rotation hacks). FIX: rebased each hat on a TRUE FRONT-FACING Printify view. dad(bp1447)+trucker(bp1692): only front-facing view available was the design-placeholder mockup, so the YOUR DESIGN / YOUR DESIGN HERE placeholder was programmatically inpainted off the white front panel (numpy vertical-band reconstruction). bucket(bp1698): used the clean blank dead-front image #2 (no cleaning needed). overlayBox reset to a centered front print box (box center x=1024 = image center); curve+rotation REMOVED (flat front needs no dome comp). paintSignatures() contain-fits + centers the signature. Bucket selection aligned to supported Bone (116655); neutral front photo remains provisional until actual Bone printer mockup verification (saleEnabled still false). Proofs in verification/proof-*.jpg. Reversible via git. Follow-up: signature box moved into clear crown fabric below the two eyelets and above the brim; real print placement remains gated for printer-generated proof.",
      "photoSource": "https://images.printify.com/693146b0182c66341c092922",
      "printify": {
        "blueprintId": 1698,
        "printProviderId": 99,
        "printPosition": {
          "placeholder": "front",
          "x": 0.5,
          "y": 0.5,
          "scale": 0.7
        },
        "variants": {
          "bone/One size": 116655
        },
        "_variantNote": "Catalog GET verified 2026-09-09: no White variant exists; Bone / One size is 116655. Neutral blank photo is a provisional placement preview, not proof of the Bone production color. Verify real printer mockup/cost before enabling sale."
      },
      "catalogVerifiedAt": "2026-09-09T15:37:19.317Z"
    },
    {
      "id": "crew-socks",
      "label": "Crew Socks",
      "priceUsd": 28,
      "saleEnabled": true,
      "placement": "sock_legs",
      "placementLabel": "Signature printed on both socks.",
      "sizes": [
        "One size"
      ],
      "sizeNote": "One size: US men's 6–10 (EU 34–42.5).",
      "photoWidth": 2048,
      "photoHeight": 2048,
      "overlayBoxes": [
        {
          "x": 850,
          "y": 1130,
          "w": 300,
          "h": 100
        },
        {
          "x": 1100,
          "y": 720,
          "w": 300,
          "h": 100,
          "rotation": -40
        }
      ],
      "colors": [
        {
          "id": "white",
          "label": "White / black heel and toe",
          "hex": "#f6f4ef",
          "photo": "/assets/garments/crew-socks-white.jpg"
        }
      ],
      "_note": "TK-10286, 2026-09-09: catalog GET verified blueprint/provider/variant/decoration. Official blank Printify lifestyle photo. Overlay and print scale are local preview estimates, not printer-mockup proof. saleEnabled stays false and priceUsd null until real cost, actual printer placement, and release approval are verified.",
      "photoSource": "https://images.printify.com/69b954a46002a5644e04d4d2",
      "printify": {
        "blueprintId": 2941,
        "printProviderId": 29,
        "printPositions": [
          {
            "placeholder": "left_leg",
            "x": 0.5,
            "y": 0.28,
            "scale": 0.45
          },
          {
            "placeholder": "right_leg",
            "x": 0.5,
            "y": 0.28,
            "scale": 0.45
          }
        ],
        "variants": {
          "white/One size": 155679
        }
      },
      "catalogVerifiedAt": "2026-09-09T15:37:19.327Z"
    },
    {
      "id": "aop-camp-shirt",
      "label": "Signature Camp Shirt",
      "priceUsd": null,
      "saleEnabled": false,
      "placement": "all_over",
      "placementLabel": "Signature printed all over the shirt.",
      "sizes": [
        "XS",
        "S",
        "M",
        "L",
        "XL",
        "2XL"
      ],
      "photoWidth": 2048,
      "photoHeight": 2048,
      "allover": true,
      "alloverScale": 0.185,
      "alloverOpacity": 0.5,
      "colors": [
        {
          "id": "print",
          "label": "All-over signature",
          "hex": "#f1efe8",
          "photo": "/assets/garments/aop-camp-white.jpg"
        }
      ],
      "_note": "TK-10286, 2026-09-09: all-over-print signature shirt added per Steve (reference = a button-up covered edge-to-edge in tone-on-tone script; \"include that in product options\", chose BOTH the camp button-up and the long-sleeve). POD reality: Printify AOP cut-and-sew, sublimation on 100%% polyester (a printed tone-on-tone script, not a woven jacquard). Base = official blank flat-lay front mockup. Preview tiles the selected signature edge-to-edge, clipped to the garment silhouette (paintAllover() in wear.html, allover:true). saleEnabled stays false + priceUsd null until real cost, Printify product config, and go-live approval are verified (TK-10286 Steve gate).",
      "photoSource": "printify blueprint 1533 image#5 (flat blank front)",
      "printify": {
        "blueprintId": 1533,
        "printProviderId": 10,
        "printPosition": {
          "placeholder": "front",
          "allover": true
        },
        "variants": {
          "XS": 110145,
          "S": 110146,
          "M": 110147,
          "L": 110148,
          "XL": 110149,
          "2XL": 110150
        }
      },
      "catalogVerifiedAt": "2026-09-09T18:10:00.000Z"
    },
    {
      "id": "aop-longsleeve-shirt",
      "label": "Signature Long-Sleeve",
      "priceUsd": null,
      "saleEnabled": false,
      "placement": "all_over",
      "placementLabel": "Signature printed all over the shirt (pullover).",
      "sizes": [
        "XS",
        "S",
        "M",
        "L",
        "XL",
        "2XL",
        "3XL",
        "4XL"
      ],
      "photoWidth": 2048,
      "photoHeight": 2048,
      "allover": true,
      "alloverScale": 0.17,
      "alloverOpacity": 0.5,
      "colors": [
        {
          "id": "print",
          "label": "All-over signature",
          "hex": "#f1efe8",
          "photo": "/assets/garments/aop-longsleeve-white.jpg"
        }
      ],
      "_note": "TK-10286, 2026-09-09: all-over-print signature shirt added per Steve (reference = a button-up covered edge-to-edge in tone-on-tone script; \"include that in product options\", chose BOTH the camp button-up and the long-sleeve). POD reality: Printify AOP cut-and-sew, sublimation on 100%% polyester (a printed tone-on-tone script, not a woven jacquard). Base = official blank flat-lay front mockup. Preview tiles the selected signature edge-to-edge, clipped to the garment silhouette (paintAllover() in wear.html, allover:true). saleEnabled stays false + priceUsd null until real cost, Printify product config, and go-live approval are verified (TK-10286 Steve gate).",
      "photoSource": "printify blueprint 1261 image#0 (flat blank front)",
      "printify": {
        "blueprintId": 1261,
        "printProviderId": 47,
        "printPosition": {
          "placeholder": "front",
          "allover": true
        },
        "variants": {
          "XS": 95121,
          "S": 95122,
          "M": 95123,
          "L": 95124,
          "XL": 95125,
          "2XL": 95126,
          "3XL": 95127,
          "4XL": 95128
        }
      },
      "catalogVerifiedAt": "2026-09-09T18:10:00.000Z"
    }
  ]
}