Projeto: [nome]
Versão: 0.0.0 · esqueleto — preencha via /utf-architecture
Última atualização: [data]
🤖 O
prd.mdresponde o quê o produto faz. Este responde onde as coisas moram e como se chamam. Detalhe de tela — rota, componente, contrato — não se decide aqui: isso é trabalho da spec de cada história. (No texto oficial da disciplina este documento é ossd.md— ID31.)✍️ Não preencha na mão: rode
/utf-architecture(depois do/utf-prd). A entrevista decide com você cada seção e garante o que o/utf-setupexige: framework do frontend, o BaaS, a estrutura do projeto e como rodar os testes.
Onde a IDE agêntica busca a verdade. Isto é o índice; a configuração mora nos arquivos — documento não configura ferramenta.
| Fonte | Onde configurar | Serve para |
|---|---|---|
| Constituição da IA | .agents/rules/utf-rules.md (via CLAUDE.md) |
Regras inegociáveis: fases do SDD, 2 rodadas, revisores distintos, Gitflow |
| Fluxos da IA | .agents/workflows/ |
PRD, backlog, design, architecture, setup, ciclo por Issue, ciclo por tarefa, tutor |
| Agentes (subagentes) | .agents/agents/ (cascas em .claude/, .cursor/, .opencode/) |
Implementador, revisores, auditor final e tutor |
| Ficha da disciplina | docs/checklist.md |
Regras do projeto, IDs e entregas |
| Protótipo (Stitch/Figma) | [link público] | Telas, jornadas e hierarquia visual (ID1) |
| MCPs da IDE | [ex.: Figma, Supabase, Context7] | Contexto exato do projeto para o agente (ID32) |
Definição estrita: nenhuma dependência entra sem aparecer aqui. Esta seção e o
package.jsoncontam a mesma história, ou o projeto já se perdeu. O que a ficha fixa entra como está; o que ela deixa livre é decidido na entrevista.
- Frontend: Angular [versão 20+] — standalone, signals, zoneless [conforme a versão].
- Padrões de código exigidos (a ficha cobra cada um — IDs 4, 6, 7, 9, 10–15):
@if/@switch,@forcomtrack,@defer, signals (writable/computed) como fonte de estado,model()para two-way,effect()para efeitos colaterais,input()/output(),inject(), Pipes para formatação. - Framework CSS: [Tailwind, PrimeNG, …] (ID5)
- Dados (em duas fases): json-server no MVP (E2) → [Supabase, PocketBase, …] na E3, com autenticação (JWT) e CRUD reais (IDs 21–22). A troca atinge só os Services (§2.1).
- PWA:
manifest.webmanifest— ícones, cores de tema, splash, standalone, offline (ID3) - Testes e lint: Vitest, o padrão do
ng newdesde o Angular 21 — o Karma, que aparece na maioria dos tutoriais, virou opção. Da raiz,npm testroda a suíte enpm run lintroda o linter: são os scripts do §3.1 (ID33). O linter não vem nong new: o setup instala o oficial (ng add angular-eslint), mais Prettier eeslint-config-prettierna raiz.
Declaradas uma a uma na entrevista, percorrendo os IDs da ficha.
- Componente não fala com o servidor: todo acesso a dados passa por
Services injetados via
inject()(ID15) — mudança de contrato mexe só neles, nunca nas telas. É esta regra que paga a migração da E3: trocar o json-server pelo BaaS reescreve os Services, e nenhuma tela. - Autenticação e sessão (JWT): [fluxo com o serviço de identidade do BaaS — ID21]
- Interceptors funcionais: token injetado globalmente + tratamento centralizado de erros (ID23).
- Assíncrono ↔ reativo:
toSignal()/toObservable()na fronteira entre RxJS e signals (ID25). - Formulários Reativos com validação, mensagens claras e submit desabilitado quando inválido (ID24).
.
├── .agents/ # constituição, workflows e prompts dos agentes (§1)
├── CLAUDE.md / AGENTS.md # cascas por ferramenta (.claude/, .cursor/, .opencode/)
├── README.md # a vitrine, na estrutura exigida pela ficha
├── docs/ # prd.md, este arquivo, design-tokens.md, checklist.md e guias
├── specs/ # uma pasta por história implementada
├── package.json # a raiz do workspace: scripts de orquestração (§3.1)
└── apps/
├── web/ # o app Angular — package.json próprio
└── api/ # reservada para uma API real, se um dia existir
📌 Por que
apps/com duas pastas se só uma tem código. Nesta disciplina os dados vêm do json-server e depois do BaaS: não há backend para escrever. Mas a casca do monorepo custa nada agora e evita mover o projeto inteiro no dia em que uma API própria fizer sentido.apps/api/nasce vazia, e continua vazia — o setup não gera backend nenhum; ela só guarda o lugar (e odb.jsondo json-server, se o documento assim declarar).
O package.json da raiz declara os subprojetos e concentra os comandos:
{
"name": "[nome-do-projeto]",
"private": true,
"workspaces": ["apps/*"],
"scripts": {
"start": "npm run start -w apps/web",
"build": "npm run build -w apps/web",
"test": "npm run test -w apps/web",
"lint": "npm run lint -w apps/web",
"format": "prettier --write .",
"api": "json-server db.json"
}
}📌 O que os workspaces resolvem aqui. Um
npm installna raiz instala as dependências de todos osapps/*de uma vez, numnode_modulessó: quem clona o repositório roda um comando, não um por pasta. A flag-wexecuta um script dentro de um subprojeto semcd. O curingaapps/*faz qualquer pasta nova ali dentro ser reconhecida sem editar este arquivo, e"private": trueimpede a publicação acidental no npm.apps/api/não tempackage.jsone é ignorada pelo npm — nada a fazer nela.
[decidido na entrevista: core/ (singletons: guards, interceptors, services de
dados), shared/ (componentes burros, pipes), features/ (uma pasta por
domínio) — com a regra de dependência: features não importam umas das outras.]
A ficha cobra a API funcional moderna (IDs 16–19):
provideRoutercomwithComponentInputBinding(), parâmetros de rota via Signalinput(), rotas filhas para hierarquia de layout, Functional Guards e Resolvers.
[mapa inicial de rotas nasce aqui; cada história nova preenche uma linha no §6]
A ponte entre o português do negócio (PRD §2) e o inglês do código. Dados e código em inglês, interface em português.
| Termo PRD (PT-BR) | Entidade/Tabela (EN) | Atributos principais |
|---|---|---|
As tabelas do BaaS e seus relacionamentos. O diagrama mora só aqui — o README aponta para este documento, sem copiá-lo.
erDiagram
Chaves do BaaS: a anon key pública vive em
environment.ts(é pública por design — a segurança vem das regras de acesso do BaaS, ex.: RLS no Supabase); service keys e segredos nunca entram no repositório.
| Fase | App roda em | Dados |
|---|---|---|
| Local (E2/MVP) | ng serve |
json-server (db.json local) |
| Local (E3) | ng serve |
[BaaS — projeto de dev] |
| Produção (E3) | [Vercel/Render] | [BaaS — projeto de produção] |
Este índice cresce. Não é para preencher agora: uma linha por história implementada — a spec é que define rota e contrato. Aqui fica só o mapa de quem já existe.
| Domínio | Rota | Guard | Dados (service) | US |
|---|---|---|---|---|
| Data | Versão | O que mudou |
|---|---|---|
| 1.0.0 | Versão inicial via /utf-architecture |
Detalhes de funcionalidade — contratos de uma tela específica, máquinas de
estado de uma história — não entram aqui: nascem sob demanda no spec.md
de cada história. Este documento guarda só o que vale para o sistema inteiro.