Nome
Código → PRD
Descrição
Faça engenharia reversa de qualquer base de código frontend, backend ou fullstack em um Documento de Requisitos de Produto (PRD) completo. Analisa rotas, componentes, modelos, APIs e interações do usuário para produzir documentação legível para negócios, detalhada o suficiente para engenheiros ou agentes de IA reconstruírem completamente cada página e endpoint.
Código → PRD: Engenharia Reversa de Qualquer Base de Código em Requisitos de Produto
Funcionalidades
- Fluxo de trabalho de 3 fases: varredura global → análise página a página → geração de documento estruturado
- Suporte Frontend: React, Vue, Angular, Svelte, Next.js (App + Pages Router), Nuxt, SvelteKit, Remix
- Suporte Backend: NestJS, Express, Django, Django REST Framework, FastAPI, Flask
- Suporte Fullstack: Análise combinada de frontend + backend com saída de PRD unificada
- Detecção de mock: Distingue automaticamente integrações de API reais de dados mock/fixture
- Extração de enums: Lista exaustivamente todos os códigos de status, mapeamentos de tipo e constantes
- Extração de modelos: Analisa modelos Django, entidades NestJS, schemas Pydantic
- Scripts de automação:
codebase_analyzer.py para varredura, prd_scaffolder.py para geração de diretórios
- Lista de verificação de qualidade: Validação de completude, precisão e legibilidade
Uso
# Analisar um projeto e gerar esqueleto de PRD
python3 scripts/codebase_analyzer.py /path/to/project -o analysis.json
python3 scripts/prd_scaffolder.py analysis.json -o prd/ -n "My App"
# Ou use o slash command
/code-to-prd /path/to/project
Exemplos
Frontend (React)
/code-to-prd ./src
# → Varre componentes, rotas, chamadas de API, gerenciamento de estado
# → Gera prd/ com documentos por página, dicionário de enums, inventário de API
Backend (Django)
/code-to-prd ./myproject
# → Detecta Django via manage.py, varre urls.py, views.py, models.py
# → Documenta endpoints, schemas de modelos, configuração de admin, permissões
Fullstack (Next.js)
/code-to-prd .
# → Analisa tanto páginas app/ quanto rotas api/
# → Gera PRD unificado cobrindo páginas de UI e endpoints de API
Função
Você é um analista de produto sênior e arquiteto técnico. Seu trabalho é ler uma base de código frontend, entender o propósito de negócio de cada página e produzir um PRD completo em linguagem amigável para gerentes de produto.
Audiência Dupla
- Gerentes de produto / partes interessadas de negócio — precisam entender o que o sistema faz, não como
- Engenheiros / agentes de IA — precisam de detalhes suficientes para reconstruir completamente os campos, interações e relacionamentos de cada página
Seu documento deve descrever funcionalidades em linguagem não técnica sem omitir nenhum detalhe de negócio.
Stacks Suportadas
| Stack |
Frameworks |
| Frontend |
React, Vue, Angular, Svelte, Next.js (App/Pages Router), Nuxt, SvelteKit, Remix, Astro |
| Backend |
NestJS, Express, Fastify, Django, Django REST Framework, FastAPI, Flask |
| Fullstack |
Next.js (rotas de API + páginas), Nuxt (server/ + pages/), Django (views + templates) |
Para projetos somente backend, o conceito de "página" mapeia para grupos de recursos de API ou visualizações admin. O mesmo fluxo de trabalho de 3 fases se aplica — rotas viram endpoints, componentes viram controllers/views e interações viram fluxos de request/response.
Fluxo de Trabalho
Fase 1: — Varredura Global do Projeto
Construir contexto global antes de mergulhar nas páginas.
1. Identificar Estrutura do Projeto
Varrer o diretório raiz e entender a organização:
Diretórios Frontend:
- Páginas/rotas (pages/, views/, routes/, app/, src/pages/)
- Componentes (components/, modules/)
- Config de rota (router.ts, routes.ts, definições de rota App.tsx)
- Camada de API/serviço (services/, api/, requests/)
- Gerenciamento de estado (store/, models/, context/)
- Arquivos i18n (locales/, i18n/) — nomes de exibição de campos frequentemente ficam aqui
Diretórios Backend (NestJS):
- Módulos (src/modules/, src/*.module.ts)
- Controllers (*.controller.ts) — manipuladores de rota
- Services (*.service.ts) — lógica de negócio
- DTOs (dto/, *.dto.ts) — shapes de request/response
- Entities (entities/, *.entity.ts) — modelos de banco de dados
- Guards/pipes/interceptors — auth, validação, transformação
Diretórios Backend (Django):
- Apps (*/apps.py, */views.py, */models.py, */urls.py)
- Config de URL (urls.py, */urls.py)
- Views (views.py, viewsets.py) — manipuladores de rota
- Models (models.py) — schema do banco de dados
- Serializers (serializers.py) — shapes de request/response
- Forms (forms.py) — validação e definições de campo
- Templates (templates/) — páginas renderizadas pelo servidor
- Admin (admin.py) — configuração do painel admin
Identificar framework pelo package.json (frameworks Node.js) ou arquivos do projeto (manage.py para Django, requirements.txt/pyproject.toml para Python). Padrões de roteamento, componentes e gerenciamento de estado diferem significativamente entre frameworks — a identificação permite análise precisa.
2. Construir Inventário de Rotas e Páginas
Extrair todas as páginas da configuração de rotas em um inventário de páginas completo:
| Campo |
Descrição |
| Caminho da rota |
ex.: /user/list, /order/:id |
| Título da página |
Da configuração de rota, breadcrumbs ou componente de página |
| Módulo / nível de menu |
Onde fica na navegação |
| Caminho do arquivo de componente |
Arquivo(s) de origem implementando esta página |
Para roteamento baseado em sistema de arquivos (Next.js, Nuxt), inferir da estrutura de diretórios.
Para projetos backend, o inventário de páginas vira um inventário de endpoints/recursos:
| Campo |
Descrição |
| Caminho do endpoint |
ex.: /api/users, /api/orders/:id |
| Método HTTP |
GET, POST, PUT, DELETE, PATCH |
| Controller/view |
Arquivo de origem que trata esta rota |
| Módulo/app |
Qual módulo NestJS ou app Django é responsável |
| Auth necessária |
Se autenticação/permissões são necessárias |
Para NestJS: extrair de decorators @Controller + @Get/@Post/@Put/@Delete.
Para Django: extrair de urls.py → urlpatterns e viewsets.py → registros do router.
3. Mapear Contexto Global
Antes de analisar páginas individuais, capture:
- Estado global — informações do usuário, permissões, feature flags, configuração
- Componentes compartilhados — layout, nav, guards de auth, error boundaries
- Enums e constantes — códigos de status, mapeamentos de tipo, definições de role
- Config base de API — URL base, interceptors, headers de auth, tratamento de erros
- Modelos de banco de dados (backend) — relacionamentos de entidade, tipos de campo, constraints
- Middleware (backend) — middleware de auth, limitação de taxa, registro de logs, CORS
- DTOs/Serializers (backend) — shapes de validação de request, formatos de response
Estes serão referenciados em toda a análise de página/endpoint.
Fase 2: — Análise Profunda Página a Página
Analisar cada página no inventário. Cada página produz seu próprio arquivo Markdown.
Dimensões de Análise
Para cada página, responda:
A. Visão Geral da Página
- O que esta página faz? (uma frase)
- Onde ela se encaixa no sistema?
- Qual cenário traz um usuário até aqui?
B. Layout e Regiões
- Regiões principais: área de busca, tabela, painel de detalhes, barra de ação, abas, etc.
- Arranjo espacial: topo/base, esquerda/direita, aninhado
C. Inventário de Campos (core — seja exaustivo)
Para páginas de formulário, liste cada campo:
| Nome do Campo |
Tipo |
Obrigatório |
Padrão |
Validação |
Descrição de Negócio |
| Nome de usuário |
Entrada de texto |
Sim |
— |
Máx 20 chars |
Conta de login do sistema |
Para páginas de tabela/lista, liste:
- Campos de busca/filtro (tipo, obrigatório, opções de enum)
- Colunas da tabela (nome, formato, ordenável, filtrável)
- Botões de ação por linha (o que cada um faz)
Prioridade de extração do nome do campo:
- Texto de exibição hardcoded no código
- Valores de tradução i18n
- Props
placeholder / label / title do componente
- Nomes de variáveis (último recurso — forneça um nome de exibição razoável)
D. Lógica de Interação
Descrever como "ação do usuário → resposta do sistema":
[Ação] Usuário clica em "Criar"
[Resposta] Modal abre com campos de formulário: ...
[Validação] Nome obrigatório, verificação de formato de telefone
[API] POST /api/user/create com dados do formulário
[Sucesso] Toast "Criado com sucesso", fechar modal, atualizar lista
[Falha] Exibir mensagem de erro da API
Cubra todos os tipos de interação:
- Carregamento/inicialização da página (queries padrão, dados pré-carregados)
- Busca / filtro / reset
- Operações CRUD (criar, ler, atualizar, excluir)
- Tabela: paginação, ordenação, seleção de linha, ações em lote
- Envio e validação de formulário
- Transições de status (ex.: fluxos de aprovação: pendente → aprovado → rejeitado)
- Importar / exportar
- Interdependências de campos (selecionar valor A muda opções no campo B)
- Controles de permissão (botões/campos visíveis apenas para certos papéis)
- Polling / atualização automática / atualizações em tempo real
E. Dependências de API
Caso 1: API integrada (chamadas HTTP reais no código)
| Nome da API |
Método |
Caminho |
Gatilho |
Parâmetros Principais |
Notas |
| Obter usuários |
GET |
/api/user/list |
Carregamento, busca |
page, size, palavra-chave |
Paginado |
Caso 2: API não integrada (dados mock/hardcoded)
Quando a página usa dados mock, fixtures hardcoded, simulações com setTimeout, ou stubs Promise.resolve() — a API ainda não é real. Faça engenharia reversa da especificação de API necessária a partir da funcionalidade e shape dos dados da página.
Para cada API necessária, documente:
- Método, caminho sugerido, gatilho
- Parâmetros de entrada (nome, tipo, obrigatório, descrição)
- Campos de saída (nome, tipo, descrição)
- Descrição da lógica de negócio principal
Sinais de detecção:
setTimeout / Promise.resolve() retornando dados → mock
- Dados definidos no componente ou em arquivos
*.mock.* → mock
- Chamadas HTTP reais (
axios, fetch, camada de serviço) com caminhos reais → integrado
- Diretório
__mocks__ → mock
F. Relacionamentos de Página
- Entrada: Quais páginas apontam para cá? Quais parâmetros elas passam?
- Saída: Para onde os usuários podem navegar daqui? Quais parâmetros?
- Acoplamento de dados: Quais páginas compartilham dados ou acionam atualizações umas nas outras?
Fase 3: — Geração de Documentação
Estrutura de Saída
Criar prd/ na raiz do projeto (ou diretório especificado pelo usuário):
prd/
├── README.md # Visão geral do sistema
├── pages/
│ ├── 01-user-mgmt-list.md # Um arquivo por página
│ ├── 02-user-mgmt-detail.md
│ ├── 03-order-mgmt-list.md
│ └── ...
└── appendix/
├── enum-dictionary.md # Todos enums, códigos de status, mapeamentos de tipo
├── page-relationships.md # Mapa de navegação entre páginas
└── api-inventory.md # Referência completa de API
Template README.md
# [Nome do Sistema] — Documento de Requisitos de Produto
## Visão Geral do Sistema
[2-3 parágrafos: o que o sistema faz, contexto de negócio, usuários principais]
## Visão Geral dos Módulos
| Módulo | Páginas | Funcionalidade Principal |
|--------|---------|--------------------------|
| Gerenciamento de Usuários | Lista de usuários, Detalhes do usuário, Gerenciamento de papéis | CRUD de usuários, atribuição de papéis e permissões |
## Inventário de Páginas
| # | Nome da Página | Rota | Módulo | Link de Documento |
|---|----------------|------|--------|-------------------|
| 1 | Lista de Usuários | /user/list | Gerenc. Usuários | [→](./pages/01-user-mgmt-list.md) |
## Notas Globais
### Modelo de Permissão
[Resumir sistema de auth/role se presente no código]
### Padrões de Interação Comuns
[Regras globais: todas as exclusões requerem confirmação, listas padrão por created_at desc, etc.]
Template de Documentação por Página
# [Nome da Página]
> **Rota:** `/xxx/xxx`
> **Módulo:** [Nome do módulo]
> **Gerado:** [Data]
## Visão Geral
[2-3 frases: função principal e caso de uso]
## Layout
[Detalhamento de regiões — descrição em texto ou diagrama ASCII]
## Campos
### [Região: ex. "Filtros de Busca"]
| Campo | Tipo | Obrigatório | Opções / Enum | Padrão | Notas |
|-------|------|-------------|---------------|--------|-------|
### [Região: ex. "Tabela de Dados"]
| Coluna | Formato | Ordenável | Filtrável | Notas |
|--------|---------|-----------|-----------|-------|
### [Região: ex. "Ações"]
| Botão | Condição de Visibilidade | Comportamento |
|-------|--------------------------|---------------|
## Interações
### Carregamento da Página
[O que acontece ao montar]
### [Cenário: ex. "Busca"]
- **Gatilho:** [Ação do usuário]
- **Comportamento:** [Resposta do sistema]
- **Regras especiais:** [Se houver]
### [Cenário: ex. "Criar"]
- **Gatilho:** ...
- **Conteúdo do Modal/Drawer:** [Campos e lógica dentro]
- **Validação:** ...
- **Em caso de sucesso:** ...
## Dependências de API
| API | Método | Caminho | Gatilho | Notas |
|-----|--------|---------|---------|-------|
| ... | ... | ... | ... | ... |
## Relacionamentos de Página
- **De:** [Páginas de origem + parâmetros]
- **Para:** [Páginas de destino + parâmetros]
- **Acoplamento de dados:** [Gatilhos de atualização entre páginas]
## Regras de Negócio
[Qualquer coisa que não se encaixe acima]
Princípios Fundamentais
1. Linguagem de Negócio Primeiro
Não escreva "chama useState para gerenciar estado de loading." Escreva "o botão de busca exibe um spinner para evitar envios duplicados."
Não escreva "useEffect busca ao montar." Escreva "a página carrega automaticamente a primeira página de resultados ao abrir."
Inclua detalhes técnicos apenas quando eles afetam diretamente o comportamento do produto: caminhos de API (engenheiros precisam deles), regras de validação (afetam a UX), condições de permissão (afetam visibilidade).
2. Não Perca a Lógica Oculta
O código contém lógica que PMs podem não perceber que existe:
- Interdependências de campos (tipo A exibe campo X; tipo B exibe campo Y)
- Visibilidade condicional de botões
- Formatação de dados (moeda com 2 decimais, formatos de data, mapeamentos de rótulos de status)
- Ordem de classificação padrão e tamanho de página
- Efeitos de debounce/throttle na entrada do usuário
- Intervalos de polling / atualização automática
3. Listar Enums Exaustivamente
Quando o código define enums (códigos de status, códigos de tipo, tipos de papel), liste cada valor e seu significado. Eles frequentemente estão espalhados por arquivos de constantes, configurações valueEnum de componentes ou mapeadores de resposta de API.
4. Marque Incerteza — Não Adivinhe
Se o significado de negócio de um campo ou lógica não puder ser determinado a partir do código (ex.: nomes de variáveis abreviados, condicionais excessivamente complexos), marque como [A CONFIRMAR] e explique o que você observou e por que está incerto. Nunca fabrique significado de negócio.
5. Mantenha Arquivos de Página Auto-Contidos
O Markdown de cada página deve ser independente — ler apenas aquele arquivo dá compreensão completa. Use links relativos ao referenciar outras páginas ou entradas do apêndice.
Estratégias por Tipo de Página
Páginas Frontend
| Tipo de Página |
Áreas de Foco |
| Lista / Tabela |
Condições de busca, colunas, ações por linha, paginação, operações em lote |
| Formulário / Criar-Editar |
Cada campo, validação, interdependências, comportamento após envio |
| Detalhe / Visualização |
Informações exibidas, organização de abas/seções, ações disponíveis |
| Modal / Drawer |
Descrever como parte da página acionadora — não um arquivo separado. Mas documentar totalmente o conteúdo |
| Dashboard |
Cards de dados, gráficos, significado das métricas, dimensões de filtro, frequência de atualização |
Endpoints de Backend (NestJS / Django / Express)
| Tipo de Endpoint |
Áreas de Foco |
| Recurso CRUD |
Todos os campos (de DTO/serializer), regras de validação, permissões, paginação, filtragem, ordenação |
| Endpoints de Auth |
Fluxo de login/registro, formato do token, lógica de refresh, redefinição de senha, provedores OAuth |
| Upload de arquivo |
Tipos aceitos, limites de tamanho, destino de armazenamento, pipeline de processamento |
| Webhook / evento |
Condições de gatilho, shape do payload, política de retry, idempotência |
| Job em background |
Gatilho, agenda, entrada/saída, tratamento de falhas, monitoramento |
| Views Admin (Django) |
Modelos registrados, list_display, search_fields, filtros, modelos inline, ações customizadas |
Ritmo de Execução
Projetos grandes (>15 páginas): Trabalhe em lotes de 3-5 páginas por módulo. Conclua a visão geral do sistema + inventário de páginas primeiro. Produza cada lote para revisão do usuário antes de prosseguir.
Projetos pequenos (≤15 páginas): Conclua toda a análise em uma única passagem.
Armadilhas Comuns
| Armadilha |
Correção |
| Usar nomes de componentes como nomes de páginas |
UserManagementTable → "Lista de Gerenciamento de Usuários" |
| Pular modais e drawers |
Eles contêm lógica de negócio crítica — documente completamente |
| Perder nomes de campos i18n |
Verifique arquivos de tradução, não apenas o JSX do componente |
| Ignorar parâmetros dinâmicos de rota |
/order/:id = página requer um ID de pedido para carregar |
| Esquecer controles de permissão |
Documente quais papéis veem quais botões/páginas |
| Assumir que todas as APIs são reais |
Verifique padrões de dados mock antes de documentar endpoints |
| Pular customização do admin Django |
admin.py frequentemente contém regras de negócio críticas (filtros de lista, ações customizadas, inlines) |
| Perder guards/pipes do NestJS |
@UseGuards, @UsePipes contêm lógica de auth e validação que afeta o comportamento |
| Ignorar constraints do banco de dados |
Constraints de campo do modelo (unique, max_length, choices) são regras de validação para o PRD |
| Negligenciar middleware |
Middleware de auth, limitadores de taxa e config CORS definem comportamento em todo o sistema |
Ferramentas
Scripts
| Script |
Propósito |
Uso |
scripts/codebase_analyzer.py |
Varrer base de código → extrair rotas, APIs, modelos, enums, estrutura |
python3 codebase_analyzer.py /path/to/project |
scripts/prd_scaffolder.py |
Gerar esqueleto de diretório PRD a partir do JSON de análise |
python3 prd_scaffolder.py analysis.json |
Fluxo de trabalho recomendado:
# 1. Analisar o projeto (saída JSON — funciona para frontend, backend ou fullstack)
python3 scripts/codebase_analyzer.py /path/to/project -o analysis.json
# 2. Revisar a análise (resumo em markdown)
python3 scripts/codebase_analyzer.py /path/to/project -f markdown
# 3. Scaffoldar o diretório de PRD com stubs
python3 scripts/prd_scaffolder.py analysis.json -o prd/ -n "My App"
# 4. Preencher seções TODO página a página usando o fluxo de trabalho do SKILL.md
Ambos os scripts são somente stdlib — sem necessidade de pip install.
Referências
| Arquivo |
Conteúdo |
references/prd-quality-checklist.md |
Lista de verificação de completude, precisão e legibilidade |
references/framework-patterns.md |
Padrões específicos de framework para rotas, estado, APIs, formulários, permissões |
Atribuição
Esta skill foi inspirada por code-to-prd de @lihanglogan, que propôs o conceito original e a metodologia na PR #368. O fluxo de trabalho central de três fases (varredura global → análise página a página → geração de documento estruturado) originou-se desse trabalho. Esta versão foi reconstruída do zero em inglês com ferramentas adicionadas (scripts de análise, scaffolder, referência de framework, lista de verificação de qualidade).
1---2name: code-to-prd3description: Faça engenharia reversa de qualquer base de código em um Documento de Requisitos de Produto (PRD) completo. Analisa rotas, componentes, gerenciamento de estado, integrações de API e interações do usuário para produzir documentação legível para negócios, detalhada o suficiente para engenheiros ou agentes de IA reconstruírem completamente cada página e endpoint. Funciona com frameworks frontend (React, Vue, Angular, Svelte, Next.js, Nuxt), frameworks backend (NestJS, Django, Express, FastAPI) e aplicações fullstack. Acione quando os usuários mencionarem: gerar PRD, fazer engenharia reversa de requisitos, código para documentação, extrair especificações de produto do código, documentar lógica de página, analisar campos e interações de página, criar inventário funcional, escrever requisitos de uma base de código existente, documentar endpoints de API ou analisar rotas de backend.4license: MIT5---67## Nome89Código → PRD1011## Descrição1213Faça engenharia reversa de qualquer base de código frontend, backend ou fullstack em um Documento de Requisitos de Produto (PRD) completo. Analisa rotas, componentes, modelos, APIs e interações do usuário para produzir documentação legível para negócios, detalhada o suficiente para engenheiros ou agentes de IA reconstruírem completamente cada página e endpoint.1415# Código → PRD: Engenharia Reversa de Qualquer Base de Código em Requisitos de Produto1617## Funcionalidades1819- **Fluxo de trabalho de 3 fases**: varredura global → análise página a página → geração de documento estruturado20- **Suporte Frontend**: React, Vue, Angular, Svelte, Next.js (App + Pages Router), Nuxt, SvelteKit, Remix21- **Suporte Backend**: NestJS, Express, Django, Django REST Framework, FastAPI, Flask22- **Suporte Fullstack**: Análise combinada de frontend + backend com saída de PRD unificada23- **Detecção de mock**: Distingue automaticamente integrações de API reais de dados mock/fixture24- **Extração de enums**: Lista exaustivamente todos os códigos de status, mapeamentos de tipo e constantes25- **Extração de modelos**: Analisa modelos Django, entidades NestJS, schemas Pydantic26- **Scripts de automação**: `codebase_analyzer.py` para varredura, `prd_scaffolder.py` para geração de diretórios27- **Lista de verificação de qualidade**: Validação de completude, precisão e legibilidade2829## Uso3031```bash32# Analisar um projeto e gerar esqueleto de PRD33python3 scripts/codebase_analyzer.py /path/to/project -o analysis.json34python3 scripts/prd_scaffolder.py analysis.json -o prd/ -n "My App"3536# Ou use o slash command37/code-to-prd /path/to/project38```3940## Exemplos4142### Frontend (React)43```bash44/code-to-prd ./src45# → Varre componentes, rotas, chamadas de API, gerenciamento de estado46# → Gera prd/ com documentos por página, dicionário de enums, inventário de API47```4849### Backend (Django)50```bash51/code-to-prd ./myproject52# → Detecta Django via manage.py, varre urls.py, views.py, models.py53# → Documenta endpoints, schemas de modelos, configuração de admin, permissões54```5556### Fullstack (Next.js)57```bash58/code-to-prd .59# → Analisa tanto páginas app/ quanto rotas api/60# → Gera PRD unificado cobrindo páginas de UI e endpoints de API61```6263---6465## Função6667Você é um analista de produto sênior e arquiteto técnico. Seu trabalho é ler uma base de código frontend, entender o propósito de negócio de cada página e produzir um PRD completo em **linguagem amigável para gerentes de produto**.6869### Audiência Dupla70711. **Gerentes de produto / partes interessadas de negócio** — precisam entender *o que* o sistema faz, não *como*722. **Engenheiros / agentes de IA** — precisam de detalhes suficientes para **reconstruir completamente** os campos, interações e relacionamentos de cada página7374Seu documento deve descrever funcionalidades em linguagem não técnica sem omitir nenhum detalhe de negócio.7576### Stacks Suportadas7778| Stack | Frameworks |79|-------|-----------|80| **Frontend** | React, Vue, Angular, Svelte, Next.js (App/Pages Router), Nuxt, SvelteKit, Remix, Astro |81| **Backend** | NestJS, Express, Fastify, Django, Django REST Framework, FastAPI, Flask |82| **Fullstack** | Next.js (rotas de API + páginas), Nuxt (server/ + pages/), Django (views + templates) |8384Para projetos **somente backend**, o conceito de "página" mapeia para **grupos de recursos de API** ou **visualizações admin**. O mesmo fluxo de trabalho de 3 fases se aplica — rotas viram endpoints, componentes viram controllers/views e interações viram fluxos de request/response.8586---8788## Fluxo de Trabalho8990### Fase 1: — Varredura Global do Projeto9192Construir contexto global antes de mergulhar nas páginas.9394#### 1. Identificar Estrutura do Projeto9596Varrer o diretório raiz e entender a organização:9798```99Diretórios Frontend:100- Páginas/rotas (pages/, views/, routes/, app/, src/pages/)101- Componentes (components/, modules/)102- Config de rota (router.ts, routes.ts, definições de rota App.tsx)103- Camada de API/serviço (services/, api/, requests/)104- Gerenciamento de estado (store/, models/, context/)105- Arquivos i18n (locales/, i18n/) — nomes de exibição de campos frequentemente ficam aqui106107Diretórios Backend (NestJS):108- Módulos (src/modules/, src/*.module.ts)109- Controllers (*.controller.ts) — manipuladores de rota110- Services (*.service.ts) — lógica de negócio111- DTOs (dto/, *.dto.ts) — shapes de request/response112- Entities (entities/, *.entity.ts) — modelos de banco de dados113- Guards/pipes/interceptors — auth, validação, transformação114115Diretórios Backend (Django):116- Apps (*/apps.py, */views.py, */models.py, */urls.py)117- Config de URL (urls.py, */urls.py)118- Views (views.py, viewsets.py) — manipuladores de rota119- Models (models.py) — schema do banco de dados120- Serializers (serializers.py) — shapes de request/response121- Forms (forms.py) — validação e definições de campo122- Templates (templates/) — páginas renderizadas pelo servidor123- Admin (admin.py) — configuração do painel admin124```125126**Identificar framework** pelo `package.json` (frameworks Node.js) ou arquivos do projeto (`manage.py` para Django, `requirements.txt`/`pyproject.toml` para Python). Padrões de roteamento, componentes e gerenciamento de estado diferem significativamente entre frameworks — a identificação permite análise precisa.127128#### 2. Construir Inventário de Rotas e Páginas129130Extrair todas as páginas da configuração de rotas em um **inventário de páginas** completo:131132| Campo | Descrição |133|-------|-----------|134| Caminho da rota | ex.: `/user/list`, `/order/:id` |135| Título da página | Da configuração de rota, breadcrumbs ou componente de página |136| Módulo / nível de menu | Onde fica na navegação |137| Caminho do arquivo de componente | Arquivo(s) de origem implementando esta página |138139Para roteamento baseado em sistema de arquivos (Next.js, Nuxt), inferir da estrutura de diretórios.140141**Para projetos backend**, o inventário de páginas vira um **inventário de endpoints/recursos**:142143| Campo | Descrição |144|-------|-----------|145| Caminho do endpoint | ex.: `/api/users`, `/api/orders/:id` |146| Método HTTP | GET, POST, PUT, DELETE, PATCH |147| Controller/view | Arquivo de origem que trata esta rota |148| Módulo/app | Qual módulo NestJS ou app Django é responsável |149| Auth necessária | Se autenticação/permissões são necessárias |150151Para NestJS: extrair de decorators `@Controller` + `@Get/@Post/@Put/@Delete`.152Para Django: extrair de `urls.py` → `urlpatterns` e `viewsets.py` → registros do router.153154#### 3. Mapear Contexto Global155156Antes de analisar páginas individuais, capture:157158- **Estado global** — informações do usuário, permissões, feature flags, configuração159- **Componentes compartilhados** — layout, nav, guards de auth, error boundaries160- **Enums e constantes** — códigos de status, mapeamentos de tipo, definições de role161- **Config base de API** — URL base, interceptors, headers de auth, tratamento de erros162- **Modelos de banco de dados** (backend) — relacionamentos de entidade, tipos de campo, constraints163- **Middleware** (backend) — middleware de auth, limitação de taxa, registro de logs, CORS164- **DTOs/Serializers** (backend) — shapes de validação de request, formatos de response165166Estes serão referenciados em toda a análise de página/endpoint.167168---169170### Fase 2: — Análise Profunda Página a Página171172Analisar cada página no inventário. **Cada página produz seu próprio arquivo Markdown.**173174#### Dimensões de Análise175176Para cada página, responda:177178##### A. Visão Geral da Página179- O que esta página faz? (uma frase)180- Onde ela se encaixa no sistema?181- Qual cenário traz um usuário até aqui?182183##### B. Layout e Regiões184- Regiões principais: área de busca, tabela, painel de detalhes, barra de ação, abas, etc.185- Arranjo espacial: topo/base, esquerda/direita, aninhado186187##### C. Inventário de Campos (core — seja exaustivo)188189**Para páginas de formulário**, liste cada campo:190191| Nome do Campo | Tipo | Obrigatório | Padrão | Validação | Descrição de Negócio |192|---------------|------|-------------|--------|-----------|----------------------|193| Nome de usuário | Entrada de texto | Sim | — | Máx 20 chars | Conta de login do sistema |194195**Para páginas de tabela/lista**, liste:196- Campos de busca/filtro (tipo, obrigatório, opções de enum)197- Colunas da tabela (nome, formato, ordenável, filtrável)198- Botões de ação por linha (o que cada um faz)199200**Prioridade de extração do nome do campo:**2011. Texto de exibição hardcoded no código2022. Valores de tradução i18n2033. Props `placeholder` / `label` / `title` do componente2044. Nomes de variáveis (último recurso — forneça um nome de exibição razoável)205206##### D. Lógica de Interação207208Descrever como **"ação do usuário → resposta do sistema"**:209210```211[Ação] Usuário clica em "Criar"212[Resposta] Modal abre com campos de formulário: ...213[Validação] Nome obrigatório, verificação de formato de telefone214[API] POST /api/user/create com dados do formulário215[Sucesso] Toast "Criado com sucesso", fechar modal, atualizar lista216[Falha] Exibir mensagem de erro da API217```218219**Cubra todos os tipos de interação:**220- Carregamento/inicialização da página (queries padrão, dados pré-carregados)221- Busca / filtro / reset222- Operações CRUD (criar, ler, atualizar, excluir)223- Tabela: paginação, ordenação, seleção de linha, ações em lote224- Envio e validação de formulário225- Transições de status (ex.: fluxos de aprovação: pendente → aprovado → rejeitado)226- Importar / exportar227- Interdependências de campos (selecionar valor A muda opções no campo B)228- Controles de permissão (botões/campos visíveis apenas para certos papéis)229- Polling / atualização automática / atualizações em tempo real230231##### E. Dependências de API232233**Caso 1: API integrada** (chamadas HTTP reais no código)234235| Nome da API | Método | Caminho | Gatilho | Parâmetros Principais | Notas |236|-------------|--------|---------|---------|----------------------|-------|237| Obter usuários | GET | /api/user/list | Carregamento, busca | page, size, palavra-chave | Paginado |238239**Caso 2: API não integrada** (dados mock/hardcoded)240241Quando a página usa dados mock, fixtures hardcoded, simulações com `setTimeout`, ou stubs `Promise.resolve()` — a API ainda não é real. **Faça engenharia reversa da especificação de API necessária** a partir da funcionalidade e shape dos dados da página.242243Para cada API necessária, documente:244- Método, caminho sugerido, gatilho245- Parâmetros de entrada (nome, tipo, obrigatório, descrição)246- Campos de saída (nome, tipo, descrição)247- Descrição da lógica de negócio principal248249**Sinais de detecção:**250- `setTimeout` / `Promise.resolve()` retornando dados → mock251- Dados definidos no componente ou em arquivos `*.mock.*` → mock252- Chamadas HTTP reais (`axios`, `fetch`, camada de serviço) com caminhos reais → integrado253- Diretório `__mocks__` → mock254255##### F. Relacionamentos de Página256257- **Entrada**: Quais páginas apontam para cá? Quais parâmetros elas passam?258- **Saída**: Para onde os usuários podem navegar daqui? Quais parâmetros?259- **Acoplamento de dados**: Quais páginas compartilham dados ou acionam atualizações umas nas outras?260261---262263### Fase 3: — Geração de Documentação264265#### Estrutura de Saída266267Criar `prd/` na raiz do projeto (ou diretório especificado pelo usuário):268269```270prd/271├── README.md # Visão geral do sistema272├── pages/273│ ├── 01-user-mgmt-list.md # Um arquivo por página274│ ├── 02-user-mgmt-detail.md275│ ├── 03-order-mgmt-list.md276│ └── ...277└── appendix/278 ├── enum-dictionary.md # Todos enums, códigos de status, mapeamentos de tipo279 ├── page-relationships.md # Mapa de navegação entre páginas280 └── api-inventory.md # Referência completa de API281```282283#### Template README.md284285```markdown286# [Nome do Sistema] — Documento de Requisitos de Produto287288## Visão Geral do Sistema289[2-3 parágrafos: o que o sistema faz, contexto de negócio, usuários principais]290291## Visão Geral dos Módulos292293| Módulo | Páginas | Funcionalidade Principal |294|--------|---------|--------------------------|295| Gerenciamento de Usuários | Lista de usuários, Detalhes do usuário, Gerenciamento de papéis | CRUD de usuários, atribuição de papéis e permissões |296297## Inventário de Páginas298299| # | Nome da Página | Rota | Módulo | Link de Documento |300|---|----------------|------|--------|-------------------|301| 1 | Lista de Usuários | /user/list | Gerenc. Usuários | [→](./pages/01-user-mgmt-list.md) |302303## Notas Globais304305### Modelo de Permissão306[Resumir sistema de auth/role se presente no código]307308### Padrões de Interação Comuns309[Regras globais: todas as exclusões requerem confirmação, listas padrão por created_at desc, etc.]310```311312#### Template de Documentação por Página313314```markdown315# [Nome da Página]316317> **Rota:** `/xxx/xxx`318> **Módulo:** [Nome do módulo]319> **Gerado:** [Data]320321## Visão Geral322[2-3 frases: função principal e caso de uso]323324## Layout325[Detalhamento de regiões — descrição em texto ou diagrama ASCII]326327## Campos328329### [Região: ex. "Filtros de Busca"]330| Campo | Tipo | Obrigatório | Opções / Enum | Padrão | Notas |331|-------|------|-------------|---------------|--------|-------|332333### [Região: ex. "Tabela de Dados"]334| Coluna | Formato | Ordenável | Filtrável | Notas |335|--------|---------|-----------|-----------|-------|336337### [Região: ex. "Ações"]338| Botão | Condição de Visibilidade | Comportamento |339|-------|--------------------------|---------------|340341## Interações342343### Carregamento da Página344[O que acontece ao montar]345346### [Cenário: ex. "Busca"]347- **Gatilho:** [Ação do usuário]348- **Comportamento:** [Resposta do sistema]349- **Regras especiais:** [Se houver]350351### [Cenário: ex. "Criar"]352- **Gatilho:** ...353- **Conteúdo do Modal/Drawer:** [Campos e lógica dentro]354- **Validação:** ...355- **Em caso de sucesso:** ...356357## Dependências de API358359| API | Método | Caminho | Gatilho | Notas |360|-----|--------|---------|---------|-------|361| ... | ... | ... | ... | ... |362363## Relacionamentos de Página364- **De:** [Páginas de origem + parâmetros]365- **Para:** [Páginas de destino + parâmetros]366- **Acoplamento de dados:** [Gatilhos de atualização entre páginas]367368## Regras de Negócio369[Qualquer coisa que não se encaixe acima]370```371372---373374## Princípios Fundamentais375376### 1. Linguagem de Negócio Primeiro377Não escreva "chama `useState` para gerenciar estado de loading." Escreva "o botão de busca exibe um spinner para evitar envios duplicados."378379Não escreva "useEffect busca ao montar." Escreva "a página carrega automaticamente a primeira página de resultados ao abrir."380381Inclua detalhes técnicos apenas quando eles **afetam diretamente o comportamento do produto**: caminhos de API (engenheiros precisam deles), regras de validação (afetam a UX), condições de permissão (afetam visibilidade).382383### 2. Não Perca a Lógica Oculta384O código contém lógica que PMs podem não perceber que existe:385- Interdependências de campos (tipo A exibe campo X; tipo B exibe campo Y)386- Visibilidade condicional de botões387- Formatação de dados (moeda com 2 decimais, formatos de data, mapeamentos de rótulos de status)388- Ordem de classificação padrão e tamanho de página389- Efeitos de debounce/throttle na entrada do usuário390- Intervalos de polling / atualização automática391392### 3. Listar Enums Exaustivamente393Quando o código define enums (códigos de status, códigos de tipo, tipos de papel), liste **cada valor e seu significado**. Eles frequentemente estão espalhados por arquivos de constantes, configurações `valueEnum` de componentes ou mapeadores de resposta de API.394395### 4. Marque Incerteza — Não Adivinhe396Se o significado de negócio de um campo ou lógica não puder ser determinado a partir do código (ex.: nomes de variáveis abreviados, condicionais excessivamente complexos), marque como `[A CONFIRMAR]` e explique o que você observou e por que está incerto. Nunca fabrique significado de negócio.397398### 5. Mantenha Arquivos de Página Auto-Contidos399O Markdown de cada página deve ser **independente** — ler apenas aquele arquivo dá compreensão completa. Use links relativos ao referenciar outras páginas ou entradas do apêndice.400401---402403## Estratégias por Tipo de Página404405### Páginas Frontend406407| Tipo de Página | Áreas de Foco |408|----------------|---------------|409| **Lista / Tabela** | Condições de busca, colunas, ações por linha, paginação, operações em lote |410| **Formulário / Criar-Editar** | Cada campo, validação, interdependências, comportamento após envio |411| **Detalhe / Visualização** | Informações exibidas, organização de abas/seções, ações disponíveis |412| **Modal / Drawer** | Descrever como parte da página acionadora — não um arquivo separado. Mas documentar totalmente o conteúdo |413| **Dashboard** | Cards de dados, gráficos, significado das métricas, dimensões de filtro, frequência de atualização |414415### Endpoints de Backend (NestJS / Django / Express)416417| Tipo de Endpoint | Áreas de Foco |418|------------------|---------------|419| **Recurso CRUD** | Todos os campos (de DTO/serializer), regras de validação, permissões, paginação, filtragem, ordenação |420| **Endpoints de Auth** | Fluxo de login/registro, formato do token, lógica de refresh, redefinição de senha, provedores OAuth |421| **Upload de arquivo** | Tipos aceitos, limites de tamanho, destino de armazenamento, pipeline de processamento |422| **Webhook / evento** | Condições de gatilho, shape do payload, política de retry, idempotência |423| **Job em background** | Gatilho, agenda, entrada/saída, tratamento de falhas, monitoramento |424| **Views Admin** (Django) | Modelos registrados, list_display, search_fields, filtros, modelos inline, ações customizadas |425426---427428## Ritmo de Execução429430**Projetos grandes (>15 páginas):** Trabalhe em lotes de 3-5 páginas por módulo. Conclua a visão geral do sistema + inventário de páginas primeiro. Produza cada lote para revisão do usuário antes de prosseguir.431432**Projetos pequenos (≤15 páginas):** Conclua toda a análise em uma única passagem.433434---435436## Armadilhas Comuns437438| Armadilha | Correção |439|-----------|----------|440| Usar nomes de componentes como nomes de páginas | `UserManagementTable` → "Lista de Gerenciamento de Usuários" |441| Pular modais e drawers | Eles contêm lógica de negócio crítica — documente completamente |442| Perder nomes de campos i18n | Verifique arquivos de tradução, não apenas o JSX do componente |443| Ignorar parâmetros dinâmicos de rota | `/order/:id` = página requer um ID de pedido para carregar |444| Esquecer controles de permissão | Documente quais papéis veem quais botões/páginas |445| Assumir que todas as APIs são reais | Verifique padrões de dados mock antes de documentar endpoints |446| Pular customização do admin Django | `admin.py` frequentemente contém regras de negócio críticas (filtros de lista, ações customizadas, inlines) |447| Perder guards/pipes do NestJS | `@UseGuards`, `@UsePipes` contêm lógica de auth e validação que afeta o comportamento |448| Ignorar constraints do banco de dados | Constraints de campo do modelo (unique, max_length, choices) são regras de validação para o PRD |449| Negligenciar middleware | Middleware de auth, limitadores de taxa e config CORS definem comportamento em todo o sistema |450451---452453## Ferramentas454455### Scripts456457| Script | Propósito | Uso |458|--------|-----------|-----|459| `scripts/codebase_analyzer.py` | Varrer base de código → extrair rotas, APIs, modelos, enums, estrutura | `python3 codebase_analyzer.py /path/to/project` |460| `scripts/prd_scaffolder.py` | Gerar esqueleto de diretório PRD a partir do JSON de análise | `python3 prd_scaffolder.py analysis.json` |461462**Fluxo de trabalho recomendado:**463```bash464# 1. Analisar o projeto (saída JSON — funciona para frontend, backend ou fullstack)465python3 scripts/codebase_analyzer.py /path/to/project -o analysis.json466467# 2. Revisar a análise (resumo em markdown)468python3 scripts/codebase_analyzer.py /path/to/project -f markdown469470# 3. Scaffoldar o diretório de PRD com stubs471python3 scripts/prd_scaffolder.py analysis.json -o prd/ -n "My App"472473# 4. Preencher seções TODO página a página usando o fluxo de trabalho do SKILL.md474```475476Ambos os scripts são **somente stdlib** — sem necessidade de pip install.477478### Referências479480| Arquivo | Conteúdo |481|---------|----------|482| `references/prd-quality-checklist.md` | Lista de verificação de completude, precisão e legibilidade |483| `references/framework-patterns.md` | Padrões específicos de framework para rotas, estado, APIs, formulários, permissões |484485---486487## Atribuição488489Esta skill foi inspirada por [code-to-prd](https://github.com/lihanglogan/code-to-prd) de [@lihanglogan](https://github.com/lihanglogan), que propôs o conceito original e a metodologia na [PR #368](https://github.com/alirezarezvani/claude-skills/pull/368). O fluxo de trabalho central de três fases (varredura global → análise página a página → geração de documento estruturado) originou-se desse trabalho. Esta versão foi reconstruída do zero em inglês com ferramentas adicionadas (scripts de análise, scaffolder, referência de framework, lista de verificação de qualidade).