Pular para o conteúdo principal

Histórico de alterações

O que foi lançado e o que mudou nos bastidores

A própria roleta

pre-1.0 · 2026-08-29

Doze páginas, uma roleta que você pode arrastar, som, links de compartilhamento e um renderizador que parou de redesenhar sem necessidade.

O sorteio

  • Sorteado antes de se mover. Um giro escolhe seu vencedor a partir de crypto.getRandomValues com amostragem por rejeição, e a animação é então direcionada para esse item. Um impulso forte rende um giro mais longo, nunca um resultado diferente.
  • A página de integridade. O algoritmo é a própria explicação — o código na página é o código em execução.
  • Pesos e repetições. O peso de um item é a sua fração no sorteio, exibida como a porcentagem real que ele representa. Duas entradas com o mesmo texto continuam sendo duas entradas, e a lista indica quantas repetições encontrou em vez de mesclá-las em silêncio.

A roleta

  • Doze páginas. Cada uma abre com uma roleta já preenchida e cada uma tem um controle exclusivo — um intervalo de números, um alfabeto, um divisor de equipes, uma lista de presença, um registro de sorteios.
  • Arraste e solte. A velocidade de liberação se transforma em voltas extras. Um clique durante o giro encurta o percurso; espaço e enter giram sem precisar procurar pelo botão.
  • Efeitos sonoros. Estalidos no tempo exato das divisórias ultrapassadas pelo ponteiro, som de conclusão, contagem regressiva cancelável e vibração no celular — cada um configurável individualmente, indicando se está ativo no momento.
  • Modo apresentação. Os controles secundários são ocultados, a roleta cresce para além de 70% do lado menor da tela e o resultado sobe para um painel de alto contraste com uma leitura visível para uma sala inteira.
  • Mais duas formas de exibir um sorteio. Uma faixa estilo caça-níqueis e uma faixa de cartas, para quando um círculo não for o formato ideal.

Salvamento e compartilhamento

  • Links de compartilhamento são capturas instantâneas. A roleta é codificada na URL, portanto o link nunca expira e editar a roleta depois não altera o que um colega abre.
  • Roletas salvas, histórico de giros e predefinições de peso, tudo neste navegador, tudo exportável para um arquivo que você pode levar para outro dispositivo. Não há conta, então esse arquivo é a única forma de transferir algo entre máquinas.

Por baixo dos panos

  • O renderizador migrou para canvas. O desenho é feito uma única vez quando a imagem muda e a rotação é uma transformação no elemento, portanto o giro não realiza nenhum trabalho por quadro. O texto dos itens é mantido como uma lista real e oculta ao lado — um canvas é composto de pixels, e um leitor de tela precisa de texto para ler.
  • Redução de movimento implementada. Com prefers-reduced-motion: reduce, o percurso é ignorado e o resultado é anunciado imediatamente. Todos os três concorrentes registraram suporte zero a isso.
  • O resultado é anunciado. Ele é inserido em uma região ativa (live region) como texto selecionável, não como pixels pintados na roleta.

Resumido a um site de ferramentas

pre-1.0 · 2026-08-27

A estrutura de SaaS de onde este repositório começou foi removida, e não apenas desativada.

O TossWheel começou como um modelo inicial de SaaS, e a maior parte do trabalho deste dia foi de subtração.

Removido

  • Contas, painel, administração e configurações. Não há onde fazer login e nada atrás de autenticação, então essas partes foram removidas em vez de desativadas — uma feature flag desligada ainda envia o código por trás dela.
  • Banco de dados, armazenamento de objetos e cache chave-valor. O Worker agora não tem nenhuma vinculação. As listas ficam no seu navegador e uma roleta compartilhada viaja dentro do link.
  • Pagamentos, newsletter e recursos de IA. Nenhum deles tinha utilidade aqui.

Decidido

  • Direção A, "o instrumento". Três protótipos de alta fidelidade foram criados e um foi escolhido: a roleta à esquerda, a lista ao lado, a ação sob a roleta e a roleta como o único elemento colorido da página.
  • Bloqueio de pré-lançamento. Cada resposta traz noindex até que o checklist de lançamento esteja concluído, para que nada incompleto seja indexado e precise ser desindexado depois.

Por que isso está registrado

Reintroduzir um banco de dados ou login no futuro seria uma mudança de produto, não um detalhe de implementação. Essa restrição é a razão pela qual uma roleta aqui não precisa de conta e não guarda nenhuma cópia da sua lista.