v0.6: template-manager owns the product catalog
The host no longer carries a runtime product catalog. products.js shrinks to a legacy single-product stub; the canonical catalog lives in template-manager's productsStore, seeded ONCE on first boot from the new seedProducts.js (after that the store under templates/ is authoritative and the seed is ignored — intentional, so restarts never rewrite an admin-managed catalog). phoneModels.js and templateCategories.js are the supporting constant sets, and docs/template-schema.md documents the v4 schema. templates/ is the admin-managed store itself (_products_index.json + products/<id>/product.json, JSON only) — committed so the configured catalog (sizes, pricing, options built up in the admin UI) survives a fresh checkout rather than regressing to the seed. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,154 @@
|
||||
{
|
||||
"id": "6202b99a-a4a9-4f11-8b2d-32c17516ecfa",
|
||||
"slug": "hoodie",
|
||||
"label": "Hoodie",
|
||||
"description": "Heavyweight pullover hoodie with front-and-back print options.",
|
||||
"category": "Apparel",
|
||||
"options": [
|
||||
{
|
||||
"id": "49a9bd93-84c9-4e9c-a4e6-c1e742c6777a",
|
||||
"slug": "color",
|
||||
"label": "Color",
|
||||
"kind": "color",
|
||||
"values": [
|
||||
{
|
||||
"id": "4e8d2854-8f0e-4c99-b854-8c0e07b59a49",
|
||||
"slug": "black",
|
||||
"label": "Black",
|
||||
"hex": "#111827"
|
||||
},
|
||||
{
|
||||
"id": "618c49fc-9fc6-486b-9d83-a2fff373092f",
|
||||
"slug": "navy",
|
||||
"label": "Navy",
|
||||
"hex": "#1e3a8a"
|
||||
},
|
||||
{
|
||||
"id": "0d1d8ec2-c7b9-40c9-9da8-9b5f1c6d1e3f",
|
||||
"slug": "gray",
|
||||
"label": "Heather Gray",
|
||||
"hex": "#9ca3af"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"sizes": [
|
||||
{
|
||||
"id": "f002d98e-6601-46cb-9ed0-ad6608a794ac",
|
||||
"slug": "s",
|
||||
"label": "Small",
|
||||
"physical": {
|
||||
"width": 12,
|
||||
"height": 16,
|
||||
"unit": "in"
|
||||
},
|
||||
"canvas": {
|
||||
"width": 1200,
|
||||
"height": 1600
|
||||
},
|
||||
"printZone": {
|
||||
"x": 120,
|
||||
"y": 160,
|
||||
"width": 960,
|
||||
"height": 1280
|
||||
},
|
||||
"silhouettePath": "M48,0 L1152,0 A48,48 0 0 1 1200,48 L1200,1552 A48,48 0 0 1 1152,1600 L48,1600 A48,48 0 0 1 0,1552 L0,48 A48,48 0 0 1 48,0 Z",
|
||||
"mockupFallbackColor": "#475569",
|
||||
"basePriceCents": 4800
|
||||
},
|
||||
{
|
||||
"id": "13849307-bed4-4654-9476-fb135561f05f",
|
||||
"slug": "m",
|
||||
"label": "Medium",
|
||||
"physical": {
|
||||
"width": 12,
|
||||
"height": 16,
|
||||
"unit": "in"
|
||||
},
|
||||
"canvas": {
|
||||
"width": 1200,
|
||||
"height": 1600
|
||||
},
|
||||
"printZone": {
|
||||
"x": 120,
|
||||
"y": 160,
|
||||
"width": 960,
|
||||
"height": 1280
|
||||
},
|
||||
"silhouettePath": "M48,0 L1152,0 A48,48 0 0 1 1200,48 L1200,1552 A48,48 0 0 1 1152,1600 L48,1600 A48,48 0 0 1 0,1552 L0,48 A48,48 0 0 1 48,0 Z",
|
||||
"mockupFallbackColor": "#475569",
|
||||
"basePriceCents": 4800
|
||||
},
|
||||
{
|
||||
"id": "b327d6c5-8f0b-4639-b8ec-8d3f4ec74d1a",
|
||||
"slug": "l",
|
||||
"label": "Large",
|
||||
"physical": {
|
||||
"width": 12,
|
||||
"height": 16,
|
||||
"unit": "in"
|
||||
},
|
||||
"canvas": {
|
||||
"width": 1200,
|
||||
"height": 1600
|
||||
},
|
||||
"printZone": {
|
||||
"x": 120,
|
||||
"y": 160,
|
||||
"width": 960,
|
||||
"height": 1280
|
||||
},
|
||||
"silhouettePath": "M48,0 L1152,0 A48,48 0 0 1 1200,48 L1200,1552 A48,48 0 0 1 1152,1600 L48,1600 A48,48 0 0 1 0,1552 L0,48 A48,48 0 0 1 48,0 Z",
|
||||
"mockupFallbackColor": "#475569",
|
||||
"basePriceCents": 4800
|
||||
},
|
||||
{
|
||||
"id": "af9ed947-e705-4205-87b0-6c529ce6b342",
|
||||
"slug": "xl",
|
||||
"label": "X-Large",
|
||||
"physical": {
|
||||
"width": 12,
|
||||
"height": 16,
|
||||
"unit": "in"
|
||||
},
|
||||
"canvas": {
|
||||
"width": 1200,
|
||||
"height": 1600
|
||||
},
|
||||
"printZone": {
|
||||
"x": 120,
|
||||
"y": 160,
|
||||
"width": 960,
|
||||
"height": 1280
|
||||
},
|
||||
"silhouettePath": "M48,0 L1152,0 A48,48 0 0 1 1200,48 L1200,1552 A48,48 0 0 1 1152,1600 L48,1600 A48,48 0 0 1 0,1552 L0,48 A48,48 0 0 1 48,0 Z",
|
||||
"mockupFallbackColor": "#475569",
|
||||
"basePriceCents": 5200
|
||||
},
|
||||
{
|
||||
"id": "83156320-5f30-4cf8-b28c-3f69fcf7887e",
|
||||
"slug": "xxl",
|
||||
"label": "XX-Large",
|
||||
"physical": {
|
||||
"width": 12,
|
||||
"height": 16,
|
||||
"unit": "in"
|
||||
},
|
||||
"canvas": {
|
||||
"width": 1200,
|
||||
"height": 1600
|
||||
},
|
||||
"printZone": {
|
||||
"x": 120,
|
||||
"y": 160,
|
||||
"width": 960,
|
||||
"height": 1280
|
||||
},
|
||||
"silhouettePath": "M48,0 L1152,0 A48,48 0 0 1 1200,48 L1200,1552 A48,48 0 0 1 1152,1600 L48,1600 A48,48 0 0 1 0,1552 L0,48 A48,48 0 0 1 48,0 Z",
|
||||
"mockupFallbackColor": "#475569",
|
||||
"basePriceCents": 5400
|
||||
}
|
||||
],
|
||||
"createdAt": "2026-05-25T12:31:21.552Z",
|
||||
"updatedAt": "2026-05-25T12:31:21.552Z"
|
||||
}
|
||||
Reference in New Issue
Block a user