Forma’s blog is Markdown-first because longform should be portable. You write in the admin (or via the Agent API). Forma renders HTML, lists the post on /blog, adds it to RSS and JSON Feed, indexes it for search, and — if HTML cache is on — writes a static file.
The ten-minute pass
- Admin → Blog → New. Filename is the internal id (
publish-a-blog-post). Slug is the URL (publish-a-forma-blog-post). - Write a title a human would click.
- Write a description even if the first paragraph is good. Archives, feeds, search, and social cards use it.
- Add categories and a few tags. The archive chips and search haystack both read them.
- Paste Markdown. Headings, lists, fenced code. Keep shortcodes in fences when you are talking about them.
- Set a featured image — 1200×630, dark enough that the title overlay still reads. This becomes the cover and the Open Graph image if you do not override it.
- Fill SEO title and SEO description if the editorial title is too long or too cute for a search result.
- Set published to now. Drafts stay out of the public site, the sitemap, and search.
Save. Visit /blog/your-slug. Check /feed.xml. Search for a distinctive word from the post.
Images that do not fight the title
The single-post template is a full-bleed cover with a dark gradient. A busy stock photo under white type is how you lose the headline. Prefer:
- a dark field;
- one strong graphic (the brand mark, a texture, a single object);
- room in the lower third.
If you skip the image, Forma falls back to a gradient. That is fine. A generic stock handshake is worse than no image.
From Your Agent, not just the admin
A scoped token can PUT /api/v1/posts/{filename} with title, body, description, categories, tags, published_at, and seo. Same rules as the admin. The Agent API is not a second CMS — it is the same save path with a leash.
That is the whole publishing loop: write, describe, image, publish, verify. Ten minutes if you already know what you want to say.
