2

Fiz um jogo de navegador onde você tenta fraudar a urna eletrônica (sem framework, som sintetizado na hora e uma regra: nenhuma defesa inventada)

Na semana depois do segundo turno eu e o Claude (a IA da Anthropic) fizemos um jogo de humor: tente fraudar a urna eletrônica brasileira. Você contrata um golpista (o Hacker, o Doutor, o Lobista, o Infiltrado e, se merecer, o Presidente do Tribunal), escolhe o plano e tenta passar pelas defesas da urna sem a PF chegar.

Ninguém conseguiu ainda: https://tentefraudar.com (tem em inglês e espanhol também)

Não tem partido nem candidato no jogo. A pergunta é só: como você fraudaria? Abaixo fica o que achei interessante do lado técnico.

Stack: nada

HTML, CSS e JavaScript puro, em módulos ES. Sem framework, sem bundler. Um script de build de umas poucas linhas copia os arquivos, minifica e carimba o hash do CSS no index.html. Hospedado no Cloudflare Pages, sem backend: o progresso fica no localStorage.

Fluxos produzem fichas, o renderizador desenha

A regra que segurou o projeto: a lógica do jogo nunca toca no DOM. Cada golpe é uma função assíncrona que pede coisas ao contexto:

await ctx.stage('a-prorrogacao', 'DOMINGO, 17H', 'A prorrogação', [
  'A votação foi estendida até as 19h nas seções que ainda estavam abertas.',
]);
const what = await ctx.choose('O que você faz com as duas horas a mais?', [
  { id: 'twice', label: 'Leva a turma pra votar de novo', cost: 0 },
  { id: 'swap', label: 'Troca os votos no fim da noite', cost: 10 },
]);

O renderizador recebe essas fichas (cena, escolha, surpresa, recibo) e desenha. Resultado: dá pra rodar o jogo inteiro sem navegador num fuzz que joga um monte de partidas aleatórias e procura erro, beco sem saída ou texto faltando, e dá pra trocar o visual sem medo de quebrar regra.

O som é sintetizado na hora

Não tem arquivo de efeito sonoro. Cada som é montado com WebAudio quando toca: a marimba de duas notas quando você escolhe, um apito de êmbolo quando alguém entra na cena, cocos andando na ponta dos pés quando o jogo te pergunta algo, uma bolha no Voltar. Tudo afinado no tom da trilha (dó menor) e passando por um reverb de convolução que imita uma sala de madeira pequena.

A primeira versão soava "seca e fria, quase um sistema operacional". O que resolveu foi tratar cada efeito como um gesto musical: notas que respondem uma à outra, um leve vibrato, uma nota de enfeite. E tocar só em toque real: o primeiro rascunho tocava em todo pointerdown, inclusive na rolagem.

O teste de fumaça com Playwright confere até isso: ele intercepta os osciladores e checa as notas de início de cada som.

Três idiomas sem biblioteca

PT, EN e ES são três arquivos de conteúdo com a mesma forma. Um script compara os três e acusa chave faltando ou token diferente entre eles (um ${a.name} que existe num idioma e não no outro).

A regra de conteúdo: nenhuma defesa inventada

Cada defesa que pega o jogador é um procedimento documentado: o teste de integridade com urnas sorteadas, a cerimônia de assinatura do programa, o boletim impresso e colado na porta da seção antes de qualquer soma, o registro de cada liberação sem biometria. Quando a pesquisa não confirmava um procedimento, ele ficou de fora.

E uma regra que veio depois de muita discussão: nenhuma estatística pega ninguém no jogo. Comparar seções ou comparar uma eleição com a anterior é exatamente o método de toda alegação de fraude, então o jogo não usa isso pra te pegar. Quem pega é sempre alguém ou alguma coisa concreta.

Dois tropeços de deploy

  • O Cloudflare segurava o CSS em cache por 4 horas mesmo com o _headers mandando revalidar. Um celular rodou JS novo com CSS velho. Solução: o build carimba style.css?v=<hash>.
  • O upload em .zip pelo painel disse "151/151 enviados" e publicou só os arquivos da raiz: toda subpasta caía no index.html. O cache da borda escondeu isso por 45 minutos. Desde então o deploy é por pasta e sempre verificado com uma requisição com query string.

Como foi feito com IA

O Claude escreveu a maior parte do código e dos textos, e eu dirigi: o que entra, o que sai, o que tem graça. A arte em estilo xilogravura de cordel também foi feita com IA, com várias rodadas de correção (inclusive pra nenhum personagem lembrar um ministro de verdade). Antes de lançar, rodamos dez rodadas de playtest, e as primeiras pessoas que jogaram viciaram.

Se tiver um caminho de fraude que não está no jogo, me conta aqui. Eu testo e coloco.

Carregando publicação patrocinada...
1

Bem bacana. Sucesso aí.

Não esquece de incluir a sala escura na próxima versão: tentativa de fraude através de fake news. Ou também proposta de suborno para comprar ministros, com prêmios como voo fretado em jatinho para toda a família, contrato milionário, camarote em partidas de futebol, ou 5 novinhas na festinha da "firma".