Skip to content

Repository files navigation

omnideck Site — Content Guide

This is the public site for omnideck. Content is written in Markdown with TOML front matter. No build tools or Node.js required.

First-time setup

Clone the repo. No npm install, no build step, no additional setup required.


Previewing the site

./arbor preview

Opens a live-reloading dev server at http://localhost:8080. Changes to content, templates, and CSS are picked up automatically.


Production build

Run the production build in a container so its generated data and output stay outside the checkout:

docker build --platform linux/amd64 --file container/Dockerfile .

Content types

Blog posts

Location: content/blog/<slug>.md

+++
title    = "Your Post Title"
date     = 2026-01-15
draft    = false
tags     = ["tag-one", "tag-two"]
template = "templates/types/blog.html"

[extra]
description    = "One or two sentences shown in previews and meta tags."
author         = "Your Name"
featured_image = "/images/your-image.jpg"
+++

Your content here...
Field Required Notes
title yes Displayed as the page <h1>
date yes Format: YYYY-MM-DD
draft yes Set true to hide from the live site
tags no Array of lowercase-kebab strings — see Tags below
template yes Always "templates/types/blog.html" for blog posts
description no Used in meta tags and the blog listing
author no Shown below the title
featured_image no Path under static/images/ — e.g. /images/my-photo.jpg. Shown full-width above the title and used for social link previews.

To create a new post stub:

./arbor new blog my-post-slug

Docs pages

Location: content/docs/<slug>.md

+++
title    = "Page Title"
date     = 2026-01-15
draft    = false
template = "templates/types/docs.html"

[extra]
description = "One sentence shown in meta tags."
order       = 3
+++

Your content here...
Field Required Notes
title yes Displayed as the page <h1> and in the sidebar
date yes Format: YYYY-MM-DD
draft yes Set true to hide from the live site
template yes Always "templates/types/docs.html"
description no Used in meta tags
order no Integer — controls sort order in the sidebar nav

General pages

Location: content/<slug>.md

+++
title    = "Page Title"
date     = 2026-01-15
draft    = false
template = "templates/types/page.html"

[extra]
description = "One sentence shown in meta tags."
+++

Your content here...

Tags

Tags appear as chips on blog posts and in the blog sidebar. Use lowercase-kebab format in frontmatter:

tags = ["open-source", "local-ai", "new-tag"]

Tags are managed automatically. On every deploy, CI runs bash scripts/sync-data.sh, which:

  • Updates data/tags.toml with current tag counts
  • Creates any missing content/blog/tags/<slug>.md listing pages

You never need to touch data/tags.toml or the tag pages directly.

To run manually:

bash scripts/sync-data.sh

Site data files

Two data files are auto-generated from blog post frontmatter and should not be edited by hand:

File What it does
data/tags.toml Tag names, slugs, and post counts — drives the blog sidebar and tag listing pages
data/homepage.toml Latest post title, date, and URL — drives the announcement ribbon on the homepage

Both are regenerated by bash scripts/sync-data.sh, which runs automatically on commit (via the pre-commit hook) and on every CI deploy (via GitHub Actions).


Images

Place images in static/images/ and reference them as /images/filename.jpg.

For blog post hero images, set featured_image in the front matter. The image appears full-width above the post title and is included in Open Graph meta tags for social previews.


Drafts

Set draft = true in any file's front matter to exclude it from the live site. Drafts are visible during local preview by default.

About

Website for Omnideck

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages