A port of AstroPaper (v6) — a minimal, responsive, accessible and SEO-friendly blog theme — to Nuxt 4 and Nuxt Content v3.
| Concern | AstroPaper | NuxtPaper |
|---|---|---|
| Framework | Astro 6 | Nuxt 4 (Vue 3) |
| Content | Astro content collections | @nuxt/content v3 (content.config.ts) |
| Styling | Tailwind CSS v4 | Tailwind CSS v4 (@tailwindcss/vite) |
| Typography | @tailwindcss/typography | @tailwindcss/typography |
| Fonts | Astro fonts (Google) | @nuxt/fonts (Google Sans Code) |
| Search | Pagefind | MiniSearch + queryCollectionSearchSections |
| Code highlight | Shiki (min-light/night-owl) | Shiki via Nuxt Content (same themes) |
| Callouts | rehype-callouts | rehype-callouts (obsidian theme) |
| TOC | remark-toc | remark-toc |
| RSS / Sitemap | @astrojs/rss + sitemap | Nitro server routes (/rss.xml, /sitemap.xml) |
- Light/dark mode with FOUC-free inline theme script and OS-preference sync
- Paginated post list (
/posts,/posts/2, …) and per-tag pagination - Tags, archives (grouped by year/month), about page, fuzzy search
- Featured/recent sections on the home page
- Draft posts and scheduled publishing (15-min margin), hidden in production
- Reading progress bar, copy-code buttons, back-to-top, prev/next post nav
- Share links, edit-page link, breadcrumbs, skip-to-content, RSS + sitemap
- Full SSG via
nuxt generate(deployable to any static host)
pnpm install
pnpm dev # http://localhost:3000
pnpm generate # static build in .output/publicSite metadata, feature flags, socials and share links live in
shared/utils/site.ts (the equivalent of astro-paper.config.ts).
UI strings live in shared/utils/i18n.ts.
Posts are markdown files in content/posts/ (drafts: draft: true).
Frontmatter schema is defined in content.config.ts. The original AstroPaper
posts were migrated with scripts/migrate-content.mjs (MDX → MDC conversion,
slug-based file names, image path rewrites).
MIT — this is a port of AstroPaper by Sat Naing, whose original MIT copyright notice is retained in LICENSE. The demo blog posts are AstroPaper's original content.
- View-transition names on post titles/tags (document-level transitions are
enabled via
experimental.viewTransition)