# nextjs-app-router-fundamentals

Скилл ведёт агента по Next.js App Router: перенос с Pages Router, вложенные layout, метаданные, динамические маршруты. Пригодится при переходе на app/.

- скилл · `type=skill` · Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, OpenCode · 2200 установок · ★ 109
- Автор: wsimmonds
- Лицензия: MIT · policy=mirror · начало файла — в конце страницы
- Исходник: https://github.com/wsimmonds/claude-nextjs-skills/tree/HEAD/nextjs-app-router-fundamentals/SKILL.md
- Обновлён: 2025-10-24
- HTML: https://affpapa.org/nevibecode/skills/nextjs-app-router-fundamentals

## Что делает

Скилл описывает, как устроен App Router в Next.js 13 и новее, и подсказывает агенту правильные шаги. Внутри — разбор файловых конвенций: `layout.tsx`, `page.tsx`, `loading.tsx`, `error.tsx`, `not-found.tsx`, `template.tsx`, `route.ts`. Отдельно объясняется, что публичный маршрут создают только `page.tsx` и `route.ts`, а компоненты и тесты можно держать рядом в `app/`.

Миграция расписана по шагам: разобрать текущий `pages/`, перенести `_app.tsx` и `_document.tsx` в корневой `layout.tsx`, заменить `<Head>` на экспорт `metadata`, перевести страницы в `app/`, поправить навигацию на `next/link`, вычистить `pages/`. Есть разделы про статические и динамические метаданные через `generateMetadata`, вложенные layout и их поведение при переходах.

Жёсткое правило внутри: `any` в TypeScript запрещён, потому что в проекте включён `@typescript-eslint/no-explicit-any` и сборка упадёт. Вместо него скилл даёт готовые типы для пропсов страницы, событий формы и серверных экшенов. Скилл подключается к Claude, Codex, Cursor, GitHub Copilot, Gemini CLI и OpenCode, но текст обрезан, поэтому про остальные разделы лучше смотреть в самом репозитории.

## Установка

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

1. **Через Skills CLI (Vercel)**
```bash
npx skills add wsimmonds/claude-nextjs-skills --skill nextjs-app-router-fundamentals -a claude-code
```

2. **Вручную: положить файлы**
- Файл: `~/.claude/skills/nextjs-app-router-fundamentals/SKILL.md` — Папка скилла целиком; для одного проекта — .claude/skills/nextjs-app-router-fundamentals/

### Codex

1. **Через Skills CLI (Vercel)**
```bash
npx skills add wsimmonds/claude-nextjs-skills --skill nextjs-app-router-fundamentals -a codex
```

2. **Вручную: положить файлы**
- Файл: `.agents/skills/nextjs-app-router-fundamentals/SKILL.md` — Для всех проектов — ~/.agents/skills/

### Cursor

1. **Через Skills CLI (Vercel)**
```bash
npx skills add wsimmonds/claude-nextjs-skills --skill nextjs-app-router-fundamentals -a cursor
```

2. **Вручную: положить файлы**
- Файл: `.cursor/skills/nextjs-app-router-fundamentals/SKILL.md` — Cursor читает и .agents/skills/, и .claude/skills/

### GitHub Copilot

1. **GitHub CLI**
```bash
gh skill install wsimmonds/claude-nextjs-skills nextjs-app-router-fundamentals
```

2. **Вручную: положить файлы**
- Файл: `.github/skills/nextjs-app-router-fundamentals/SKILL.md`

### Gemini CLI

1. **Через Skills CLI (Vercel)**
```bash
npx skills add wsimmonds/claude-nextjs-skills --skill nextjs-app-router-fundamentals -a gemini-cli
```

2. **Командой платформы**
```bash
gemini skills install https://github.com/wsimmonds/claude-nextjs-skills --path nextjs-app-router-fundamentals
```

### Windsurf (Devin Desktop)

**Вручную: положить файлы**
- Файл: `.devin/skills/nextjs-app-router-fundamentals/SKILL.md` — Старый путь .windsurf/skills/ тоже читается

### OpenCode

**Через Skills CLI (Vercel)**
```bash
npx skills add wsimmonds/claude-nextjs-skills --skill nextjs-app-router-fundamentals -a opencode
```

### Claude.ai

**Claude.ai**
- Упакуйте папку в zip и загрузите в Settings → Capabilities → Skills

Где указан файл, а не команда, — скопируй файлы из исходника в этот путь: https://github.com/wsimmonds/claude-nextjs-skills/tree/HEAD/nextjs-app-router-fundamentals/SKILL.md

## Когда брать
- перенести проект с `pages/` на `app/` без потери маршрутов
- собрать корневой layout с `<html>` и `<body>`
- заменить `<Head>` на экспорт `metadata`
- настроить динамические метаданные для страницы блога
- убрать `any` из пропсов и обработчиков формы

## Примеры запросов агенту
- Помоги мигрировать этот проект с Pages Router на App Router, начни с корневого layout
- Сделай вложенный layout для раздела блога в `app/blog/layout.tsx`
- Добавь динамические метаданные для `app/blog/[slug]/page.tsx` через `generateMetadata`

## Похожие
- [nextjs-app-router](https://affpapa.org/nevibecode/skills/nextjs-app-router.md) — скилл · 3900 установок
- [nextjs-app-router-cursorrules-prompt-file](https://affpapa.org/nevibecode/rules/nextjs-app-router-cursorrules-prompt-file.md) — правило · ★ 41011
- [nextjs-app-router-patterns](https://affpapa.org/nevibecode/skills/nextjs-app-router-patterns.md) — скилл · 32529 установок
- [nextjs-migration-helper](https://affpapa.org/nevibecode/commands/nextjs-migration-helper.md) — команда · 237 установок
- [next-intl-app-router](https://affpapa.org/nevibecode/skills/next-intl-app-router.md) — скилл · 601 установка
- [nextjs-app-architecture](https://affpapa.org/nevibecode/skills/nextjs-app-architecture.md) — скилл · 485 установок

Из того же набора: [wsimmonds/claude-nextjs-skills](https://affpapa.org/nevibecode/by/wsimmonds/claude-nextjs-skills.md) — 6 карточек

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

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