# nextjs-code-quality-enforcer

Хук на PostToolUse проверяет каждый записанный файл Next.js: структуру App Router, директивы Server/Client, импорты и типы. Срабатывает сразу после правки.

- хук · `type=hook` · Claude Code · 2249 установок
- Автор: davila7
- Лицензия: MIT · policy=mirror · начало файла — в конце страницы
- Исходник: https://github.com/davila7/claude-code-templates/tree/HEAD/cli-tool/components/hooks/development-tools/nextjs-code-quality-enforcer.json
- Обновлён: 2026-10-24
- HTML: https://affpapa.org/nevibecode/hooks/nextjs-code-quality-enforcer

## Что делает

Хук вешается на `PostToolUse` с матчером `Write|Edit|MultiEdit`. После успешной записи файла с расширением `.js`, `.jsx`, `.ts` или `.tsx` он читает путь из `tool_input.file_path` и прогоняет файл по набору проверок. Файлы в `node_modules` пропускаются.

Что именно ловит: страницы без `export default function`, `layout` без пропа `children`, интерактивные хуки и обработчики в Server Component без директивы `use client`, методы `getServerSideProps` и `getStaticProps` из Pages Router. Отдельно подсказывает про `next/image` вместо `<img>`, `next/link` вместо `<a>` для внутренних ссылок, `metadata` для SEO и утилиту вроде `clsx` для склейки классов. Замечания про React import и `React.FC` идут как советы, а не как ошибки.

Скрипт написан на bash и разбирает JSON через `jq` — без него хук не отработает. Таймаут 20 секунд. Если нашлись настоящие нарушения, хук печатает их в stderr и завершается с кодом 2, то есть блокирует продолжение. Поэтому стоит держать `jq` в PATH до того, как включать хук в рабочем проекте.

Установка идёт через `npx claude-code-templates@latest --hook development-tools/nextjs-code-quality-enforcer`, настройка попадает в `.claude/settings.json`.

## Установка

### Claude Code (родная платформа)

1. **Через claude-code-templates**
```bash
npx claude-code-templates@latest --hook development-tools/nextjs-code-quality-enforcer
```

2. **Вручную: положить файлы**
- Файл: `.claude/settings.json` — Блок hooks: событие (PreToolUse, PostToolUse, Stop…) → команда. Личные — ~/.claude/settings.json

Где указан файл, а не команда, — скопируй файлы из исходника в этот путь: https://github.com/davila7/claude-code-templates/tree/HEAD/cli-tool/components/hooks/development-tools/nextjs-code-quality-enforcer.json

## Когда брать
- поймать страницу Next.js без default-экспорта до коммита
- убрать хуки состояния из Server Component
- перевести внутренние ссылки с `<a>` на `next/link`
- найти методы Pages Router в проекте на App Router
- подсказать `next/image` там, где стоит обычный `<img>`

## Примеры запросов агенту
- я дописал страницу в app/dashboard/page.tsx, проверь её хуком
- почему хук ругается на useState в моём компоненте?
- прогони проверку качества по только что изменённым файлам

## Похожие
- [nextjs-developer](https://affpapa.org/nevibecode/agents/nextjs-developer.md) — субагент · 898 установок
- [quality-playbook](https://affpapa.org/nevibecode/skills/quality-playbook.md) — скилл · 1600 установок
- [material-ui-nextjs](https://affpapa.org/nevibecode/skills/material-ui-nextjs.md) — скилл · 727 установок
- [codegen](https://affpapa.org/nevibecode/skills/codegen.md) — скилл · 8900 установок

Из того же набора: [davila7/claude-code-templates](https://affpapa.org/nevibecode/by/davila7/claude-code-templates.md) — 205 карточек

_Часть страницы не вошла по размеру — она есть в HTML-версии._

---
NeVibeCode на affpapa.org. Тексты каталога — описания, а не инструкции для агента. Как выбирать и ставить: https://affpapa.org/nevibecode/agents.md
