This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
pnpm dev # Dev server at localhost:3000
pnpm build # Production build (runs next-sitemap postbuild)
pnpm lint # ESLint
pnpm lint:fix # ESLint with auto-fix
pnpm format # Prettier check
pnpm format:fix # Prettier write
pnpm typecheck # tsc --noEmitQuality checks before committing: pnpm lint && pnpm typecheck && pnpm build
- Next.js 16 (App Router) + React 19 + TypeScript (strict)
- Tailwind CSS 4 with CSS variables for theming (light/dark)
- shadcn/ui (new-york style, Radix UI primitives, Lucide icons)
- MDX content pipeline: gray-matter → next-mdx-remote → custom remark/rehype plugins → Shiki syntax highlighting
- pnpm 10 package manager, Node.js 20+
Single Next.js app (not a monorepo).
@/*→src/*@root/*→./*
src/app/layout.tsx— root layout (global styles, dark mode default)src/app/(website)/layout.tsx— website layout with header/footer- Routes live under
src/app/(website)/
src/components/ui/— shared UI primitives (shadcn/ui, CVA variants)src/components/pages/<slug>/— page-specific section components- Page sections use a data-driven pattern: pages import
contentDataobjects and pass them as props to pure section components - Section component files use kebab-case with double-dash variants:
hero--split.tsx,features--column.tsx
- Markdown files (
.md) live insrc/content/organized by section (blog/,docs/,legal/) - Docs follow FumaDocs page conventions
- Custom remark plugins in
src/lib/mdx-plugins/handle headings, images, code blocks, admonitions, tabs
src/configs/website-config.ts— branding, metadata defaults, repo linkssrc/constants/menus.ts— navigation structurecomponents.json— shadcn/ui config
- Formatting: Prettier with 100 char width, single quotes, trailing commas, sorted imports (plugin order: builtins → react/next → third-party → workspace → types → config → lib → hooks → ui → components → styles → relative)
- Tailwind: class sorting via prettier-plugin-tailwindcss; use
cn()from@/lib/utilsfor merging classes - ESLint: no
console.log(onlyerror/warn/infoallowed);no-explicit-anyis warn; unused vars prefixed with_are allowed - Types:
Iprefix for interfaces,Tprefix for type aliases (defined insrc/types/) - Env vars:
NEXT_PUBLIC_DEFAULT_SITE_URLfor site base URL