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-29Doze 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.getRandomValuescom 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-27A 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
noindexaté 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.