Blog Posts
Create and edit journal posts in PaperHouse — categories, tags, excerpts, reading time, and prev/next navigation.
Blog Posts
Blog posts are called “journal” in PaperHouse. Each post is a markdown file in src/content/blog/. The filename becomes the URL slug.
The rule
Filename = URL slug.
ink-that-breathes.md→/blog/ink-that-breathesslow-web-manifesto.md→/blog/slow-web-manifestomy-first-post.md→/blog/my-first-post
Creating a post
Create a new file in src/content/blog/. For example, src/content/blog/slow-design.md:
---
title: "Slow Design — Why Faster Is Not Always Better"
description: "A short essay on why slower websites can convert better than fast ones — and how to design for patience."
date: "2026-04-15"
category: "Journal"
cover: "https://picsum.photos/seed/slow/1200/800"
excerpt: "Faster is not always better. Sometimes slower wins because it lets the user feel the craft."
tags: ["Slow Web", "Design", "Essay"]
---
# Slow Design
Faster is not always better.
A portfolio that loads in 0.2 seconds but feels empty converts worse than one that loads in 0.8 seconds with soul.
## What "slow" means
Slow does not mean technically slow. It means the design gives the user time to feel the work.
- Space between sections
- Type that breathes
- Images that earn their place
- Motion that serves, not decorates
## Why this matters
Users do not buy speed. They buy **memory**. A portfolio that feels like paper sells better than one that feels like a spreadsheet.
Accessible at /blog/slow-design.
Frontmatter fields
Required
- title — displayed as the H1 and in cards
- description — used for SEO meta and OG tags
- date — publication date, used for sorting (format:
YYYY-MM-DD) - category — the post category. Links to
/category/[slug]. - cover — the main image URL
- excerpt — short summary shown in cards and previews
- tags — array of tags. Each tag links to
/tag/[slug].
Optional
None. All fields above are required by the schema.
Date and sorting
Posts are sorted by date in descending order — newest first.
Format: YYYY-MM-DD (ISO 8601). Example: 2026-04-15.
Sorting affects:
- Blog listing order
- Home page journal preview (shows 3 newest)
- Prev/next navigation on each post
Categories
Each post belongs to one category. The category page lists all posts and works with that category.
Common categories:
- Journal
- Essay
- Notes
- Tutorial
- Business
The category slug is generated from the name: "Slow Web" → /category/slow-web.
Tags
Tags are flexible keywords. A post can have any number:
tags: ["Typography", "Editorial", "Slow Web"]
Each tag links to /tag/[slug]. The tag page lists all posts with that tag.
Tags are shared across posts — if two posts both have “Design”, they appear on the same tag page.
Reading time
PaperHouse calculates reading time automatically from the body:
readingTime = Math.max(1, Math.round(post.body.split(/\s+/).length / 220))
Average reading speed is 220 words per minute. A 440-word post shows “2 min read”.
No configuration needed.
Body content
Below the frontmatter, write the post in markdown:
# Post title
Opening paragraph.
## Section
Details with **bold** and _italic_ and [links](/works).
- List item one
- List item two
> Blockquote for pull quotes.
\`\`\`bash
npm run dev
\`\`\`
The body renders in a prose layout with:
- Serif headings
- Serif body text at 19px
- Lime underline decoration on links
- Syntax-styled code blocks
- Styled blockquotes
Cover image
The cover appears at the top of the post in a 16:9 aspect ratio.
For local images:
public/
└── blog/
└── slow-design/
└── cover.jpg
Then reference:
cover: "/blog/slow-design/cover.jpg"
Excerpt
The excerpt appears in:
- Blog listing cards
- Home page journal preview
- Related posts
Keep it under 160 characters for the best look.
Prev/next navigation
At the bottom of each post, PaperHouse shows the previous and next post in the collection.
- Previous — the post published before this one (older date)
- Next — the post published after this one (newer date)
No configuration. Automatic from the collection.
SEO
Each post uses its description for meta and OG tags.
For best results:
- Write a unique description for each post
- Keep it under 160 characters
- Include the post’s main keyword
- Make it enticing — this is what shows in Google search results
Deleting a post
Delete the markdown file from src/content/blog/. It disappears from:
- The blog listing
- The home page (if it was in the top 3)
- Category listings
- Tag listings
- Prev/next navigation on other posts
Common mistakes
“My post does not show up.”
Check the frontmatter — every required field must be present. Astro silently skips files with invalid schemas.
“My date is wrong.”
Use quotes: date: "2026-04-15" not date: 2026-04-15.
“My tags do not link.”
Tags are case-sensitive in display but slugified for URLs. "Slow Web" → /tag/slow-web.