Pular para o conteúdo
Operating Intelligence 12 min de leitura

Painéis de e-commerce que qualquer pessoa consegue ler

Um painel bom responde à decisão em segundos, funciona para quem usa leitor de tela e deixa de esconder a informação atrás da cor.

AC

Alexandre Caramaschi

Founder da Brasil GEO, ex-CMO da Semantix (Nasdaq), cofundador da AI Brasil

Atualizado em 16 de junho de 2026

Este guia mostra como montar um painel de e-commerce que responde a uma decisão em segundos. Ele serve a quem olha os números da loja toda semana e sai da tela sem saber o que fazer.

Pense numa loja de calçados que vende no site, em marketplaces e na loja da rua. O dono abre o painel, vê seis gráficos coloridos e continua sem saber se a semana foi boa. Esse cenário acompanha o guia até o fim.

O teste de um bom painel é simples. Você olha por cinco segundos e responde: estamos bem ou mal, comparados com o quê, e o que mudou? A base visual dele está no guia de design system e CSS moderno.

O teste dos cinco segundos

Estamos bem ou malO valor responde como estamos.
Em relação a quêO bullet chart compara com a meta.
O que mudouO delta com seta e sinal.

Por que o painel começa pela pergunta que você precisa responder?

Porque o gráfico é o meio e a decisão é o fim. Pizza, velocímetro e 3D ocupam espaço e dizem pouco. A pizza obriga o olho a comparar ângulos, tarefa em que ele é ruim.

O velocímetro gasta um quadrante inteiro para mostrar um número que uma frase resolveria. A troca é direta: pizza vira barras, para comparar categorias, e velocímetro vira barra de meta, para comparar o feito com o alvo.

Que gráfico para qual pergunta

  • Sea pergunta compara categorias entre si
    entãobarras; a pizza obriga o olho a comparar ângulos, tarefa em que ele é ruim
  • Sea pergunta é meta vs realizado
    entãobullet chart; o gauge gasta um quadrante inteiro para um número
  • Sea resposta é um número só
    entãotexto no KPI card, com delta de seta e sinal
  • Seo gráfico existe só para mostrar volume de dados
    entãoele não pertence a um board executivo

Os três indicadores abaixo seguem essa regra. Cada um responde às três perguntas de uma vez. O valor diz como estamos, a seta com sinal diz o que mudou, e a barrinha diz em relação a qual meta.

Receita 30 dias

R$ 1,24 mi

▲ 8,2%
✓ Meta R$ 1,0 mi

Margem de contribuição

38%

▲ 2,1 p.p.
✓ Meta 35%

Ruptura de estoque

6,4%

▼ 1,9 p.p. Fora da meta
Percentual de SKUs sem saldo vendável. Acima da meta de 4%.

Como montar uma tabela de resultado que todo mundo lê?

Com uma tabela de verdade, números alinhados à direita e a variação marcada por cor, seta e sinal juntos. Essa tabela é a espinha de qualquer painel de resultado.

A tag <table> entrega acessibilidade de graça. O leitor de tela navega linhas e colunas, anuncia os cabeçalhos e liga cada número à sua métrica.

Grade de divs × tabela semântica

Grade de <div>s estilizados

  • Parece idêntica na tela
  • Muda para a tecnologia assistiva
  • Variância marcada só por cor

<table> semântica

  • O leitor de tela navega linhas e colunas e anuncia os cabeçalhos
  • Cada número fica associado à sua métrica
  • Variância com cor mais sinal e números à direita
Resultado vs meta no trimestre
Métrica Realizado Meta Variância (%)
Receita R$ 1.240.000 R$ 1.000.000 +24%
Ticket médio R$ 312 R$ 300 +4%
Conversão 1,8% 2,2% −18,2%
Ruptura de estoque 6,4% 4% +60%

A regra que não se negocia é manter a tabela de verdade no lugar de uma grade de caixas estilizadas. A grade parece igual na tela e fica muda para quem ouve a página. Veja o que torna a tabela acima legível:

<table>
  <caption>Resultado vs meta no trimestre</caption>
  <thead>
    <tr>
      <th scope="col">Métrica</th>
      <th scope="col">Realizado</th>
      <th scope="col">Meta</th>
      <th scope="col">Variância (%)</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th scope="row">Receita</th>
      <td class="num">R$ 1.240.000</td>
      <td class="num">R$ 1.000.000</td>
      <td class="num var-up">▲ +24%</td>
    </tr>
  </tbody>
</table>

São quatro decisões. Os cabeçalhos de coluna e de linha amarram cada célula ao seu rótulo. Os números ficam à direita, para o olho comparar a coluna inteira.

A variação carrega seta, sinal e cor juntos. E a cor vem de um tom claro o bastante para se ler no tema escuro, no lugar de um vermelho fechado que some no fundo preto.

As quatro decisões da tabela

  1. th scope="col" e th scope="row"Amarram cada célula ao seu cabeçalho.
  2. Números alinhados à direitatext-align: right permite comparar colunas de olho.
  3. Seta, sinal e cor juntosA variância nunca depende só da cor.
  4. Cor por token com contraste AAVerde e vermelho de luminosidade alta sobre o fundo escuro, em vez de um vermelho que some no dark.

Quando vale chamar uma biblioteca de gráficos?

Quando o gráfico precisa de uma linha do tempo com dezenas ou milhares de pontos, de interação ou de tipos mais complexos. Interação aqui é a caixinha de detalhe, o aproximar e o selecionar um trecho.

Para o indicador simples, a barra e a linha fina, o desenho feito à mão pesa menos e já basta. Acima desse limite, a biblioteca compensa. São seis opções em 2026, cada uma com o seu ponto forte.

SVG inline ou biblioteca

  • Seo gráfico é KPI card, bullet, sparkline ou barra simples
    entãoSVG inline, mais leve e suficiente
  • Sea série tem dezenas ou milhares de pontos, pede tooltip, zoom, brush ou tipos complexos
    entãobiblioteca; acima desse limite ela compensa

ECharts: o mais completo. Aguenta muitos dados e painéis cheios de gráficos.

import * as echarts from "echarts";
const chart = echarts.init(document.getElementById("vendas"));
chart.setOption({
  xAxis: { type: "category", data: ["Jan", "Fev", "Mar", "Abr"],
    axisLabel: { color: "#cbd5e1" } }, // rótulo com contraste AA, não o cinza padrão
  yAxis: { type: "value", axisLabel: { color: "#cbd5e1" } },
  tooltip: { trigger: "axis" },
  series: [{ type: "line", smooth: true, data: [820, 932, 901, 1290] }],
});

Chart.js: o caminho mais rápido para um gráfico decente, com poucos comandos.

import { Chart } from "chart.js/auto";
new Chart(document.getElementById("pedidos"), {
  type: "bar",
  data: { labels: ["Loja", "Marketplace", "PDV"], datasets: [{ label: "Pedidos", data: [540, 820, 210] }] },
  options: { scales: { x: { ticks: { color: "#cbd5e1" } }, y: { ticks: { color: "#cbd5e1" } } } },
});

Plotly: uso científico e financeiro. Já vem com aproximar, arrastar e exportar.

import Plotly from "plotly.js-dist-min";
Plotly.newPlot("receita", [{ x: ["Jan", "Fev", "Mar"], y: [820, 932, 901], type: "scatter", mode: "lines+markers" }],
  { font: { color: "#cbd5e1" }, margin: { t: 16 } });

visx: peças soltas para React. Você monta o gráfico pedaço por pedaço, com controle total.

import { scaleLinear } from "@visx/scale";
import { LinePath } from "@visx/shape";

const x = scaleLinear({ domain: [0, 3], range: [0, 320] });
const y = scaleLinear({ domain: [0, 1300], range: [160, 0] });
// <svg width={320} height={160}>
//   <LinePath data={pontos} x={(d) => x(d.i)} y={(d) => y(d.v)} stroke="currentColor" strokeWidth={2} />
// </svg>

Tremor: peças de painel prontas para React, já estilizadas. Serve para sair do zero rápido.

import { LineChart } from "@tremor/react";

<LineChart
  data={vendas}
  index="mes"
  categories={["receita"]}
  valueFormatter={(n) => `R$ ${n.toLocaleString("pt-BR")}`}
/>

uPlot: muito leve, feito para linhas do tempo enormes, com desenho quase instantâneo.

import uPlot from "uplot";
const opts = { width: 640, height: 240, series: [{}, { stroke: "#818cf8", label: "Sessões" }] };
new uPlot(opts, [tempos, valores], document.getElementById("trafego"));

A escolha depende do caso. O ECharts cobre a maioria dos painéis. O uPlot ganha quando o volume de pontos trava a tela. O Tremor acelera quem já trabalha em React, e o visx serve quem precisa de um gráfico sob medida. A régua completa está em como escolher a stack de frontend.

Seis bibliotecas e o ponto ótimo de cada uma

EChartsCanvas ou SVG; cobre a maioria dos dashboards e datasets grandes.
Chart.jsO caminho mais rápido para um gráfico Canvas decente, com API enxuta.
PlotlyCientífico e financeiro; zoom, pan e exportação prontos.
visxPrimitivas de baixo nível para React; gráfico sob medida, peça por peça.
TremorComponentes prontos para quem já vive em React e Tailwind.
uPlotUltraleve; ganha quando o volume de pontos é o gargalo.

Como o gráfico chega a quem usa leitor de tela?

Pelo par gráfico e tabela. O gráfico desenha formas, e forma nenhuma vira texto narrado. Então o desenho fica marcado como decorativo, com aria-hidden, e uma tabela com os mesmos dados fica escondida da vista pela técnica sr-only.

As barras abaixo trazem rótulo e valor visíveis, para que a informação dependa de mais coisas além da cor. Logo depois vem a tabela que só o leitor de tela percebe.

Gráfico só × gráfico mais tabela

Gráfico só

  • Formas que o leitor de tela não narra
  • Informação que depende só de cor
  • Rótulos de eixo no cinza claro padrão, que reprova no contraste

Gráfico mais tabela

  • SVG ou canvas com aria-hidden e tabela equivalente em sr-only
  • Rótulo e valor visíveis em cada barra
  • Cor dos ticks ajustada para passar AA nos dois temas
Pedidos por canal nos últimos 30 dias
Pedidos por canal nos últimos 30 dias, dados em tabela
CategoriaValor
Loja própria540
Marketplaces820
PDV físico210
Social commerce160

A técnica sr-only é um trecho de CSS que tira o elemento da tela sem tirá-lo da leitura. Ela faz o contrário de sumir com o elemento, e essa diferença é o ponto central.

.sr-only {
  position: absolute;
  width: 1px; height: 1px;
  padding: 0; margin: -1px;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  white-space: nowrap;
  border: 0;
}

Esconder com display: none o que precisa ser lido tira o conteúdo de todo mundo, inclusive de quem usa leitor de tela. A técnica sr-only esconde só da vista.

Dois erros aparecem sempre no código gerado por máquina. O primeiro é deixar o rótulo do eixo no cinza claro padrão da biblioteca, que some no fundo. Troque a cor por um tom que se lê nos dois temas.

O segundo é deixar a informação só na cor. Toda série, todo indicador e toda fatia precisa de rótulo, valor ou forma, para que quem enxerga cor de outro jeito continue lendo o painel.

Como saber se o seu painel está pronto?

Ele está pronto quando passa nestes cinco testes. Rode os cinco no painel da loja de calçados do começo, um por vez.

  • Nenhuma informação depende só de cor: todo indicador tem seta e sinal, toda categoria tem rótulo.
  • Cada gráfico tem a mesma informação em texto, escondida da vista e legível pelo leitor de tela.
  • Zero pizza, zero velocímetro e zero 3D: comparação em barras e meta em barra de alvo.
  • Rótulos e eixos se leem bem no tema claro e no tema escuro.
  • O painel se reorganiza no celular sem quebrar a leitura, cada bloco cuidando do próprio espaço.

Os cinco testes de um board pronto

  1. 1
    Nada depende só de corTodo delta tem seta e sinal, toda categoria tem rótulo.
  2. 2
    Alternativa em texto para cada gráficoEscondida com sr-only e legível por leitor de tela.
  3. 3
    Zero pizza, gauge ou 3DComparações em barras, meta vs realizado em bullet.
  4. 4
    Contraste AA nos dois temasRótulos e eixos legíveis no claro e no escuro.
  5. 5
    Reorganiza ao estreitar a janelaContainer queries em vez de pontos de quebra globais.

O que fazer hoje

Hoje, pegue o painel que você usa e aplique a régua. Troque cada pizza por barras e cada velocímetro por barra de meta. Dê a cada gráfico a sua tabela escondida.

Depois padronize as cores pelo guia de design system, tokens e CSS moderno. O dono da loja de calçados do começo abre o painel de novo. Em cinco segundos, ele sabe se a semana foi boa e o que fazer.

Aplicar a régua no painel de hoje

  1. Troque o gráficoQualquer pizza vira barras; qualquer gauge vira bullet.
  2. Adicione a tabela sr-onlyUma para cada gráfico do painel.
  3. Padronize as cores por tokensCom contraste AA, seguindo o guia de design system, tokens e CSS moderno.
  4. Amarre à estratégia e aos dadosMedição de visibilidade generativa (GEO) e data platform, CDP e resolução de identidade.

Perguntas frequentes

Porque os dois comunicam mal. A pizza obriga o olho a comparar ângulos, coisa que ele faz pior do que comparar comprimentos. O velocímetro gasta muito espaço para mostrar um número só. Troque pizza por barras e velocímetro por barra de meta.

Ele lê texto, e não formas. Por isso o padrão é gráfico mais tabela. O desenho fica marcado como decorativo, e uma tabela com os mesmos dados fica escondida da vista, disponível para quem ouve a página.

É um trecho de CSS que tira o elemento da tela sem tirá-lo da leitura. O conteúdo continua narrado pelo leitor de tela e deixa de ocupar espaço visual. O Tailwind já traz essa classe pronta.

Quando a série tem dezenas ou milhares de pontos, precisa de caixinha de detalhe, de aproximar ou de selecionar trecho, ou usa tipos complexos. Para indicador, barra e linha fina, o desenho à mão basta.

Troque o cinza claro padrão da biblioteca por uma cor que se lê no tema claro e no escuro. E garanta que toda informação tenha rótulo, valor ou forma, além da cor.

Para levar deste guia

  1. Comece pela pergunta que o painel precisa responder: estamos bem ou mal, comparados com o quê, e o que mudou.

  2. Troque pizza por barras e velocímetro por barra de meta. A leitura fica imediata e o espaço rende mais.

  3. Use a tabela de verdade do HTML, com números à direita e a variação marcada por cor, seta e sinal.

  4. Ponha ao lado de cada gráfico a mesma informação em tabela, escondida da vista e disponível para quem ouve a página.

  5. Desenhe à mão o gráfico simples. Chame a biblioteca quando houver muitos pontos, interação ou tipo complexo.

Formações gratuitas do portal de educação de Alexandre Caramaschi, fundador da Brasil GEO.

Leve a decisão para o seu contexto

Este guia dá o mapa. Os números são da sua operação. As calculadoras do portal transformam o argumento em conta feita com os seus dados.

Conteúdo curado por Alexandre Caramaschi, Founder da Brasil GEO, ex-CMO da Semantix (Nasdaq), cofundador da AI Brasil. Parte do portal GEO-Ecommerce, a serviço da operação Onclick.