Documentation

Content and configuration

The folder layout, post frontmatter, images, links, and configuration Folder Blog supports today.

The connected content folder is the publishing boundary. New dashboard connections currently use posts, so paths below are relative to that folder.

Folder structure

my-blog/
└── posts/                 # connected content folder
    ├── hello-world.md
    ├── notes/
    │   └── another-post.md
    └── images/
        └── photo.jpg

Every markdown file under the connected folder is processed recursively. The filename becomes the default slug: hello-world.md becomes hello-world and publishes at /posts/hello-world. A frontmatter slug overrides the filename. Duplicate slugs receive a numeric suffix.

Images, audio, video, and PDFs inside the connected folder are uploaded as content-addressed media. Relative references are rewritten when the referenced file exists:

![Field notes](./images/photo.jpg)

Absolute URLs and unresolved paths are left unchanged.

Frontmatter reference

All fields are optional, but title, date, and description make a post more useful in listings and feeds.

---
title: Field Notes
date: 2026-08-08
description: A short summary shown in listings and feeds.
tags: [fieldwork, notes]
categories: [journal]
cover: ./images/photo.jpg
featured: true
author: Ada Lovelace
authorImage: ./images/ada.jpg
---
FieldAccepted behavior
titleString used as the post title. The filename is the fallback.
slugExplicit URL slug. Otherwise derived from the filename.
dateString, number, or YAML date. A valid future value schedules the post.
descriptionListing, API, and feed summary. summary, then the first paragraph, are fallbacks.
tagsString or list of strings used by the tags endpoint and filter.
categoriesString or list of strings used by the categories endpoint and filter.
cover / coverImageRelative media path or absolute URL for the post cover.
featuredOnly the boolean true marks a post as featured.
authorString, or an object with a string name.
authorImageAuthor image URL or relative media path.
hiddentrue archives the post so public routes and API queries exclude it.
drafttrue keeps the post out of public routes and APIs.
publishedfalse also keeps the post as a draft.

Self-hosted builds can opt into an inferred frontmatter contract for custom fields. It is generated from normalized, included posts and reports mixed types without narrowing them. See Self-hosting for the configuration, generated files, and local/remote TypeScript examples.

Scheduled posts

The hosted build enables scheduling using date. A valid future date marks the post scheduled; it is not returned by public post queries until another build publishes it. Dates without a timezone follow JavaScript date parsing, so use an explicit ISO 8601 timezone when the exact instant matters:

date: 2026-09-01T09:00:00-04:00

Obsidian-style wikilinks are enabled:

See [[another-post]] or [[another-post#Details|the details]].

Folder Blog resolves a target by slug, alias, or filename and produces a /posts/<slug> link. Heading-only links such as [[#Details]] become local anchors. A missing target is rendered as a broken-link marker and reported in the build issues. Normal relative markdown links are resolved too.

For self-hosted builds, set content.trackRelationships: true to also export resolved body links as post hashes in posts.json and as edges in graph.json. The local and HTTP SDKs use those edges for outgoing, incoming, and mutual-link related-article rules. External URLs, same-page anchors, local asset links, and unresolved targets do not create edges; unresolved wiki and Markdown post links remain visible in processor-issues.json.

Site configuration today

The hosted worker currently gets the blog name, description, subdomain, theme, SEO, and feature settings from the Folder Blog database. It does not read index.md frontmatter or a repository styles.css as site configuration.

Likewise, when the connected content path is the default posts, repository root files such as public/avatar.jpg, index.md, and styles.css are outside the fetched publishing boundary. Keep post media inside posts for now.

The older index.md variant/palette convention and CSS-variable examples remain design direction, not a promise of current hosted behavior. This page will change when repository-driven site configuration ships.