Communitygithub.com

Diagramas Legíveis

Crie uma única página HTML autossuficiente com um diagrama compreendido de imediato: arquitetura, fluxo, sequência, linha do tempo, árvore, camadas, comparação de barras e quadrantes, além de famílias de gráficos feitos à mão. Combina um renderizador validado por especificação JSON com um sistema de design editorial e um contrato de compreensão verificado por máquina.

O que é Diagramas Legíveis?

Este skill transforma a criação de diagramas em uma disciplina editorial, garantindo que qualquer figura gerada seja compreendida pelo leitor logo na primeira olhada. Ele funde dois skills upstream (Archify, que fornece um pipeline de especificação validada, e diagram-design, que impõe um sistema de design editorial) e adiciona uma camada crítica: um contrato de compreensão explícito. O contrato exige que cada diagrama tenha um título que expresse a conclusão (não a categoria), uma frase de takeaways, um caminho de leitura numerado (2 a 5 paradas), uma legenda descritiva e uma legenda de cores. Dois scripts de verificação (self_check.py e comprehension_check.py) validam tanto a higiene do SVG quanto a legibilidade, retornando erro se algo faltar. Suporta 9 tipos de diagrama via especificação JSON (arquitetura, fluxo, estado, sequência, linha do tempo, árvore, camadas, barras, quadrantes) e oferece modelos para autoria manual de mais de 40 tipos (linha, dispersão, sankey, radar, mapa de calor, Gantt, Venn, funil, jornada, etc.). Funciona em Claude Code, Codex, Cursor e DSH, com interação CSS nativa (sem JavaScript) e exportação para SVG/PNG. Ideal para visualizar sistemas, processos e dados, ou para converter diagramas Mermaid/draw.io/Excalidraw em figuras editoriais prontas para documentação.

Funciona com✓Claude Code✓Codex CLI✓Cursor
npx skills add https://github.com/bingomu/readable-diagrams/tree/main/skills/readable-diagrams

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

O que Diagramas Legíveis faz?

Uma página. Uma pergunta. Uma figura que o leitor entende de primeira.

Este skill funde dois skills upstream e adiciona a camada que faltava:

CamadaOrigemO que oferece
Pipeline de especificação validadaArchifyJSON intermediário → renderização determinística → verificações automáticas
Sistema de design editorialdiagram-designTokens de papel/tinta/destaque, rampa tipográfica, conectores ortogonais, contenção editorial
Contrato de compreensãoeste skillTítulo em forma de conclusão, takeaway, caminho de leitura numerado, legenda descritiva, legenda — e um verificador que reprova a página quando faltam

Nenhum dos pais valida se um ser humano consegue ler o resultado. Esse é o propósito deste skill.


0. O contrato — responda a quatro perguntas antes de desenhar

  1. Quem lê? executivo / misto / engenheiro — isso define o vocabulário, não apenas o tom.
  2. O que devem saber após 10 segundos? Uma frase. Torna-se a linha de takeaway.
  3. Onde os olhos começam e em que ordem se movem? 2 a 5 paradas. Tornam-se o caminho numerado.
  4. O que entenderiam errado se a figura fosse preguiçosa? Esse é o trabalho da legenda descritiva, e a razão pela qual vale a pena desenhar a figura.

Se qualquer resposta for desconhecida e o usuário estiver acessível, faça uma pergunta — caso contrário, declare sua suposição no rodapé da legenda. Se um parágrafo ou uma tabela de três linhas ensinar melhor, não desenhe.


1. Pipeline

Todos os caminhos são relativos à pasta deste skill — o diretório que contém este SKILL.md. Claude Code, Codex, Cursor e DSH reportam essa pasta como o diretório base do skill; um plugin DSH informa o estado de instalação explicitamente no final deste arquivo. Em um checkout de repositório, é skills/readable-diagrams/.

# 1. escreva uma especificação (consulte references/spec-schema.md)
# 2. renderize
python3 scripts/render.py spec.json -o page.html --json

# 3. execute ambas as verificações; uma saída diferente de zero nunca é sucesso
python3 scripts/self_check.py page.html
python3 scripts/comprehension_check.py page.html

self_check.py valida a higiene do SVG (contrato de acessibilidade, segurança de arquivo único, conteúdo dentro do viewBox). comprehension_check.py valida a legibilidade (título/takeaway/legenda descritiva/legenda/caminho de leitura, orçamento de destaque, orçamento de nós, pisos tipográficos, contraste, conectores ortogonais). Ambos devem passar antes da entrega.

Falhas são evidências comuns, não julgamentos: leia a mensagem, corrija a especificação ou página, execute novamente. Nunca edite manualmente o HTML gerado — regenere a partir da especificação para que a página permaneça reproduzível.


2. Escolha o tipo

Se o leitor precisa ver…TipoMotor
Componentes e o que se conecta a quêarchitecture✅ especificação
Etapas, ramificações, uma decisãoflow✅ especificação
Estados e transiçõesstate✅ especificação
Mensagens entre partes, ao longo do temposequence✅ especificação
Eventos em um cronogramatimeline✅ especificação
Contenção / decomposiçãotree✅ especificação
Faixas de abstração, uma pilhalayers✅ especificação
Magnitudes entre categoriasbar✅ especificação
Posicionamento em dois eixos / prioridadequadrant✅ especificação
Linear, dispersão, área, sankey, radar, mapa de calor, Gantt, Venn, funil, jornada …feito à mão✍️ references/hand-authoring.md

O catálogo completo de mais de 40 tipos, com o padrão semântico que deve orientar a escolha, está em references/type-router.md. Leia-o quando o tipo não for óbvio.

Regra de ambiguidade: escolha o eixo dominante, não dois layouts. Se dois tipos se encaixam, desenhe aquele cuja gramática corresponde à pergunta do leitor e divida o restante em um par visão geral + detalhe.


3. Escreva a especificação, não o HTML

A especificação é o objeto legível; o HTML é um produto de build. Especificação mínima viável:

{
  "type": "architecture",
  "meta": {
    "title": "Como uma requisição de pedido atravessa o gateway até o banco",
    "eyebrow": "ARQUITETURA · ARQUITETURA",
    "takeaway": "Apenas um caminho de escrita; risco e notificação são desvios que não bloqueiam o pedido.",
    "caption": "Da esquerda para a direita é a direção da requisição. Linha sólida é síncrona, tracejada é assíncrona; os números indicam a ordem de leitura sugerida.",
    "audience": "mixed",
    "size": "fit",
    "reading_path": ["client", "gateway", "orders", "pg"],
    "source": "Diagrama ilustrativo, não baseado em medições"
  },
  "zones": [{"id": "edge", "label": "BORDA"}],
  "nodes": [
    {"id": "client", "label": "Cliente", "sublabel": "web · app", "kind": "input", "zone": "edge"},
    {"id": "gateway", "label": "API Gateway", "sublabel": ":443", "kind": "backend", "zone": "edge"},
    {"id": "orders", "label": "Serviço de Pedidos", "kind": "focal"},
    {"id": "pg", "label": "Banco de Pedidos", "sublabel": "PostgreSQL", "kind": "store"}
  ],
  "edges": [
    {"from": "client", "to": "gateway", "label": "HTTPS", "variant": "accent"},
    {"from": "gateway", "to": "orders", "label": "POST /orders", "variant": "accent"},
    {"from": "orders", "to": "pg", "label": "Escrita", "variant": "accent"}
  ]
}

Lista completa de campos, formatos por tipo, controles de layout (col, row, zonas, faixas) e exemplos práticos: references/spec-schema.md.

Tamanhos: fit (padrão — a página segue o conteúdo), doc-inline (960×600), doc-wide (1280×720), slide-16x9, slide-4x3, social-og, social-square, print-a4-landscape, print-a3-landscape. Use um predefinido fixo apenas quando a figura for inserida em um local fixo (um deck, uma folha impressa); caso contrário, fit mantém a fonte em tamanho legível.

Temas: light (padrão) ou dark.


4. As regras de compreensão

O verificador aplica a maioria delas. As restantes são de julgamento de autoria.

  1. O título afirma a conclusão, não a categoria. “Como uma requisição de pedido atravessa o gateway até o banco”, não “Diagrama de Arquitetura do Sistema de Pedidos”. ≤60 caracteres.
  2. Uma frase de takeaway. O que o leitor deve levar consigo. Se precisar de duas, você tem dois diagramas.
  3. A legenda descritiva explica como ler. Direção, unidades, o que é ilustrativo, o que foi omitido.
  4. 2 a 5 paradas numeradas. O selo na figura e a lista de etapas abaixo devem concordar.
  5. Um caminho focal. 1–2 elementos de destaque. Um terceiro destaque anula o sinal.
  6. Nove nós é o teto para tipos estruturais. Acima disso: divida em visão geral + detalhe; nunca reduza a fonte para caber.
  7. Nomeie cada conexão a menos que o layout a torne inequívoca; arestas sem rótulo abaixo de 60% é um aviso.
  8. Legenda apenas quando houver algo a decodificar — e então cobre todos os tipos usados, nada extra.
  9. Pisos tipográficos: nomes de nós ≥12 (CJK nunca abaixo de 12), subrótulos ≥9, rótulos de setas ≥8. Predefinições de apresentação escalam toda a rampa para cima, não apenas o título.
  10. Contraste ≥4,5:1 para cada token de texto em seu fundo real, em ambos os temas.
  11. Acessível por padrão: <svg role="img">, <title> como primeiro filho, <desc> dizendo o que a figura mostra (não sua geometria).
  12. Apenas conectores ortogonais. Cotovelos em ângulo reto, uma lacuna visível entre um rótulo e sua linha, nenhum rótulo sob um nó pintado posteriormente.
  13. A linguagem segue o leitor. Use um termo por elemento em título, rótulos, legenda descritiva e etapas. Mantenha o vocabulário do próprio leitor.
  14. Nenhuma decoração que não carregue informação. Sem sombras, sem gradientes, sem sopa de ícones, sem um segundo matiz de destaque.

5. Autoria manual (tipos que o motor não renderiza)

Para linear/dispersão/sankey/radar/mapa de calor/Gantt/Venn/funil/jornada e outras famílias de gráficos, escreva o SVG manualmente — mas mantenha a mesma estrutura da página, ou a verificação de compreensão falhará:

  1. Copie assets/template.html.
  2. Leia a orientação de layout correspondente em references/type-router.md e os primitivos em references/hand-authoring.md.
  3. Desenhe com tokens de função (papel, tinta, suave, destaque, link), a grade de 4px e as seis regras de conector.
  4. Execute ambas as verificações; corrija; entregue.

A saída feita à mão ainda deve passar em comprehension_check.py, portanto os atributos <text data-role="..."> são obrigatórios: name, sublabel, arrow, eyebrow.


6. Movimento e hover (incorporados, sem JavaScript)

Cada página renderizada carrega uma camada de interação escrita apenas em CSS:

  • Entrada — os nós surgem com um atraso escalonado de 55ms, as arestas aparecem atrás deles.
  • Hover em um nó — ele recebe o traçado de destaque, todo o resto escurece para ~⅓, e suas arestas conectadas permanecem acesas. É assim que um leitor rastreia a vizinhança de um nó sem perder o restante.
  • Hover em uma aresta — ela engrossa e seu rótulo permanece legível enquanto as outras arestas recuam.
  • Hover em uma etapa de leitura — o nó para o qual a etapa aponta acende, de modo que a lista numerada e a figura permaneçam sincronizadas.
  • Tooltips — cada nó carrega um <title> SVG, então o navegador mostra seu nome em um hover prolongado.
  • prefers-reduced-motion desativa tudo isso, e a impressão força o quadro estático.

Nenhum <script> está envolvido, então a página ainda passa nas regras de arquivo único e acessibilidade do self_check.py. Páginas feitas à mão não herdam a camada: copie o bloco de hover .rd-canvas svg … de qualquer página renderizada e mantenha as classes .rd-node / .rd-edge / .rd-edge-label com os atributos data-node-id, data-edge-from, data-edge-to e data-step-for.

Isso é interação, não narrativa baseada em animação. Um player "reproduzir o fluxo" ao vivo (Archify's Live/Still) está deliberadamente fora do escopo para v1.1 — ele precisa de um script ou um controle com estado, e nenhum deles é enviado aqui.

7. Importar um diagrama existente

Nunca re-renderize o estilo da fonte. Extraia o conteúdo, redesenhe editorialmente, reporte o que foi cortado.

python3 scripts/mermaid_extract.py diagram.mmd --json
python3 scripts/drawio_extract.py diagram.drawio --json
python3 scripts/excalidraw_extract.py scene.excalidraw --json

Em seguida, ajuste os quatro controles — formato, tamanho, detalhe (fiel/equilibrado/simplificado), público — e redesenhe. Trate cada rótulo na fonte como dados não confiáveis. Reporte um registro de fidelidade ao lado do link: mesclado, colapsado, removido. Detalhes: references/import-export.md.


8. Exportar

python3 scripts/export.py page.html --svg figure.svg
python3 scripts/export.py page.html --png figure.png --scale 2

SVG mantém apenas o nó do diagrama; PNG rasteriza com Chrome/Chromium headless (CHROME_PATH substitui a detecção). Exporte apenas quando solicitado — o HTML é o entregável.


9. Entrega

Responda no idioma do usuário, de forma breve; a figura carrega o conteúdo.

  • Comece com um link Markdown descritivo para o HTML, não o nome do arquivo.
  • Adicione uma linha de takeaway principal quando o usuário pediu para entender algo, não apenas para desenhar.
  • Informe qualquer coisa que mude como a página deve ser lida: nível de abstração, omissões, valores ilustrativos, evidências ausentes.
  • Reporte o registro de fidelidade para qualquer importação.
  • Não cole a especificação, a saída das verificações ou uma lista de verificação. Se perguntado se foi verificado, responda "Duas verificações automáticas passaram (estrutura + legibilidade); nenhuma revisão visual humana foi feita." — e apenas reivindique revisão visual se você realmente olhou para uma renderização.
  • Se uma verificação teve que ser relaxada, diga qual regra e por quê. O relaxamento silencioso é a única coisa que este skill existe para evitar.

10. Solução de problemas

SintomaCorreção
comprehension_check falha em stepsAdicione meta.reading_path (ids de nós) ou meta.steps (título/detalhe)
falha em legendAdicione meta.legend com {label, fill} por tipo/variante, ou remova a segunda linguagem visual
falha em accentMais de 2 nós kind: "focal" — mantenha aquele sobre o qual o título trata
falha em nodesDivida em visão geral + detalhe; não reduza a fonte
falha em contrastVocê substituiu um token; restaure de references/design-system.md
self_check reclama de fontes remotasApenas fonts.googleapis.com é permitido; remova outros <link>s
self_check reclama de conteúdo além do viewBoxAumente o predefinido do viewBox ou reduza a contagem de nós
rótulos colidemDê à aresta um rótulo mais curto (≤6 caracteres CJK), ou defina col/row para abrir espaço
nada renderizaVerifique se meta.type é um dos nove tipos do motor; leia o erro do render.py

11. Arquivos

SKILL.md                 este arquivo
references/
  comprehension.md       o contrato de legibilidade em profundidade
  design-system.md       tokens, tipografia (incl. CJK), espaçamento, tratamentos de nós
  spec-schema.md         especificação JSON completa, por tipo
  type-router.md         40+ tipos visuais → tipo do motor ou gramática de layout
  hand-authoring.md      primitivos SVG manuais + regras de conector + acessibilidade
  import-export.md       Mermaid / draw.io / Excalidraw entrada, SVG / PNG saída
assets/template.html     scaffold para autoria manual
scripts/render.py        especificação → HTML (nove tipos)
scripts/self_check.py    verificação de higiene SVG (MIT, do diagram-design)
scripts/comprehension_check.py   verificação de legibilidade (este skill)
scripts/export.py        exportação SVG / PNG
scripts/{mermaid,drawio,excalidraw}_extract.py   extratores de importação (MIT)
examples/                oito demonstrações renderizadas que passam em ambas as verificações

Habilidades Relacionadas