{
  "spec": "quick-html/v0",
  "id": "link-in-bio",
  "version": "0.1.0",
  "name": "Link in Bio",
  "description": "One-page personal link hub — the modern business card. Monogram avatar, tagline, short bio, a stack of tappable link cards, social chips and direct contact. Use when someone needs a single URL for a social bio, e-mail signature or QR code.",
  "useWhen": [
    "link in bio",
    "link hub page",
    "personal landing page",
    "one page profile site",
    "freelancer profile page",
    "portfolio links page",
    "linkpagina",
    "persoonlijke landingspagina",
    "seite mit allen links",
    "page de liens",
    "pagina de enlaces"
  ],
  "format": "page",
  "theme": "career",
  "audience": [
    "freelance",
    "jobseeker"
  ],
  "language": "en",
  "modules": [
    "edit-overlay",
    "print-helper"
  ],
  "slots": [
    {
      "name": "doc-title",
      "type": "text",
      "required": true,
      "example": "Nienke Broekhuis — illustrator & motion designer, Utrecht",
      "notes": "Browser tab title and download filename. Name first, then role + city."
    },
    {
      "name": "monogram",
      "type": "text",
      "required": true,
      "example": "NB",
      "notes": "1–2 letters only, uppercase initials. Three or more letters overflow the avatar circle."
    },
    {
      "name": "display-name",
      "type": "text",
      "required": true,
      "example": "Nienke Broekhuis",
      "notes": "The name people search for — a person, a studio or a handle."
    },
    {
      "name": "tagline",
      "type": "text",
      "required": true,
      "example": "Illustrator & motion designer — I make complicated things easy to look at.",
      "notes": "One line: role + what you do for whom. Aim for 45–80 chars; wraps to two lines at most."
    },
    {
      "name": "location-line",
      "type": "text",
      "required": true,
      "example": "Utrecht, NL · booking from October 2026",
      "notes": "City, country, and optionally availability. Separate with ·, keep under ~45 chars."
    },
    {
      "name": "bio",
      "type": "html",
      "required": true,
      "example": "<p>I draw and animate explainers for science, climate and public-sector teams — recently for Kader Magazine and the Delta Climate Fund. The picture has to be right, not just pretty.</p>",
      "notes": "One <p> of 2–3 sentences, first person, under ~200 chars. Longer runs past four lines on a phone and pushes the links below the fold."
    },
    {
      "name": "links-heading",
      "type": "text",
      "required": true,
      "example": "Where to find me",
      "notes": "Small uppercase label above the link list. 2–4 words."
    },
    {
      "name": "featured-eyebrow",
      "type": "text",
      "required": false,
      "example": "Start here",
      "notes": "In the featured optional block. Pill label, 1–3 words: 'Start here', 'New', 'Currently'."
    },
    {
      "name": "featured-title",
      "type": "text",
      "required": false,
      "example": "The Energy Atlas — 40 illustrated maps",
      "notes": "In the featured optional block. Under ~50 chars."
    },
    {
      "name": "featured-text",
      "type": "text",
      "required": false,
      "example": "A year in the making: the Dutch energy transition drawn as one continuous landscape. First chapter free to read.",
      "notes": "In the featured optional block. One or two sentences, under ~140 chars."
    },
    {
      "name": "featured-url",
      "type": "url",
      "required": false,
      "example": "https://nienkebroekhuis.nl/energy-atlas",
      "notes": "href of the featured card. Must include the scheme (https://)."
    },
    {
      "name": "contact-note",
      "type": "text",
      "required": false,
      "example": "Rather skip the forms? Mail or call me.",
      "notes": "In the contact optional block. One short line inviting direct contact."
    },
    {
      "name": "contact-email",
      "type": "text",
      "required": false,
      "example": "hallo@nienkebroekhuis.nl",
      "notes": "In the contact optional block. The address as displayed."
    },
    {
      "name": "contact-email-href",
      "type": "url",
      "required": false,
      "example": "mailto:hallo@nienkebroekhuis.nl",
      "notes": "'mailto:' + exactly the address in contact-email. Keep the two in sync."
    },
    {
      "name": "contact-phone",
      "type": "text",
      "required": false,
      "example": "+31 6 24 88 51 07",
      "notes": "In the contact optional block. Displayed with spaces, international format."
    },
    {
      "name": "contact-phone-href",
      "type": "url",
      "required": false,
      "example": "tel:+31624885107",
      "notes": "'tel:' + the same number without spaces. Keep in sync with contact-phone."
    },
    {
      "name": "footer-line",
      "type": "text",
      "required": false,
      "example": "© 2026 Nienke Broekhuis · KvK 84226109",
      "notes": "Left-hand footer line: copyright, company registration or a one-line disclaimer."
    }
  ],
  "repeats": [
    {
      "name": "link",
      "description": "One full-width link card. Order them by what a first-time visitor needs most; 4–7 cards read best.",
      "min": 2,
      "max": 12,
      "slots": [
        {
          "name": "link-label",
          "type": "text",
          "required": true,
          "example": "Portfolio",
          "notes": "A short noun phrase — what the visitor gets, not 'click here'. Hard ceiling ~40 chars; ~20 keeps it on one line on a phone, so every card stays the same height."
        },
        {
          "name": "link-note",
          "type": "text",
          "required": true,
          "example": "Illustration, motion, editorial",
          "notes": "One clause, no full stop. Hard ceiling ~60 chars; ~35 keeps it on one line on a phone."
        },
        {
          "name": "link-url",
          "type": "url",
          "required": true,
          "example": "https://nienkebroekhuis.nl/work",
          "notes": "href of the card. Must include the scheme (https://, mailto:, tel:)."
        }
      ]
    },
    {
      "name": "social",
      "description": "One small icon+label chip in the social row. Generic glyphs by design — no brand logos.",
      "min": 1,
      "max": 6,
      "slots": [
        {
          "name": "social-label",
          "type": "text",
          "required": true,
          "example": "Instagram",
          "notes": "Platform name or handle, one word where possible."
        },
        {
          "name": "social-url",
          "type": "url",
          "required": true,
          "example": "https://instagram.com/nienkedraws",
          "notes": "Full profile URL including https://. Never guess a handle."
        }
      ]
    }
  ],
  "optionals": [
    {
      "name": "featured",
      "description": "Highlighted 'start here' card above the link list: current project, launch or the one thing you want clicked. Remove when nothing genuinely deserves top billing."
    },
    {
      "name": "socials",
      "description": "Row of social chips under the links. Remove entirely when the user has no public accounts."
    },
    {
      "name": "contact",
      "description": "Direct e-mail and phone line at the foot of the page. Remove when the user does not want either published."
    }
  ],
  "tags": [
    "profile",
    "links",
    "personal-site",
    "portfolio"
  ],
  "changelog": [
    {
      "version": "0.1.0",
      "date": "2026-08-19",
      "notes": "Initial release: mobile-first single-column link hub with SVG monogram avatar, repeatable link cards, social chips, optional featured and contact blocks."
    }
  ],
  "agentInstructions": "Delete every data-example card and chip before filling — they are preview content only. Order the link cards by what a first-time visitor needs most: the one action you want them to take goes first, admin and shop links last. Four to seven cards read best; twelve is the ceiling. Keep link-label under ~40 characters and link-note under ~60, one clause, no full stop; around 20 and 35 characters keeps each on one line on a phone, so every card stays the same height. Every URL slot needs its scheme: https:// for links, contact-email-href is 'mailto:' plus exactly the address shown in contact-email, contact-phone-href is 'tel:' plus that same number without spaces. The monogram takes 1–2 uppercase letters only. Never invent a social account, handle or URL: where the user has not supplied one, leave a recognisable placeholder such as [YOUR PORTFOLIO URL] in both the label and the href and tell them to fill it in with the built-in Edit button. Drop the featured block unless there is a real 'start here' project, drop socials when there are no public accounts, and drop contact when no e-mail or phone should be published. Tone: first person, warm and concrete — this is a person, not a corporate landing page.",
  "license": "MIT",
  "authors": [
    {
      "github": "bvrln"
    }
  ]
}
