J'ai eu l'occasion de travailler avec Kevin sur des projets Magento (1 & 2) de refonte et création de sites e-commerce. Kevin à de solides compétences en développement back et sais rédiger des documentations de qualité !
Bonjour et bienvenue sur cette page qui présente mes activités professionnelles !
Je suis un développeur PHP backend, principalement tourné vers la conception et la maintenance de boutiques e-commerce sur le CMS Magento depuis 2014 et sur Symfony depuis 2021. Je travaille quotidiennement en environnement Linux, avec Docker et Git.
N'hésitez pas à me contacter si vous cherchez :
La méthode la plus efficace pour entrer en communication avec moi est de passer via LinkedIn, ce qui est faisable en cliquant directement sur le lien ci-dessous. À bientôt !
N'hésitez pas à me contacter via mon profil LinkedIn !
Kevin Hagner
Développeur de sites web en freelance (Symfony, Magento 1&2)
J'ai eu l'occasion de travailler avec Kevin sur des projets Magento (1 & 2) de refonte et création de sites e-commerce. Kevin à de solides compétences en développement back et sais rédiger des documentations de qualité !
Super travail de la part de Kevin sur un projet Magento qui a filé droit et atteint ses objectifs. Bonne capacité d'adaptation et d'intégration dans l'équipe ! Un plaisir de travailler avec toi, j'espère sincèrement que ça sera renouvelé.
Nous avons travaillé ensemble sur le site Darjeeling. Grâce à lui nous avons pu migrer et optimiser le site pour les campagnes marketing.
Kevin Hagner est une personne consciencieuse, posée et réfléchie. Il a de très bonnes connaissances en Magento (1&2). Il est très agréable de travailler avec lui.
J'ai eu l'occasion de travailler avec Kevin lorsqu'il faisait parti de la team Magento Sodifrance. Kevin a une belle connaissance de Magento. Consciencieux, je m'appuyais régulièrement sur lui pour la réalisation de développements pointus et spécifiques sur Magento. Il était un des atouts techniques de l'équipe.
J'ai eu le plaisir de collaborer avec Kevin dans le cadre de projets web techniquement complexes. Ses compétences multiples en système et développement font de lui un atout évident. Parfaitement autonome, il sait aussi s'intégrer au sein d'une équipe en partageant son savoir-faire. Je recommande sans réserve !
Kévin nous a accompagné durant 6 mois dans un projet de module pour Magento 2. Il a fait preuve de transparence, d'efficacité analytiques et techniques, de pro-activité et de respect des délais tout en s'adaptant au fonctionnement de notre entreprise.
En résumé, nous recommandons vivement Kévin pour réaliser vos développements !
N'hésitez pas à me contacter via mon profil LinkedIn !
Kevin Hagner
Développeur de sites web en freelance (Symfony, Magento 1&2)
Mes premières expériences avec le monde de l'informatique commencèrent, comme finalement beaucoup de passionnés : par un gros apprentissage en autodidacte.
J'avais commencé à m'intéresser au sujet après un exercice de mathématiques en 4e, qui consistait à calculer de multiples PGCD. Je m'étais dit qu'il serait amusant de réaliser un programme se chargeant de la tâche à ma place… J'ai de cette façon acquis mes bases de C, grâce au vénérable Site Du Zéro.
Les mois s'enchaînant, j'ai travaillé sur les autres tutoriels de la plateforme, jusqu'à concevoir mon premier blog en PHP, derrière un domaine acheté pour l'occasion : spyzone.fr
.
Avec l'informatique, l'électronique représentait un autre domaine qui m'intéressait beaucoup. Fort de ce constat, j'avais décidé de rejoindre une formation en rapport avec ce domaine d'activité : un bac STI (Science et techniques de l'industrie) avec l'option GET (Génie électrotechnique).
J'avais ensuite beaucoup hésité entre poursuivre mes études en informatique, ou en électronique… C'est finalement le premier choix vers lequel je me suis tourné, en validant mon inscription en DUT Informatique à Illkirch.
Le programme ERASMUS m'a offert la chance de partir à l'étranger pour la dispense de mon dernier semestre. Étant donné mon niveau d'anglais assez moyen à l'époque, je me suis dit qu'il s'agissait là d'une opportunité pour moi d'aller m'améliorer dans ce domaine. L'université VIA à Horsens, au Danemark proposait des cours anglophones et était un partenaire de l'IUT de Strasbourg. J'ai donc candidaté pour cette destination et j'ai été accepté.
Cette aventure s'étant très bien déroulée, j'ai décidé de prolonger mon expérience en m'inscrivant dans le cursus complet permettant la délivrance d'un bachelor danois. Pour cela, j'avais deux semestres supplémentaires à passer sur place.
Mes études danoises terminées, je suis retourné à Strasbourg pour débuter mon aventure professionnelle en qualité de développeur junior dans le pôle e-commerce de Netapsys, une petite ESN des plus traditionnelles.
Dès ce moment, j'ai commencé à travailler quotidiennement sur le CMS Magento. J'ai acquis de plus en plus d'expérience jusqu'à finir lead développeur. Je pouvais traiter des sujets en autonomie, en relation directe avec les clients, et gérer de petites équipes.
Désirant découvrir de nouvelles choses, j'ai, avec l'accord de mon employeur, décidé de passer à 80% en 2017, et d'ouvrir une microentreprise en parallèle de façon à pouvoir dédier une journée par semaine à des activités annexes, comme des missions d'administration système Linux, de scripting Perl, mais aussi des activités plus atypiques, comme la réalisation de meubles en carton.
Cette journée libérée m'a également permis de produire des cours que j'ai dispensé au CESI. J'estime cette expérience comme suffisamment importante pour lui octroyer un point complet dans mon CV, car elle m'a demandé des compétences différentes de celles nécessaires à mon métier « principal » de programmeur.
La formation était délivrée en trois journées, face à une vingtaine d'étudiants. La présentation que j'avais écrite et que j'utilisais comme support est disponible ici. En parallèle, les élèves avaient une liste d'exercices à réaliser.
Netapsys ayant subi plusieurs rachats et changement de direction, j'ai fini par ne plus vraiment me reconnaître dans cette société dans laquelle beaucoup de mes collègues étaient déjà partis… Je me suis résigné à faire de même.
Initialement, je ne prévoyais pas de me lancer en indépendant à 100%, mais avec l'inertie de ma microentreprise, c'est finalement ce qui arriva. Aujourd'hui, j'ai pérennisé ce constat. 🙂
N'hésitez pas à me contacter via mon profil LinkedIn !
Kevin Hagner
Développeur de sites web en freelance (Symfony, Magento 1&2)
Amateur de tout ce qui touche à la technologie, j'ai vite été attiré par les cryptomonnaies qui m'intriguaient par leurs fonctionnements techniques. Ce n'est que quelques années plus tard qu'elles commençaient aussi à m'intéresser pour leur potentiel de diversification patrimoniale. Malheureusement, la législation française rend celle-ci complexe à mettre en place, car elle exige une journalisation très stricte de la moindre transaction pour être en mesure de calculer l'imposition sur les plus-values à reverser à l'État. N'ayant pas trouvé de logiciel permettant de réaliser ce suivi efficacement, je le développe moi-même. En plus de sa finalité, ce projet aura été une opportunité pour moi de monter en compétence sur des technologies qui m'intéressent.
Pour ce projet, je suis donc parti d'un socle en Symfony 5 pour la gestion du back-end avec un front en Vue.JS. Les API permettant aux deux entités de communiquer ont été réalisées avec API Plateform.
L'un de mes clients a entrepris une refonte complète du design de son site. À cette occasion, nous avons décidé de migrer sur le thème Hyvä afin de profiter des optimisations que celui-ci offre. J'ai été amené à expérimenter Alpine.js de façon assez poussée, notamment lors du portage des produits bundles dont l'implémentation était à personnaliser.
Pour mesurer l'impact de la refonte et repérer les éventuels problèmes, tant au niveau technique (par exemple, via la survenue d'erreurs JavaScript) qu'à celui de l'UX, la solution Contentsquare a été mise en place. Elle nous permet de suivre le parcours utilisateur de façon à cerner les difficultés rencontrées lors de leurs navigations et de trier les points par importance.
Ce client implémente son propre ERP à l’usage des commerçants, mais aussi des logiciels de caisses, de stocks et de logistique. Dans ce cadre, il m'avait missionné pour réaliser une interface permettant de synchroniser la plateforme Magento de certains de leurs partenaires au reste de leur écosystème.
Initialement, je travaillais avec ce client sur la maintenance d'un back-office Magento qu'ils employaient comme un ERP B2B. Des opérateurs l'utilisaient pour créer des commandes directement depuis celui-ci.
Il a ensuite été décidé de déprécier ce service qui devenait de moins en moins pratique pour le remplacer par un logiciel fait maison se présentant sous la forme d'une multitude de mini-API écrites en Python à l'aide de Flask RESTX qui communiquent avec un nouveau front réalisé en Vue.JS.
Concernant les technologies Python, j'ai notamment travaillé sur :
Du côté de Vue.JS, j'ai expérimenté :
Ce site web a été réalisé à l'aide de Jekyll, un générateur de site statique. J'ai bien évidemment écrit son contenu, mais je me suis aussi occupé du design en LESS, notamment du responsive et du thème sombre.
J'ai aussi profité de l'occasion pour expérimenter TypeScript, que j'ai utilisé pour implémenter le système d'accordéon qui permet d'étendre ou de cacher le détail des missions.
Enfin, j'ai employé Lighthouse pour rendre ce site le plus optimisé possible, particulièrement au niveau du SEO et de son accessibilité.
Dans le cadre de cette mission, j'ai rejoint une équipe dont l'objectif était de porter un site initialement sur Magento 1 vers Magento 2. Mon travail consistait surtout dans la personnalisation du back-office de façon à simplifier la gestion des commandes, des produits et des retours aux différents administrateurs et commerciaux qui auront à l'utiliser.
J'ai ainsi été amené à travailler de façon poussée sur les uiComponents pour créer de nouvelles grilles et formulaires sur le back-office, et à en modifier des existantes. Voilà quelque un de ces développements :
Côté front, un gros travail a été accompli pour afficher des données arbitraires sur les produits simples, configurables, bundles et groupés. Ces données étant évolutives, il fallait gérer leurs valeurs dynamiquement via des requêtes AJAX, car elles ne peuvent pas être cachées. Il était donc également nécessaire de réaliser les différents scripts JavaScripts, templates Knockout.js et des end-points d'API de façon à pouvoir efficacement rapatrier ces informations.
Un acteur spécialisé dans la réparation et le recyclage de matériel électronique avait besoin d'un site permettant à ses clients d'enregistrer des demandes de retour de matériel défaillant. Le client final devait donc acheter des prestations de réparation, et envoyer ensuite son matériel au réparateur une fois la commande validée. Le réparateur se chargeait ensuite de la réparation, puis renvoyait l'objet une fois celui-ci fonctionnel.
La particularité de ce site est de ne pas posséder de catalogue traditionnel, mais d’un unique tunnel qui permet de filtrer les prestations de réparation en fonction du matériel que le client désire retourner. Un routeur personnalisé a dû être conçu pour représenter « l’entonnoir » par lequel le client passe pour affiner sa sélection des réparations.
Par exemple, la page https://site.fr/smartphone/apple
liste tous les téléphones Apple réparables, et https://site.fr/smartphone/apple/iphone11
toutes les pièces précises du téléphone, comme l'écran, la batterie, etc.
Une fois la sélection des pièces effectuées, le client était redirigé dans le tunnel traditionnel de Magento.
Ce client a fait appel à mes services pour continuer à maintenir un site Magento 1 en production pendant que son équipe de développeurs se concentrait sur une refonte en Magento 2.
Dans ce cadre, j'ai notamment :
La direction informatique de l'un de mes clients désirait une petite formation sur Magento 2 de façon à comprendre les mécanismes de base du CMS et à quel point ils diffèrent avec ce qu’ils connaissent déjà : Magento 1.
Dans ce cadre, j’ai réalisé un PDF définissant certains exercices et un dépôt Git contenant les corrections. Nous avons ensuite travaillé sur les points au travers d’une vidéoconférence avec partage d’écran.
Cette formation couvrait notamment les aspects suivants :
J'avais réalisé à des fins éducatives, la conception d'un moteur de blog avec l'objectif de remplacer certains sites déjà existant actuellement sous Wordpress. Malheureusement, ce projet est actuellement en stand-by, mais il m'aura quand-même permis de prendre en mains une bonne partie des concepts de Symfony, comme :
L'un de mes confrères avait pour mission de migrer un site déjà existant sur Magento 1, vers une nouvelle plateforme en Magento 2. Il a fait appel à mon aide sur certains points, dont notamment :
Ce client avait décidé d’abandonner Prestashop au profit de Magento 2, notamment pour une question de rafraîchissement esthétique. Dans ce cadre, j’étais missionné pour porter les fonctionnalités back-end d’une plateforme à l’autre.
Ma première tâche était d’élaborer les environnements Docker que les autres développeurs et moi-même emploierons pour travailler en local sur le projet. Pour cela, j’ai utilisé Docker Compose. L’infrastructure construite est composée d'un proxy nginx configuré avec HTTPS, un conteneur PHP, MySQL, Elasticsearch et les emails sont redirigés vers un intercepteur plutôt que d'être réellement envoyés aux destinataires. J’ai par la suite remanié ce projet pour qu’il soit compatible pour tout type de sites web en PHP. Les sources de mes différents conteneurs Docker peuvent être trouvées sur mon profil GitHub.
Mon travail consistait ensuite dans l’implémentation de briques de communication entre l'ERP et Magento 2 de façon à pouvoir synchroniser les achats et les stocks entre les deux plateformes. Pour ce faire, j’ai dû concevoir de nouvelles commandes CLI, des tâches CRON, ainsi qu’un modèle qui se greffe sur les commandes Magento permettant de savoir lesquelles ont déjà été exportées ou non. J’ai isolé toute la partie générique dans un module externe disponible à tous via Composer. Son code source est également présent sur mon profil GitHub sur cette page.
J’ai créé une méthode de livraison spécifique au besoin du client, qui était de pouvoir récupérer sa commande directement dans les magasins physiques éligibles. Pour cela, j’ai utilisé Knockout.js et réaliser un CRUD dans le back-office de façon à pouvoir renseigner la liste des localités éligibles à cette livraison.
J’ai également réimplémenté la façon dont les factures s’affichent pour les dessiner aux couleurs de la marque. J’ai donc effectué du travail de front-end, mais qui a vocation à être imprimé en PDF, ou sur une feuille de papier.
J’ai aussi assisté les développeurs front dans la transformation des modèles de façon à ce qu’ils aient accès aux données nécessaires. J’ai, par exemple, ajouté une multitude d’attributs EAV sur les produits ou clients ; travaillé sur du JavaScript, comme pour la modification du mini-cart ou le rendu des articles sur le checkout ; ou encore, installer différents modules externes.
Finalement, j’ai également créé d’autres modules pour le compte de ce projet, mais dont les aspects techniques n’ont rien de particulier, comme un système de sélection de vue Magento en fonction du langage et du pays de livraison souhaité par l’internaute, ou un autre envoyant des emails de rapports aux administrateurs.
J’ai expérimenté l'usage de la marketplace Magento en y en mettant à la vente l’un de mes modules. L’objectif principal de cet essai était de pouvoir appréhender toutes les contraintes légales et techniques imposées par Adobe pour l’utilisation de celle-ci pour le jour où j’aurai quelque chose de plus intéressant à proposer.
Ce module m’a également permis de prendre en main le framework MFTF et Selenium pour réaliser des tests d’acceptations. J’ai aussi monté une plateforme locale permettant d’exécuter ces tests au travers d’un projet Docker dont les sources du conteneur sont disponibles sur Github.
Le CESI de Lingolsheim m'avait missionné pour dispenser une formation de trois journées d'introduction à Linux pour les classes de gestionnaire en maintenance et support informatique (GMSI). J'ai donné ces cours aux élèves de première année en 2018, 2019 et 2020. Chacune de ces sessions s'effectuait en présentiel, face à une vingtaine de participants.
J'avais réalisé un support visuel et une série d'exercices qui cadraient l'évolution du cours. L'idée était de laisser quelques minutes (entre 15 et 60) aux élèves pour travailler sur un chapitre, puis de le corriger à l'aide du support visuel et de mes explications.
Les notions abordées étaient les suivantes :
Une petite ESN strasbourgeoise m'avait mandaté pour m'occuper des sites en Magento 1 sous son contrôle. Dans ce cadre, j'ai notamment :
Ce client est une entreprise qui travaille de façon étroite avec ses différents revendeurs à travers le monde. Dans ce cadre, elle avait besoin d’une plateforme centralisant les demandes en fournitures de chacun d’eux.
Je devais gérer la maintenance d'un site e-commerce sur Magento 1 le temps qu'une autre équipe implémente une nouvelle version de celui-ci sur une plateforme plus récente. Il souffrait de sévères problèmes de performances, tant au niveau du back que du front-end. Je me suis efforcé à l’optimiser sur tous les aspects : j’employais le profiler d'Xdebug pour constater certains points faibles dans certains algorithmes PHP ou requêtes SQL, que je réécrivais au mieux ; j’utilisais également Lighthouse pour benchmarker le front et appliquer un maximum de conseils donnés par Google, comme privilégier les images au format WebM, ou l'activation de la compression et minification de fichiers JavaScript. Finalement, le temps de chargement des pages a été divisé par prêt de 4 en moyenne.
Ce client m’avait aussi missionné pour réaliser un POC d’intégration d’Apple Pay, Google Pay et plus globalement de la Payment Request API sur le site. Ce fut une expérience riche en enseignements sur la façon dont fonctionne cette technologie sur les navigateurs web modernes.
Réalisé en Perl 5, ce logiciel est une alternative à Docker pour une utilisation en production sur de petites infrastructures restant néanmoins complexes et sur lesquelles l’administrateur aimerait conserver une emprise complète, et ne pas l’encapsuler dans des images plus ou moins opaques. Ce projet, dont le code source est disponible sur GitHub m'aura permis d'approfondir mes connaissances sur Linux (et notamment la façon dont fonctionnent les namespaces) et en DevOps.
Je m'étais aussi attelé à écrire une documentation la plus exhaustive possible. Elle est lisible à cette adresse et elle aura également été riche en apprentissages, surtout sur LaTeX et en rédaction technique.
N'hésitez pas à me contacter via mon profil LinkedIn !
Kevin Hagner
Développeur de sites web en freelance (Symfony, Magento 1&2)