-
Notifications
You must be signed in to change notification settings - Fork 0
Content
Four collections, all under shirones/content/:
| Collection | Directory | Files | Purpose |
|---|---|---|---|
posts |
shirones/content/posts/ |
.md, .mdx
|
Articles |
moments |
shirones/content/moments/ |
.md |
Short-form feed |
spec |
shirones/content/spec/ |
.md, .mdx
|
Standalone pages (About, and similar) |
series |
shirones/content/series/ |
.md |
Series definitions |
Subdirectories are fine; the loaders glob recursively.
---
title: Rendering pipelines
published: 2026-03-02
updated: 2026-03-09
description: What actually happens between a commit and a painted frame.
image: /covers/pipelines.png
category: graphics
tags: [rendering, webgpu]
series: rendering-internals
seriesOrder: 3
---title and published are required. Everything else has a default.
| Field | Type | Default | Notes |
|---|---|---|---|
title |
string | — | required |
published |
date | — | required |
publishedAt |
date | — | alias, if you prefer the longer name |
updated |
date | — | |
updatedAt |
date | — | alias |
description |
string | "" |
used for cards, RSS and meta tags |
image |
string | "" |
cover image path |
category |
string | null | "" |
one per post |
tags |
string[] | [] |
|
pinned |
boolean | false |
floats to the top of lists |
draft |
boolean | false |
excluded from production builds |
comment |
boolean | true |
per-post comment switch |
lang |
string | "" |
|
series |
string | "" |
the slug of a series; see below |
seriesOrder |
integer | — | position within the series |
encrypted |
boolean | false |
see Encrypting a post |
password |
string | number | — | coerced to a string |
passwordHint |
string | "" |
|
hideHomeContent |
boolean | true |
|
alias |
string | — | legacy URL, redirected to the real one |
permalink |
string | — | overrides the generated path |
The remaining fields in the schema (prevUrl, nextUrl, prevTitle, prevSlug, nextTitle, nextSlug) are filled in by the theme at build time to drive the previous/next footer. Ignore them.
series is trimmed, so series: " rendering " and series: "rendering" are the same series.
A series is a page that collects posts. Define it in shirones/content/series/:
---
title: Rendering internals
status: ongoing
defaultCategory: graphics
---
An optional overview. The markdown body of a series entry is rendered on the
series page, so this is where a preamble goes.| Field | Type | Default |
|---|---|---|
title |
string | — (required) |
status |
"ongoing" | "completed"
|
"ongoing" |
defaultCategory |
string | "" |
The filename is the slug. series/rendering-internals.md is referenced from posts as series: rendering-internals, and lives at /series/rendering-internals/.
Posts are ordered by seriesOrder when it is set. Posts in a series that do not set it fall back to their publish date.
Short entries with optional images. No title — the body is the content.
---
published: 2026-03-14
location: Frankfurt
mood: tired
tags: [travel]
images:
- src: /moments/2026-03-14-1.jpg
alt: A platform at night
- src: /moments/2026-03-14-2.jpg
---
Missed the last train. Worth it.| Field | Type | Default |
|---|---|---|
published |
date | — (required) |
pinned |
boolean | false |
location |
string | "" |
mood |
string | "" |
tags |
string[] | [] |
images |
{ src, alt? }[] |
[] |
draft |
boolean | false |
alt defaults to "" but write one anyway — the moments gallery renders it.
spec is for pages that are neither posts nor moments: About, now, colophon. The schema is empty, so any frontmatter you like is accepted and the filename decides the route.
shirones/content/spec/about.md renders at /about/.
---
title: Private notes
published: 2026-03-01
encrypted: true
password: hunter2
passwordHint: the usual
---The body is encrypted at build time and the page ships a password prompt. password accepts a string or a number and is coerced to a string, so password: 1234 works but the visitor types 1234.
This is obfuscation in a static site, not security. Anyone determined can read the ciphertext, and the routine that reverses it ships in the client bundle because the browser has to run it. Fine for keeping casual readers out of a personal note; not fine for anything that matters.
permalink overrides the generated path:
---
title: Old post
published: 2024-01-01
permalink: /writing/old-post/
---alias keeps an old URL alive after you move something. The theme emits a redirect from the alias to the real path, so bookmarks and inbound links survive a reorganisation.
draft: true excludes an entry from production builds but keeps it in astro dev, so you can read a draft before publishing it.
The integration forces trailingSlash: "always". This is not configurable, and it is not cosmetic: Astro's config resolution appends a trailing slash to image.endpoint.route during resolveConfig, which produces a /_image/ route that the dev router then fails to match. The integration sets both the trailing-slash policy and the image endpoint route explicitly so the pair stays consistent. If you set trailingSlash yourself in astro.config.mjs, the integration's value wins.
- Overriding components — changing how content is rendered
- How it works — where the schemas come from