Le premier vrai client, la première pièce forgée de zéro.
Encore étudiant, j'ai livré à un gestionnaire de copropriété une application complète : Vicinity, l'outil qui relie les résidents et leur syndic, sur le web, iOS et Android à partir d'un seul code. Ma première vraie mise en production, et l'école où j'ai appris les patterns qui me servent encore.
- Front
- Ionic · Angular · Android (Java) · Swift
- Back
- NestJS
- Infra
- Firebase
- Outillage
- Xcode · Nx
Relier des résidents et leur syndic
Une copropriété, c'est deux mondes qui se parlent mal : des résidents qui veulent signaler un problème, suivre les charges, réserver un espace commun, et un gestionnaire qui reçoit tout par téléphone et par e-mail. Le besoin était de mettre les deux dans la même application, sur tous les écrans, sans multiplier les développements.
J'étais encore à l'université. Ce n'était pas un projet d'école : un vrai client, un vrai budget, une vraie obligation de livrer. C'est la pièce qui a fait basculer le goût du code en métier.
Un seul code, trois plateformes, la prod comprise
Web, iOS et Android à partir d'une base unique en Ionic et Angular, une API NestJS et Firebase pour le temps réel et les notifications. Tout, de la conception au déploiement sur les stores : je n'ai pas seulement écrit l'application, je l'ai mise en production et maintenue.
Livrer seul un produit multi-plateforme quand on débute, ça oblige à trancher : ce qui est essentiel, ce qui attendra, ce qui doit tenir dans le temps. La meilleure formation que je pouvais recevoir.
Résidents et syndic, dans la poche





L'école des patterns
Trois problèmes concrets ont posé des réflexes que je garde. L'offline : une app mobile doit rester utile sans réseau, donc synchroniser plutôt que dépendre. Le temps réel : un signalement déposé par un résident apparaît chez le gestionnaire sans qu'on recharge quoi que ce soit.
La modularité multi-tenant : chaque copropriété activait sa propre liste de fonctionnalités, à la carte. Il fallait donc un système de droits modulaire, où les permissions se composent selon les modules souscrits plutôt que d'être semées en dur dans le code. Des patterns appris ici sur le tas, que je retrouve aujourd'hui dans chaque architecture propre.