{
  "$comment": "The certificate print (design #15, 14 Sep 2026; Part 2 generator five). Two documents for people: a certificate of achievement for the small victory, and a certificate of retirement; the deed or the years set large, the seal, the signatures, the stamp. Nothing is fetched, except the retiree's portrait: a photo the worker engraves (/v1/retirement-portraits, 23 Sep 2026), the photo not kept.",
  "configVersion": 1,
  "designId": "certificate-print",
  "helpMeWrite": {
    "opening": "Who is the certificate for — and is it a small victory or a retirement?",
    "openingChips": [
      "A small victory",
      "A retirement"
    ]
  },
  "rendererVersion": "certificate/0.9.0",
  "service": {
    "origin": "",
    "savePath": "/v1/designs",
    "analyticsPath": "/v1/analytics/events",
    "previewDebounceMs": 160
  },
  "sheet": {
    "width": 1000,
    "height": 1500
  },
  "assetVersion": "2026-09-29.6",
  "preview": {
    "exampleAsset": "design-certificate-print-example.jpg",
    "exampleAlt": "An award certificate on a midnight-navy sheet inside a woven gold border: CERTIFICATE of Achievement in engraved capitals, then a gold engraved bay laurel with Olivia Thompson set inside it and a gold ribbon across its foot reading Parallel parked outside the house, first time, no shouting; on 14 May 2026, in the presence of witnesses; the citation Three years of practice. One perfect Thursday.; a gold seal between two signatures, Mum and Next door’s cat, and an inked Achieved stamp.",
    "seed": {
      "kind": "victory",
      "name": "Olivia Thompson",
      "deed": "parallel parked outside the house, first time, no shouting",
      "date": "2026-05-14",
      "years": "",
      "role": "",
      "employer": "",
      "released": "",
      "citation": "Three years of practice. One perfect Thursday.",
      "signed": "Mum",
      "witnessed": "Next door’s cat",
      "issuer": "Issued by the Thompson household",
      "stamp": true,
      "colourway": "midnight",
      "typeface": "classic",
      "texture": "none",
      "backdrop": "none",
      "frame": "double",
      "sealIcon": "classic",
      "layout": "award",
      "badge": ""
    }
  },
  "fields": {
    "$comment": "Which certificate, then the facts it needs; the frame, colours and lettering always visible; the background, the paper and the finishing touches folded below (critic r10, 25 Sep 2026).",
    "requiredLabel": "About them",
    "optionsLabel": "The look",
    "moreLabel": "Finishing touches",
    "required": [
      {
        "key": "kind",
        "type": "thumbnails",
        "label": "Which certificate?",
        "hint": "",
        "default": "victory",
        "affects": "render",
        "options": [
          {
            "value": "victory",
            "label": "Small victory",
            "thumbnail": "design-certificate-print-kind-victory.jpg",
            "description": "a certificate of achievement for the thing that finally happened"
          },
          {
            "value": "retirement",
            "label": "Retirement",
            "thumbnail": "design-certificate-print-kind-retirement.jpg",
            "description": "released from all alarms, meetings and Monday mornings — add their portrait, engraved free"
          }
        ]
      },
      {
        "key": "name",
        "type": "text",
        "label": "Their name",
        "maxLength": 40,
        "affects": "render",
        "hint": "Up to 40 letters, sized to fit.",
        "placeholder": "Olivia Thompson"
      },
      {
        "key": "portraitGroup",
        "type": "columns",
        "$comment": "The retiree's face, engraved in an oval from a photo (23 Sep 2026; the worker's /v1/retirement-portraits). A group, as the shell caps the top-level required fields at four; each field says when it shows, as a group cannot. Grown-ups only: the worker refuses anyone who looks under 18.",
        "columns": [
          [
            {
              "key": "portrait",
              "type": "file",
              "label": "Add their portrait from a photo",
              "hint": "Free. A clear photo of their face, and we engrave it in an oval on the certificate in about 20 seconds. We only draw grown-ups. We never keep your photo.",
              "accept": "image/*",
              "maxBytes": 26214400,
              "reading": "Engraving their portrait — about 20 seconds…",
              "tooLarge": "That photo is too large. Try one under 25 MB.",
              "progressSeconds": 22,
              "waitPulse": "[data-layer=\"portrait\"]",
              "optional": true,
              "affects": "render",
              "showWhen": {
                "key": "kind",
                "equals": "retirement"
              }
            },
            {
              "key": "showPortrait",
              "type": "toggle",
              "label": "Show the portrait",
              "default": true,
              "optional": true,
              "affects": "render",
              "hint": "Turn it off to print the certificate without it.",
              "showWhen": {
                "key": "portrait",
                "notEmpty": true
              }
            }
          ]
        ]
      },
      {
        "key": "facts",
        "type": "columns",
        "$comment": "One column, full width: the shell caps the top-level required fields at four.",
        "columns": [
          [
            {
              "key": "deed",
              "type": "text",
              "label": "What did they do?",
              "maxLength": 90,
              "affects": "render",
              "hint": "Finish the sentence: Olivia… passed her driving test. \"For passing her test\" and \"Best Mum in the world\" work too. Up to 90 letters.",
              "placeholder": "parallel parked outside the house, first time, no shouting",
              "showWhen": {
                "key": "kind",
                "equals": "victory"
              }
            },
            {
              "key": "years",
              "type": "text",
              "label": "Years of service",
              "maxLength": 3,
              "affects": "render",
              "hint": "1 to 80.",
              "placeholder": "38",
              "showWhen": {
                "key": "kind",
                "equals": "retirement"
              }
            },
            {
              "key": "role",
              "type": "text",
              "label": "Their job",
              "maxLength": 40,
              "affects": "render",
              "hint": "Optional.",
              "placeholder": "Head of Geography",
              "optional": true,
              "showWhen": {
                "key": "kind",
                "equals": "retirement"
              }
            },
            {
              "key": "employer",
              "type": "text",
              "label": "Where they worked",
              "maxLength": 40,
              "affects": "render",
              "hint": "Optional.",
              "placeholder": "Varndean School",
              "optional": true,
              "showWhen": {
                "key": "kind",
                "equals": "retirement"
              }
            },
            {
              "key": "released",
              "type": "text",
              "label": "Released from",
              "maxLength": 90,
              "affects": "render",
              "hint": "Blank prints \"all alarms, meetings and Monday mornings\".",
              "placeholder": "all alarms, meetings and Monday mornings",
              "optional": true,
              "showWhen": {
                "key": "kind",
                "equals": "retirement"
              }
            },
            {
              "key": "badge",
              "type": "text",
              "label": "On the rosette",
              "maxLength": 20,
              "affects": "render",
              "hint": "Two or three words suit the gold centre best, like Passed! or 10K! Up to 20 letters. Blank prints Well done, or the years on a retirement.",
              "placeholder": "Passed!",
              "optional": true,
              "showWhen": {
                "key": "layout",
                "equals": "rosette"
              }
            },
            {
              "key": "date",
              "type": "date",
              "inputType": "date",
              "label": "The day",
              "affects": "render",
              "hint": "Optional. Leave it blank to leave it out.",
              "optional": true
            },
            {
              "key": "signRoom",
              "type": "toggle",
              "label": "Leave room for everyone to sign",
              "default": false,
              "optional": true,
              "affects": "render",
              "hint": "Rows of dotted lines above the seal, room for sixteen or more signatures, for the whole staff room to sign in pen. Your line underneath still prints above them; the stamp steps aside.",
              "showWhen": {
                "key": "kind",
                "equals": "retirement"
              }
            },
            {
              "key": "citation",
              "type": "text",
              "label": "A line underneath",
              "maxLength": 90,
              "affects": "render",
              "hint": "In italics, under the big words. Optional.",
              "placeholder": "Three years of practice. One perfect Thursday.",
              "optional": true
            },
            {
              "key": "signed",
              "type": "text",
              "label": "Signed",
              "maxLength": 30,
              "affects": "render",
              "hint": "Optional.",
              "placeholder": "Mum",
              "optional": true
            },
            {
              "key": "witnessed",
              "type": "text",
              "label": "Witnessed by",
              "maxLength": 30,
              "affects": "render",
              "hint": "Optional.",
              "placeholder": "Next door’s cat",
              "optional": true
            }
          ]
        ]
      }
    ],
    "options": [
      {
        "key": "layout",
        "type": "thumbnails",
        "label": "Layout",
        "$comment": "Round 18 (29 Sep 2026): the sheet's shape. Classic is the engraved certificate exactly as before (a design saved without a layout is Classic); Rosette puts a big prize rosette at the head; Award sets the name in a gold laurel with the deed on a ribbon.",
        "hint": "",
        "default": "classic",
        "affects": "render",
        "options": [
          {
            "value": "classic",
            "label": "Classic",
            "thumbnail": "design-certificate-print-layout-classic.jpg",
            "description": "the engraved certificate, the gold seal between the signatures"
          },
          {
            "value": "rosette",
            "label": "Rosette",
            "thumbnail": "design-certificate-print-layout-rosette.jpg",
            "description": "a big prize rosette at the head, a few words on its gold centre"
          },
          {
            "value": "award",
            "label": "Award",
            "thumbnail": "design-certificate-print-layout-award.jpg",
            "description": "their name in a gold laurel, the deed on a ribbon"
          }
        ]
      },
      {
        "key": "frame",
        "type": "thumbnails",
        "label": "Frame",
        "hint": "",
        "default": "double",
        "affects": "render",
        "options": [
          {
            "value": "none",
            "label": "None",
            "thumbnail": "design-certificate-print-frame-none.jpg",
            "description": "the sheet alone, the watermark and the seal"
          },
          {
            "value": "hairline",
            "label": "Slim border",
            "thumbnail": "design-certificate-print-frame-hairline.jpg",
            "description": "a fine rule and a slim woven band, a rosette at each corner"
          },
          {
            "value": "double",
            "label": "Engraved border",
            "thumbnail": "design-certificate-print-frame-double.jpg",
            "description": "a woven band between a heavy rule and a fine one, a rosette at each corner"
          },
          {
            "value": "corners",
            "label": "Corners",
            "thumbnail": "design-certificate-print-frame-corners.jpg",
            "description": "a rosette in each corner, a woven arm along each edge"
          }
        ]
      },
      {
        "key": "colourway",
        "type": "thumbnails",
        "label": "Colours",
        "hint": "",
        "default": "ivory",
        "affects": "render",
        "options": [
          {
            "value": "ivory",
            "label": "Ivory",
            "thumbnail": "design-certificate-print-colourway-ivory.jpg",
            "sheet": "light"
          },
          {
            "value": "meadow",
            "label": "Meadow",
            "thumbnail": "design-certificate-print-colourway-meadow.jpg",
            "sheet": "light"
          },
          {
            "value": "blush",
            "label": "Blush",
            "thumbnail": "design-certificate-print-colourway-blush.jpg",
            "sheet": "light"
          },
          {
            "value": "ink",
            "label": "Ink",
            "thumbnail": "design-certificate-print-colourway-ink.jpg",
            "sheet": "dark"
          },
          {
            "value": "midnight",
            "label": "Midnight",
            "thumbnail": "design-certificate-print-colourway-midnight.jpg",
            "sheet": "dark"
          }
        ],
        "$comment": "Five chips (owner rule, critic r19 [4]): Clay left the chips in round 19 and stays a valid id in the composer and the worker, so saved designs still print."
      },
      {
        "key": "typeface",
        "type": "thumbnails",
        "label": "Lettering",
        "hint": "",
        "default": "classic",
        "affects": "render",
        "options": [
          {
            "value": "classic",
            "label": "Classic",
            "thumbnail": "design-certificate-print-typeface-classic.jpg"
          },
          {
            "value": "modern",
            "label": "Modern",
            "thumbnail": "design-certificate-print-typeface-modern.jpg"
          },
          {
            "value": "soft-serif",
            "label": "Soft serif",
            "thumbnail": "design-certificate-print-typeface-soft-serif.jpg"
          },
          {
            "value": "editorial",
            "label": "Editorial",
            "thumbnail": "design-certificate-print-typeface-editorial.jpg"
          },
          {
            "value": "script",
            "label": "Script",
            "thumbnail": "design-certificate-print-typeface-script.jpg"
          }
        ]
      }
    ],
    "more": [
      {
        "key": "sealIcon",
        "type": "thumbnails",
        "label": "The seal",
        "hint": "What sits at the heart of the gold seal.",
        "default": "classic",
        "affects": "render",
        "options": [
          {
            "value": "classic",
            "label": "Star or laurels",
            "thumbnail": "design-certificate-print-seal-classic.jpg",
            "description": "a star on a small victory, laurels on a retirement"
          },
          {
            "value": "heart",
            "label": "Heart",
            "thumbnail": "design-certificate-print-seal-heart.jpg",
            "description": "for the best Mum, Dad, Nan or friend"
          },
          {
            "value": "car",
            "label": "Car",
            "thumbnail": "design-certificate-print-seal-car.jpg",
            "description": "for a driving test passed or a first car"
          },
          {
            "value": "spanner",
            "label": "Spanner",
            "thumbnail": "design-certificate-print-seal-spanner.jpg",
            "description": "for the flat-pack, the fix, the DIY"
          },
          {
            "value": "trophy",
            "label": "Trophy",
            "thumbnail": "design-certificate-print-seal-trophy.jpg",
            "description": "for the race run, the exam passed, the match won"
          }
        ]
      },
      {
        "key": "backdrop",
        "type": "thumbnails",
        "label": "Background",
        "hint": "",
        "default": "parchment",
        "affects": "render",
        "options": [
          {
            "value": "none",
            "label": "Plain",
            "thumbnail": "design-certificate-print-backdrop-none.jpg"
          },
          {
            "value": "parchment",
            "label": "Parchment",
            "thumbnail": "design-certificate-print-backdrop-parchment.jpg",
            "description": "a quiet wash of warm parchment, deeper at the edges",
            "sheet": "light",
            "swapTo": "candlelight"
          },
          {
            "value": "watercolour",
            "label": "Watercolour",
            "thumbnail": "design-certificate-print-backdrop-watercolour.jpg",
            "description": "soft wet blooms of blush and sage",
            "sheet": "light",
            "swapTo": "aurora"
          },
          {
            "value": "aurora",
            "label": "Northern lights",
            "thumbnail": "design-certificate-print-backdrop-aurora.jpg",
            "description": "curtains of teal and violet light",
            "sheet": "dark",
            "swapTo": "watercolour"
          },
          {
            "value": "candlelight",
            "label": "Candlelight",
            "thumbnail": "design-certificate-print-backdrop-candlelight.jpg",
            "description": "warm amber glows at the edges of a dark room",
            "sheet": "dark",
            "swapTo": "parchment"
          }
        ],
        "$comment": "Five chips (owner rule, critic r19 [4]): Plain, Parchment and Watercolour on a light sheet, Northern lights and Candlelight on a dark one, each swapping to its partner when the sheet changes. The retired chips (dust, frost, holly, powder, nebula, ink-bloom, snowfall) stay valid ids in the composer and the worker, so saved designs still print."
      },
      {
        "key": "texture",
        "type": "thumbnails",
        "label": "Printed texture",
        "hint": "",
        "default": "none",
        "affects": "render",
        "options": [
          {
            "value": "none",
            "label": "Smooth",
            "thumbnail": "design-certificate-print-texture-none.jpg"
          },
          {
            "value": "grain",
            "label": "Fine grain",
            "thumbnail": "design-certificate-print-texture-grain.jpg"
          },
          {
            "value": "fibre",
            "label": "Handmade",
            "thumbnail": "design-certificate-print-texture-fibre.jpg"
          },
          {
            "value": "cardstock",
            "label": "Cardstock",
            "thumbnail": "design-certificate-print-texture-cardstock.jpg"
          },
          {
            "value": "linen",
            "label": "Linen",
            "thumbnail": "design-certificate-print-texture-linen.jpg"
          }
        ]
      },
      {
        "key": "issuer",
        "type": "text",
        "label": "A line at the bottom",
        "maxLength": 60,
        "affects": "render",
        "hint": "Optional — Issued by the Thompson household; With the thanks of the whole department.",
        "placeholder": "Issued by the Thompson household"
      },
      {
        "key": "stamp",
        "type": "toggle",
        "label": "The inked stamp",
        "default": true,
        "affects": "render",
        "hint": "Achieved or Retired, with the day beneath. Left off when there is room for everyone to sign."
      }
    ],
    "printed": "As printed: {name}."
  },
  "presets": {
    "$comment": "Seven ways in and a blank start. A tap fills the kind, the wording and the look; it never touches a name already typed unless the kind changes. Each sets its layout (round 18): Passed! and Ran the whole way wear the Rosette, World's best Dad the Award; the rest are Classic. Round 19: the page opens on the Award (the seed's layout), Forty-one years moved from Clay to Ivory now Clay is off the chips (still a valid id).",
    "label": "Start from an occasion",
    "options": [
      {
        "id": "parallel-parked",
        "label": "Parallel parked",
        "values": {
          "kind": "victory",
          "name": "Olivia Thompson",
          "deed": "parallel parked outside the house, first time, no shouting",
          "date": "2026-05-14",
          "citation": "Three years of practice. One perfect Thursday.",
          "signed": "Mum",
          "witnessed": "Next door’s cat",
          "issuer": "Issued by the Thompson household",
          "colourway": "ivory",
          "typeface": "classic",
          "texture": "none",
          "backdrop": "parchment",
          "frame": "double",
          "sealIcon": "classic",
          "layout": "classic",
          "badge": ""
        }
      },
      {
        "id": "the-retirement",
        "label": "Retirement + free portrait",
        "values": {
          "kind": "retirement",
          "name": "Margaret Okafor",
          "years": "38",
          "role": "Head of Geography",
          "employer": "Varndean School",
          "date": "2026-07-17",
          "citation": "Four thousand children now know where Ulaanbaatar is.",
          "signed": "The staff room",
          "witnessed": "Year 9",
          "issuer": "",
          "colourway": "ivory",
          "typeface": "classic",
          "texture": "none",
          "backdrop": "none",
          "frame": "double",
          "signRoom": false,
          "sealIcon": "classic",
          "layout": "classic",
          "badge": ""
        },
        "description": "add their face, engraved free"
      },
      {
        "id": "best-dad",
        "label": "World’s best Dad",
        "values": {
          "kind": "victory",
          "name": "Dad",
          "deed": "Best Dad in the world",
          "date": "2026-06-21",
          "citation": "For services to lifts, loans and bad jokes.",
          "signed": "Ellie and Sam",
          "witnessed": "Mum",
          "issuer": "",
          "colourway": "ink",
          "typeface": "classic",
          "texture": "none",
          "backdrop": "none",
          "frame": "double",
          "sealIcon": "heart",
          "layout": "award",
          "badge": ""
        }
      },
      {
        "id": "passed",
        "label": "Passed!",
        "values": {
          "kind": "victory",
          "name": "Chloe Evans",
          "deed": "for passing her driving test",
          "date": "2026-08-13",
          "citation": "Forty lessons. One examiner. Not a single kerb.",
          "signed": "Dad",
          "witnessed": "The examiner",
          "issuer": "",
          "colourway": "ivory",
          "typeface": "modern",
          "texture": "none",
          "backdrop": "none",
          "frame": "hairline",
          "sealIcon": "car",
          "layout": "rosette",
          "badge": "Passed!"
        }
      },
      {
        "id": "the-wardrobe",
        "label": "The flat-pack",
        "values": {
          "kind": "victory",
          "name": "Dad",
          "deed": "Assembled the flat-pack wardrobe without a single leftover screw",
          "date": "2026-03-08",
          "citation": "Forty-two screws. Forty-two holes. One Sunday.",
          "signed": "Everyone",
          "witnessed": "The instructions",
          "issuer": "",
          "colourway": "ink",
          "typeface": "classic",
          "texture": "linen",
          "backdrop": "none",
          "frame": "corners",
          "sealIcon": "spanner",
          "layout": "classic",
          "badge": ""
        }
      },
      {
        "id": "ran-the-whole-way",
        "label": "Ran the whole way",
        "values": {
          "kind": "victory",
          "name": "Sophie",
          "deed": "Ran the whole way round the park without stopping",
          "date": "2026-06-21",
          "citation": "Four laps. No walking. A very big ice cream.",
          "signed": "Coach Dan",
          "witnessed": "Dad",
          "issuer": "",
          "colourway": "blush",
          "typeface": "script",
          "texture": "none",
          "backdrop": "none",
          "frame": "double",
          "sealIcon": "trophy",
          "layout": "rosette",
          "badge": "Non-stop!"
        }
      },
      {
        "id": "the-postman",
        "label": "Forty-one years",
        "values": {
          "kind": "retirement",
          "name": "Bob Reid",
          "years": "41",
          "role": "Postman",
          "employer": "Royal Mail, Kendal",
          "released": "early starts, wet Wednesdays and dogs",
          "date": "2026-08-29",
          "citation": "Every dog on the round knew his name.",
          "signed": "The depot",
          "witnessed": "The sorting office",
          "issuer": "",
          "colourway": "ivory",
          "typeface": "soft-serif",
          "texture": "cardstock",
          "backdrop": "none",
          "frame": "hairline",
          "signRoom": true,
          "sealIcon": "classic",
          "layout": "classic",
          "badge": ""
        }
      },
      {
        "id": "blank",
        "label": "Start blank",
        "values": {
          "issuer": "",
          "sealIcon": "classic",
          "layout": "classic",
          "badge": ""
        }
      }
    ]
  },
  "recipes": {
    "$comment": "Three named looks a designer chose together, one per layout (round 19, critic r19 [1]: all three were Classic, so a buyer never saw the laurel or the rosette): Green and gold tone wears the Award, Blush and script the Rosette, Watercolour wash the Classic. Look keys only: the page composes the customer's own facts in each.",
    "items": [
      {
        "id": "ivory-classic",
        "label": "Green and gold tone",
        "note": "Gold laurel on sage green with a parchment wash, tall lettering.",
        "look": {
          "colourway": "meadow",
          "typeface": "editorial",
          "texture": "none",
          "backdrop": "parchment",
          "frame": "corners",
          "layout": "award"
        }
      },
      {
        "id": "midnight-editorial",
        "label": "Blush and script",
        "note": "A pleated prize rosette on blush, flowing script, engraved corners.",
        "look": {
          "colourway": "blush",
          "typeface": "script",
          "texture": "none",
          "backdrop": "none",
          "frame": "corners",
          "layout": "rosette"
        }
      },
      {
        "id": "clay-soft",
        "label": "Watercolour wash",
        "note": "The classic: ivory, watercolour blooms, engraved corners.",
        "look": {
          "colourway": "ivory",
          "typeface": "classic",
          "texture": "none",
          "backdrop": "watercolour",
          "frame": "corners",
          "layout": "classic"
        }
      }
    ]
  },
  "surprise": {
    "$comment": "Surprise me rolls one of these curated looks and one frame, never a random pairing of sets.",
    "layoutKey": "frame",
    "looks": [
      {
        "colourway": "ivory",
        "typeface": "classic",
        "texture": "none",
        "backdrop": "none"
      },
      {
        "colourway": "midnight",
        "typeface": "classic",
        "texture": "none",
        "backdrop": "none"
      },
      {
        "colourway": "ivory",
        "typeface": "soft-serif",
        "texture": "cardstock",
        "backdrop": "none"
      },
      {
        "colourway": "meadow",
        "typeface": "classic",
        "texture": "none",
        "backdrop": "parchment"
      },
      {
        "colourway": "blush",
        "typeface": "script",
        "texture": "none",
        "backdrop": "none"
      },
      {
        "colourway": "ink",
        "typeface": "classic",
        "texture": "none",
        "backdrop": "none"
      }
    ],
    "layouts": [
      "none",
      "hairline",
      "double",
      "corners"
    ]
  },
  "cart": {
    "summary": "{name} · {kind.label} · {colourway.label}"
  },
  "merch": {
    "$comment": "The mug (owner, 12 Oct 2026): step 4 offers it beside Poster and Framed print, from the product's 11oz / Mug variant. The preview draws the mug's own print file (a turning mug where WebGL runs, assets/mug-viewer.js); the buyer chooses how the design goes round it (values.mugPrint) and may order a set; the order lane prints it with the master's --product mug.",
    "groups": {
      "mug": "Mug"
    }
  }
}
