Rémi Scandella

Web developer

Biography

I am Rémi, I am 30 . I studied mathematics at university for 4 years and I am a web developer. I like to create fun experiences on the internet.

My interest for geeky stuff started very early — my passion for video games developed as soon as I could hold my brother's Sega MegaDrive controller. Then, a passion for the internet manifested itself as soon as I got access to it, when I was 11. I was fascinated by the possibility to create my own website, accessible by anyone, anywhere.

My third passion is science. I've always been fascinated by physics, but I chose to study mathematics instead. In the end, I want to focus on web development.

After having developed many projects on the web since 2006 — mainly personal projects, with no desire to share them — I have decided to do it professionally.

Don't hesitate to contact me, whatever the reason! :)

My skill set

HTML
CSS
PHP
SQL
JavaScript
TypeScript
2006 2008 2010 2021

Personal projects

Shinydex icon

Shinydex

Shiny Pokémon collection tracking

Shinydex on a smartphone
Shinydex on a PC

The Shinydex is a web app that enables you to store data about your shiny Pokémon collection (very rare variants of every creature you can find in video games from the Pokémon series) and share it with your friends.

The why and the how (in French)

À l'origine, j'ai créé le Shinydex pour partager ma collection de Pokémon chromatiques avec un ami. À l'époque, ce projet s'appelait le Rémidex puisqu'il n'était pas utilisable par d'autres personnes. Le Rémidex, puis le Shinydex, est un peu mon projet "fil rouge" qui m'a suivi pendant de nombreuses années ; je l'ai recréé et amélioré plusieurs fois à mesure que mon ambition grandissait.

Première version du Rémidex
La première version du Rémidex, simple page web

C'était d'abord une simple page web qui présentait ma collection. Puis j'ai voulu transformer cette page web pour qu'elle se rapproche le plus possible d'une application mobile. J'ai commencé par lui donner un design suivant Material Design de Google. J'en ai ensuite fait une PWA qui pouvait être installée et fonctionner hors-ligne. Les données de ma collection étaient sauvegardées dans une base de données MySQL, et l'application en gardait une copie locale pour fonctionner hors-ligne.

Deuxième version du Rémidex Troisième version du Rémidex Quatrième version du Rémidex
L'évolution des anciennes versions du Rémidex

J'ai voulu rendre l'application utilisable par d'autres personnes, d'abord en leur permettant de l'utiliser sur leur mobile, sans se synchroniser à la base de données (qui n'était pas encore conçue pour gérer de multiples utilisateurs). Puis j'ai finalement décidé de recréer l'application à nouveau, en ouvrant l'intégralité des fonctionnalités à tout le monde, et en en ajoutant de nouvelles. C'est à ce moment-là que j'ai renommé le projet Shinydex, puisqu'il n'avait plus de raison de porter mon nom.

Version actuelle du Shinydex
La version actuelle du Shinydex, ouverte à tous

Le Shinydex est une recréation totale du Rémidex en repartant de zéro, aussi bien pour la partie front-end que back-end. Son design actuel est basé sur la dernière version de Material Design. L'application est divisée en 4 sections principales :

  • La liste des Pokémon chromatiques de l'utilisateur,
  • le Pokédex, liste de tous les Pokémon qui existent,
  • la liste des chasses en cours, c'est-à-dire des Pokémon que l'utilisateur est en train de rechercher,
  • la liste d'amis.

La liste des Pokémon chromatiques de l'utilisateur s'ouvre au lancement de l'application, avec une petite animation qui fait glisser les cartes vers le haut l'une après l'autre. Si l'utilisateur est connecté, un cercle apparaît autour du bouton paramètres en haut à droite de l'écran pendant la sauvegarde de ses données.

L'animation d'ouverture de l'application

Lorsqu'un nouvel utilisateur ouvre l'application, il n'y a aucun Pokémon à afficher. L'utilisateur est cependant accueilli par un message l'invitant à se connecter avec son compte Google. C'est totalement optionnel, mais cela permet de sauvegarder ses données dans une base de données (MariaDB) en ligne, et ainsi d'utiliser l'application sur plusieurs appareils ou de partager sa liste de Pokémon avec ses amis.

Page d'accueil de l'application pour un nouvel utilisateur
La page d'accueil de l'application pour un nouvel utilisateur

Le bouton flottant "+" en bas à droite de l'écran permet d'ajouter un Pokémon. La barre de recherche en bas de l'écran permet de rechercher des Pokémon en saisissant le nom de leur espèce (par exemple "Pikachu") ou le surnom que leur a donné l'utilisateur.


Le Pokédex montre chaque Pokémon sous la forme d'une petit icône. L'intérêt d'un Pokémon chromatique est le fait qu'il ait une couleur différente de son apparence normale. Puisque certaines personnes préfèrent ne pas connaître les couleurs d'un Pokémon chromatique avant de l'avoir trouvé, les icônes des Pokémon que l'utilisateur ne possède pas sont grisées. Lorsque le Pokémon a été ajoué au Shinydex par l'utilisateur, l'icône prend les couleurs du Pokémon chromatique.

Certains Pokémon possèdent plusieurs formes différentes, chacune ayant sa propre version chromatique. Pour ces Pokémon, de petits indicateurs circulaires sont placés au-dessus de leur icône, pour indiquer le nombre de formes et si elles sont possédées ou non par l'utilisateur.

Section Pokédex du Shinydex
Le Pokédex, liste de tous les Pokémon qui existent

Cliquer sur l'icône d'un Pokémon ouvre une page montrant chacune de ses formes et permettant de comparer ses apparences chromatique et normale. Un bouton permet aussi d'ajouter directement le Pokémon à la liste des chasses en cours.

La page montrant les images du Pokémon apparaît avec une animation qui l'agrandit depuis de l'icône du Pokémon sur laquelle l'utilisateur a cliqué

La barre de recherche en bas de l'écran permet de rechercher des Pokémon en saisissant le nom de leur espèce (par exemple "Pikachu") ou le numéro qu'ils portent dans le Pokédex (par exemple "25" pour Pikachu).

Puisqu'il existe plus de 1000 Pokémon à l'heure actuelle, le Pokédex doit afficher plus de 1000 icônes. Charger 1000 images différentes prend beaucoup trop de temps, donc j'ai écrit un script en PHP qui rassemble toutes les icônes sur une même image. Ainsi, il n'y a qu'une seule grande image à charger, ce qui est beaucoup plus rapide. Additionnellement, la liste des icônes est virtualisée, afin que seules les icônes actuellement affichées à l'écran soient chargées. Un système similaire est utilisé pour chaque section de l'application.


La liste des chasses en cours montre les Pokémon que l'utilisateur est en train de rechercher dans les jeux vidéo Pokémon. Il peut y indiquer l'espèce du Pokémon, sa forme (s'il en a plusieurs), le jeu dans lequel il le chasse, la méthode qu'il utilise pour le trouver, et le nombre de rencontres effectuées jusqu'à présent (en effet, un Pokémon ayant très peu de chances d'être chromatique, il faut en rencontrer un grand nombre pour que le hasard nous offre cette chance).

Section Chasses du Shinydex
Les liste des Pokémon que l'utilisateur est en train de chasser

Lorsqu'il a enfin trouvé le Pokémon chromatique recherché, l'utilisateur peut cocher la case "Capturé". L'application va automatiquement entrer la date actuelle comme date de capture du Pokémon, et d'autres champs apparaissent pour entrer des informations supplémentaires sur la capture.

Avant que la case "Capturé" soit cochée, l'image du Pokémon est affichée avec ses couleurs normales. Au moment où la case "Capturé" est cochée, l'image prend les couleurs de l'apparence chromatique du Pokémon, et une petite animation se joue par-dessus cette image. Cette animation est inspirée des jeux vidéo Pokémon dans lesquels, quand un Pokémon chromatique apparaît, il est entouré de petites étoiles brillantes qui tournent autour de lui.

L'animation étoilée de l'image du Pokémon

La liste d'amis est, comme son nom l'indique, une liste des personnes que l'utilisateur a ajoutées comme ami. Pour ajouter une personne en ami, celle-ci doit s'être connectée au Shinydex, avoir choisi un pseudo public et avoir autorisé le partage de son profil dans les paramètres de l'application.

Section Amis du Shinydex
La liste d'amis (oui, je me suis ajouté moi-même en ami pour tester l'application)

Chaque carte montre le pseudo d'un ami, et en-dessous sont listées ses dernières trouvailles de Pokémon chromatiques. En cliquant sur la carte, la liste complète des Pokémon chromatiques de cet ami s'ouvre.


La page des paramètres de l'application permet de gérer les paramètres de sauvegarde des données et de partage du profil, mais aussi choisir le thème (clair ou sombre) et la langue de l'application.

La dernière version de Material Design colore l'interface des applications avec la couleur du fond d'écran de l'utilisateur. Le Shinydex essaie de suivre Material Design, mais c'est une application web, pas une application Android. Par conséquent, il est impossible pour le Shinydex de récupérer cette couleur. J'ai donc ajouté aux paramètres le choix de la teinte de l'interface, afin que l'utilisateur puisse choisir lui-même quelle couleur donner au Shinydex.

Démonstration de différentes teintes de l'interface du Shinydex

Le Shinydex utilise Colori, un autre de mes projets, pour générer la palette de couleurs de l'interface.

Pour gérer la langue de l'application, et pouvoir la changer sans devoir relancer l'appli, j'ai testé plusieurs façons de faire et, finalement, j'utilise un "Translation Observer" que j'ai développé. Il s'agit d'un Mutation Observer qui observe les changements de langue de la page et auquel chaque élément HTML personnalisé peut souscrire, afin que l'Observer lui communique ces changements en temps réel. Ajouter un tel Translation Observer directement à la spécification HTML est en cours de discussion par le WHATWG.


Je considère désormais que le Shinydex est complet et que toutes mes ambitions à son sujet ont été réalisées. Cependant, de nouveaux jeux vidéo Pokémon vont sortir, et je continuerai de maintenir l'application à jour avec les nouveaux Pokémon et méthodes de chasse contenus dans ces jeux. De plus, je suis sûr que j'aurai de nouvelles idées pour continuer de travailler sur ce projet, et qu'il continuera d'évoluer avec le temps.