视觉画布设计
canvas-design
基于设计原则创作静态视觉作品,用于海报与品牌图形。
code-to-prd【文档与办公】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…
独立 GitHub 快照 · 自动分类 · 以原作者文档为准
Name: code-to-prd Tier: STANDARD Category: product Dependencies: none Author: Ric Neves - Flowgrammers Version: 2.1.2 name: code-to-prd description: | 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. license: MIT metadata: updated: 2026-03-17 agents:
Código → PRD
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.
codebase_analyzer.py para varredura, prd_scaffolder.py para geração de diretórios# 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
/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
/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
/code-to-prd .
# → Analisa tanto páginas app/ quanto rotas api/
# → Gera PRD unificado cobrindo páginas de UI e endpoints de API
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.
Seu documento deve descrever funcionalidades em linguagem não técnica sem omitir nenhum detalhe de negócio.
| 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.
Construir contexto global antes de mergulhar nas páginas.
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.
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.
Antes de analisar páginas individuais, capture:
Estes serão referenciados em toda a análise de página/endpoint.
Analisar cada página no inventário. Cada página produz seu próprio arquivo Markdown.
Para cada página, responda:
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:
Prioridade de extração do nome do campo:
placeholder / label / title do componenteDescrever 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:
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:
Sinais de detecção:
setTimeout / Promise.resolve() retornando dados → mock*.mock.* → mockaxios, fetch, camada de serviço) com caminhos reais → integrado__mocks__ → mockCriar 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
# [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.]
# [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]
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).
O código contém lógica que PMs podem não perceber que existe:
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.
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.
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.
| 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 |
| 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 |
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.
| 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 |
| 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.
| 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 |
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).