Personal website for Jack Gale, built with Next.js (App Router) and pnpm.
- Multi-page personal site with custom light/dark theme toggle in the navbar.
- Markdown-driven articles pipeline with article listing and per-article pages.
- Static presence/links directory page using local assets.
- About/Experience/Contact/Privacy pages with shared layout and styling.
- Custom animated loader using
/public/logos/favicon.png. - SEO helpers:
robots.txt, sitemap index, and dynamic article sitemap entries.
/Home/aboutAbout/presenceLinks/presence/articlesArticle index (paginated)/articles/[slug]Article detail pages from markdown/experienceCV/experience summary/contactContact links/privacyPrivacy policy
Compatibility routes:
/productsredirects to/articles/portfolioredirects to/articles/loadingredirects to/
- Articles:
src/content/articles/*.md - Privacy policy markdown:
src/content/privacy-policy.md - Article metadata parsed with frontmatter (
gray-matter) - Markdown rendering via
react-markdown+remark-gfm
Runtime dependencies:
next^16.1.6react^19.2.3react-dom^19.2.3gray-matter^4.0.3react-markdown^10.1.0remark-gfm^4.0.1
Tooling:
- TypeScript
- pnpm (
packageManagerpinned topnpm@10.27.0) - Node
20.x(seeengines)
app/Next.js App Router pages, layouts, route handlerssrc/components/reusable UI componentssrc/content/markdown contentstyles/globals.cssglobal styling and theme tokenspublic/static assetsscripts/utility scripts
pnpm install
pnpm devBuild and run production locally:
pnpm build
pnpm startRecommended configuration:
- Root directory: repo root
- Install command:
corepack enable && corepack prepare pnpm@10.27.0 --activate && pnpm install --frozen-lockfile - Build command:
pnpm build - Output directory: leave default for Next.js
- Node version:
20.x
- This repo was refactored from an older static site; legacy static source was archived under
archive/pre-refactor-static-site. - External API integrations used in the template source were intentionally removed for this site.