Ferramentas · No ar

VotaAI

Vota aí: a enquete em um link, com barras ao vivo.

Crie uma enquete em um link, com barras que sobem ao vivo e prazo de 1 h, 12 h, 24 h, personalizado ou sem fim. Sem conta e sem instalar nada.

Sobre o projeto

O que é VotaAI

O VotaAI é uma enquete em um link. Você escreve a pergunta, põe de 2 a 8 opções, escolhe por quanto tempo a votação fica aberta e recebe um link para mandar por aí. Quem abre o link vota em um toque, sem conta e sem instalar nada, e vê as barras subirem ao vivo, na tela de todo mundo, a cada voto.

O prazo é seu: 1 hora, 12 horas, 24 horas, um tempo personalizado (de 1 minuto a 90 dias) ou sem prazo, para a votação ficar no ar até você apagar. Quando o tempo acaba, a votação fecha e o resultado fica visível por 7 dias, e então é apagado. Quem criou também pode encerrar na hora ou apagar, com o link do dono, que só aparece uma vez: o servidor guarda só um hash dele.

Sem conta, ninguém se identifica, então o VotaAI não promete "uma pessoa, um voto". Cada navegador sorteia um código por votação e o servidor recusa o segundo voto daquele código, mas quem limpar os dados do navegador ou trocar de aparelho consegue votar de novo. É uma enquete para decidir o almoço, a pauta da reunião ou a próxima funcionalidade, não uma eleição.

A tela usa exatamente a mesma API pública, documentada em OpenAPI 3.1 e com limites por IP. As barras ao vivo chegam por Server-Sent Events, e as votações e os votos moram no mesmo banco SQLite do ShareSoFast, do Print2Link e do Encurta. Os detalhes estão em Tecnologias, logo abaixo.

Recursos

O que o VotaAI faz

Uma enquete, um link

A pergunta, de 2 a 8 opções e pronto: o link tem 7 caracteres (/v/aB3dE9f) e abre a votação em qualquer aparelho, sem conta.

Barras ao vivo

Cada voto faz as barras mexerem na tela de todo mundo que está com a votação aberta, sem recarregar. Cada barra tem o texto equivalente (opção, votos e porcentagem), para quem não enxerga as cores.

Prazo à sua escolha

Uma hora, 12 horas, 24 horas, personalizado (de 1 minuto a 90 dias) ou sem prazo. A contagem regressiva usa a hora do servidor, não a do aparelho.

Uma opção ou várias

Cada pessoa marca só uma opção ou várias, como você escolher. Na múltipla escolha a porcentagem de cada opção é sobre as pessoas que votaram, então a soma pode passar de 100%.

Só você encerra e apaga

O link do dono (com um token de 192 bits) aparece uma vez, na criação, e fica na lista deste navegador. Com ele você encerra a votação antes do prazo ou apaga tudo na hora.

Franqueza sobre o voto

O servidor recusa o segundo voto do mesmo código, não guarda o IP e não liga a opção escolhida a ninguém. Mas quem limpa os dados do navegador ou troca de aparelho vota de novo: não é uma eleição.

API aberta

Criar, ver, votar, acompanhar ao vivo, encerrar e apagar, com OpenAPI 3.1 e limites por IP (5 votações por minuto e 30 por hora). A tela usa a mesma API.

Números abertos

A tela inicial mostra votações criadas, votos dados, votações sem prazo, encerradas, apagadas e links copiados. São só contagens de todo o período: nunca uma pergunta, uma opção ou um código.

Tecnologias

Por dentro do VotaAI

Mesma base do ShareSoFast, do Print2Link e do Encurta

O VotaAI não abre um banco próprio: usa o arquivo, a conexão e a fila de concorrência 1 do ShareSoFast. Como a fila é de um só, um voto (gravar o código de quem votou e somar nas opções) é uma transação sem disputa. As tabelas são dele: votações, opções e votos.

Barras ao vivo por Server-Sent Events

Cada votação tem uma sala em memória. Um voto avisa a sala, que lê o estado do banco e manda para todos, juntando os avisos: no máximo 2 por segundo por votação, por mais votos que cheguem. A conexão tem um batimento a cada 25 segundos e há teto de telas abertas por IP (50), por votação (500) e no servidor. Se a conexão ao vivo falhar, a tela consulta a votação a cada 5 segundos.

Prazo por horário de fim

A votação guarda o instante em que termina, não um contador: fechar é comparar com o relógio do servidor, sem tarefa agendada. "Sem prazo" grava o maior instante que uma data aceita (a coluna nunca é nula). O resultado de uma votação encerrada é apagado depois de 7 dias, por uma limpeza a cada hora e também no momento em que alguém tenta abri-la.

Token de 192 bits

Sorteado com o gerador seguro do sistema; o servidor guarda só o hash SHA-256 e compara em tempo constante. Na API vai só em cabeçalho (X-Poll-Token ou Bearer); na página vai na query, e por isso o log de acesso nunca registra a query desse endereço e o HTML nunca a repete.

Voto ligado a um hash, não a uma pessoa

O servidor guarda o SHA-256 do código de quem votou junto do código da votação, então o mesmo código em outra votação dá outro hash. A opção escolhida não fica ao lado desse hash: quem lê o banco não descobre em quem cada código votou.

Um esquema só

Operações, campos, limites, prazos, mensagens de erro e a validação do pedido moram num módulo puro que o servidor, a tela, o OpenAPI e a tabela desta página importam. Um teste confere que o servidor implementa cada operação e que a tela tem um campo para cada campo da criação.

Limites por IP

Criar votações, votar (120 votos por minuto, largo de propósito: uma sala de aula divide um IP), ler, votações que não existem e abrir telas ao vivo têm cada um o seu limite. As votações sem prazo têm teto por dia (5) e teto no servidor. A API devolve RateLimit-Limit, Remaining e Reset, e o 429 traz Retry-After.

Texto de quem escreve só como texto

A pergunta e as opções são limpas no servidor (sem controles nem caracteres que invertem o sentido do texto, com os espaços juntos) e entram na tela sempre por textContent, nunca como HTML.

Som e movimento em cada ação

Votar, copiar o link e criar a votação têm som e animação por um módulo comum que usa os sons de interface do SFX Forge, com botões para desligar os dois, respeito ao pedido de menos movimento do sistema e teto de 24 partículas de confete.

API

Endpoints

Sem chave e sem cadastro: criar uma votação devolve o link, o link do dono e um token que só aparece uma vez. O token vai só em cabeçalho (X-Poll-Token ou Authorization: Bearer). Quem vota manda um código próprio, um por votação. Limites por IP: 5 votações por minuto e 30 por hora; erros em JSON com código estável e cabeçalhos RateLimit-*.

GET /v/<código> A página da votação: vota e acompanha as barras ao vivo.
GET /v/<código>?token=<token> O mesmo endereço com o token: abre o painel de quem criou (encerrar e apagar).
POST /projetos/votaai/api/polls Cria uma votação: devolve o link para compartilhar, o link do dono e o token (que só aparece nesta resposta).
GET /projetos/votaai/api/polls/<código> A votação agora: pergunta, opções com os votos de cada uma, quantas pessoas votaram, estado e prazo.
POST /projetos/votaai/api/summaries O estado e o total de votos de várias votações de uma vez (o histórico do navegador). Quem não volta na resposta já não existe.
POST /projetos/votaai/api/polls/<código>/votes Registra um voto (`choices` e `voter`) e devolve a votação atualizada. O voto não muda depois.
GET /projetos/votaai/api/polls/<código>/stream Barras ao vivo (Server-Sent Events): um evento `poll` com o estado completo a cada mudança e `end` quando a votação termina ou é apagada.
POST /projetos/votaai/api/polls/<código>/close Encerra a votação agora. O resultado fica visível pelo prazo de guarda.
DELETE /projetos/votaai/api/polls/<código> Apaga a votação e todos os votos, na hora.
GET /projetos/votaai/api/usage Os números abertos do VotaAI (só contagens de todo o período).
GET /projetos/votaai/api/openapi.json Esta especificação (OpenAPI 3.1), gerada do esquema.

FAQ

Perguntas frequentes

Preciso criar uma conta?

Não, nem para criar nem para votar. Quem cria recebe um link do dono, que fica na lista do navegador usado; se limpar os dados dele, a lista (e o link do dono) some, mas a votação continua no ar até o prazo.

Por quanto tempo a votação fica no ar?

Você escolhe: 1 hora, 12 horas, 24 horas, um tempo personalizado (de 1 minuto a 90 dias) ou sem prazo. Terminado o prazo, ninguém mais vota e o resultado fica visível por 7 dias; depois a votação e todos os votos são apagados.

Dá para votar mais de uma vez?

O servidor recusa o segundo voto do mesmo código, e cada navegador usa um código por votação. Mas quem limpa os dados do navegador, abre em janela anônima ou usa outro aparelho consegue votar de novo. Sem conta, não há como garantir uma pessoa, um voto: use o VotaAI para decisões leves, não para eleições.

O que significa "sem prazo"?

A votação fica aberta até quem criou encerrar ou apagar. Para não encher o servidor, há um teto de votações sem prazo por dia, por IP, e um teto no servidor inteiro; passando dele, o VotaAI pede para escolher um prazo.

Como encerro ou apago a votação?

Pelo link do dono (o link da votação com ?token=... no fim) ou pela lista "Minhas votações" do navegador onde você criou. Encerrar fecha na hora e mantém o resultado por 7 dias; apagar remove a votação e os votos na hora.

E se eu perder o link do dono?

Não dá para recuperar: o servidor guarda só um hash do token. A votação continua funcionando e termina no prazo escolhido; você só perde o jeito de encerrar antes e de apagar. Uma votação sem prazo sem o token só some quando o dono do servidor a apagar.

Quem vê em quem eu votei?

Ninguém. O servidor guarda só o hash do seu código e, à parte, o total de cada opção: o banco não liga o código a uma opção. Quem criou a votação vê os totais, como todo mundo.

Alguém acha a minha votação sem o link?

Não há lista pública de votações, as páginas não são indexadas por buscadores e o código tem 7 caracteres de um alfabeto de 57 símbolos, com limite por IP para quem chuta códigos. Mesmo assim, trate o link como público: quem o tem pode votar e ver o resultado.

Quantas pessoas aguentam votar ao mesmo tempo?

Os votos entram um a um no banco, em transações curtas, e as barras ao vivo são juntadas em no máximo 2 envios por segundo por votação. Cada votação aceita até 500 telas ao vivo; passando disso a tela de quem chegou depois consulta a votação de tempos em tempos.

Tem API?

Tem, e é a mesma que a tela usa: criar, ver, votar, acompanhar ao vivo, encerrar e apagar, com OpenAPI 3.1. Cada IP cria até 5 votações por minuto e 30 por hora, e os cabeçalhos RateLimit-* dizem quanto ainda cabe.

O VotaAI usa inteligência artificial?

Não. O nome é um trocadilho: "vota aí", com o AI no fim. As barras, os prazos e as contas são código comum.

O que os números abertos contam? Eles guardam dados pessoais?

Só contagens: votações criadas, votos dados, votações sem prazo, encerradas, apagadas e links copiados. Nenhuma pergunta, nenhuma opção, nenhum código de votação, nenhum token e nenhum IP entra nessa tabela.

Gostou do VotaAI? Dá para apoiar o trabalho:

Continue explorando

Veja também

Todos os projetos