Historique des modifications
Ce qui a été publié et ce qui a évolué en coulisses
La roue elle-même
pre-1.0 · 2026-08-29Douze pages, une roue que l'on peut faire glisser, du son, des liens de partage et un moteur de rendu qui ne redessine plus inutilement.
Le tirage au sort
- Tiré avant d'être lancé. Un tour sélectionne son gagnant via
crypto.getRandomValuesavec échantillonnage par rejet, puis l'animation est ciblée sur cette entrée. Une impulsion forte prolonge la rotation, sans jamais modifier le résultat. - La page d'équité. L'algorithme y constitue le contenu textuel — le code affiché sur la page est le code exact qui s'exécute.
- Poids et répétitions. Le poids d'une entrée correspond à sa part dans le tirage, affichée sous forme de pourcentage réel. Deux entrées avec le même texte restent deux entrées distinctes, et la liste indique le nombre de répétitions trouvées plutôt que de les fusionner discrètement.
La roue
- Douze pages. Chacune s'ouvre sur une roue déjà pré-remplie et dispose d'une commande unique — une plage de nombres, un alphabet, un générateur d'équipes, une liste de classe, un historique de tirage.
- Faites glisser et relâchez. La vitesse à laquelle vous relâchez se traduit par des tours supplémentaires. Une pression pendant la rotation l'arrête plus tôt ; les touches Espace et Entrée lancent la roue sans avoir à chercher le bouton.
- Une voix. Des cliquetis calés sur les séparateurs franchis par le pointeur, un son d'arrivée, un compte à rebours annulable et une vibration sur smartphone — chacun d'entre eux pouvant être activé ou désactivé, avec indication claire de son état.
- Mode présentation. Les commandes secondaires se masquent, la roue s'agrandit pour dépasser 70 % du côté le plus court de l'écran, et le résultat apparaît dans un panneau à fort contraste lisible par toute une assemblée.
- Deux autres modes d'affichage. Une bande de machine à sous et une bande de cartes, lorsque le cercle n'est pas le format idéal.
Conservation et partage
- Les liens de partage sont des instantanés. La roue est encodée directement dans l'URL : un lien n'expire jamais et modifier la roue par la suite ne change pas ce qu'un collègue ouvre.
- Roues enregistrées, historique des tirages et préréglages de poids, le tout conservé dans ce navigateur et exportable dans un fichier utilisable sur un autre appareil. Il n'y a pas de compte, ce fichier est donc le seul moyen de transférer des données d'une machine à l'autre.
Sous le capot
- Le rendu est passé sur canvas. Le cadran est dessiné une seule fois lorsque le contenu change, et la rotation s'effectue via une transformation CSS de l'élément : une rotation ne demande donc aucun calcul image par image. Le texte des entrées est maintenu sous forme de liste réelle masquée à côté — un canvas n'est fait que de pixels, et un lecteur d'écran a besoin de texte à lire.
- Prise en charge de la réduction des animations. Avec
prefers-reduced-motion: reduce, l'animation est ignorée et le résultat est annoncé immédiatement. Les trois concurrents testés n'en tenaient aucunement compte. - Annonce du résultat. Le résultat arrive dans une zone live ARIA sous forme de texte sélectionnable, et non sous forme de pixels dessinés sur la roue.
Réduit à un simple outil
pre-1.0 · 2026-08-27L'échafaudage SaaS dont ce dépôt est issu a été supprimé plutôt que simplement désactivé.
TossWheel a vu le jour sous la forme d'un modèle de démarrage SaaS, et l'essentiel du travail de cette journée a consisté en des suppressions.
Supprimé
- Comptes, tableau de bord, administration et paramètres. Il n'y a rien à quoi se connecter et rien derrière une page de connexion. Ces interfaces ont donc été éliminées plutôt que désactivées — un indicateur de fonctionnalité (feature flag) désactivé continue d'embarquer le code sous-jacent.
- Base de données, stockage d'objets et cache clé-valeur. Le Worker ne conserve désormais aucune liaison. Les listes résident dans votre navigateur et une roue partagée voyage directement dans le lien.
- Paiements, newsletter et fonctionnalités IA. Aucun de ces éléments n'avait de rôle à jouer ici.
Décidé
- Direction A, « l'instrument ». Trois prototypes haute fidélité ont été conçus et l'un d'eux a été retenu : la roue à gauche, la liste à côté, le bouton d'action sous la roue, et la roue comme seul élément coloré de la page.
- Un verrouillage avant lancement. Chaque réponse intègre
noindexjusqu'à ce que la liste de vérification de lancement soit terminée, afin qu'aucun contenu inachevé ne soit indexé pour devoir ensuite être désindexé.
Pourquoi cela est consigné
Réintroduire ultérieurement une base de données ou un système de connexion relèverait d'un changement de produit, et non d'un détail d'implémentation. Cette contrainte explique pourquoi une roue ne nécessite ici aucun compte et ne conserve aucune copie de votre liste.