pnpm run dev # local dev server
pnpm run build # production build (CI runs this)
pnpm run lint # eslint
pnpm run format # prettier --write
pnpm run format:check # prettier --check (CI runs this)- Next.js 16 (App Router, RSC) + React 19, TypeScript, Tailwind CSS v4, pnpm, heavily customized shadcn/ui components
- MDX blog posts in
content/blog/*.mdx, parsed withnext-mdx-remote+gray-matter - Deployed on Vercel
app/— Next.js App Router pages. API routes underapp/api/(Spotify, Raindrop bookmarks).components/nier-*.tsx— Custom NieR:Automata-themed UI shell wrapping every page.NierShellis the main layout with sidebar nav and keyboard navigation (W/S/arrows).components/ui/— shadcn/ui primitives. DO NOT hand-edit; regenerate with the shadcn CLI.components/custom/— Page-specific client components (gallery, map, now-playing, contact form, etc.).lib/— Third party API integrationsapp/globals.css— The active theme. Single dark theme (no light/dark toggle), hardcoded hex values for NieR aesthetic.content/blog/— MDX blog posts with frontmatter (title,date,summary).
public/images/cat/photos MUST be stripped of metadata BEFORE committing with thepublic/images/cat/check-image-metadata.shscript- Updating the React version requires changing the version in both
package.jsonandeslint.config.mjs