P
PaperHouseastro theme ~
Customize

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 → /about
  • order.md → /order
  • faq.md → /faq
  • my-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

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:

  1. Create the content: src/content/pages/pricing.md
  2. Create a custom layout: src/pages/pricing.astro
  3. Add 'pricing' to the exclusion list in src/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

  1. Delete the file from src/content/pages/
  2. Remove its entry from src/data/site.json → pages

If you leave the JSON entry, it does nothing harmful — just unused metadata.