This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
Use make for common tasks:
make format # biome format --write
make fix # biome check --write (auto-fix lint issues)
make lint # biome check
make build # next build
make dev # next dev
make validate # validate YAML structure + tags
Or directly with npm:
npm run format
npx biome check --write
npm run lint
npm run build
npm run dev
Follow this exact sequence for every logical unit of work:
- Make changes — implement one concern at a time
- Format —
make format - Fix —
make fix(auto-fix lint issues) - Lint —
make lint(must pass with zero errors) - Build —
make build(must compile cleanly) - Commit — commit immediately after each passing unit
Never skip the commit step. Each logical unit (component, config change, fix) gets its own commit before moving on.
Commit style:
- Conventional commits, lowercase, short:
feat: add hero section,fix: broken layout on mobile,chore: update deps - Never bundle large changes into a single commit — split by logical unit (component, feature, fix)
- One concern per commit; if you can't describe it in one short line, split it further
Next.js 16 App Router project with TypeScript, Tailwind CSS v4, and Biome for linting/formatting.
src/app/— App Router pages and layouts.layout.tsxis the root layout with Geist font setup.page.tsxis the home route.src/app/globals.css— Global styles including Tailwind imports.public/— Static assets served at root.
Icons: Always use @phosphor-icons/react — never lucide-react or any other icon library.
Tooling:
- Biome (
biome.json): handles both formatting (2-space indent) and linting with Next.js + React recommended rules. Import organization is automatic. - Tailwind CSS v4 via
@tailwindcss/postcss. - TypeScript strict mode via
tsconfig.json.
No test framework is configured yet.
All persistent project context lives in .claude/plans/. Always read the relevant file before starting work; always update it after completing work.
| File | Purpose | When to consult |
|---|---|---|
audit-YYYY-MM-DD.md |
Quality audit — open findings, score history, positive patterns | Before any /audit, /harden, /polish run; update after each pass |
backlog.md |
Feature and design backlog — prioritised items not yet started | Before picking up new work; update when items are added, started, or shipped |
Conventions:
- Audit file: one file per audit date; update in-place as passes complete rather than creating new files.
- Backlog: mark items
In Progresswhen starting,Done+ commit SHA when shipped. - If a
/auditsurfaces new findings, add them to the audit file before fixing; update again after fixing.
Technical users (developers, researchers, AI practitioners) exploring the AI tools ecosystem. They scan quickly, compare tools, and navigate category hierarchies. Secondary: non-technical stakeholders seeking a visual overview.
Open, approachable, and comprehensive. Tone: informative, welcoming, visually stimulating. Feels like a well-organized community resource — not a corporate product or exclusive tool.
Three words: Open. Vibrant. Navigable.
Dense and information-rich: maximize visible data per screen, compact cards, tight but legible spacing. Reference: CNCF Landscape. Light mode default, full dark mode support.
- Not: sparse, minimal-whitespace-obsessed, dark-only
- Yes: colorful category navigation, efficient grids, visible data density
- Hierarchy through color — Distinct, vibrant accent colors for categories and subcategories aid quick orientation. Each category should feel visually distinct.
- Information density first — Prefer compact layouts. Whitespace is purposeful, not generous. Maximize data per viewport.
- Accessible to all — Approachable typography and clear labels. Color is never the sole differentiator. Good contrast without formal WCAG target.
- Consistent visual language — Phosphor icons exclusively, OKLCH color tokens in globals.css, shadcn/Radix component primitives.
- Vibrancy with restraint — Bold, distinct category colors; item cards stay neutral so content (not decoration) stands out.