Easy-to-manage touch screens
Free, open-source touch screens. Guided USB setup, a drag-and-drop editor and local control. Made for Home Assistant.
翻訳待ち
Loading the full README. The saved excerpt is shown below.
Voter où manger avec ses collègues et amis, sans perdre 10 minutes à « je sais pas, comme tu veux ».Read the full README ↗
Voter où manger avec ses collègues et amis, sans perdre 10 minutes à « je sais pas, comme tu veux ».
Zéro friction : tout est utilisable avec un simple pseudo. Lier un email et un mot de passe est optionnel et ne sert qu'à retrouver ses listes depuis un autre appareil.
| Action | Valeur | Contrainte |
|---|---|---|
| Bof | 0 | Illimité |
| Ça me va | +1 | Illimité |
| Coup de cœur | +2 | Quota par session — 1 par défaut |
| Veto | −2 | Quota par session — 1 par défaut |
Score(restaurant) = Σ des votes. Les votes manquants comptent 0. En cas d'égalité, le nombre de coups de cœur départage ; à égalité parfaite, le host tranche (voir Départager une égalité).
Les quotas de jokers et le seuil de clôture se règlent à la création — voir « Règles personnalisables » plus bas. Les règles (jokers restants, session en cours, participant, restaurant valide) sont vérifiées en base par la fonction submit_vote, pas seulement dans l'interface.
| Règle | Comportement |
|---|---|
| Lancement | Réservé au host, à partir de 2 participants et 2 restaurants — sauf session ouverte ou duo |
| Composition | En attente, chaque participant ajoute ses restos et invite qui il veut |
| Retrait | Chacun retire ce qu'il a apporté ; le host arbitre ; le dernier resto reste |
| Snapshot | Les restaurants sont figés au lancement, pas à la création |
| Votes privés | Chacun ne lit que ses votes ; le classement est une agrégation |
| Clôture automatique | Déclenchée en base dès que le seuil de votants est atteint — jamais en session ouverte ; en duo, au premier accord |
| Clôture à l'heure | Échéance optionnelle choisie à la création — le vote se ferme tout seul |
| Clôture forcée | Le host peut clôturer à tout moment — les votes manquants comptent 0 |
| Vue host | Qui a terminé, en temps réel (statut uniquement, jamais les votes) |
| Rejoindre | Impossible une fois le vote lancé, sauf session ouverte jusqu'à son échéance et duo (deux places) |
| Départage | À égalité parfaite, le host choisit : second tour entre les ex æquo, ou tirage au sort |
| Décision | « On y va » : le host confirme où le groupe va — le gagnant, ou un autre resto du vote |
Les mêmes collègues votent chaque midi et retapaient le code à chaque session. À la fin d'une session, « Sauvegarder ce groupe » garde l'équipe du jour ; à la création de la suivante, « Inviter un groupe » la rappelle d'un clic.
| Geste | Où | Ce qui se passe |
|---|---|---|
| Sauvegarder ce groupe | classement d'une session | create_group_from_session recopie les participants — jamais une liste de noms |
| Inviter un groupe | création de session, ou l'attente | invite_group_to_session pose une invitation en attente par membre |
| Rejoindre | accueil, « On t'attend » | l'invitation devient une participation, et disparaît |
| Quitter un groupe | /account ou /groups | leave_group — on n'est plus pré-invité, les sessions déjà rejointes ne bougent pas |
Une invitation n'est pas une participation. C'est toute la règle : un membre pré-ajouté ne compte ni dans le nombre de participants, ni dans le quorum de lancement, ni dans les « 100 % ont voté » tant qu'il n'a pas ouvert la session. Sans cette séparation, une équipe de six pré-invités gèlerait le déjeuner de ceux qui sont là. La conversion se fait à un seul endroit — un trigger sur session_participants consomme l'invitation —, donc par n'importe quel chemin d'entrée : lien, code ou QR.
Un groupe ne se crée que depuis une session vécue : impossible d'y ajouter quelqu'un qu'on n'a pas croisé. Seuls ses membres le voient, seul son propriétaire le renomme ou le supprime, et c'est la RLS qui le dit. Le propriétaire ne peut pas le quitter — il le supprime, sinon le groupe survivrait sans personne pour le tenir.
This is the beginning of the README. Read the rest at the original. Read the full README ↗