# Repository Guidelines

## Project Structure & Module Organization
The Next.js app lives inside `app/`, with route groups under `app/(sections)/` and shared layouts in `app/layout.tsx`. Use `components/` for reusable UI and section-level blocks; `components/ui/` holds primitives, while `components/sections/` maps to homepage panels. Store typed data in `data/` and static assets in `public/`. Design reference files live in `design/`, and global styling utilities are in `styles/`. Prefer colocating feature-specific helpers inside the owning directory to keep imports shallow.

## Build, Test, and Development Commands
- `pnpm dev`: Launch the Turbopack dev server at `http://localhost:3000`.
- `pnpm build`: Produce a production build; run before release branches.
- `pnpm start`: Serve the last production build locally for smoke checks.
- `pnpm lint`: Run Biome lint + type-aware checks; fails on style or safety issues.
- `pnpm format`: Apply Biome formatting (2-space indentation, sorted imports).
- `pnpm knip`: Detect unused files, exports, and dependencies.

## Coding Style & Naming Conventions
TypeScript is required for all new modules. Follow Biome defaults: 2-space indentation, single quotes in TSX, and trailing commas where valid. UI components and sections use PascalCase filenames (e.g., `HeroSection.tsx`), hooks use camelCase (`useBreakpoint.ts`), and constant maps live in SCREAMING_SNAKE_CASE. Tailwind utility classes should stay concise; extract complex styling into `styles/` or dedicated components. Keep server-only logic inside `lib/` and mark async data loaders with explicit return types.

## Testing Guidelines
There is no dedicated test runner yet—treat `pnpm lint` and `pnpm build` as the minimum pre-commit gate. When adding automated tests, co-locate `*.test.ts[x]` with the source file and prefer Playwright for UI flows and Vitest for unit logic. Until that tooling lands, validate hero animations, form submissions, and three.js scenes manually via `pnpm dev`, capturing before/after screenshots in the PR description.

## Commit & Pull Request Guidelines
Recent history shows short imperative summaries (e.g., `Update`, `Deletion`); continue using imperative, present-tense titles under 60 characters. Group related changes per commit, and add context in the body when behavior changes. Before opening a PR, run `pnpm lint` and `pnpm build`, link the related issue, and attach visual diffs for UI changes. Request at least one review and call out any follow-up work in the PR checklist.
