Erick · product & design engineer

PROJETO REAL · DESIGN SYSTEM, ACESSIBILIDADE E CÓDIGO

O link da bio era alugado. A audiência era nossa — e o dado, de ninguém.

a página final · desktop e celular

O Canaltech distribuía oito destinos por um Linktree. Funcionava como índice e falhava como produto: sem marca, sem estado, sem consentimento e sem um único evento de clique que voltasse para casa. Refiz como página própria — design system, acessibilidade, telemetria e um HTML único que o time publica sem build.

Sobre os números.

A página está pronta e testada, não publicada. Tudo o que está medido aqui é de construção — tokens, componentes, estados, cobertura de teste e peso. Não há dado de tráfego nem de conversão, e a seção 06 diz isso em vez de estimar.

CLIENTE

Canaltech

hub de links próprio

PAPEL

Design system

e design engineer

ENTREGAS

Design system · UI

HTML único · acessibilidade

FEITO COM

Claude Code ⇄ Figma via MCP

HTML, CSS e JS · Playwright

PERÍODO

2026 · solo

3ª geração da página

01 · O PROBLEMA

A página existia. A propriedade dela, não.

A bio manda a audiência para um Linktree: bom como índice, incapaz como produto. Oito destinos com o mesmo peso, e o clique ficava de fora.

3

gerações da mesma página; as duas primeiras alugadas

8

destinos concorrendo no mesmo peso visual

0

eventos de clique no analytics da própria casa

0

controle sobre consentimento, marca e estados

02 · ANTES E DEPOIS

A mudança não foi de layout. Foi de propriedade.

O mesmo objetivo — da bio até oito destinos — pelos dois caminhos. O que aparece no meio é tudo o que a página alugada não fazia de dentro.

antes · as duas gerações no Linktree

COMO ERA

Lista hospedada por terceiro, oito destinos com o mesmo peso e a marca reduzida a um avatar redondo. Sem faixa de campanha, sem estado de foco, sem rota de teclado. Consentimento e dado de clique ficavam com a plataforma, e qualquer ajuste dependia do painel de outra empresa.

Nenhum desses quatro últimos é resolvível de dentro da ferramenta. É o custo de alugar.

depois · a página própria

COMO FICOU

Uma página do Canaltech, com campo de marca no topo e hierarquia real: faixa de campanha, CTA, seções e oito destinos com pesos diferentes. Clique, newsletter e consentimento viram evento no analytics da casa.

É um arquivo. Sobe no domínio do Canaltech sem build, responde a hover, press, foco e teclado, e degrada sozinha se um asset faltar.

03 · RESTRIÇÕES

As regras que existiam antes do primeiro pixel.

Não era um projeto de tela livre. O que dava para fazer já estava cercado por quem publica, por onde publica e por quanto custa manter depois que eu sair.

Publicação

O time de dev publica, não constrói. Sem build, sem bundler, sem dependência: chega como arquivo pronto.

Hospedagem

Sem servidor de aplicação. Tem que funcionar como estático em qualquer lugar que o Canaltech já use.

Desempenho

O tráfego vem da bio, no celular, muitas vezes em rede ruim. Nenhuma requisição a terceiro — fonte inclusiva.

Privacidade

Consentimento é requisito, não enfeite. A página mede clique, então pergunta antes e guarda a resposta.

Resiliência

Se um asset faltar no deploy, a linha não pode quebrar. Todo ícone e imagem têm plano B no próprio HTML.

Campanha

A faixa de evento entra e sai sem tocar no layout, porque a votação tem data para acabar.

04 · DECISÕES DE PRODUTO

Quatro decisões que o frame estático não respondia.

O Figma entrega a página parada. Produto acontece no que ele não desenha: o que o botão faz sem destino, o que a página faz se o arquivo some.

as quatro decisões, na tela

01

Estados viraram regra. Onze regras derivadas dos próprios tokens — hover, press, foco, inválido, aceito e o toggle ligado.

02

O painel de consentimento foi construído do zero. O Figma só previa o botão; montei o diálogo modal, o foco preso, o ESC e a trava de rolagem.

03

Sem destino, o botão se declara desligado. Perde o href, vira aria-disabled e para de responder, em vez de virar âncora morta.

04

O grão do hero saiu como código. Reproduzido em CSS com feTurbulence — sem arquivo e sem requisição a terceiro.

05 · SISTEMA E ENTREGA

Dez componentes, 35 variantes, e nenhum hover para inventar.

O sistema não é paleta bonita: é o contrato que faz a próxima pessoa acertar o estado sem perguntar. Variável no Figma é custom property no CSS.

16

tokens de cor, com o mesmo nome no Figma e no CSS

11

regras de estado especificadas, não improvisadas

10

conjuntos de componentes · 35 variantes

176

asserções automatizadas em Playwright

Um arquivo. Zero dependência. Zero build.

O time recebe um index.html de 55 KB e uma pasta de assets. Abre no navegador, sobe em qualquer estático, não tem nada para instalar — porque quem publica não é quem constrói. A fonte vem do próprio repositório: nenhuma requisição sai para terceiro. Todo <img> tem um onerror que troca pelo sprite inline e mantém a linha de pé.

O sistema volta para o Figma.

O frame foi lido por MCP — nós, variáveis, tipografia, grade e assets, nada descrito de memória. O que saiu do código voltou como dois boards 16:9 neste mesmo arquivo. Num fluxo de mão única o Figma morre no handoff e vira imagem que desatualiza no primeiro ajuste; fechando o ciclo, o sistema do arquivo e o do HTML são o mesmo.

Board 01 · Fundações
Board 02 · Componentes

06 · MEDIÇÃO E HONESTIDADE

A página passou a responder perguntas que antes ninguém conseguia fazer.

Três eventos saem da página para o analytics do próprio Canaltech. Não é painel de vaidade: é saber qual destino paga a próxima pauta.

ct:link

id · href · label

Qual destino a audiência realmente usa, por posição na lista e por campanha no ar.

ct:newsletter

email

Quanto da audiência que vem de social vira base própria, sem intermediário.

ct:cookies-consentimento

escolha · audiencia · publicidade · data

Que fatia da base aceita medição — e o que pode ser atribuído com honestidade.

a página nas duas densidades

O que não está aqui.

Nenhum número de tráfego, clique ou conversão — a página está pronta e testada, não publicada. Quando subir, os três eventos acima passam a alimentar exatamente essas colunas, e aí o case ganha uma seção de resultado que hoje seria chute. Duas coisas ficaram conscientemente pendentes: sem dado de produção a hierarquia dos oito destinos é hipótese, a ser revista no primeiro mês; e não houve teste com leitor de tela real — só verificação de foco, rótulo, ordem de teclado e contraste.

07 · MAIS

Outros projetos

Disponível para trabalhar

Desenho, escrevo o código e digo o que não deu certo.

Treze anos de design, cinco deles no Canaltech entre design system, marketing e comercial. Se você tem uma superfície que precisa sair pronta e medida, e não especificada, me chama.

© 2026 Erick Teixeira

oerickteixeira@gmail.com · São Paulo

Erick · product & design engineer

PROJETO REAL · DESIGN SYSTEM, ACESSIBILIDADE E CÓDIGO

O link da bio era alugado. A audiência era nossa — e o dado, de ninguém.

a página final · desktop e celular

O Canaltech distribuía oito destinos por um Linktree. Funcionava como índice e falhava como produto: sem marca, sem estado, sem consentimento e sem um único evento de clique que voltasse para casa. Refiz como página própria — design system, acessibilidade, telemetria e um HTML único que o time publica sem build.

Sobre os números.

A página está pronta e testada, não publicada. Tudo o que está medido aqui é de construção — tokens, componentes, estados, cobertura de teste e peso. Não há dado de tráfego nem de conversão, e a seção 06 diz isso em vez de estimar.

CLIENTE

Canaltech

hub de links próprio

PAPEL

Design system

e design engineer

ENTREGAS

Design system · UI

HTML único · acessibilidade

FEITO COM

Claude Code ⇄ Figma via MCP

HTML, CSS e JS · Playwright

PERÍODO

2026 · solo

3ª geração da página

01 · O PROBLEMA

A página existia. A propriedade dela, não.

A bio manda a audiência para um Linktree: bom como índice, incapaz como produto. Oito destinos com o mesmo peso, e o clique ficava de fora.

3

gerações da mesma página; as duas primeiras alugadas

8

destinos concorrendo no mesmo peso visual

0

eventos de clique no analytics da própria casa

0

controle sobre consentimento, marca e estados

02 · ANTES E DEPOIS

A mudança não foi de layout. Foi de propriedade.

O mesmo objetivo — da bio até oito destinos — pelos dois caminhos. O que aparece no meio é tudo o que a página alugada não fazia de dentro.

antes · as duas gerações no Linktree

COMO ERA

Lista hospedada por terceiro, oito destinos com o mesmo peso e a marca reduzida a um avatar redondo. Sem faixa de campanha, sem estado de foco, sem rota de teclado. Consentimento e dado de clique ficavam com a plataforma, e qualquer ajuste dependia do painel de outra empresa.

Nenhum desses quatro últimos é resolvível de dentro da ferramenta. É o custo de alugar.

depois · a página própria

COMO FICOU

Uma página do Canaltech, com campo de marca no topo e hierarquia real: faixa de campanha, CTA, seções e oito destinos com pesos diferentes. Clique, newsletter e consentimento viram evento no analytics da casa.

É um arquivo. Sobe no domínio do Canaltech sem build, responde a hover, press, foco e teclado, e degrada sozinha se um asset faltar.

03 · RESTRIÇÕES

As regras que existiam antes do primeiro pixel.

Não era um projeto de tela livre. O que dava para fazer já estava cercado por quem publica, por onde publica e por quanto custa manter depois que eu sair.

Publicação

O time de dev publica, não constrói. Sem build, sem bundler, sem dependência: chega como arquivo pronto.

Hospedagem

Sem servidor de aplicação. Tem que funcionar como estático em qualquer lugar que o Canaltech já use.

Desempenho

O tráfego vem da bio, no celular, muitas vezes em rede ruim. Nenhuma requisição a terceiro — fonte inclusiva.

Privacidade

Consentimento é requisito, não enfeite. A página mede clique, então pergunta antes e guarda a resposta.

Resiliência

Se um asset faltar no deploy, a linha não pode quebrar. Todo ícone e imagem têm plano B no próprio HTML.

Campanha

A faixa de evento entra e sai sem tocar no layout, porque a votação tem data para acabar.

04 · DECISÕES DE PRODUTO

Quatro decisões que o frame estático não respondia.

O Figma entrega a página parada. Produto acontece no que ele não desenha: o que o botão faz sem destino, o que a página faz se o arquivo some.

as quatro decisões, na tela

01

Estados viraram regra. Onze regras derivadas dos próprios tokens — hover, press, foco, inválido, aceito e o toggle ligado.

02

O painel de consentimento foi construído do zero. O Figma só previa o botão; montei o diálogo modal, o foco preso, o ESC e a trava de rolagem.

03

Sem destino, o botão se declara desligado. Perde o href, vira aria-disabled e para de responder, em vez de virar âncora morta.

04

O grão do hero saiu como código. Reproduzido em CSS com feTurbulence — sem arquivo e sem requisição a terceiro.

05 · SISTEMA E ENTREGA

Dez componentes, 35 variantes, e nenhum hover para inventar.

O sistema não é paleta bonita: é o contrato que faz a próxima pessoa acertar o estado sem perguntar. Variável no Figma é custom property no CSS.

16

tokens de cor, com o mesmo nome no Figma e no CSS

11

regras de estado especificadas, não improvisadas

10

conjuntos de componentes · 35 variantes

176

asserções automatizadas em Playwright

Um arquivo. Zero dependência. Zero build.

O time recebe um index.html de 55 KB e uma pasta de assets. Abre no navegador, sobe em qualquer estático, não tem nada para instalar — porque quem publica não é quem constrói. A fonte vem do próprio repositório: nenhuma requisição sai para terceiro. Todo <img> tem um onerror que troca pelo sprite inline e mantém a linha de pé.

O sistema volta para o Figma.

O frame foi lido por MCP — nós, variáveis, tipografia, grade e assets, nada descrito de memória. O que saiu do código voltou como dois boards 16:9 neste mesmo arquivo. Num fluxo de mão única o Figma morre no handoff e vira imagem que desatualiza no primeiro ajuste; fechando o ciclo, o sistema do arquivo e o do HTML são o mesmo.

Board 01 · Fundações
Board 02 · Componentes

06 · MEDIÇÃO E HONESTIDADE

A página passou a responder perguntas que antes ninguém conseguia fazer.

Três eventos saem da página para o analytics do próprio Canaltech. Não é painel de vaidade: é saber qual destino paga a próxima pauta.

ct:link

id · href · label

Qual destino a audiência realmente usa, por posição na lista e por campanha no ar.

ct:newsletter

email

Quanto da audiência que vem de social vira base própria, sem intermediário.

ct:cookies-consentimento

escolha · audiencia · publicidade · data

Que fatia da base aceita medição — e o que pode ser atribuído com honestidade.

a página nas duas densidades

O que não está aqui.

Nenhum número de tráfego, clique ou conversão — a página está pronta e testada, não publicada. Quando subir, os três eventos acima passam a alimentar exatamente essas colunas, e aí o case ganha uma seção de resultado que hoje seria chute. Duas coisas ficaram conscientemente pendentes: sem dado de produção a hierarquia dos oito destinos é hipótese, a ser revista no primeiro mês; e não houve teste com leitor de tela real — só verificação de foco, rótulo, ordem de teclado e contraste.

07 · MAIS

Outros projetos

Disponível para trabalhar

Desenho, escrevo o código e digo o que não deu certo.

Treze anos de design, cinco deles no Canaltech entre design system, marketing e comercial. Se você tem uma superfície que precisa sair pronta e medida, e não especificada, me chama.

© 2026 Erick Teixeira

oerickteixeira@gmail.com · São Paulo

E-mail copiado