Source for seo-hnoo.me.
- Next.js 16 (App Router) · TypeScript
- Tailwind CSS v4 ·
@tailwindcss/typography - MDX via
next-mdx-remote - pnpm · Vercel
/ home — post list, newest first
/about bio
/posts/[slug] single post
/rss.xml RSS feed
Posts and media live in blog-content, a private repo mounted here as a git submodule at content/.
blog-app/ public
└── content/ submodule → blog-content (private)
├── about.md
├── profile.jpg
└── posts/
Images under content/ are synced into public/ at build time so Next can serve them as static assets (scripts/sync-content-assets.mjs).
pnpm install
git submodule update --init --recursive
pnpm devIf ../blog-content exists as a sibling clone, the dev server reads from it directly and live-reloads on edits there.
After pushing to blog-content, bump this repo's submodule pointer so Vercel rebuilds against the latest commit:
pnpm publish-contentThat fetches blog-content's main HEAD, commits the new pointer here, and pushes. No-op if already up to date.