155 lines
5.3 KiB
Text
155 lines
5.3 KiB
Text
|
|
{
|
||
|
|
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.",
|
||
|
|
},
|
||
|
|
|
||
|
|
],
|
||
|
|
}
|