Demo-inspired multi-page blog built with Astro.
| Resource | Location | Notes |
|---|---|---|
| Articles (Markdown) | src/data/blog/**/*.md |
Main content source |
| Content schema | src/content.config.ts |
Frontmatter validation |
| Home route | src/pages/index.astro |
/ |
| Articles list | src/pages/articles/[...page].astro |
/articles/ (paginated) |
| Article detail | src/pages/articles/[...slug]/index.astro |
/articles/<slug>/ |
| Article OG image | src/pages/articles/[...slug]/index.png.ts |
/articles/<slug>/index.png |
| Site OG image | src/pages/og.png.ts |
/og.png |
| About | src/pages/about/index.astro |
/about/ |
| Tags | src/pages/tags/index.astro |
/tags/ |
| Tag detail | src/pages/tags/[tag]/[...page].astro |
/tags/<tag>/ (paginated) |
| Search | src/pages/search.astro |
/search/ (Pagefind UI) |
| Archives | src/pages/archives/index.astro |
/archives/ |
| Shared layout | src/layouts/Layout.astro |
Fonts + view transitions + ambient + dock |
| Design tokens | src/styles/tokens.css |
:root variables |
| Global styles | src/styles/global.css |
Demo-derived components + transitions |
| UI components | src/components/ |
AmbientBackground, DockNav, etc. |
| Post query layer | src/services/posts.ts |
Shared published/tag/archive query utilities |
| Static assets | public/ |
Optional; put your own static files here |
| Search index | dist/pagefind/ |
Generated by Pagefind during pnpm run build |
| Build output | dist/ |
Deployed assets |
| Workers deploy config | wrangler.jsonc |
assets.directory = "./dist" |
pnpm install
pnpm run devpnpm run buildpnpm run validate:fast # lint + typecheck
pnpm run validate:release # full production validation (build + pagefind)Published posts should live under src/data/blog/.
- Recommended default location:
src/data/blog/<slug>.md - Optional grouped location:
src/data/blog/<group>/<slug>.md - Reserved non-published paths: any file or directory starting with
_
Examples:
src/data/blog/my-first-post.md
src/data/blog/notes/my-second-post.md
src/data/blog/_templates/post-template.md # not published
src/data/blog/_drafts/idea.md # not published
Current frontmatter contract:
---
title: "My first post"
description: "Short summary for cards and metadata."
pubDatetime: 2026-03-06T09:00:00.000Z
tags:
- notes
modDatetime: 2026-03-06T09:00:00.000Z # optional
canonicalURL: "https://example.com/my-first-post/" # optional
---Required fields:
titledescriptionpubDatetime
Common optional fields:
tagsmodDatetimecanonicalURL
This repository is optimized for personal use. Local validation stays lightweight, and production confidence comes from pnpm run validate:release plus deployment-time build checks.
This project deploys dist/ as static assets via wrangler.jsonc.
pnpm run build
npx wrangler@latest deploy- Pagefind search index is generated during
pnpm run build. Usepnpm run previewto test/search/.