A Next.js 14 + TypeScript blog with Markdown content, feed routes, tags, and static export output.
app/: App Router pages and route handlers (rss.xml,atom.xml,feed.json,sitemap.xml,robots.txt).articles/,notes/: Markdown content sources.components/: Shared UI (cards, header, markdown renderer, filters, pagination).utils/: Metadata/content loaders, SEO helpers, tag normalization, feed assembly.scripts/: Content/tag/SEO validators and Firestore sync tooling.__tests__/: Jest + Testing Library suites and snapshots.
- Node.js 18+
- Corepack enabled (repo uses
packageManager: yarn@3.6.3)
- Enable Corepack and install deps:
corepack enable corepack yarn install - Start local dev server:
corepack yarn dev
- Open http://localhost:3000.
corepack yarn lint: ESLint checks.corepack yarn test --runInBand: run test suite.corepack yarn test:coverage: coverage run.corepack yarn lint:tags: validate tag formatting/normalization rules.corepack yarn validate:content: frontmatter/content checks.corepack yarn validate:seo: SEO frontmatter checks.corepack yarn build: production build + static export.
Sync markdown content to Firestore:
- Dry run:
corepack yarn sync:firestore:dry - Apply:
corepack yarn sync:firestore
Set one credential source:
FIREBASE_SERVICE_ACCOUNT_PATHGOOGLE_APPLICATION_CREDENTIALSFIREBASE_SERVICE_ACCOUNT_JSON
.github/workflows/ci.yml: lint, tests, content validation, SEO validation on PRs andmain..github/workflows/release.yml: creates a GitHub Release automatically when a tag is pushed.
next.config.mjsusesoutput: 'export'andimages.unoptimized: true.- Build artifacts are static and can be deployed to static hosting/CDN platforms.