{
  "spec": "quick-html/v0",
  "id": "case-study",
  "version": "0.1.0",
  "name": "Case Study",
  "description": "A two-page editorial customer story: result-led headline, client profile, an oversized results band, the challenge in the client's own words, a numbered approach and a before/after table. Pick this for a B2B reference sales can hand over.",
  "useWhen": [
    "case study",
    "customer story",
    "customer success story",
    "reference case",
    "before and after results story",
    "proof point for sales",
    "klantcase",
    "klantverhaal",
    "referentiecase",
    "Erfolgsgeschichte",
    "étude de cas",
    "caso de éxito"
  ],
  "format": "printable",
  "theme": "marketing",
  "audience": [
    "marketing-team",
    "sales",
    "consultant"
  ],
  "tags": [
    "customer-story",
    "results",
    "b2b",
    "reference",
    "proof"
  ],
  "language": "en",
  "page": {
    "size": "A4",
    "orientation": "portrait"
  },
  "modules": [
    "edit-overlay",
    "print-helper"
  ],
  "slots": [
    {
      "name": "doc-title",
      "type": "text",
      "required": true,
      "example": "Customer story — changeover time down 38% at Verhaeghe Profielen",
      "notes": "Browser tab title and download filename. Lead with the result, then the client."
    },
    {
      "name": "kicker",
      "type": "text",
      "required": true,
      "example": "Customer story",
      "notes": "2–3 words, set in caps by the CSS. e.g. Customer story / Success story / Klantverhaal."
    },
    {
      "name": "case-title",
      "type": "text",
      "required": true,
      "example": "Changeover time cut by 38% — and Friday overtime disappeared",
      "notes": "45–75 chars. Must state the RESULT, not the client's name. Two lines of display serif is the design intent; over ~85 chars it pushes the results band off page 1."
    },
    {
      "name": "client-name",
      "type": "text",
      "required": true,
      "example": "Verhaeghe Profielen NV",
      "notes": "Legal or trading name — only with written permission. Otherwise anonymise: 'A Dutch logistics operator'."
    },
    {
      "name": "sector-line",
      "type": "text",
      "required": true,
      "example": "Aluminium profile extrusion & anodising · family-owned since 1978 · supplies 400+ fabricators across the Benelux",
      "notes": "One line, middots between facts. Do not repeat the four At a glance values."
    },
    {
      "name": "glance-industry",
      "type": "text",
      "required": true,
      "example": "Aluminium extrusion and anodising",
      "notes": "Max ~45 chars — the card has four equal columns."
    },
    {
      "name": "glance-size",
      "type": "text",
      "required": true,
      "example": "240 employees, € 68 mln revenue (2025)",
      "notes": "Headcount and/or revenue with the year it refers to."
    },
    {
      "name": "glance-location",
      "type": "text",
      "required": true,
      "example": "Kortrijk, Belgium (two press lines)",
      "notes": "City, country, plus scope (sites, plants, markets)."
    },
    {
      "name": "glance-since",
      "type": "date",
      "required": true,
      "example": "8 Sep 2025",
      "notes": "Go-live or contract date, format '8 Sep 2025'. Must sit before the 'after' period used in the results."
    },
    {
      "name": "results-period",
      "type": "text",
      "required": true,
      "example": "H1 2026 vs H1 2025",
      "notes": "The comparison basis for the whole band. Never leave this vague — 'vs last year' with no window reads as spin."
    },
    {
      "name": "challenge-body",
      "type": "html",
      "required": true,
      "example": "<p>We run about 1.400 profile dies across two presses…</p><p>The week was planned every Friday in a spreadsheet…</p>",
      "notes": "2–3 short paragraphs, 750–900 chars total, first person in the CLIENT's voice about the situation before. Sets two editorial columns with a drop cap."
    },
    {
      "name": "quote-text",
      "type": "text",
      "required": false,
      "example": "We had run SMED training twice before and both times it faded within a quarter. What changed is that the schedule stopped fighting us.",
      "notes": "Inside the pull-quote optional. 150–260 chars, verbatim, no quotation marks (the design supplies one). Never write this yourself."
    },
    {
      "name": "quote-attribution",
      "type": "text",
      "required": false,
      "example": "Ilse Vandenberghe · Operations Director, Verhaeghe Profielen NV",
      "notes": "Named person, role, company. An anonymous quote is worth less than no quote."
    },
    {
      "name": "approach-body",
      "type": "html",
      "required": true,
      "example": "<p>Nothing was installed in the first month. We timed changeovers with the die-setters…</p><p>Two of the three steps below are now run by the plant itself.</p>",
      "notes": "1–2 paragraphs, max ~450 chars. This is the first thing to compress if page 2 overflows."
    },
    {
      "name": "before-label",
      "type": "text",
      "required": true,
      "example": "Before · H1 2025",
      "notes": "Left column head of the results table. Name the baseline window here, not just 'Before' — it must agree with results-period."
    },
    {
      "name": "after-label",
      "type": "text",
      "required": true,
      "example": "After · H1 2026",
      "notes": "Right column head. Same length of window as before-label, or the comparison is not a comparison."
    },
    {
      "name": "results-body",
      "type": "html",
      "required": true,
      "example": "<p>The table compares H1 2026 with H1 2025 on the same two presses, the same product-mix definition and the same measurement…</p>",
      "notes": "1–2 paragraphs stating the measurement method and any confounder you know about. <strong> one figure at most."
    },
    {
      "name": "stack-body",
      "type": "html",
      "required": false,
      "example": "<p>Sequent Flow scheduling module (2 presses, 12 named users) · two-week on-site SMED baseline…</p>",
      "notes": "Inside the stack optional. Scope of work, modules, users, timeline. Max ~330 chars."
    },
    {
      "name": "next-body",
      "type": "html",
      "required": false,
      "example": "<p>The same sequencing logic moves to the anodising line in Q4 2026.</p>",
      "notes": "Inside the next optional. What the client does next — proof the relationship continues. Max ~280 chars."
    },
    {
      "name": "cta-text",
      "type": "text",
      "required": true,
      "example": "Short runs eating your press capacity? We will time your changeovers before we quote anything.",
      "notes": "80–140 chars. One concrete offer, in the same industry language as the story."
    },
    {
      "name": "contact-line",
      "type": "text",
      "required": true,
      "example": "Joris Beekman · Sequent B.V., Eindhoven<br>joris.beekman@sequent.eu · +31 40 799 21 40",
      "notes": "Named owner of the follow-up, not a generic inbox. <br> between lines; keep to 3 lines."
    },
    {
      "name": "footer-line",
      "type": "text",
      "required": false,
      "example": "Verhaeghe Profielen NV · published with the client's permission, Aug 2026",
      "notes": "Page-2 footer, left side. State the permission basis and the publication month."
    }
  ],
  "repeats": [
    {
      "name": "result-metric",
      "description": "One oversized headline number in the results band on page 1. Three is the designed count; four still fits, two looks sparse. Every metric must also appear as an outcome-row on page 2.",
      "min": 2,
      "max": 4,
      "slots": [
        {
          "name": "metric-value",
          "type": "text",
          "required": true,
          "example": "−38%",
          "notes": "Max 7 characters — it is set at 48px. Use a real minus (−), a comma decimal, and 'pp' for percentage points."
        },
        {
          "name": "metric-label",
          "type": "text",
          "required": true,
          "example": "Average changeover time",
          "notes": "What was measured, 2–5 words."
        },
        {
          "name": "metric-note",
          "type": "text",
          "required": true,
          "example": "74 → 46 minutes, timed die-out to first good profile across 1.248 changeovers.",
          "notes": "The basis: absolute before → after, the definition used, the sample size. 80–130 chars. A metric without a basis is not usable."
        }
      ]
    },
    {
      "name": "approach-step",
      "description": "One step of the numbered approach on page 2, in the order it happened. Three is the designed count.",
      "min": 2,
      "max": 5,
      "slots": [
        {
          "name": "step-title",
          "type": "text",
          "required": true,
          "example": "Two weeks on the floor, no software",
          "notes": "Max ~40 chars. Concrete action, not a phase name like 'Discovery'."
        },
        {
          "name": "step-text",
          "type": "text",
          "required": true,
          "example": "We stopwatched 46 changeovers on both presses with the setters and split every minute into internal and external work.",
          "notes": "180–260 chars. Say who did what and how long it took. Numbers here must not contradict the results table."
        }
      ]
    },
    {
      "name": "outcome-row",
      "description": "One before/after row in the results table on page 2. Include a row for every metric in the page-1 band, then the supporting ones.",
      "min": 2,
      "max": 8,
      "slots": [
        {
          "name": "outcome-metric",
          "type": "text",
          "required": true,
          "example": "Average changeover time",
          "notes": "Same wording as the matching metric-label where there is one."
        },
        {
          "name": "outcome-before",
          "type": "text",
          "required": true,
          "example": "74 min",
          "notes": "Value with unit, from the baseline period named in results-period."
        },
        {
          "name": "outcome-after",
          "type": "text",
          "required": true,
          "example": "46 min",
          "notes": "Same unit and same measurement method as outcome-before."
        },
        {
          "name": "outcome-change",
          "type": "text",
          "required": true,
          "example": "−38%",
          "notes": "Computed, not asserted: (after − before) / before, rounded to a whole percent. For shares already in %, report percentage points: '+6,8pp'."
        }
      ]
    }
  ],
  "optionals": [
    {
      "name": "pull-quote",
      "description": "Oversized customer quote at the foot of page 1. Remove it whenever no real quote has been supplied and cleared — an invented quote is the fastest way to lose a reference customer."
    },
    {
      "name": "stack",
      "description": "Scope of work / tooling box on page 2. Remove when the engagement was a single product with nothing worth listing."
    },
    {
      "name": "next",
      "description": "'What the client does next' box on page 2. Remove if the relationship has ended or nothing is planned; drop it first when page 2 runs long."
    }
  ],
  "changelog": [
    {
      "version": "0.1.0",
      "date": "2026-08-19",
      "notes": "Initial release: two-page editorial case study — results band, client quote, numbered approach and a reconciling before/after table."
    }
  ],
  "agentInstructions": "Lead with the outcome: case-title states the RESULT, never the client's name. Every metric needs a basis and a period — metric-note carries the absolute before → after plus sample size, results-period carries the window ('H1 2026 vs H1 2025'); vague numbers destroy credibility. The table must reconcile exactly with the band: compute each outcome-change yourself as (after − before) / before ((46 − 74) / 74 = −38%; use 'pp' for shares: 61,2% → 68,0% = +6,8pp), and give every band metric its own row. Write challenge-body in the client's words, first person, about the situation before — not the vendor's pitch. Never invent a quote: with none supplied, delete the pull-quote block and ask the user to obtain one. Never name a real company without written permission — anonymise client-name to 'A Dutch logistics operator' when consent is unclear. European formats: 1.248, 61,2%, € 68 mln, '8 Sep 2025'. Step numbers are generated by CSS, so never type them. Keep it to EXACTLY two pages: delete every data-example block, then compress approach-body and step-text first, then drop next, then stack — never shrink the type. Missing details stay as [PLACEHOLDER] and are flagged to the user to fill via the built-in Edit button.",
  "license": "MIT",
  "authors": [
    {
      "github": "bvrln"
    }
  ]
}
