Produto próprio · Design e código

UseCtt

Um report editorial que transforma o histórico de treinos do Strava numa maratona, do KM 0 à chegada.

Papel
Produto ponta a ponta: conceito, design system e código
Ferramentas
Figma, Figma Make, Claude, Next.js, Supabase, API do Strava
Entrega
Landing, página do atleta, card do Stories e design system
Status
No ar, em beta
Capa do projeto: a marca CTT com a stack Strava API, Supabase, Next e Figma, e ao lado o site no celular com o título Seu Strava, editado em 42 km.

Contexto

O CTT nasceu como um painel pessoal ligado ao Strava: gráfico de volume, gráfico de ritmo, tabela de recordes. Funcionava, mas não dizia nada que o próprio Strava já não dissesse. Era mais um dashboard.

A pergunta que mudou o projeto foi o que seria útil para um corredor que gosta de dados. A resposta não era mais um gráfico: era contexto. Quando o hábito começou, quando o volume subiu, onde a forma caiu e quanto tempo levou para voltar. Coisas que ficam espalhadas num feed que ninguém relê.

O projeto também tinha um segundo objetivo: pôr em prática o fluxo entre Figma e Claude para gerar código e levar um produto até produção com dados reais, não com uma API de exemplo.

Do painel à edição

O primeiro protótipo no Figma Make já tinha uma boa direção visual, mas continuava organizado por tipo de gráfico: um bloco de volume, um de forma, um de recordes. A versão final é organizada pela história. Cada seção é um trecho da prova, e o gráfico só aparece quando ajuda a contar aquele trecho.

Primeiro protótipo: título Seu Strava, editado, seguido de um número gigante de quilômetros e um gráfico de barras semanais.
Antes: organizado por gráfico
Versão final: título Seu Strava, editado em 42 km, com uma foto de corrida anotada com horário, quilometragem e tempo da maratona.
Depois: organizado pela história

A página é uma maratona

A leitura acompanha uma prova de 42 km. Uma barra no topo mostra em que quilômetro você está, e cada capítulo abre com um marcador de KM. Só dois capítulos saem do fundo claro: o muro, em preto, e a chegada, em ultramar.

Os textos não foram escritos para mim: saem dos dados. Cada capítulo escolhe o próprio fato a partir dos dados de quem conectou: o ano em que o hábito começou, o ano de maior volume, a maior queda de forma e a melhor maratona. Se um atleta não tem dado suficiente para um capítulo, ele simplesmente não aparece.

  1. KM 0 Largada
  2. KM 5 A primeira corrida
  3. KM 10 O hábito
  4. KM 21 O volume
  5. KM 21,1 Os recordes
  6. KM 30 O muro
  7. KM 42 A chegada
  8. KM 42,2 Pós-prova
Documentação do marcador de KM nos três tons: claro, tinta e ultramar, com o título Três recordes em oito semanas.

O muro dos 30

Na maratona, o muro é aquele quilômetro, perto do 30, em que o corpo cansa e quase todo mundo pensa "será que vai dar?". No report, ele é o trecho em que a forma mais caiu. No meu caso, a lesão de 2025 que me tirou da Maratona do Rio.

Para achar esse trecho sem depender de ninguém marcar nada, a forma é calculada a partir da frequência cardíaca de cada treino: a média da carga de 42 dias vira a forma, a de 7 dias vira a fadiga. O capítulo procura a maior queda de forma dentro de 12 semanas, mostra de quanto para quanto ela caiu e quanto tempo levou para voltar.

Capítulo KM 30 em fundo preto: Todo ciclo tem um muro, a forma caindo de 95 para 38 e o gráfico de forma e fadiga. Padrão do gráfico de forma e fadiga no Figma, com as maratonas marcadas, a pausa em faixa cinza e a anotação à mão aqui no ponto mais baixo.

O projeto em números

Um sistema pequeno o bastante para caber na cabeça, e todo documentado antes de virar código.

capítulos gerados por dados
7
cor de acento
1
componentes documentados
16
vagas no beta
10

Cor e tipografia

Papel, tinta e um ultramar. A referência veio de marcas de corrida como Bandit e On: muito fundo claro, texto quase preto e um único acento. A primeira versão era laranja, e foi a primeira coisa que saiu, porque laranja lembra o próprio Strava. O ultramar ficou no lugar e ganhou uma regra: ele marca o que importa (recorde, pico, prova, estado ativo) e nunca decora.

As cores são tokens por função, como fundo, texto, borda e gráfico. Por isso o mesmo componente funciona no capítulo claro, no preto do muro e no ultramar da chegada sem precisar de uma versão para cada um.

Números grandes, texto calmo. Barlow Condensed em caixa alta para números e títulos: é a imagem da página, como um número de peito. Archivo para ler, Geist Mono para rótulos e eixos, e Caveat só nas anotações à mão, como "quase todo dia" escrito sobre a foto.

A ideia inicial era usar a própria Archivo mais estreita nos títulos, pelo eixo de largura. Só que esse ajuste não passava do Figma para o código com fidelidade, e o sistema precisava ser o mesmo nos dois lados. A troca pela Barlow Condensed resolveu isso sem perder o caráter.

Documentação de cor no Figma: tokens de fundo, texto, borda, gráfico e calendário, cada um com hex e valor de origem.
Tokens de cor por função
Escala tipográfica no Figma, do Display/Hero com 7.727 até a nota manuscrita quase todo dia, com fonte, tamanho e entrelinha de cada estilo.
Escala tipográfica

O dado no centro

Os recordes dividem uma mesma escala de ritmo, então dá para comparar as quatro distâncias de relance. O recorde mais recente ganha o bloco em ultramar, com o tempo anterior riscado logo acima.

A chegada é o único capítulo inteiro em ultramar: o tempo da maratona em tamanho de pôster, as 16 semanas de preparação em barras e a diferença para a prova anterior.

Capítulo dos recordes: a maratona em destaque em ultramar, com 3:26:47 e o tempo anterior riscado, ao lado de 5K, 10K e 21K.
Capítulo KM 42 em ultramar: o tempo 3:26:47 em tamanho grande, as barras das 16 semanas de preparação e a foto da chegada.

Uma restrição que virou produto

No modo atual, a API do Strava permite só 10 atletas conectados ao app. Em vez de esconder o limite atrás de um erro, ele virou parte da página: um contador de vagas que mostra quantas pessoas estão testando, com os estados de beta aberto, últimas vagas e lotado.

Quando as dez vagas estão ocupadas, a conexão abre uma fila de espera por e-mail. O número vem do banco em tempo real, e quem desconecta a conta libera a vaga para o próximo.

Os quatro estados do componente de vagas: beta aberto com 9 vagas, últimas vagas com 2, lotado com 23 na fila e a confirmação você é o número 24.

Um treino vira uma capa

Depois da prova, o atleta gera um card 9:16 para o Instagram, em papel, tinta ou ultramar. Os números ficam entre 12% e 88% da altura, longe das áreas que o próprio Instagram cobre com a interface.

Três versões do card do Stories, em papel, tinta e ultramar, com o tempo da maratona 3:26:47 e as barras das semanas de preparação.

Do Figma ao código

Figma e Claude trabalhando juntos, com o design system como fonte da verdade.

Resultado

O CTT deixou de ser um painel genérico e virou um produto com ponto de vista: qualquer corredor conecta o Strava e recebe a própria história, contada como uma prova, com um card pronto para compartilhar.

Está no ar em beta, com dez vagas. Se você corre, conecte sua conta e me conte o que achou.

Contato

Gostou do que viu? Vamos conversar.