- Move top nav from hugo.toml menus to data/nav.yml (CMS-editable) - Add categories taxonomy alongside tags - Add Decap CMS settings collection for nav management - Add categories field to articles and essays in CMS config Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
138 lines
5.3 KiB
YAML
138 lines
5.3 KiB
YAML
# Decap CMS — ASW site content manager
|
|
#
|
|
# LOCAL MODE: run `npx decap-server` from site/ directory
|
|
# No OAuth, no Forgejo auth — reads/writes files directly.
|
|
#
|
|
# PRODUCTION MODE: switch backend to gitea (see packs/hugo/admin/config.yml)
|
|
|
|
local_backend: true
|
|
|
|
backend:
|
|
name: git-gateway
|
|
|
|
media_folder: static/images
|
|
public_folder: /images
|
|
|
|
slug:
|
|
encoding: ascii
|
|
clean_accents: true
|
|
|
|
# ── Site settings (file-based collections) ───────────────────────────
|
|
|
|
collections:
|
|
- name: settings
|
|
label: Settings
|
|
files:
|
|
- name: nav
|
|
label: Navigation
|
|
file: data/nav.yml
|
|
fields:
|
|
- label: Navigation Links
|
|
name: items
|
|
widget: list
|
|
fields:
|
|
- { label: Name, name: name, widget: string }
|
|
- { label: URL, name: url, widget: string }
|
|
- { label: Weight, name: weight, widget: number, hint: "Sort order (lower = first)" }
|
|
|
|
# ── Content collections ──────────────────────────────────────────────
|
|
|
|
- name: docs-getting-started
|
|
label: "Docs: Getting Started"
|
|
folder: content/docs/getting-started
|
|
create: true
|
|
slug: "{{slug}}"
|
|
fields: &doc-fields
|
|
- { label: Title, name: title, widget: string }
|
|
- { label: Description, name: description, widget: string, required: false }
|
|
- { label: Type, name: type, widget: hidden, default: docs }
|
|
- { label: Weight, name: weight, widget: number, required: false, hint: "Sort order in sidebar" }
|
|
- { label: Date, name: date, widget: datetime, format: "YYYY-MM-DD" }
|
|
- { label: Tags, name: tags, widget: list, required: false }
|
|
- { label: AI Disclosure, name: ai-disclosure, widget: select, options: ["generated", "assisted", "none"], default: "assisted" }
|
|
- { label: AI Model, name: ai-model, widget: string, required: false }
|
|
- { label: AI Provider, name: ai-provider, widget: string, required: false, default: "Anthropic" }
|
|
- { label: Body, name: body, widget: markdown }
|
|
|
|
- name: docs-core
|
|
label: "Docs: Core"
|
|
folder: content/docs/core
|
|
create: true
|
|
slug: "{{slug}}"
|
|
fields: *doc-fields
|
|
|
|
- name: docs-components
|
|
label: "Docs: Components"
|
|
folder: content/docs/components
|
|
create: true
|
|
slug: "{{slug}}"
|
|
fields: *doc-fields
|
|
|
|
- name: docs-reference
|
|
label: "Docs: Reference"
|
|
folder: content/docs/reference
|
|
create: true
|
|
slug: "{{slug}}"
|
|
fields: *doc-fields
|
|
|
|
- name: articles
|
|
label: Articles
|
|
label_singular: Article
|
|
folder: content/articles
|
|
create: true
|
|
slug: "{{slug}}"
|
|
fields:
|
|
- { label: Title, name: title, widget: string }
|
|
- { label: Description, name: description, widget: string, required: false }
|
|
- { label: Date, name: date, widget: datetime, format: "YYYY-MM-DD" }
|
|
- { label: Categories, name: categories, widget: list, required: false, hint: "e.g. framework, tutorial, deep-dive" }
|
|
- { label: Tags, name: tags, widget: list, required: false }
|
|
- { label: AI Disclosure, name: ai-disclosure, widget: select, options: ["generated", "assisted", "none"], default: "assisted" }
|
|
- { label: AI Model, name: ai-model, widget: string, required: false }
|
|
- { label: AI Provider, name: ai-provider, widget: string, required: false, default: "Anthropic" }
|
|
- { label: Body, name: body, widget: markdown }
|
|
|
|
- name: essays
|
|
label: Essays
|
|
label_singular: Essay
|
|
folder: content/essays
|
|
create: true
|
|
slug: "{{slug}}"
|
|
fields:
|
|
- { label: Title, name: title, widget: string }
|
|
- { label: Description, name: description, widget: string }
|
|
- { label: Abstract, name: abstract, widget: text, required: false }
|
|
- { label: Author, name: author, widget: string, required: false }
|
|
- { label: Eyebrow, name: eyebrow, widget: string, required: false, default: "Essay" }
|
|
- { label: Type, name: type, widget: hidden, default: essay }
|
|
- { label: Date, name: date, widget: datetime, format: "YYYY-MM-DD" }
|
|
- { label: Tags, name: tags, widget: list, required: false }
|
|
- { label: Draft, name: draft, widget: boolean, default: true }
|
|
- { label: Categories, name: categories, widget: list, required: false }
|
|
- { label: AI Disclosure, name: ai-disclosure, widget: select, options: ["generated", "assisted", "none"], default: "assisted" }
|
|
- { label: AI Model, name: ai-model, widget: string, required: false }
|
|
- { label: AI Provider, name: ai-provider, widget: string, required: false, default: "Anthropic" }
|
|
- { label: Body, name: body, widget: markdown }
|
|
|
|
- name: notes
|
|
label: Notes
|
|
label_singular: Note
|
|
folder: content/notes
|
|
create: true
|
|
slug: "{{slug}}"
|
|
fields:
|
|
- { label: Title, name: title, widget: string }
|
|
- { label: Date, name: date, widget: datetime, format: "YYYY-MM-DD" }
|
|
- { label: Tags, name: tags, widget: list, required: false }
|
|
- { label: Body, name: body, widget: markdown }
|
|
|
|
- name: pages
|
|
label: Pages
|
|
label_singular: Page
|
|
folder: content/pages
|
|
create: true
|
|
slug: "{{slug}}"
|
|
fields:
|
|
- { label: Title, name: title, widget: string }
|
|
- { label: Description, name: description, widget: string, required: false }
|
|
- { label: Body, name: body, widget: markdown }
|