À propos
Qui je suis
Je suis développeur chez JoyPix à Doha, seul sur leur plateforme d'applications. Avant ça j'ai cofondé un petit studio en Tunisie et fait du support d'exploitation dans une entreprise de VTC. En dehors du travail, je construis des outils open source en Rust et en Python. Cette page, c'est le reste : ce sur quoi je travaille, ce que le travail en solo change, et comment me joindre.
En ce moment
Mis à jour le 4 septembre 2026Une réponse permanente à « sur quoi tu travailles ? », tenue à jour à la main plutôt que déduite de l'activité de commits.
JoyPix — la plateforme, au quotidien
Mon vrai travail. Trois apps web, une app mobile et l'infrastructure en dessous, en tant que seul développeur dessus. En ligne sur eduqate.qa.
Ferry — vers la sortie
Le démon de transfert pair-à-pair devient public. Huit crates Rust, une CLI, une extension VS Code et une application de bureau, tous parlant à un seul démon local. Aucun serveur nulle part.
OpenDerja_TN
Le corpus ouvert pour la derja tunisienne — construction de la surface contributeur par-dessus le back-end et le moteur de tâches.
Un travel tracker pour les gens qui veulent les données
Une alternative à Polarsteps construite autour de ce que Polarsteps ne fait pas : traces GPS éditables, reconstruction d'itinéraire avec accrochage à la route, vrais exports CSV/JSON, région-visitée comme statistique de première classe. J'apprends Kotlin de zéro pour ça.
La couche sous l'application
LFCS et Cisco CCNA — administration Linux et fondamentaux réseau — avant de gérer mon propre serveur dédié. Plus la certification d'architecture logicielle iSAQB, pour affiner la façon dont je rédige le travail d'architecture que je fais déjà.
Sur le travail en solo
Porter un système de bout en bout tout seul, ce n'est pas la même chose qu'être un développeur dans une équipe. Personne n'attrape une mauvaise décision avant la livraison, et il n'y a pas de second modèle mental contre lequel recouper le sien. C'est pour ça que le monitoring d'erreurs, les contrôles de dérive de schéma en CI et les tests de non-régression pour les bugs déjà rencontrés ont cessé d'être optionnels. Ils font une partie du travail qu'un autre regard ferait rien qu'en remarquant les choses au passage.
Faits
Langues
Basé à
Doha, Qatar — originaire de Le Kef, Tunisia. 4 ans à construire.
Comment ce site est construit
Une de mes propres règles : génère le vocabulaire partagé, ne le retranscris jamais. Deux copies maintenues à la main de quoi que ce soit divergeront, silencieusement. Alors ce site est généré depuis le journal de dev plutôt que copié depuis lui.
Le pipeline
La source de vérité est un coffre Obsidian — un dossier par projet, chacun avec une chronologie, un relevé de décisions, une liste courante de problèmes, et un ensemble de notes de technique.
Une étape de build lit ce coffre et :
- copie les notes de technique dans le site, en résolvant les wikilinks du coffre en vrais liens
- découpe la liste de problèmes de chaque projet en une page par problème, en extrayant la date de chaque entrée
- applique une passe de sanitisation au seul projet sous confidentialité client — pas de nom de produit, pas de secteur, pas de noms de fournisseurs — tout en gardant chaque détail technique
Un contrôle CI fait échouer le build si le contenu commité diverge un jour du coffre. Le site peut être déployé sans le coffre présent ; le contenu généré est autonome et commité.
La stack
- Next.js App Router, généré statiquement — chaque page est du HTML au build, ce que veut le contenu chargé en journal
- Système de design porté de mon portfolio précédent : un fond bleu marine sombre, un accent cyan, Space Grotesk pour le texte et JetBrains Mono pour tout ce qui est de la donnée
- Markdown rendu avec remark ; le frontmatter parsé avec gray-matter
- Pas de CMS, pas de base de données, aucun fetch de données côté client pour le contenu
Ce qui manque délibérément
Un CV PDF généré, et pas grand-chose d'autre. Le formulaire de contact est une seule fonction serverless qui m'écrit et accuse réception à l'expéditeur via Resend — pas de base de données. Chaque note, chaque problème et chaque chapitre du récit a sa contrepartie anglaise.