Skip to main content

designsys

Extrai o design system completo de um site ao vivo — inclusive atrás de login — ou de um repositório local.

Um comando, e você recebe um PDF pronto para circular, os design tokens no padrão W3C, CSS vars, um tailwind.config.js colável, um guia visual navegável e um diagnóstico de acessibilidade e consistência.

CI PyPI Python 3.11+ Licença MIT Testes

Terminal: designsys extrai o design system da stripe.com em três páginas, lista os arquivos gerados e roda o diagnóstico de acessibilidade

designsys url https://stripe.com --pages 5        # um site público
designsys url https://app.suaempresa.com --login  # um SaaS atrás de login
designsys repo ~/dev/meu-projeto                  # um repositório local
designsys audit designsys-stripe.com-2026-08-13   # o diagnóstico

O que sai disso

Capa do PDF gerado Resumo executivo no PDF
Tema claro e escuro pareados Diagnóstico de acessibilidade e consistência

Uma pasta por extração:

arquivo o que é
design-system.pdf O documento completo: capa, resumo executivo, sumário com números de página, paleta, tipografia, escalas, componentes, temas, diagnóstico e apêndice.
DESIGN-SYSTEM.md As regras do sistema em forma acionável, escritas para um agente de código (Claude Code, Cursor) seguir dentro do seu projeto.
tokens.json Design tokens no padrão W3C DTCG ($value/$type).
variables.css Os mesmos tokens como CSS custom properties, com bloco de tema escuro e clamp() fluido.
tailwind.config.js theme.extend pronto para colar.
tokens.studio.json Formato do plugin Tokens Studio, para levar ao Figma — claro e escuro como modes.
style-guide.html Guia navegável; clique numa cor e o hex vai para a área de transferência.
components.json Estilos computados dos componentes, com :hover, :focus e :active.
raw.json Frequência e procedência de cada valor — para auditar qualquer decisão da extração.
assets/ · screenshots/ Logo, ícones (com sprite.svg), fontes, imagens e capturas de tela.

Instalação

pipx install designsys
designsys doctor --fix     # baixa o Chromium do Playwright

São dois comandos porque o pip não executa nada depois de instalar: o Chromium que a ferramenta usa para renderizar as páginas vem do Playwright, e é o doctor --fix que o baixa. Sem ele, a instalação está completa mas a extração não roda.

Uma linha só

O instalador confere o Python, instala o pipx se faltar, instala a ferramenta e já baixa o Chromium:

curl -fsSL https://raw.githubusercontent.com/berodcdev/designsys/main/install.sh | bash

Se preferir ler antes de executar (boa prática com qualquer curl | bash):

curl -fsSL https://raw.githubusercontent.com/berodcdev/designsys/main/install.sh -o install.sh
less install.sh && bash install.sh

Direto do repositório

Para acompanhar o que ainda não saiu em versão:

pipx install git+https://github.com/berodcdev/designsys.git
designsys doctor --fix

Para desenvolver

git clone https://github.com/berodcdev/designsys.git
pipx install --editable ./designsys
designsys doctor --fix

Python 3.11+. Testado em macOS e Linux. Para atualizar: pipx upgrade designsys.

Comandos

Menu da ferramenta no terminal
comando o que faz
designsys url <URL> Extrai de um site ao vivo, com JavaScript renderizado.
designsys repo [caminho] Extrai de um repositório local (padrão: diretório atual).
designsys audit <pasta> Diagnóstico de uma extração: acessibilidade, consistência, assinatura. Grava audit.md.
designsys open <pasta> Abre o PDF (ou o guia navegável, com --html).
designsys pdf <pasta> Regera o PDF a partir do raw.json, sem repetir a extração.
designsys doctor [--fix] Diagnostica e conserta o ambiente.

Opções do url

opção efeito
--login Autentica antes de extrair (prompt seguro; a senha nunca é ecoada).
--user / --pass Credenciais na linha de comando. --pass fica no histórico do shell — prefira o prompt.
--pages N Teto de páginas internas a visitar (padrão 8).
--path /rota Rota específica a visitar depois do login (repetível).
--out <dir> Pasta de saída (padrão ./designsys-<domínio>-<data>/).
--exhaustive Visita todas as páginas, mesmo as que não trazem token novo.
--no-dark Não tenta capturar o tema escuro.
--no-viewports Não recoleta em mobile/tablet (extração mais rápida).
--no-assets · --no-pdf Pula o download de assets · não gera o PDF.
--headed Abre o navegador visível (útil para 2FA e captcha).
--insecure Aceita certificado TLS inválido. Só em ambiente interno de confiança.
--verbose Detalhes e tracebacks.

Login

O que torna a ferramenta útil em SaaS real. Funciona em camadas, da mais automática para a manual:

  1. Sessão salva — cookies (inclusive os de sessão, sem expiração) e localStorage ficam em ~/.designsys/profiles/<domínio>/ e são reinjetados. Se a sessão ainda vale, o login é pulado.
  2. Usuário e senha — o formulário é detectado por heurística, inclusive em fluxos de duas etapas (e-mail → avançar → senha).
  3. Código de uso único (OTP) — reconhece a tela de código, incluindo os seis quadradinhos de um dígito, pede o código no terminal e digita como uma pessoa faria. Vale também como 2FA depois da senha.
  4. Magic link — você copia o link do e-mail e cola no terminal; ele é aberto dentro da mesma sessão do Chromium, então a autenticação fica com a ferramenta (clicar no link no seu navegador normal não adiantaria).
  5. Manual — captcha, SSO ou qualquer coisa que o resto não resolva: o navegador abre visível e espera você entrar.

Como a sessão persiste, isso acontece uma vez por domínio.

Senha nunca é gravada em disco. O que persiste são os cookies — e um token de sessão vale tanto quanto a senha enquanto não expira. Trate ~/.designsys/profiles/ como material sensível: rm -rf ~/.designsys/profiles/<domínio>. Detalhes em SECURITY.md.

Mais a fundo em docs/login.md.

Além dos tokens

Listar valores é a parte fácil. O que a ferramenta faz com eles:

Tema claro e escuro. Três estratégias em ordem — prefers-color-scheme, classe/atributo na raiz (.dark, [data-theme]) e o botão de tema do próprio site — cada uma seguida de verificação objetiva. Se a página não muda de aparência, nada é gerado: nenhum token escuro é derivado por cálculo.

Escala responsiva. Remede em mobile (390px) e tablet (820px) e revela o que as media queries não dizem: h1: 36px → 48px → 96px. Vira clamp() interpolado entre os extremos medidos.

Diagnóstico. Contraste sobre pares texto/fundo reais (o fundo é o primeiro ancestral opaco, com a regra do WCAG para texto grande), componentes cujo :focus não muda nada visível, alvos de toque pequenos, valores fora da grade de espaçamento, cores usadas uma única vez com vizinha próxima, tokens declarados que ninguém referencia com var(), e divergências entre páginas.

Assinatura visual. Cinco eixos — densidade, forma, peso, saturação, temperatura — e uma frase: "Sistema compacto e anguloso, de tipografia regular, com paleta sóbria e fria."

Contexto. Qual kit de UI está por trás, com a evidência que sustenta a conclusão (acertou "Tailwind CSS v4, junto de Headless UI" no tailwindcss.com e "CSS próprio" na Stripe); o nome de cada cor — o declarado pelo site quando existe (--color-blue-500 → blue-500) e um derivado do matiz OKLCH quando não; e a origem das fontes, com alternativa livre para as comerciais (Söhne → Inter).

Uma regra orienta tudo isso: quando não é possível medir, o relatório omite em vez de estimar. Toda nota vem acompanhada das parcelas que a compõem, e o que não foi verificado não é pontuado.

Como funciona

Modo url. O Chromium carrega a página com JavaScript renderizado e percorre todos os elementos visíveis lendo getComputedStyle. As custom properties vêm do CSSOM; folhas bloqueadas por CORS são baixadas por HTTP e analisadas com tinycss2. Cores quase idênticas são agrupadas por distância perceptual em OKLab, e o representante de cada grupo é sempre um valor que existe de verdade no site — nunca uma média. Componentes são detectados por heurística e capturados também nos estados de interação.

Modo repo. Nada é executado: o tailwind.config.* passa por um parser tolerante de objetos JavaScript, e o CSS/SCSS/LESS por um parser de CSS. Também lê @theme do Tailwind v4, temas de styled-components/emotion e arquivos de tokens (DTCG, Style Dictionary, Figma Tokens), respeitando o .gitignore. Valores que dependem de execução aparecem como avisos, não como palpites.

Documentação

Contribuindo

Contribuições são bem-vindas. O CONTRIBUTING.md tem o essencial: como rodar, como testar (pytest -m "not browser" para o ciclo rápido) e o que se espera de um PR.

git clone https://github.com/berodcdev/designsys.git && cd designsys
python3 -m venv .venv && source .venv/bin/activate
pip install -e '.[dev]' && playwright install chromium
pytest

Aviso de uso

A ferramenta lê o CSS público de páginas que você tem o direito de acessar. Extrair o design system de um site não transfere direitos sobre marca, tipografia licenciada ou identidade visual: fontes comerciais continuam exigindo licença, e logotipo e marca são protegidos. Use para auditar o seu próprio produto, documentar um sistema que já é seu ou estudar — não para clonar a identidade de outra pessoa.

Licença

MIT — © 2026 Bernardo.


Desenvolvido por dev@bernardorodc.com

Metadata

Release files for designsys 0.3.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for designsys 0.3.0
File Size Uploaded
designsys-0.3.0.tar.gz 189.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for designsys 0.3.0
File Interpreter ABI Platform
designsys-0.3.0-py3-none-any.whl Python 3 none any Details

Total release size: 353.9 kB

Release files / designsys-0.3.0.tar.gz

Download URL designsys-0.3.0.tar.gz
Size 189.6 kB
Tags Source
SHA-256 checksum
How to use checksums
a60ceb2dc9fe3c7fbd0eb32ebdc47652bb20dce0ed5305dfb467da02d12bd5ad
BLAKE2b-256 checksum
How to use checksums
21054ae298fa233e0f38d351047e92386cda24ff01e15d3dd64ea629fdff7584
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 22, 2026.

Transparency log

Release files / designsys-0.3.0-py3-none-any.whl

Download URL designsys-0.3.0-py3-none-any.whl
Size 164.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
ea8bf81b0f989ae3e7a98895197455372a33d88a830ad3bf133de438554b992f
BLAKE2b-256 checksum
How to use checksums
d36c734998b16c393c6bd6c098bbb321b1053074c29eeb03b7250811f3111afb
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 22, 2026.

Transparency log

Release history Release notifications | RSS feed

0.3.1

2 release files

This release

0.3.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page