Writing Content

Content lives in your vault’s blog/ and docs/ folders as plain Markdown files. Nothing is published unless you explicitly opt in.

Frontmatter fields

Every file can include YAML frontmatter between --- fences. All fields except title are optional.

FieldTypeDefaultDescription
titlestring—Required. Page title. Build fails without it.
publishbooleanfalseSet to true to include the page in the built site.
datestring—Publication date in YYYY-MM-DD format. Used for sorting and RSS.
authorstring | string[]—Single author name or an array: ["Alice", "Bob"].
featured_imagestring—Path relative to vault root, e.g. img/hero.jpg.
descriptionstring—Short summary. Used in OG meta tags and RSS.
tagsstring[]—Tag list, e.g. [writing, tutorial]. Enables tag pages at /tags/[tag].
reading_timenumber—Estimated read time in minutes. Auto-set by karaoke-enrich if you use it.
commentsboolean—Override the module default. Blog defaults to true, docs to false.

Example frontmatter

---
title: "Getting Started with Astro"
publish: true
date: 2026-03-10
author: "Alice"
featured_image: "img/astro-banner.jpg"
description: "A practical introduction to building static sites with Astro."
tags: [astro, tutorial, beginner]
reading_time: 6
comments: true
---

Draft workflow

Files are private by default. Use this workflow to write drafts and publish when ready:

  1. Create a new .md file in blog/ or docs/.
  2. Write freely — without publish: true, the file never enters the build.
  3. When the post is ready, add publish: true to the frontmatter.
  4. Rebuild the site. The page now appears in navigation, RSS, and search.

To unpublish, remove publish: true or set it to false. The page disappears from the next build.

AI enrichment (optional)

Run npx @karaoke-cms/enrich to auto-generate description, tags, and reading_time for published notes using OpenAI or Anthropic. Already-enriched notes are skipped via a local cache. You can also set up karaoke-enrich as a pre-commit hook to enrich notes automatically on commit.

Fields set by enrichment are written directly into the frontmatter of the source file — you can edit or override them at any time.