← 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"
}
]
}