{
  name         = "Blog Post Metadata",
  description  = "Create or edit blog post metadata. Saved to {slug}.ncl alongside the post body. thumbnail and image_url are excluded — owned exclusively by generate-images.nu.",
  display_mode = "complete",

  elements = [

    # ── Identity ─────────────────────────────────────────────────────────────

    {
      type          = "section_header",
      name          = "identity_header",
      title         = "Identity",
      border_top    = true,
      border_bottom = true,
    },
    {
      type        = "text",
      name        = "title",
      prompt      = "Title",
      required    = true,
      nickel_path = ["title"],
      help        = "Post title shown in listings, headings, and browser tab.",
    },
    {
      type        = "text",
      name        = "slug",
      prompt      = "Slug",
      required    = true,
      nickel_path = ["slug"],
      help        = "URL segment — lowercase, hyphens only, max 60 chars. Matches the .ncl filename stem. Immutable after publication.",
    },
    {
      type        = "text",
      name        = "subtitle",
      prompt      = "Subtitle",
      required    = false,
      nickel_path = ["subtitle"],
      help        = "Secondary heading displayed under the title.",
    },
    {
      type        = "text",
      name        = "excerpt",
      prompt      = "Excerpt",
      required    = false,
      nickel_path = ["excerpt"],
      help        = "1-3 sentences for index listings and SEO meta description.",
    },

    # ── Taxonomy ──────────────────────────────────────────────────────────────

    {
      type          = "section_header",
      name          = "taxonomy_header",
      title         = "Taxonomy",
      border_top    = true,
      border_bottom = true,
    },
    {
      type        = "text",
      name        = "category",
      prompt      = "Category",
      required    = true,
      nickel_path = ["category"],
      help        = "Primary category slug — must match the parent directory name (e.g. rust, devops, web3).",
    },
    {
      type        = "text",
      name        = "tags",
      prompt      = "Tags",
      required    = false,
      nickel_path = ["tags"],
      help        = "Comma-separated. new-post.nu converts to Array String before writing the NCL. E.g. rust, leptos, async",
    },

    # ── Publication ───────────────────────────────────────────────────────────

    {
      type          = "section_header",
      name          = "publication_header",
      title         = "Publication",
      border_top    = true,
      border_bottom = true,
    },
    {
      type        = "text",
      name        = "date",
      prompt      = "Publication date",
      required    = true,
      nickel_path = ["date"],
      help        = "YYYY-MM-DD. Original publication date — never update after publication.",
    },
    {
      type        = "text",
      name        = "updated_at",
      prompt      = "Updated at",
      required    = false,
      nickel_path = ["updated_at"],
      help        = "YYYY-MM-DD — date of last significant content change. Leave blank on creation.",
    },
    {
      type        = "confirm",
      name        = "published",
      prompt      = "Published?",
      default     = false,
      nickel_path = ["published"],
      help        = "False hides the post from all listings and the API. Set to false on creation.",
    },
    {
      type        = "confirm",
      name        = "draft",
      prompt      = "Draft?",
      default     = true,
      nickel_path = ["draft"],
      help        = "Draft posts are excluded from the index and /api/content-render. Set to true on creation.",
    },
    {
      type        = "confirm",
      name        = "featured",
      prompt      = "Featured?",
      default     = false,
      nickel_path = ["featured"],
      help        = "Pins to the top of the category listing and enables featured styling.",
    },

    # ── Display ───────────────────────────────────────────────────────────────

    {
      type          = "section_header",
      name          = "display_header",
      title         = "Display",
      border_top    = true,
      border_bottom = true,
    },
    {
      type        = "text",
      name        = "read_time",
      prompt      = "Read time",
      required    = false,
      nickel_path = ["read_time"],
      help        = "Estimated reading time for the listing card. E.g. '8 min read'. Auto-derived from word count when absent.",
    },
    {
      type        = "text",
      name        = "sort_order",
      prompt      = "Sort order",
      required    = false,
      default     = "0",
      nickel_path = ["sort_order"],
      help        = "Manual position within the category listing. Lower values appear first. 0 = no preference. new-post.nu converts to Number.",
    },

  ],
}
