# gemcms `gemcms` is a small CLI CMS for Gemini capsules. It keeps capsule content as plain files, generates Gemtext into `public/`, and validates common mistakes before publishing. ## Quick Start ```bash go run ./cmd/gemcms create capsule my-capsule --title "My Capsule" --host gemini.example.org --import ~/articles --section journal --tags gemini --build cd my-capsule go run ../cmd/gemcms add ~/article.md --section journal --tags gemini --draft --menu top go run ../cmd/gemcms add ~/notes/ --section journal --tags gemini go run ../cmd/gemcms create article "Hello Gemini" --tags gemini,capsule go run ../cmd/gemcms create page about --title "About" go run ../cmd/gemcms menu add top page about --label "About" go run ../cmd/gemcms status go run ../cmd/gemcms health go run ../cmd/gemcms build go run ../cmd/gemcms check ``` Inside an installed build, replace `go run ../cmd/gemcms` with `gemcms`. ## Commands ```text gemcms add [--type article|page] [--section name] [--tags a,b] [--draft] [--menu name] gemcms create capsule [--title title] [--host host] [--import path] [--section name] [--tags a,b] [--menu name] [--build] gemcms create site [--title title] [--host host] gemcms create page [--title title] gemcms create article [--section name] [--tags a,b] [--draft] gemcms create section <name> [--title title] gemcms create menu <name> gemcms create widget <type> [--name name] [--section name] [--limit n] gemcms menu add <menu> <home|page|section|article|custom> [target] [--label label] [--url url] gemcms list <pages|articles|menus|widgets> gemcms status gemcms health gemcms build gemcms check ``` See [docs/help.md](docs/help.md) for the full command and option reference. ## Capsule Layout ```text capsule.toml content/ pages/ articles/ assets/ site/ menus/ sections/ widgets/ public/ ``` Content files use Gemtext with optional frontmatter: ```text +++ title = "Hello Gemini" type = "article" slug = "hello-gemini" date = "2026-07-07" tags = ["gemini", "capsule"] +++ # Hello Gemini Gemtext content goes here. ``` Imported Markdown can also use simple YAML frontmatter: ```text --- title: Hello Gemini tags: gemini, capsule --- # Hello Gemini ``` If no `--title` is provided, `gemcms add` uses frontmatter `title` first, then the first `# Heading`, then the file name. Use build-time blocks in Gemtext: ```text {{ menu top }} {{ widget recent-articles }} ```