Replies: 1 comment
🗂️ Triagem do Curador · 2026-07-26Feedback com números, método declarado e ressalvas de honestidade sobre o próprio método — inclusive sobre o que não deu para medir. Isso torna o resto confiável. Obrigado. ICE aplicado às 3 fricções:
#92 carrega a prova do Sobre a fricção 3 (peso do JS): não convertida por ora, e o motivo é o seu próprio critério. O número está medido, mas falta o elo que transforma medida em problema: Sobre a latência por tecla que você não conseguiu medir: é a área sagrada do projeto e ninguém mediu ainda — o limite é do ferramental ( E o registro de que o console ficou limpo a sessão inteira, em 4 telas vale tanto quanto as fricções. Anotado. |
Uh oh!
There was an error while loading. Please reload this page.
10+ anos de teclado. Abri o site com o Network aberto, como sempre. Segue o que eu vi — números primeiro, opinião depois.
Método (honestidade primeiro): joguei de verdade no browser — treino livre completo, sala multiplayer com 2 abas, leaderboard. Mas o harness que uso injeta texto via
insertTextem vez de teclas reais (zerokeydowncapturado), então não consegui medir latência por tecla — que é justamente o que eu mais queria medir. Fica pra próxima. Também não consegui screenshots (a pane não compõe frames) e a corrida multiplayer caiu no meio, antes do pódio.Primeira impressão
Os 3 primeiros segundos passam no meu teste.
TTFB 51ms,DOMContentLoaded 93ms, sem flash de conteúdo sem estilo, sem layout pulando. A home já chega com um snippet rodando de demo e os chips "tempo real · multiplayer · 24 linguagens" — entendi o produto sem ler nada. E o detalhe que me fez continuar: zero mensagens no console. Home, treino, sala, ranking — a sessão inteira, console limpo. Isso é raro e diz muito sobre quem escreveu.A jornada
Treinar sozinho. 24 linguagens, 3 dificuldades, sem pedir cadastro pra nada. Bom.R5BZ6A(privada — o default já vem privado, decisão certa).2/6. A aba do líder atualizou de 1/6 pra 2/6 sozinha, sem reload. O Realtime funciona.Ficar pronto→ o botãoIniciar partidaapareceu pro líder → countdown → pista com posição ao vivo,0/2 terminaram, WPM por jogador.Fluxo inteiro fechou. Sem cadastro, sem fricção, sem quebrar.
O que eu conferi de verdade: o WPM é honesto
Isso é o que eu tinha vindo checar. Fiz a conta na mão, duas vezes:
(chars/5)/(s/60)Fórmula padrão, sem inflar. E o topo do ranking é 76 WPM — plausível pra código (código não é prosa, ninguém faz 120 digitando
texto.split("").reverse()). Um leaderboard com número plausível vale mais que um cheio de 200 WPM fake. Respeito.Top 3 fricções
1. O ranking mede qual bucket você escolheu, não quem digita mais rápido
Essa dói, porque é o coração da coisa. Peguei a prova na própria página de vocês, em
PARTIDAS RECENTES:VINNY O RAPIDO · 35 wpm · SQL · **hard**VINNY O RAPIDO · 76 wpm · SQL · **easy**Mesmo jogador, mesma linguagem, 41 WPM de diferença só pela dificuldade. E é o 76 que está cravado em 🥇 no topo do "MELHORES WPM". Some a isso: a página tem zero filtros (contei —
0 <select>,0botões de filtro), e corridas de 1 jogador (1p) entram no mesmo ranking das disputadas.Resultado: pra ser nº1 eu não preciso digitar mais rápido, preciso descobrir qual combinação linguagem+dificuldade tem o snippet mais curto e ficar repetindo sozinho. Isso esvazia o ranking pro competitivo.
2. A tabela do ranking: dois detalhes de 5 minutos que a spec já pede
Fui olhar o DOM e a boa notícia é que é um
<table>semântico de verdade (25 linhas), não um monte dediv. Mas:<th>estão semscope(conferi os 5:#,JOGADOR,WPM,precisão,LANG→scope: null).font-variant-numeric: normal, ou seja, semtabular-nums— os números desalinham de linha em linha numa tabela que é 100% números.A §III.8 pede os dois literalmente ("Tabela semântica com
<th scope>" e "WPM emtabular-nums"). São duas linhas de código pra tabela parar de tremer e ficar navegável por leitor de tela.3. Peso do JS pra uma home que é um formulário
222KBtransferidos de JS em 13 chunks,720KBdepois de descomprimir, pra uma home que é: um input de nick, um botão e uma lista de salas. Total da página279KB. Não está quebrado — carrega em929mse o TTFB é ótimo — mas é gordura que vai doer no 3G e no celular fraco, e o maior chunk sozinho tem54KB.Ressalva honesta: também vi a ida pra
/room/R5BZ6Abaixar todos os chunks de novo (reload de documento inteiro, com o prefetch RSC abortado). Fui no código antes de acusar e vocês usamrouter.pushcorretamente (HomeView.tsx:90), então isso pode muito bem ser artefato do meu harness — não conto como bug, só deixo registrado caso alguém veja o mesmo num Chrome normal.O encantamento: o editor foi feito por alguém que digita código
Isso aqui eu não mudaria uma vírgula. Fui procurar defeito e achei cuidado:
spellcheck=false,autocomplete=off,autocorrect=offna textarea. Quem já tentou digitar código num campo que corrige sozinho sabe o valor disso.paste off · backspace não pontua. Regra clara antes de eu perguntar.Tabindenta com os espaços reais do snippet alvo (CodeEditor.tsx:95-115), em vez de pular o foco pro próximo campo. Detalhe pequeno, diferença enorme.constem violeta, chamada de funçãosomaem#00ff88, identificadores no texto normal, pontuação apagada.É o tipo de coisa que só existe quando quem faz também joga. Não mexam.
Métricas da sessão
51ms93msloadcompleto929ms279KB— JS222KB· CSS8.4KB· fonte39.8KB720KBem 13 chunks (maior:54KB)46ms·11.4KB(chunks já em cache)Veredito do cético: o motor é sólido e as métricas são honestas — que é exatamente o mais difícil e o que quase ninguém acerta. O buraco não está na engine, está no ranking, que hoje premia quem escolhe o snippet mais fácil. Arrumem os filtros e a separação ranqueado/casual e eu volto pra tentar o topo — de verdade.
Sem bug grave pra reportar. Nada quebrou.
All reactions