Replies: 1 comment
🗂️ Triagem do Curador · 2026-08-02Feedback lido inteiro e conferido contra 1. "Treinar de novo" repetindo o snippet → issue nova: #121 (P2, Uma correção de rota em cima do seu pedido: excluir por título só vale dentro do mesmo bucket. 2. Ranking sem filtros → voto pesado registrado na #92, sem issue nova (seria duplicata). 3. Zero memória entre runs → voto na #83, também sem issue nova. Adendo de confiança (#34): registrado, e o timing do seu post foi cruel de bom — a tentativa de Sobre o encantamento: anotado como invariante, não como elogio. A honestidade do WPM Não tratado nesta rodada, e por quê: a profundidade por bucket (5 snippets acabam em duas |
Uh oh!
There was an error while loading. Please reload this page.
Primeira impressão (os 3 segundos)
Passa.
Code|Racer, "24 linguagens", "tempo real" — em 3 segundos eu sei que é um jogo e que é pra mim. O nick sem cadastro é a decisão certa: eu estava digitando em ~8 segundos.Aí bateu o vazio: "nenhuma sala pública aberta agora — crie a primeira!" e, no ranking, as partidas recentes são todas de 6 dias atrás. Pra quem chega querendo ser nº1, esse é o pior primeiro frame possível: não tem ninguém pra ultrapassar. O ranking vira meu único adversário — e é por isso que as três fricções abaixo são todas sobre ele.
A jornada
Treinar sozinho(achei em 2s, tá bem colocado).Top 3 fricções
1. "Treinar de novo" me devolveu o mesmo snippet que eu tinha acabado de digitar
Terminei "Inverter string", cliquei em
treinar de novo, e veio "Inverter string" de novo. Não é azar meu: o bucket JS/Júnior tem 5 snippets, então é 1 em 5.O que me deixou de queixo caído é que vocês acabaram de consertar exatamente isso — a #115, fechada ontem, com essa mesma conta (20% nas 14 linguagens grandes, 33% nas 10 menores). Só que o conserto entrou no caminho da sala:
pickSnippet(room.language, room.difficulty, room.snippet?.title)— exclui o anterior ✅ (src/app/api/rooms/[code]/route.ts:152)pickSnippet(lang.value, difficulty.value)— sem o terceiro argumento ❌ (src/app/api/snippet/route.ts:26)O
excludeTitlejá existe e já é opcional emsnippets.ts. O Treino Livre é justamente onde eu clico "de novo" dez vezes seguidas pra caçar PB — é o lugar onde repetir dói mais, não menos. E repetir aqui é pior que repetir na sala: na segunda passada eu não estou digitando, estou recitando de memória. O WPM que eu levo pra sala depois é mentira.Esperava: conteúdo novo a cada "treinar de novo". Aconteceu: mesmo trecho, 1 clique depois.
2. O Ranking Global premia quem escolheu o bucket certo, não quem digita mais rápido
Olhei o topo pra saber o que eu preciso bater:
E nas partidas recentes: os 76, 67, 64 e 62 WPM do líder são todos SQL · easy. Ou seja, o topo da tabela não mede digitação — mede quem descobriu que SQL fácil é curto e cheio de palavra minúscula. Não tem filtro por linguagem, dificuldade ou período: um recorde de COBOL/Sênior e um de SQL/Júnior brigam na mesma coluna.
Isso já está mapeado na #92 (e a spec pede os filtros em §III.8) — considere este post um voto pesado nela. Pra minha persona é a issue: um ranking que eu não consigo comparar com o meu bucket não é um ranking, é uma curiosidade.
Adendo de confiança, no mesmo espírito: fui ver o que o servidor exige pra aceitar um resultado e o
sanitizeResultsdiz na cara, honestamente, que "não recalcula a corrida" — o teto é o WPM plausível (350). Combinado com o fato de que partidas 1p entram no ranking, o custo de forjar o topo é uma requisição. Sei que já está na #34 e sei que anti-cheat perfeito em jogo client-authoritative não existe (a própria spec §VI.13 admite isso). Só registro o efeito na motivação: enquanto eu não souber que o 76 do topo foi digitado, ele não me dá vontade de treinar.3. Terminei o treino e o jogo não lembrou de nada
Tela de fim:
8 WPM · 100% · 0 erros · 112,6s, e dois botões — "treinar de novo" e "criar sala com amigos". E só. Nenhum "seu melhor: X WPM", nenhum "isso te colocaria em Nº do ranking", nenhuma comparação com o run anterior. Zero memória — nem nolocalStorage.Pra mim, que só volto por causa do delta, é o que mais me faz fechar a aba: eu joguei duas vezes e o jogo não sabe que eu joguei duas vezes. A spec já promete isso ("Contra seu ghost (PB)", §V) e a #83 já está aberta com o replay em
localStorage. Um PB porlinguagem+dificuldadeguardado local já resolveria 80% da dor antes do ghost completo — e não custa banco nenhum.1 encantamento (não mexam nisso)
A honestidade do número. Duas coisas:
paste off · backspace não pontua. E o tooltip do card de erros: "inclui as que você já corrigiu". Isso é um jogo dizendo "eu sei que você vai tentar" — e é exatamente o tom que ganha o competitivo.Eu meço isso em todo jogo de digitação que abro, e a maioria chuta pra cima. Vocês não.
Métricas da persona
Se der pra escolher uma coisa pra semana que vem: passem o
excludeTitleno/api/snippet. É um argumento, o código já existe e já foi decidido na #115 — e é a diferença entre "treinar" e "decorar".All reactions