---
name: nuxt-review
description: Revisa código de um projeto Nuxt contra padrões de qualidade — detecta violações de arquitetura, anti-padrões de segurança, arquivos acima de 300 linhas, uso incorreto de fetch, componentes soltos, URLs em português e outras convenções.
---

# nuxt-review — Revisão de Código Nuxt

Você está revisando código de um projeto Nuxt. Analise cada ponto abaixo e reporte violações encontradas com o arquivo e linha exatos.

## Escopo da revisão

Se o usuário passar argumentos, revise apenas esses arquivos/diretórios. Caso contrário, revise:
- `app/` — componentes, composables, páginas, utils
- `server/` — API routes, utils, middleware
- `shared/` — tipos

## 1. Tamanho de arquivos

- [ ] Nenhum arquivo deve ter mais de **300 linhas**
- Verifique: `app/components/`, `app/pages/`, `server/api/`
- Se encontrar: aponte qual arquivo, quantas linhas, e sugira como dividir

## 2. Uso de `$fetch` no cliente

- [ ] Nenhum arquivo em `app/` deve usar `$fetch` diretamente
- Padrão correto: `useAPI()` para dados reativos, `apiPost/apiPut/apiDelete/apiGet` para mutações
- Reporte qualquer ocorrência com caminho e linha

## 3. Componentes soltos

- [ ] Nenhum componente deve existir como arquivo solto (ex: `app/components/Button.vue`)
- Padrão correto: `app/components/Button/index.vue`
- Liste todos os componentes soltos encontrados

## 4. TypeScript — uso de `any`

- [ ] Nenhum `any` sem comentário `// eslint-disable-next-line @typescript-eslint/no-explicit-any` imediatamente acima com justificativa
- Busque por `: any`, `as any`, `<any>` sem o comentário correspondente

## 5. URLs de API em português

- [ ] Todas as URLs de API devem estar em inglês
- Busque por strings com acentos, cedilha ou palavras em português nas URLs (ex: `/api/produtos`, `/api/pedidos`, `/api/me/perfil`).
- Qualquer URL com acento, cedilha ou palavra portuguesa é violação

## 6. `definePageMeta` em rotas cobertas por `routeRules`

- [ ] Páginas em rotas cobertas por `routeRules` não devem usar `definePageMeta`
- Verifique `nuxt.config.ts` para ver quais rotas têm `routeRules`
- Busque por `definePageMeta` em páginas nessas rotas

## 7. `SUPABASE_SECRET_KEY` ou equivalentes em `runtimeConfig.public`

- [ ] Nenhuma chave secreta (service_role, admin SDK, SUPABASE_SECRET_KEY) deve aparecer em `runtimeConfig.public`
- Revise `nuxt.config.ts` e qualquer arquivo que configure runtime config

## 8. Fetch de dados em componentes folha

- [ ] Componentes em `app/components/` não devem usar `useAPI`, `useFetch` ou `$fetch`
- Dados devem chegar via `props` ou de composable da página pai
- Exceção: componentes que são claramente containers/smart components

## 9. Lógica complexa em `<script setup>`

- [ ] `<script setup>` deve ser mínimo — sem lógica de estado diretamente
- Indicadores de problema: mais de 3 `ref()` em `<script setup>`, computeds complexos inline
- Lógica reativa deve estar em composable, lógica pura em utils

## 10. Composables globais para lógica de página única

- [ ] Composables em `app/composables/` devem ser usados em 2+ lugares
- Se um composable só é usado em uma página, deve estar em `_composables/` co-localizado
- Liste composables globais que aparecem em apenas um lugar

## 11. `npm` ou `yarn` em scripts ou documentação

- [ ] Nenhuma referência a `npm install`, `npm run`, `yarn add` em scripts ou docs do projeto
- Substitua por equivalentes `pnpm`

## 12. Imports de banco direto no cliente

- [ ] Nenhum import de `@supabase/supabase-js` ou `firebase-admin` em arquivos de `app/`
- Banco de dados é exclusivamente server-side

## Formato do relatório

Para cada violação encontrada, reporte no formato:

```
[SEVERIDADE] Categoria da violação
  Arquivo: app/components/MinhaLista.vue:45
  Problema: Descrição do problema
  Correção: O que deve ser feito
```

Severidades:
- `[CRÍTICO]` — Segurança (secrets expostos, acesso ao banco no cliente)
- `[ALTO]` — Anti-padrão que quebra funcionalidade (ex: $fetch sem auth)
- `[MÉDIO]` — Violação de convenção (ex: componente solto, URL em português)
- `[BAIXO]` — Qualidade de código (ex: arquivo muito grande, any sem comentário)

## Resumo final

Ao terminar, exiba:

```
Revisão completa.

Violações encontradas: X
  [CRÍTICO]: N
  [ALTO]: N
  [MÉDIO]: N
  [BAIXO]: N

Arquivos verificados: N
Arquivos sem violações: N
```

Se não houver violações: "Nenhuma violação encontrada. O código está em conformidade com os padrões."
