Static Pages
Create about, order, FAQ, terms, and any other static page in PaperHouse using markdown and frontmatter.
Static Pages
Every simple page in PaperHouse — about, order, FAQ, terms, license — lives in src/content/pages/ as a markdown file. The file name becomes the URL.
The rule
Filename = URL slug.
about.md→/aboutorder.md→/orderfaq.md→/faqmy-project.md→/my-project
No routing setup needed. Just create the file.
Basic structure
Every static page has frontmatter and a body:
---
title: "Page title"
subtitle: "Short subtitle under the title."
kicker: "Optional section label"
---
## Body content in markdown
Regular markdown works here — headings, lists, links, images, code.
The title and subtitle render in the page header. The body renders below.
Optional frontmatter fields
Sidebar
Add a sticky sidebar next to the body:
sidebar:
line1: "PaperHouse"
line2: "Est. 2026"
Columns
Add a 3-column footer block below the body:
columns:
- title: "Stack"
items:
- "Astro 7"
- "Tailwind 4"
- title: "Status"
items:
- "Ready to ship"
- title: "Price"
items:
- "$45 — one-time"
CTAs
Add buttons below the columns:
ctas:
- href: "/works"
label: "See works"
primary: true
- href: "/blog"
label: "Read journal"
primary: false
primary: true renders a black pill. primary: false renders an outline pill.
Meta grid
Add a 4-column meta grid:
meta:
- label: "Email"
value: "hello@paperhouse.studio"
- label: "Response"
value: "Within 24 hours"
- label: "License"
value: "One-time $45"
- label: "Updates"
value: "Lifetime, free"
Complete example: about page
---
title: "Ship your portfolio in a weekend, not a month."
subtitle: "PaperHouse is a production-ready Astro 7 bento portfolio theme."
kicker: "About / PaperHouse"
sidebar:
line1: "PaperHouse"
line2: "Est. 2026"
columns:
- title: "Stack"
items: ["Astro 7", "Tailwind 4", "Content Collections"]
- title: "Status"
items: ["Ready to ship", "ThemeForest / Gumroad"]
- title: "Price"
items: ["$45 — one-time"]
ctas:
- href: "/works"
label: "See works"
primary: true
- href: "/blog"
label: "Read journal"
primary: false
---
## Why PaperHouse exists
Most portfolio themes look the same. PaperHouse takes the opposite approach.
## The stack
- Astro 7
- Tailwind CSS 4
- Content Collections
Save as src/content/pages/about.md. Accessible at /about.
Adding page SEO
Every page also needs an entry in src/data/site.json under pages:
"pages": {
"about": {
"title": "About",
"description": "Why PaperHouse exists and who it is for.",
"image": "/astro.svg",
"type": "website"
}
}
The key must match the filename (without .md).
Custom layout for a page
Some pages need a custom layout — like contact with its form. To do this:
- Create the content:
src/content/pages/pricing.md - Create a custom layout:
src/pages/pricing.astro - Add
'pricing'to the exclusion list insrc/pages/[slug].astro:
export async function getStaticPaths() {
const pages = await getCollection('pages');
const excluded = ['pricing'];
return pages
.filter(p => !excluded.includes(p.id))
.map(p => ({ params: { slug: p.id }, props: { entry: p } }));
}
Deleting a page
- Delete the file from
src/content/pages/ - Remove its entry from
src/data/site.json → pages
If you leave the JSON entry, it does nothing harmful — just unused metadata.