- Run mongo container:
podman volume create mongo_data
podman run -d -it --rm \
-p 27017:27017 \
-v mongo_data:/data/db \
--name mongo \
mongo- Poser les index (idempotent, rien n'est jamais supprimé ; la base visée est celle de
MONGODB_URI) :
npm run indexes # crée ce qui manque
npm run indexes -- --dry-run # liste ce qui serait créé, sans rien écrireLes index sont déclarés dans lib/db/indexes/, chacun avec la requête qu'il sert.
L'application supporte un thème hivernal festif avec décorations de Noël et d'hiver.
Pour activer le thème hivernal, définissez la variable d'environnement :
NEXT_PUBLIC_THEME=winterConsultez la documentation complète : docs/WINTER_THEME.md
Pour voir une démo du thème : /winter-demo
Les utilisateurs peuvent enregistrer et consulter l'historique de leurs parties jouées, avec ou sans compte pour les autres participants (joueurs invités).
Pour plus de détails, voir docs/GAME_MATCHES.md.
Les parties des jeux qui l'activent se saisissent en rapport de bataille : liste d'armée de chaque joueur (avec autocomplétion des figurines du catalogue), scénario joué, fiche de notes libres, et une table de jeu vue de dessus où l'on pose décor et unités, instant par instant.
Pour plus de détails, voir docs/BATTLE_REPORTS.md.
Les utilisateurs connectés peuvent signaler les contenus créés par d'autres utilisateurs (bouton drapeau). Les administrateurs les traitent depuis /admin/reports.
Pour plus de détails, voir docs/REPORTS.md.
Trois offres adossées à Patreon — Supporter, Joutes Expert et Joutes Pro — débloquent des fonctionnalités supplémentaires, aux joueurs d'un côté, aux organisateurs de l'autre. Patreon reste la source de vérité : on n'en garde qu'une projection recalculée, si bien qu'un abonnement qui s'arrête éteint ses droits sans qu'aucune révocation ne tourne.
Pour plus de détails, voir docs/SUBSCRIPTIONS.md.
Tout utilisateur connecté peut créer un errata ; chacun ne peut modifier ou supprimer que les siens, sauf permission erratas:manage.
Pour plus de détails, voir docs/ERRATAS.md.
Les jeux qui ne se jouent pas avec des cartes ont leur propre catalogue : boîtes, figurines et accessoires, gérés depuis /admin/products et activés par la fonctionnalité « Produits » de la fiche du jeu. Une boîte déclare ce qu'elle contient ; l'ajouter à sa collection y verse ses figurines, et une boîte dont on possède déjà tout le contenu est signalée comme telle.
Pour plus de détails, voir docs/COLLECTION_PRODUCTS.md.
Une carte peut être marquée « toujours foil » et porter une liste de variantes d'impression (promo pack, pre-release, judge…), avec une image propre optionnelle.
Pour plus de détails, voir docs/CARD_PRINTINGS.md.
Toutes les pages déclarent au navigateur, via WebMCP, les actions principales de Joutes : recherche globale, catalogue de cartes d'un jeu, événements, lieux de jeu, ouverture d'une page. Un agent qui ouvre le site s'en sert avec la session de l'utilisateur, au lieu de simuler des clics.
Pour plus de détails, voir docs/WEBMCP.md.
Chaque jeu expose un document JSON (cartes, erratas, policies, règles) que les clients téléchargent pour fonctionner hors ligne. Il est généré en flux, une génération à la fois par jeu.
Pour plus de détails, voir docs/GAME_EXPORTS.md.
Une actualité peut être reprise d'un article publié ailleurs — la FAQ d'une sortie sur le site officiel, par exemple — en gardant sa mise en page et ses images, avec les noms de cartes mis en forme comme ailleurs sur Joutes. La source est citée et liée sur l'actualité.
Pour plus de détails, voir docs/NEWS_IMPORT.md.
Un jeu peut republier ce que publient les comptes de son éditeur : deux fois par jour, Joutes sonde son compte Bluesky et sa chaîne YouTube, et affiche leurs dernières publications, vidéos et shorts en grille — sur la fiche du jeu et sur sa page « Réseaux ». Un administrateur peut masquer une publication, et le masquage survit aux tours suivants.
Pour plus de détails, voir docs/GAME_SOCIAL.md.
La fiche d'un jeu porte le site officiel de son éditeur et ses réseaux, saisis
depuis /admin/games. Le lien YouTube fait en plus autre chose qu'ouvrir une
page : un sondage horaire y détecte les directs, qui s'affichent alors en grand
en tête de la fiche et dans le bandeau des directs de l'accueil pour qui suit ce
jeu.
Pour plus de détails, voir docs/GAME_LIVES.md.
Une actualité est écrite dans une langue et peut être traduite dans les autres. /news/:newsId la sert dans la langue de l'interface du lecteur ; /news/:newsId/:lang sert une langue précise, et chacune a donc son adresse partageable.
Pour plus de détails, voir docs/NEWS_TRANSLATIONS.md.