{
  "spec": "quick-html/v0",
  "id": "project-status",
  "version": "0.1.0",
  "name": "Project Status One-Pager",
  "description": "Scorecard-style project status on one A4: KPI tiles (budget, timeline, scope, issues), workstream table with RAG status and % complete, milestone list, top risks and a highlighted decisions-needed panel. Built for steering committees.",
  "useWhen": [
    "project status",
    "status report",
    "steering committee update",
    "stuurgroep update",
    "project dashboard",
    "RAG report",
    "voortgangsrapportage"
  ],
  "category": "printable",
  "language": "en",
  "page": {
    "size": "A4",
    "orientation": "portrait"
  },
  "modules": [
    "edit-overlay",
    "print-helper"
  ],
  "slots": [
    {
      "name": "doc-title",
      "type": "text",
      "required": true,
      "example": "Status — Warehouse Move — 14 Aug 2026",
      "notes": "Browser tab title; used as the download filename."
    },
    {
      "name": "project-title",
      "type": "text",
      "required": true,
      "example": "Warehouse Move — Almere DC2"
    },
    {
      "name": "owner",
      "type": "text",
      "required": true,
      "example": "Bram Verlaan — project lead"
    },
    {
      "name": "status-date",
      "type": "text",
      "required": true,
      "example": "14 Aug 2026 · update #7"
    },
    {
      "name": "overall-status",
      "type": "text",
      "required": true,
      "example": "On track",
      "notes": "Exactly one of: On track / At risk / Off track. The single most important word on the page."
    },
    {
      "name": "risks",
      "type": "html",
      "required": false,
      "example": "<ul><li>WMS vendor capacity — buffer exhausted…</li></ul>",
      "notes": "Inside the risks optional block. Each bullet: risk — impact; mitigation."
    },
    {
      "name": "asks",
      "type": "html",
      "required": false,
      "example": "<p>Approve € 18k contingency…</p>",
      "notes": "Inside the asks optional block. Specific decisions with deadline and forum."
    },
    {
      "name": "footer-note",
      "type": "text",
      "required": false,
      "example": "Steering committee distribution · next update 21 Aug"
    }
  ],
  "repeats": [
    {
      "name": "kpi",
      "description": "Scorecard tiles across the top. 4 gives a balanced row.",
      "min": 2,
      "max": 4,
      "slots": [
        {
          "name": "kpi-label",
          "type": "text",
          "required": true,
          "example": "Budget used"
        },
        {
          "name": "kpi-value",
          "type": "text",
          "required": true,
          "example": "€ 412k"
        },
        {
          "name": "kpi-sub",
          "type": "text",
          "required": false,
          "example": "of € 550k (75%)",
          "notes": "The comparison that gives the value meaning."
        }
      ]
    },
    {
      "name": "stream",
      "description": "One row per workstream.",
      "min": 1,
      "max": 8,
      "slots": [
        {
          "name": "stream-name",
          "type": "text",
          "required": true,
          "example": "Racking & fit-out"
        },
        {
          "name": "stream-rag",
          "type": "text",
          "required": true,
          "example": "On track",
          "notes": "Exactly one of: On track / At risk / Off track / Done."
        },
        {
          "name": "stream-pct",
          "type": "text",
          "required": true,
          "example": "80%"
        },
        {
          "name": "stream-note",
          "type": "text",
          "required": true,
          "example": "Aisles 1–12 installed; certification booked for 28 Aug.",
          "notes": "≤ ~150 chars; facts, then implication."
        }
      ]
    },
    {
      "name": "milestone",
      "description": "Key dates, chronological.",
      "min": 2,
      "max": 8,
      "slots": [
        {
          "name": "milestone-name",
          "type": "text",
          "required": true,
          "example": "Racking certified"
        },
        {
          "name": "milestone-due",
          "type": "text",
          "required": true,
          "example": "28 Aug"
        },
        {
          "name": "milestone-status",
          "type": "text",
          "required": true,
          "example": "On track",
          "notes": "One of: Done / On track / At risk / Off track / Planned."
        }
      ]
    }
  ],
  "optionals": [
    {
      "name": "risks",
      "description": "Top-risks panel (max 3 bullets, each with a mitigation)."
    },
    {
      "name": "asks",
      "description": "Highlighted decisions-needed panel — the reason a steering committee reads this. Remove only if there is truly nothing to decide."
    }
  ],
  "tags": [
    "work",
    "reporting",
    "management"
  ],
  "changelog": [
    {
      "version": "0.1.0",
      "date": "2026-08-14",
      "notes": "Initial release: KPI scorecard, RAG workstreams, milestones, risks and decisions-needed panel."
    }
  ],
  "agentInstructions": "ONE page, always (remove the data-example tiles and rows — they are preview content only). overall-status and every stream-rag/milestone-status must use exactly the fixed vocabulary (On track / At risk / Off track / Done / Planned) — no synonyms, no emoji. The overall status must be consistent with the table: if any workstream is Off track, overall cannot be On track; if you adjust it, keep the user's stated status unless it contradicts their own data, in which case flag the inconsistency to them. Compute percentages only from user-provided data; never invent budget or scope numbers. KPI tiles: value big and bare, context in kpi-sub ('of € 550k (75%)'). Risks max 3, each as risk — impact; mitigation. The asks panel is the point of the document: make each ask specific (amount, deadline, decision forum). Milestones chronological.",
  "license": "MIT",
  "authors": [
    {
      "github": "bvrln"
    }
  ]
}
