UrzaGatherer : comment j’ai passé deux ans à coder au lieu de jouer à Magic
Il y a un paradoxe cruel quand on développe une app de collection Magic: The Gathering. Plus on code de fonctionnalités, moins on a le temps de jouer. Depuis la version 16, j’ai enchaîné les mises à jour comme un joueur de burn enchaîne les Lightning Bolt. On en est à la version 18.9 et je crois que mon app a plus évolué que le métagame Modern. Petit tour du propriétaire.
Quand je regarde la version 16.0, c’est un peu comme revoir une photo de soi au lycée. On reconnaît les traits, mais on se dit « quand même, on a fait du chemin ». À l’époque, UrzaGatherer faisait déjà le boulot mais l’interface avait un petit côté « site web de 2019 » qui ne me laissait pas dormir la nuit. Alors j’ai fait ce que tout développeur raisonnable ferait : j’ai tout cassé pour tout refaire.
L’interface
Commençons par l’éléphant dans la pièce. J’ai redessiné chaque dialogue, chaque menu contextuel, chaque popup. Les vieilles notifications navigateur ? Remplacées par des toasts empilés avec un effet de gravité (parce que même les notifications méritent de la physique). La barre latérale ? Animation fluide. L’indicateur de chargement ? Aux couleurs de mana, évidemment. Est-ce que j’ai passé une soirée entière à calibrer la vitesse de rotation ? Peut-être.
Et puis je me suis attaqué aux listes déroulantes. Je sais, dit comme ça, c’est la feature la moins sexy de l’histoire du développement web. Mais c’est un composant qu’on utilise partout, et les miennes me rendaient dingue. Maintenant elles s’ouvrent dans la bonne direction, se ferment quand il faut, et on peut taper pour chercher dedans. Ma thérapie a été un succès.
Côté mobile, j’ai tout repensé. Deux cartes par ligne, curseurs adaptés, taille de texte configurable… Je voulais que l’expérience sur téléphone soit un vrai plaisir, pas juste un « bon, ça rentre, on va dire que c’est responsive ».
Ah, et j’ai aussi refait l’icône de l’app. Parce que des fois, il faut savoir dire stop à une icône.
La page carte
La page de détail d’une carte, c’est mon enfer personnel : j’y passe tout mon temps et j’en ressors toujours avec des nouvelles idées. Je l’ai reconstruite de zéro. Grille, sections repliables, et mon petit plaisir : le drag & drop pour réorganiser les sections, synchronisé via le cloud. Votre obsession de mettre les prix en premier et le texte de règles en dernier vous suit sur tous vos appareils.
Chaque copie a maintenant ses badges colorés : drapeaux SVG pour les langues, condition, grading, date d’ajout. Les formats légaux sont en pilules cliquables. Et j’ai ajouté des sparklines d’historique des prix, parce qu’il n’y a rien de plus satisfaisant que voir la courbe de sa Ragavan monter en flèche depuis qu’on l’a achetée 30€.
Depuis la version 18.7, on peut même enregistrer son prix d’achat par copie. L’app affiche le gain ou la perte. C’est soit une source de fierté, soit un rappel douloureux qu’on a acheté des Oko à 50€. Chacun ses traumas.
La recherche : enfin, la syntaxe Scryfall
C’est LA fonctionnalité que tout le monde me demandait. « Tu peux pas mettre la syntaxe Scryfall ? » Apparemment, en version 17.4, j’ai pu. On tape `t:creature c:red cmc>=3 o:« enters the battlefield »` et ça marche. La négation aussi : `-c:red`, `-t:creature`. J’ai l’impression d’avoir débloqué un achievement.
La barre de filtres a aussi été refaite : panneau dépliable, pastille avec le nombre de filtres actifs, curseur pour les exemplaires possédés, et un bouton « Tout effacer » pour quand on s’est un peu trop emporté avec les filtres.
Le petit détail qui tue : l’aperçu en direct du nombre de résultats dans le bouton de recherche. On sait immédiatement si on a tapé un truc trop restrictif ou si on va se retrouver avec 14 000 résultats. En général, c’est l’un ou l’autre.
Les decks
Honnêtement, le module de decks a reçu tellement de travail que si c’était un deck Commander, il serait à 200 cartes.
Les vues : Vue groupée par type (Créatures, Éphémères, Rituels…) avec tri par catégorie. Vue empilée avec aperçu latéral au survol. Quand on construit un Commander et qu’on peut voir d’un coup d’œil qu’on a 3 créatures et 47 terrains, ça évite des conversations gênantes à la table de jeu.
L’auto-tagger : J’en suis probablement trop fier. Ce moteur analyse le texte de chaque carte et lui attribue un rôle : Pioche, Rampe, Suppression, Nettoyage, Contresort, Protection, Tuteur, Récursion. Quand je vois que mon deck Commander a 2% de pioche, je sais pourquoi mes parties finissent dès le tour 6. On peut corriger les rôles, et tout se synchronise via le cloud.
Les tokens : L’app détecte automatiquement les tokens, emblèmes, donjons et marqueurs de jeu. Fini le « attends, cette carte fait un token 2/2 ? » en pleine partie. Il y a aussi un mode manuel pour les control freaks (je ne juge pas, j’en suis un).
J’ai ajouté le format Oathbreaker (avec validation complète), l’import unifié MTGA/TappedOut/mtg.wtf, et, cerise sur le Mox, les Patreons peuvent partager leurs decks via un lien en lecture seule. Une belle interface dédiée, sans barre latérale. Parce que montrer ses decks, c’est le nouveau montrer ses cartes.
Le Trade Center : préparez vos trades sans stress
En version 18.1, j’ai créé le Trade Center. Trois onglets : Trade Hub, Wishlist, Tradelist. Tout au même endroit.
L’idée : centraliser ce qu’on cherche et ce qu’on propose, avec la valeur calculée par copie. On arrive au trade avec tout chiffré, on sait exactement ce que vaut chaque carte dans chaque état. Fini les négociations au feeling où on se fait arnaquer parce qu’on ne savait pas que sa carte était en Excellent plutôt qu’en Near Mint. Pas que ça me soit déjà arrivé. Plusieurs fois.
Le scanner OCR
Le scanner, c’est mon boss de fin de jeu technique. Le truc qui m’a arraché le plus de cheveux.
Depuis la version 18.6, un mode OCR local tourne *directement sur votre appareil*. Pas de cloud, pas de latence, pas de « et si Google lisait mes cartes ». Le modèle est caché localement. J’ai réécrit toute la détection autour du titre de la carte. Avant, scanner un Omnath bruité pouvait donner un token Chèvre 0/1. C’est réglé.
La version 18.9 va encore plus loin avec les « Paramètres de scan ». Vous scannez un boîtier de Modern Horizons 3 ? Dites-le au scanner. Il va biaiser les réimpressions vers cette extension et appliquer automatiquement vos tags et emplacements. Le gain de temps est obscène. J’ai scanné 500 cartes en une soirée. Ma femme était ravie (non).
Les emplacements
On a tous vécu ce moment. On sait qu’on a la carte. On sait qu’elle est quelque part. Mais entre le classeur blanc, le classeur noir, la boîte sous le bureau et le deck qu’on a démonté la semaine dernière, c’est Mission Impossible.
Depuis la version 18.7, on peut créer des emplacements personnalisés : classeur, étagère, pièce, boîte à chaussures (zéro jugement), chacun avec sa couleur et son image. On assigne un emplacement à chaque copie, et la recherche filtre par emplacement. Ma Doubling Season ? Classeur bleu, page 12, rangée du haut. Merci, je me dois une bière.
Les performances
Personne ne va tweeter « OMG le tri de ma collection est 4x plus rapide
». Et pourtant, c’est peut-être le travail le plus important que j’ai fait.
J’ai déporté la compression dans un Web Worker, viré la double sérialisation JSON, et nettoyé les sauvegardes inutiles. Résultat : le filtrage est quasi-instantané même avec plus de 120 000 cartes. Changer le tri ne reconstruit plus le DOM. La taille du bundle a fondu de 35 %. Le cache de 75 %.
Quand l’app répond instantanément là où elle ramait avant, tout le monde le remarque sans le savoir. C’est le super-pouvoir invisible du développeur : quand tu fais bien ton boulot, personne ne s’en rend compte.
Les arrière-plans animés : parce que le style, c’est la vie
Je suis développeur, mais je suis aussi un joueur qui aime les jolies choses. En version 16.4, j’ai intégré des arrière-plans animés rendus par un shader Babylon.js : Fumée, Feu, Eau, Forêt, Molécules, Braises. Tout est configurable : couleur, vitesse, opacité.
Est-ce que c’est strictement nécessaire pour gérer une collection Magic ? Absolument pas. Est-ce que ça rend l’app 47% plus cool ? Selon mes mesures très scientifiques, oui.
Le tout tourne hors du thread principal, donc aucun impact sur les performances. J’ai des principes.
La personnalisation Patreon : pour ceux qui m’aident à justifier mes heures
Pour les supporters qui me permettent de continuer ce projet (et de m’acheter des boosters pour « tester le scanner »), j’ai ajouté des bonus sérieux. Modes avancés pour les cartes d’extension et de bloc avec aperçu en direct, personnalisation de chaque élément, capsule dorée animée sur les extensions Collectors, création d’extensions personnalisées…
Et la connexion Patreon se fait via OAuth, parce qu’en 2026 on ne donne plus son mot de passe à n’importe qui.
La synchro cloud : le truc qui ne doit JAMAIS casser
Vos données de collection, c’est sacré. C’est des heures de tri, de scan, de saisie. Perdre ça, c’est comme perdre une partie de Commander au tour 3 : techniquement survivable, mais émotionnellement dévastateur.
J’ai passé beaucoup de temps à blinder la synchronisation. En version 18.9, j’ai corrigé un bug critique où un rechargement pouvait écraser les données cloud avec des données locales périmées. Le genre de bug qui vous fait transpirer à 3h du matin. C’est réglé, l’app vérifie les horodatages avant de toucher à quoi que ce soit.
Et maintenant ?
Quand j’ai commencé à écrire cet article, je voulais juste lister les nouveautés. En les mettant bout à bout, je réalise que j’ai un problème. Un beau problème, mais un problème quand même : je ne sais pas m’arrêter.
UrzaGatherer, c’est mon projet passion. Je le développe seul, sur mon temps libre (enfin, « libre », ma famille a une définition légèrement différente du mot). Chaque message d’un utilisateur qui me dit « grâce à ton app j’ai retrouvé une carte » me donne envie de continuer. Et d’acheter des boosters. Pour tester le scanner, bien sûr.
Si vous gérez une collection Magic et que vous n’avez pas encore essayé UrzaGatherer, c’est le moment. Et si vous l’aviez laissé tomber il y a quelques versions, rouvrez-le. Vous ne reconnaîtrez pas l’app.
UrzaGatherer est accessible gratuitement sur https://urzagatherer.app et également sur iOS et Android.
David.










