Two pairs of square brackets in huge white type on violet, with the words your vault is the site.

src/content is an Obsidian vault. Open it in Obsidian with Vault CMS, or open the project in Zeku, and every note in posts, projects, and pages is a page on your site.

Folders

FolderBecomes
posts//posts/your-note/
projects//projects/your-note/, and a tile on the start screen
pages//your-note/
special/the titles and intros of the site’s own pages

A note can be a single file (posts/hello.md) or a folder (posts/hello/index.md) with its images beside it. The address comes from the file or folder name, or from a slug property if you set one.

Properties

title: Writing in Obsidian
date: 2026-10-08
description: One or two sentences for lists and search results.
tags: [obsidian, vault-cms]
image: "[[attachments/cover.png]]"
imageAlt: What the cover shows.
featured: false
accent: magenta
draft: false

Only title matters. Everything else has a sensible default, and a blank date or a cover written either way (as a wikilink, a path, or a web address) won’t stop a build.

Write links the way Obsidian does. the-continuum-transition resolves by name from anywhere in the vault, a heading works too, and a link to a draft shows faded until it’s published, like this one: a-draft-that-isnt-here.

Paste an image and it goes in an attachments folder beside the note. While the dev server runs, a new image shows on the next reload. There’s no copy step and nothing to restart.

In Zeku

Zeku reads the collections from src/content.config.ts and the settings from src/config.ts, where every value has a [CONFIG] marker, so the theme’s options show up as a form.