{
  "spec": "quick-html/v0",
  "id": "course-outline",
  "version": "0.1.0",
  "name": "Course Outline",
  "description": "Responsive syllabus page for a course, training programme or workshop series: serif masthead, an at-a-glance card, checked learning outcomes, numbered module cards and an enrol band. Pick it for course pages, curricula and training outlines.",
  "useWhen": [
    "course outline",
    "syllabus",
    "curriculum overview",
    "training programme outline",
    "workshop series page",
    "module overview for a course",
    "what you will learn page",
    "studiegids",
    "cursusoverzicht",
    "Lehrplan",
    "programme de formation",
    "programma del corso"
  ],
  "format": "page",
  "theme": "education",
  "audience": [
    "teacher",
    "student",
    "hr"
  ],
  "tags": [
    "syllabus",
    "curriculum",
    "training",
    "modules",
    "learning"
  ],
  "language": "en",
  "modules": [
    "edit-overlay",
    "print-helper"
  ],
  "slots": [
    {
      "name": "doc-title",
      "type": "text",
      "required": true,
      "example": "Data Storytelling for Analysts — Kade Instituut Rotterdam",
      "notes": "Browser tab title; used as the download filename. Pattern 'Course name — Provider'."
    },
    {
      "name": "course-kicker",
      "type": "text",
      "required": true,
      "example": "Professional certificate · Autumn 2026",
      "notes": "Award type and/or cohort above the title, in normal case — CSS renders it in spaced capitals. Under ~40 chars."
    },
    {
      "name": "course-title",
      "type": "text",
      "required": true,
      "example": "Data Storytelling for Analysts",
      "notes": "Large serif headline. Best under ~40 characters; it wraps to two lines on mobile."
    },
    {
      "name": "course-subtitle",
      "type": "text",
      "required": true,
      "example": "Turn the numbers you already have into a case your organisation acts on.",
      "notes": "One line on the outcome, not the syllabus. Under ~85 chars; rendered in serif italic."
    },
    {
      "name": "instructor-line",
      "type": "text",
      "required": true,
      "example": "Taught by Dr. Feike Bergsma, data journalist, with Ruben Ilic, visual editor · Kade Instituut, Rotterdam",
      "notes": "Who teaches it, plus provider and city, separated by ·. One line, under ~110 chars."
    },
    {
      "name": "glance-duration",
      "type": "text",
      "required": true,
      "example": "8 weeks · 32 hours",
      "notes": "At-a-glance row 1. Calendar length · total learner hours. Must agree with glance-effort and the module durations. Under ~22 chars."
    },
    {
      "name": "glance-format",
      "type": "text",
      "required": true,
      "example": "Evenings, on campus",
      "notes": "At-a-glance row 2. Delivery mode, e.g. 'Online, live' / 'In person, Leuven' / 'Hybrid'. Under ~22 chars."
    },
    {
      "name": "glance-effort",
      "type": "text",
      "required": true,
      "example": "4 hours per week",
      "notes": "At-a-glance row 3. Honest weekly load including own work. Under ~22 chars."
    },
    {
      "name": "glance-level",
      "type": "text",
      "required": true,
      "example": "Intermediate",
      "notes": "At-a-glance row 4. 'Introductory' / 'Intermediate' / 'Advanced' / 'All levels'. Under ~22 chars."
    },
    {
      "name": "glance-language",
      "type": "text",
      "required": true,
      "example": "English",
      "notes": "At-a-glance row 5. Language of instruction; note materials only if it stays short ('English, NL materials')."
    },
    {
      "name": "course-intro",
      "type": "html",
      "required": true,
      "example": "<p>This programme is for analysts, policy officers and researchers who produce sound numbers that nobody acts on. Over eight weeks you rebuild a piece of your own reporting — one dataset, one chart, one five-minute story — with weekly feedback from a working data journalist.</p><p>By the final evening you present that work to the group and leave with a version you can send to your director the next morning.</p>",
      "notes": "One or two <p>, 2–3 sentences total: who it is for, and what is different by the end. Under ~450 chars."
    },
    {
      "name": "assessment-content",
      "type": "html",
      "required": false,
      "example": "<p>One portfolio piece, built from your own work data: a single annotated chart plus a 300-word note on what you cut and why. Submitted in week 7 and presented in week 8.</p><p>Graded pass / merit with written feedback from both tutors. One resubmission within four weeks is included.</p>",
      "notes": "Inside the assessment optional. What is assessed, when, and how it is graded. One or two short <p> or a <ul>."
    },
    {
      "name": "materials-content",
      "type": "html",
      "required": false,
      "example": "<ul><li>A laptop with the spreadsheet or BI tool you already use at work</li><li>One real dataset you are allowed to share with the group</li><li>Comfort with pivot tables; no coding or statistics degree required</li><li>Reading pack (approx. 60 pages) is supplied in week 1</li></ul>",
      "notes": "Inside the materials optional. Prerequisites and what to bring; a <ul> of 3–5 items reads best in this narrow panel."
    },
    {
      "name": "enrol-text",
      "type": "html",
      "required": false,
      "example": "<p>Eight Tuesday evenings, 18:30–20:30, at Wilhelminakade 312 in Rotterdam. Sixteen places, so that everyone presents twice.</p><p>€ 1.450 including the reading pack, tutor feedback and the final portfolio review. Invoiced to your employer on request.</p>",
      "notes": "Inside the enrol optional. Practical detail: schedule, venue, group size, fee. One or two <p>, under ~320 chars."
    },
    {
      "name": "start-date",
      "type": "text",
      "required": false,
      "example": "Starts 15 Sep 2026",
      "notes": "Inside the enrol optional; small spaced capitals above the button. Pattern 'Starts 15 Sep 2026' or 'Next cohort 6 Jan 2027'."
    },
    {
      "name": "enrol-button",
      "type": "text",
      "required": false,
      "example": "Reserve a place",
      "notes": "Inside the enrol optional. Button label, 2–4 words ('Enrol now', 'Request the brochure')."
    },
    {
      "name": "enrol-url",
      "type": "url",
      "required": false,
      "example": "https://kadeinstituut.nl/data-storytelling/enrol",
      "notes": "Attribute-only slot: the href of the enrol button, inside the enrol optional. Must include a scheme (https:// or mailto:)."
    },
    {
      "name": "footer-line",
      "type": "text",
      "required": false,
      "example": "Kade Instituut · Wilhelminakade 312, 3072 AR Rotterdam · kadeinstituut.nl",
      "notes": "Muted footer line: provider, address, website, separated by ·."
    }
  ],
  "repeats": [
    {
      "name": "outcome",
      "description": "One checked line in 'What you will learn'. Renders as a two-column list on wider screens, so an even number looks tidiest.",
      "min": 3,
      "max": 8,
      "slots": [
        {
          "name": "outcome-text",
          "type": "text",
          "required": true,
          "example": "Explain the trade-offs between a bar chart, a line chart and a plain table for a given question, and defend the choice to a sceptical stakeholder.",
          "notes": "MUST start with an observable verb (explain, build, evaluate, design, calculate) — never 'understand' or 'learn about'. One sentence, under ~150 chars."
        }
      ]
    },
    {
      "name": "module",
      "description": "One numbered card in the programme. The number is generated by a CSS counter, so cards renumber themselves — never type a number.",
      "min": 2,
      "max": 15,
      "slots": [
        {
          "name": "module-title",
          "type": "text",
          "required": true,
          "example": "Finding the story in the data",
          "notes": "Descriptive, not generic ('Finding the story in the data', not 'Module 1'). Under ~45 chars."
        },
        {
          "name": "module-duration",
          "type": "text",
          "required": true,
          "example": "Weeks 1–2 · 8 hours",
          "notes": "Pill right of the title. Calendar slot · hours, e.g. 'Week 3 · 4 hours' or 'Day 2 · 6 hours'. Under ~22 chars, it must not wrap."
        },
        {
          "name": "module-summary",
          "type": "text",
          "required": true,
          "example": "Interrogate a dataset until it yields one claim you are willing to defend in writing.",
          "notes": "Exactly one sentence on what the learner does in this module. Under ~110 chars."
        },
        {
          "name": "module-topics",
          "type": "html",
          "required": true,
          "example": "<ul><li>The question behind the request</li><li>Exploratory charts you throw away</li><li>Base rates, denominators and outliers</li><li>Writing the one-sentence finding</li></ul>",
          "notes": "One <ul> of 3–5 short topic phrases (not sentences, no trailing full stops), each under ~48 chars."
        }
      ]
    }
  ],
  "optionals": [
    {
      "name": "assessment",
      "description": "Panel describing how learners are assessed. Remove for open workshops, webinars and anything with no marked work."
    },
    {
      "name": "materials",
      "description": "Panel listing prerequisites and what to bring. Remove when there is nothing to prepare and no entry requirement."
    },
    {
      "name": "enrol",
      "description": "Deep-burgundy call-to-action band with practical detail, start date and an enrol button. Remove when the page is internal, the cohort is full, or there is no link to send people to."
    }
  ],
  "changelog": [
    {
      "version": "0.1.0",
      "date": "2026-08-19",
      "notes": "Initial release: responsive two-column syllabus page with at-a-glance card, checked outcomes, CSS-numbered module cards, assessment/materials panels and an enrol band."
    }
  ],
  "agentInstructions": "Check the arithmetic before shipping: weeks x effort per week must equal the total hours in glance-duration ('8 weeks · 32 hours' with '4 hours per week'), and the module durations must sum to that same total — recompute both. Every outcome-text starts with an observable verb (explain, build, evaluate, design, calculate) and never with 'understand', 'learn about' or 'be aware of'. module-summary is exactly one sentence; module-topics is a <ul> of 3–5 short phrases, not sentences. Keep the five at-a-glance values under ~22 characters — they sit in a tight card and wrap badly. Module numbers come from a CSS counter: never type them. Dates exactly like '15 Sep 2026', money like '€ 1.450'. Drop the assessment, materials or enrol optional whenever the course has nothing real to put there, and give enrol-url a full scheme (https:// or mailto:) — drop the enrol block rather than ship a bare domain. Never claim accreditation, credits, ECTS or exam rights the user did not state. If a start date, fee or venue is unknown, leave recognisable placeholders such as [START DATE] or [FEE] and tell the user to fill them via the built-in Edit button. Delete every data-example block: it is preview filler only.",
  "license": "MIT",
  "authors": [
    {
      "github": "bvrln"
    }
  ]
}
