Um coletor, arquivos estáticos na borda do Cloudflare e uma VPS de reserva. Nenhum servidor nosso no caminho de quem visita.

Esta página explica como foi feito o painel eleicoes.inema.club, que mostrou ao vivo a apuração do 2º turno de 2026 com os dados oficiais do TSE. Um único coletor lê o TSE e grava arquivos prontos; esses arquivos ficam nos servidores do Cloudflare espalhados pelo mundo; o navegador de cada pessoa só lê esses arquivos. Assim, o número de visitantes não muda a carga do TSE nem da nossa máquina. Serve para quem quer entender, copiar ou ensinar esse jeito de construir um site que aguenta pico de acesso gastando pouco.
A coleta fala com o TSE e grava arquivos. O contrato define o formato desses arquivos. O site só lê os arquivos e desenha a tela. Uma parte pode cair ou trocar de máquina sem mexer nas outras — foi o que aconteceu quando a operação inteira mudou para a VPS.
Tirado do histórico do repositório (git log), com noite de sono no meio. Tudo feito em sessões com o Claude Code; cada falha corrigida virou uma linha em FALHAS.md.
O segredo é não ter servidor nosso no caminho de quem visita.
Os arquivos ficam nos servidores do Cloudflare espalhados pelo mundo. A nossa máquina só envia arquivos quando algo muda. Se ela cair, o site continua com o último resultado.
Mil ou um milhão de visitantes: o coletor faz o mesmo pedido a cada 15 s. Se nada mudou, o TSE responde "não mudou" e nada trafega.
Cada versão tem nome próprio (v100340.json) e nunca é alterada. O navegador baixa uma vez e guarda por um ano.
O manifesto latest.json tem 4,9 KB e diz qual é a versão atual. O arquivo grande só é baixado quando muda.
Pedido de arquivo é servido direto, sem acionar programa. Segundo a documentação do Cloudflare, esses pedidos não são cobrados nem limitados.
O coletor grava os arquivos de versão antes do manifesto, e o envio ao Cloudflare leva tudo junto de uma vez. Ninguém vê um manifesto apontando para arquivo que ainda não chegou.
Cada pessoa com o painel aberto pede o manifesto a cada 15 segundos. Não foi testado com 1 milhão de pessoas reais: é quanto a borda precisa entregar.
| Pessoas ao mesmo tempo | Pedidos por segundo na borda | Tráfego | Pedidos ao TSE | Carga na nossa máquina |
|---|---|---|---|---|
| 10 mil | ~670 | ~3 MB/s | 1 a cada 15 s | nenhuma |
| 100 mil | ~6.700 | ~33 MB/s | 1 a cada 15 s | nenhuma |
| 1 milhão | ~67.000 | ~330 MB/s | 1 a cada 15 s | nenhuma |
É uma única instância no Cloudflare. Com milhões de sessões ao mesmo tempo, vira gargalo. Se falhar, só o número some do menu; o painel continua. Solução: dividir em várias instâncias e somar.
Cada pergunta chama a API da Anthropic. Por isso tem teto: 25 perguntas por hora e 80 por dia por visitante, 1.500 por dia no site.
Se o TSE atrasa ou manda um arquivo que não fecha, aquele estado fica parado no último valor válido. Não dá para ser mais rápido que a fonte.
Cada mudança vira um envio ao Cloudflare de 18 a 26 segundos (medido no log do publicador). Somado ao intervalo de 15 s da coleta, o site fica cerca de meio minuto atrás do TSE (estimativa).
Na parte do painel, mais gente olhando não aumenta a conta. Só o chat e o contador têm custo por uso.
| Item | Custo | Tipo |
|---|---|---|
| Coletor, análises e publicador | Uma VPS pequena (Hetzner CX23: 2 processadores, 4 GB). Preço na faixa de poucos euros por mês. | ESTIMATIVA |
| Site e dados (arquivos na borda) | Sem cobrança por pedido nos arquivos estáticos do Cloudflare. | FATO |
| Contador e chat (programa no Cloudflare) | Dentro da franquia com pouco volume; cobrado por volume acima dela, conforme o plano da conta. | ESTIMATIVA |
| Chat (API da Anthropic, Claude Opus 5.5) | Cerca de US$ 0,04 por pergunta, medido nas primeiras conversas. | FATO |
| Dados do TSE | Públicos e gratuitos, sem chave. | FATO |
Na noite da apuração, uma segunda máquina rodava tudo de verdade, pronta para assumir em minutos.
A VPS tinha coletores próprios, ligados às 17h, gravando versões a partir de 500001. Assim nunca colidiam com os arquivos já publicados pela máquina principal (que começam em 100001).
A VPS servia os dois sites em eleicoes2026.inema.club e municipios2026.inema.club, com as mesmas regras de cache. Dava para testar a reserva a qualquer momento.
Um comando mandava os domínios para a VPS e outro trazia de volta. Sem a máquina principal, um manual explica a mesma troca pelo painel do Cloudflare: ferramentas/vps/TROCA-MANUAL.md. A reserva se instala com ferramentas/vps/instalar.sh vps.
# na noite: mandar o tráfego para a VPS (sem --executar só mostra o que faria) ferramentas/vps/trocar_dominios.sh vps --executar # voltar para o Cloudflare ferramentas/vps/trocar_dominios.sh volta --executar # hoje (desde 26/10) a VPS é a principal; reinstalar a operação inteira: ssh root@<IP-DA-VPS> 'cd /opt/eleicoes2026 && git pull && bash ferramentas/vps/operacao.sh --executar'
Em 26/10 os dados finais foram copiados para a VPS, as análises rodaram lá com resultado idêntico (conferido pela impressão digital sha256) e a máquina principal foi desligada. O site não saiu do ar.
Nada exótico: um punhado de decisões simples, aplicadas com disciplina.
O documento completo, com os detalhes técnicos e os nomes dos arquivos, está em ARQUITETURA.md.