EventStormingBoard
Quadro de EventStorming (Brandolini grammar) com suporte a todos os 8 tipos de cards, hotspots, legenda e cards pivotais. Scroll horizontal, zero JS.
src/components/EventStormingBoard.astro
Fluxo Membro→Dispensação — canna-br v0.1
Provisionamento de Associação
UseCaseMatrix
Catálogo de use cases da camada de aplicação com tipo (Command/Query), superfícies expostas (MCP/Web/App) e chips de presença. Golden Circle intro integrado. Zero JS, SSR puro.
src/components/UseCaseMatrix.astro
O domínio precisa ser legível para humano e para o agente. Use cases semânticos = linguagem ubíqua que os dois entendem.
A camada @canna/app-services expõe use cases; o MCP os expõe as-is — 1 use case = 1 tool; cada um aparece numa ou mais superfícies (MCP · Web · MCP App).
O catálogo abaixo — cada use case, o que faz, e onde é exposto.
ProvisionAssociation Cria tenant + configura infra para nova associação UpdateAssociationProfile Atualiza nome, CNPJ, endereço, logo GetAssociationStatus Retorna estado atual, limites e compliance flags RegisterMember Admite sócio + provisiona acesso + emite convite RecordDispensation Registra retirada respeitando quota ativa do membro ViewMemberQuota Consulta consumo atual vs. limite mensal GenerateTraceabilityReport Relatório rastreabilidade pronto p/ diretoria SubmitSNGPC Envia dados ao sistema SNGPC da Anvisa
Use cases sem App ainda são acionados via chat NL (linguagem natural → tool call).
App: candidato = widget planejado, ainda não construído.
Use cases nomeados (ex: DispensationForm) já têm widget live.
InviteReturnContract
Demonstra o padrão "retorno é o artefato acionável": (1) card de convite MCP App com botão copiar, (2) contrato de retorno JSON, (3) tabela de oportunidades use-case × artefato com badges de versão. Dados baked-in (sem props). Copy button com toast feedback.
src/components/InviteReturnContract.astro
MCP Operacional · Resultado da ferramenta
Olá Thiago, sua associação está provisionada no canna-br. Você é o administrador inicial (Diretor).
Primeiro acesso (credencial temporária):
- Login
thiago@casa-da-mata-sv.cannabr.org- Senha
thiago@casa-da-mata-sv.cannabr.org(igual ao login)
Entrar: https://casa-da-mata-sv.cannabr.org
No 1º login você define a senha real + ativa 2FA. A credencial temporária expira em 7 dias.
{
"association": {
"id": "assoc_…",
"slug": "casa-da-mata-sv",
"name": "Casa da Mata São Vicente",
"tenant": "casa-da-mata-sv"
},
"admin": {
"name": "Thiago",
"role": "Diretor",
"login": "thiago@casa-da-mata-sv.cannabr.org",
"must_change_credentials": true,
"expires_at": "2026-06-18T00:00:00Z"
},
"invite": {
"subject": "Convite — Casa da Mata São Vicente no cannabr.org",
"body_markdown": "…",
"body_plain": "…",
"copy_paste": "🌿 Convite — Casa da Mata São Vicente …"
}
}
A chamada foi provision_association + seed_admin_user via o MCP Operacional; o campo que importa para a UX é invite.copy_paste.
| Use Case | Devolve hoje | Devia devolver (artefato) | Versão |
|---|---|---|---|
provision / seed_admin | ids | convite admin copy-paste | v0.1.0 |
reset_credential | ok | mensagem "nova senha temporária" pronta | v0.1.0 |
registerMember | member id | boas-vindas + link de 1º acesso do membro (WhatsApp-ready) + carteirinha digital | v0.1.0 |
viewMemberQuota (perto do limite) | número | nudge "40/45g este mês" pro membro | v0.1.0 |
| 1º login concluído | — | coach "bem-vindo · próximos 3 passos" | v0.1.0 |
recordDispensation | event | recibo de dispensação pro paciente (PDF / texto) | v0.2 |
generate_traceability_report | data | relatório pronto pro grupo da diretoria | v0.2 |
submit_sngpc | protocolo | confirmação de protocolo copy-paste | v0.2 |
explain_compliance_gap | gaps | checklist de remediação acionável | v0.2 |
| membership / prescrição expirando | — | lembrete de renovação pronto | v0.2 |
CoordMetrics
Dashboard de métricas de coordenação Kanban: KPI strip, gráfico de cycle time (inline SVG + linha SLA dashed amber), cost ledger entry auditável, tabela detalhada por lane e diagrama de fluxo work→barrier→verify. Dados baked-in, zero JS.
src/components/CoordMetrics.astro
- Pago por
- Gabriel Fonseca
- Data
- 2026-06-11
- Modelo
claude-sonnet-4-6- Total
- US$ 2,29
- Tokens
- 2.521.557
- Missão
task#7hf358- Motivo do custo
- Dominado por cache writes (context priming de 3 lanes paralelas)
cannabr.org (Hostinger) + plano e-mail Hostinger — serão registrados como Entradas #2 e #3 ao receber os valores.
| Lane | Capacidade | Ciclo (s) | Tokens | Custo USD | SLA <5 min |
|---|---|---|---|---|---|
page-mdx | Domínio canna.br → cannabr.org + 5 linhas v0.2 re-add | 89.7 | 665.265 | 0.49 | ✓ |
invite-comp | Domínio canna.br → cannabr.org (convite) | 87.1 | 498.541 | 0.44 | ✓ |
widget-html | Remover 3 campos v0.2 do DOM (member-registration) | 156.9 | 1.112.243 | 0.62 | ✓ |
verify | Build green (288 pgs) + grep + render check | 169.3 | 245.508 | 0.73 | ✓ |
| Total | 329.6 | 2.521.557 | 2.29 | 4/4 | |
claude-sonnet-4-6 coord Opus · sub-agents Sonnet
Cada lane opera em arquivo isolado — sem conflito de merge. O Workflow tool garante que a fase verify só inicia após todas as 3 lanes work completarem (barrier semântico). Métricas são registradas no ledger SurrealDB do manager via task task#7hf358 (lead-time medido da abertura ao fechamento da missão). Premissa do projeto: everything is metrified.
ReleasesDashboard
Fonte única de verdade para versões, roadmap e changelog. Fetch client-side de /releases.json (dado fixo em disco). Skeleton shimmer durante carregamento. Suporta 4 views: badge, roadmap, changelog, full.
src/components/marketing/widgets/ReleasesDashboard.astro
StateSnapshot
Ilha "estado da rede" — lê /state-snapshot.json client-side e renderiza 4 cards: pilotos ativos, módulos entregues, releases recentes, próximos marcos. Skeleton shimmer → hydrate. Carimbo "atualizado em" com pulse dot.
src/components/marketing/widgets/StateSnapshot.astro
Não foi possível carregar o estado da rede agora.
Os indicadores vivem em Transparência e Roadmap.