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>
36 lines
904 B
JSON
36 lines
904 B
JSON
{
|
|
"id": "cb43b749-05c0-4d1c-8d0b-dadd9b28574d",
|
|
"slug": "hat",
|
|
"label": "Hat",
|
|
"description": "Adjustable baseball cap with embroidered front print.",
|
|
"category": "Apparel",
|
|
"options": [],
|
|
"sizes": [
|
|
{
|
|
"id": "778c4b47-a46b-4753-8fa2-be8af1523f4a",
|
|
"slug": "cap",
|
|
"label": "Baseball Cap",
|
|
"physical": {
|
|
"width": 5,
|
|
"height": 2,
|
|
"unit": "in"
|
|
},
|
|
"canvas": {
|
|
"width": 500,
|
|
"height": 200
|
|
},
|
|
"printZone": {
|
|
"x": 50,
|
|
"y": 20,
|
|
"width": 400,
|
|
"height": 160
|
|
},
|
|
"silhouettePath": "M30,0 L470,0 A30,30 0 0 1 500,30 L500,170 A30,30 0 0 1 470,200 L30,200 A30,30 0 0 1 0,170 L0,30 A30,30 0 0 1 30,0 Z",
|
|
"mockupFallbackColor": "#fce7f3",
|
|
"basePriceCents": 2200
|
|
}
|
|
],
|
|
"createdAt": "2026-05-25T12:31:21.562Z",
|
|
"updatedAt": "2026-05-25T12:31:21.562Z"
|
|
}
|