{
  "spec": "quick-html/v0",
  "id": "event-page",
  "version": "0.1.0",
  "name": "Event Page",
  "description": "Screen-first web page for one event — the link you drop in a group chat: serif hero, scannable key-facts strip, timed schedule, travel and hotel notes and one big RSVP button. Pick it for weddings, anniversaries, parties, conferences and open days.",
  "useWhen": [
    "event page",
    "event website",
    "event landing page",
    "wedding website",
    "rsvp page",
    "party invitation link",
    "conference info page",
    "evenementpagina",
    "trouwwebsite",
    "aanmeldpagina",
    "Veranstaltungsseite",
    "page de l'événement",
    "página del evento"
  ],
  "format": "page",
  "theme": "events",
  "tags": [
    "event",
    "landing",
    "rsvp",
    "wedding",
    "conference"
  ],
  "language": "en",
  "modules": [
    "edit-overlay",
    "print-helper"
  ],
  "slots": [
    {
      "name": "doc-title",
      "type": "text",
      "required": true,
      "example": "Willem & Margriet · Twenty-Five Years · 26 September 2026",
      "notes": "Browser tab title and the text most link previews show. Host or occasion, then the date."
    },
    {
      "name": "kicker",
      "type": "text",
      "required": true,
      "example": "You are warmly invited",
      "notes": "Small gold label above the title, rendered uppercase with wide letterspacing. 2–5 words: 'You are warmly invited', 'Save the date', 'Registration open'."
    },
    {
      "name": "event-title",
      "type": "text",
      "required": true,
      "example": "Twenty-Five Years",
      "notes": "The hero headline. It scales to 84px, so keep it to roughly 22 characters / 1–3 words; put the names and the occasion in event-tagline instead."
    },
    {
      "name": "event-tagline",
      "type": "text",
      "required": true,
      "example": "Willem & Margriet de Vries celebrate their silver wedding anniversary — and would very much like you there.",
      "notes": "One italic sentence under the title saying who is hosting and why. 80–140 characters."
    },
    {
      "name": "hero-dateline",
      "type": "text",
      "required": true,
      "example": "Saturday 26 September 2026 · Santpoort, North Holland",
      "notes": "Short uppercase poster line: date plus town, parts joined with a non-breaking space then ' · ' so the separator never starts a line. The precise date, time and address live in the key-facts strip below; keep the two consistent."
    },
    {
      "name": "hero-cta",
      "type": "text",
      "required": false,
      "example": "R.S.V.P.",
      "notes": "Label of the outlined hero button, which jumps down to the RSVP band. 1–2 words: 'R.S.V.P.', 'Register', 'Reply'."
    },
    {
      "name": "event-date",
      "type": "date",
      "required": true,
      "example": "Saturday 26 September 2026",
      "notes": "'When' cell of the key-facts strip. Written out in full with the weekday; use a range ('26–27 September 2026') for multi-day events."
    },
    {
      "name": "event-time",
      "type": "text",
      "required": true,
      "example": "Reception 17:00 · Dinner 19:00",
      "notes": "'Timings' cell. 24-hour clock, zero-padded, never am/pm; 1–2 named moments joined with ' · '."
    },
    {
      "name": "venue-name",
      "type": "text",
      "required": true,
      "example": "Landgoed Duin & Kruidberg",
      "notes": "'Where' cell, first line. Venue name only, no street."
    },
    {
      "name": "venue-address",
      "type": "text",
      "required": true,
      "example": "Duin en Kruidbergerweg 60, 2071 LE Santpoort-Noord",
      "notes": "'Where' cell, muted second line: street, postcode and town on one line — guests copy this straight into a maps app."
    },
    {
      "name": "dress-code",
      "type": "text",
      "required": false,
      "example": "Black tie optional",
      "notes": "'Dress' cell. 2–4 words. Replace with another single fact ('Free entry', 'Doors 09:00') if there is no dress code."
    },
    {
      "name": "welcome-text",
      "type": "html",
      "required": true,
      "example": "<p>Twenty-five years ago we said yes to each other in a small town hall, with eleven guests and a borrowed camera. This time we would like rather more of you there.</p><p>Come and eat well, dance badly, and stay late.</p>",
      "notes": "2–3 sentences from the hosts, in one or two <p>. Centred italic, so keep it under ~330 characters."
    },
    {
      "name": "schedule-heading",
      "type": "text",
      "required": true,
      "example": "The evening",
      "notes": "Heading above the schedule. 'The evening', 'The day', 'Programme', 'Agenda' — 1–3 words."
    },
    {
      "name": "travel-content",
      "type": "html",
      "required": false,
      "example": "<p><strong>By car</strong> — parking is free on the estate; follow the signs at the gate.</p><p><strong>By train</strong> — Santpoort Noord station is eight minutes away by taxi.</p>",
      "notes": "Inside the travel optional. 2–4 short <p>, each opening with a bold mode ('By car', 'By train', 'Taxis home')."
    },
    {
      "name": "stay-content",
      "type": "html",
      "required": false,
      "example": "<p><strong>On the estate</strong> — twenty rooms are held for us until 5 September; quote <em>De Vries 25</em> when you book.</p><p><strong>In Haarlem</strong> — Hotel Lion d'Or, from € 140 per night.</p>",
      "notes": "Inside the stay optional. 2–4 short <p> of hotel suggestions with prices as '€ 140'."
    },
    {
      "name": "rsvp-heading",
      "type": "text",
      "required": true,
      "example": "Will you join us?",
      "notes": "Headline of the dark RSVP band. A short question or imperative, under ~30 characters."
    },
    {
      "name": "rsvp-text",
      "type": "html",
      "required": true,
      "example": "<p>One reply per household is plenty. Tell us who is coming, whether you would like a room on the estate, and anything the kitchen should know about.</p>",
      "notes": "One <p> saying exactly what to include in the reply. Under ~200 characters."
    },
    {
      "name": "rsvp-url",
      "type": "url",
      "required": true,
      "example": "mailto:margriet@devries.nl?subject=RSVP%2026%20September%202026",
      "notes": "Attribute slot on the button's href. Must include the scheme: a 'mailto:' address (optionally with ?subject=) or an 'https://' form URL. There is no JavaScript, so this is the only way a reply can be sent."
    },
    {
      "name": "rsvp-button",
      "type": "text",
      "required": true,
      "example": "Reply by email",
      "notes": "Button label, rendered uppercase. 2–4 words that match what rsvp-url actually does: 'Reply by email', 'Open the form', 'Register now'."
    },
    {
      "name": "rsvp-deadline",
      "type": "text",
      "required": true,
      "example": "Kindly reply before 5 September 2026",
      "notes": "Small gold line under the button. One short sentence, ideally under 40 characters so it stays on one line on a phone; write the date out in full."
    },
    {
      "name": "faq-content",
      "type": "html",
      "required": false,
      "example": "<dl><dt>Can we bring the children?</dt><dd>Please do. There is a supervised playroom beside the Orangery from 18:00.</dd><dt>Should we bring a gift?</dt><dd>Only yourselves.</dd></dl>",
      "notes": "Inside the faq optional. A single <dl> with 2–4 <dt> questions, each followed by a one- or two-sentence <dd> answer."
    },
    {
      "name": "footer-line",
      "type": "text",
      "required": false,
      "example": "Willem & Margriet · 26 September 2026 · Landgoed Duin & Kruidberg, Santpoort",
      "notes": "Very muted footer line: hosts, date and venue, or the event website."
    }
  ],
  "repeats": [
    {
      "name": "entry",
      "description": "One row of the schedule: time on the left axis, title and a short detail on the right. Collapses to a stacked block on narrow screens.",
      "min": 2,
      "max": 20,
      "slots": [
        {
          "name": "entry-time",
          "type": "text",
          "required": true,
          "example": "17:00",
          "notes": "24-hour clock, zero-padded ('09:30', '17:00'); rows must run in chronological order, past midnight as '00:00'."
        },
        {
          "name": "entry-title",
          "type": "text",
          "required": true,
          "example": "Reception on the south lawn",
          "notes": "What happens. Under 60 characters, no trailing period."
        },
        {
          "name": "entry-detail",
          "type": "html",
          "required": false,
          "example": "<p>Champagne & canapés · Weather permitting</p>",
          "notes": "At most two short lines (who / where / note), each its own <p>, parts joined with ' · '. Leave empty when there is nothing to add — never a paragraph."
        }
      ]
    }
  ],
  "optionals": [
    {
      "name": "travel",
      "description": "'Getting there' column: driving and parking, public transport, taxis home. Drop it when the venue needs no explaining."
    },
    {
      "name": "stay",
      "description": "'Where to stay' column: two to four hotel suggestions with prices. Drop it for daytime or local events."
    },
    {
      "name": "faq",
      "description": "'Good to know' section: a question-and-answer list (children, gifts, dietary requirements, accessibility). Drop it when there is nothing left to answer."
    }
  ],
  "changelog": [
    {
      "version": "0.1.0",
      "date": "2026-08-19",
      "notes": "Initial release: responsive one-page event site with tinted serif hero, four-cell key-facts strip, schedule repeat, travel/stay/FAQ optionals and a dark RSVP band."
    }
  ],
  "agentInstructions": "Keep event-title to roughly 22 characters (1–3 words): it scales to 84px, so names and occasion belong in event-tagline. hero-dateline is the short poster line (date plus town); the key-facts strip carries the precise data, so write event-date out in full with its weekday ('Saturday 26 September 2026') and keep the two consistent. rsvp-url must be a complete link including the scheme: a 'mailto:' address (optionally with ?subject=) or an 'https://' form URL. There is no JavaScript, so mail or a form is all the button can do — never leave it as '#', and make rsvp-button say which it is. Schedule entries run in strict chronological order with 24-hour zero-padded times ('09:30', '17:00', never am/pm); delete every data-example row and add one 'entry' per item. entry-title stays under 60 characters; entry-detail is at most two short lines joined with ' · ', or empty. Drop the travel, stay and faq optionals when there is nothing real to say. Adapt the register — warm for weddings and anniversaries, crisp for conferences and open days, where schedule-heading becomes 'Programme' or 'Agenda' — while keeping every slot in its declared type. For unknown details, leave visible placeholders like [VENUE ADDRESS] or [RSVP EMAIL] and tell the user to fill them in with the built-in Edit button.",
  "license": "MIT",
  "authors": [
    {
      "github": "bvrln"
    }
  ]
}
