- CSS 100%
| _gallery | ||
| _music | ||
| _theme | ||
| actions | ||
| events | ||
| journal | ||
| media-index | ||
| people | ||
| podcast | ||
| publications | ||
| reading | ||
| .gitignore | ||
| .press | ||
| index.md | ||
| privacy.md | ||
| README.md | ||
Your Press Site
This repo is your website. Edit the markdown files, push, and your site updates automatically.
Publishing
Write .md files in this repo. The directory structure becomes your
site structure:
index.md → yoursite.com/
about.md → yoursite.com/about
projects/
index.md → yoursite.com/projects/
sweetgrass.md → yoursite.com/projects/sweetgrass
Edit in the Forgejo web editor, or clone the repo and push from any text editor. It's just text files.
Pages
Every .md file becomes a page. The first # Heading becomes the
page title. Add frontmatter for more control:
---
title: My Page
description: A short description for search and social sharing
date: 2026-03-01
draft: true
---
Page content here.
Pages named index.md or README.md become the directory's landing
page. Top-level pages and directories appear in the navigation
automatically.
Media
Drop files in a directory and push. The asset pipeline uploads them to the CDN and replaces each with a markdown companion:
- Images (jpg, png, webp, svg, gif) → gallery with CSS grid
- Audio (m4a, mp3, ogg, wav) → playlist with players
- Video (mp4, webm, mov) → video players
Each companion is a .md file with the CDN URL in frontmatter
and a description in the body. Edit it to add titles, dates, and
credits.
Inline galleries
Embed a gallery in any page:
photos/
_sunset.md
_garden.md
page.md ← contains: 
The  line renders as an inline gallery.
Same works for audio playlists. You can control the order:

pin: name pins items to the front. sort: newest orders the rest.
limit: N caps the total. :shuffle randomizes.
Collections
A directory of markdown files with a collection: true index becomes
a collection — events, people, albums, products, anything. Each .md
file in the directory is an item. The index page lists them all as cards.
events/
index.md ← collection index
spring-concert.md ← an event
fall-workshop.md ← another event
The collection index controls sorting and layout:
---
title: Events
collection: true
sort: date
layout: list
---
Upcoming events and gatherings.
Each item uses frontmatter for its metadata:
---
title: Spring Concert
date: 2026-05-15
time: "19:00"
location: The Rialto, Tucson AZ
link: https://tickets.example.com/spring
image: concert.jpg
---
A night of music under the stars.
The card renders whatever fields are present — date, time, location, image, link. Leave out what you don't need.
Sort options
items:— explicit list of filenames in the order you want them (cleanest for hand-ordered collections, unlisted items appear at the end)sort: date— chronological (events, blog posts)sort: order— manual ordering (addorder: 1to item frontmatter)sort: title— alphabetical
Layout options
layout: list— items stacked vertically, separated by lines (default)layout: grid— responsive card grid (good for people, albums, products)
What works as a collection
Anything that's a directory of similar things:
- Events — date, time, location, ticket link
- People / team — name, role, photo, bio
- Albums / discography — title, date, cover art, tracks
- Products — title, price, images
- Blog posts — date, author, summary
- Job listings — title, location, deadline
- Books — title, cover, publisher, purchase link
Same pattern, same frontmatter, same cards. The styling makes them look different; the structure is the same.
Languages
Set the site language in your root index.md:
---
title: My Site
language: en
---
For multilingual content, add language variants with a suffix:
about.md ← default language
about.mi.md ← te reo Māori version
about.es.md ← Spanish version
Press detects the language from the filename suffix and sets
<html lang>, formats dates in the correct language, and links
variants together with hreflang for search engines.
Supported date languages: English, te reo Māori, French, Spanish. More can be added.
Customization
Special files (all optional):
_logo.svg(or .png, .jpg) — site logo in the nav bar_title.md— content shown below the nav on every page_footer.md— content shown in the footer of every page_background.jpg(or .svg, .png) — page background image_theme/—custom.css(variables),style.css,template.html,print.css
Styling your site
Your site has a _theme/custom.css file with CSS variables that
control colors, fonts, and spacing. Open it — each variable is
documented. Uncomment a line, change the value, push:
:root {
--accent: #8B4513;
--font-body: "Palatino", serif;
}
Your whole site updates. Dark mode, responsive layout, and print
styles adjust automatically. Delete custom.css to revert to
defaults (it's in git, so you can always get it back).
For deeper changes, create _theme/style.css to replace the base
stylesheet entirely, or _theme/template.html for the page
structure. Your copies take precedence over the defaults.
Feeds
Your site has two RSS feeds: feed.xml for new content and
changes.xml for all updates. Every page also has its own
changelog feed. Media directories get podcast-ready feeds with
enclosures.
Annotated media (groundwork)
For tutorials, screencasts, podcasts, or any media-backed content,
add media and chapters to frontmatter:
---
media: walkthrough.mp4
chapters:
- time: "0:00"
title: Introduction
- time: "2:15"
title: Getting started
- time: "5:30"
title: Advanced topics
---
# My Tutorial

## Introduction
The transcript goes here. Use `<details>` for expandable depth:
<details>
<summary>Step by step</summary>
1. First do this
2. Then do that
</details>
The transcript is the primary content — skimmable, searchable, accessible. The media is linked: chapters appear in the player and headings link to timestamps. A table of contents is generated automatically.
Unpublished files
Files and directories starting with _ are not published to
the rendered site. They stay in the repo but press skips them.
_BUILDING.md ← internal docs, in the repo but not on the web
_drafts/ ← a whole directory of work-in-progress
_NOT_PUBLISHED ← name it obviously if you like
This is how press keeps internal docs, drafts, and repo
scaffolding out of the rendered site. The special files under
Customization (_logo.svg, _title.md,
_footer.md, _theme/) are the exception — press reads those
for site configuration even though they start with _.
Local notes
Files prefixed with __ (double underscore) are git-ignored.
Use them for local drafts and notes that shouldn't be published
or even committed:
__notes.md ← your scratch pad, never committed
__ideas.md ← future plans, stays local
Printing
Every page is designed to print well. The print layout shows the page URL for provenance.