Projets

Ce que j'ai construit

Trois systèmes menés seul de bout en bout, trois outils installables dès aujourd'hui, et les travaux de débutant qui m'ont appris. Chaque projet majeur a son propre jeu de pages — architecture, décisions, chronologie, et les problèmes qui en sont sortis.

EduQate

2026 — en cours

C'est mon travail quotidien. La plateforme d'applications de JoyPix, construite de bout en bout à partir d'un court pitch visuel. Des organisations reçoivent et examinent des candidatures du public : un côté candidat, un côté opérateur, et un niveau d'administration plateforme au-dessus des deux. Trois apps web et une app mobile, dix-neuf modules de domaine sur seize préoccupations centrales, cinq couches où chaque dépendance pointe dans le même sens. En ligne sur eduqate.qa.

Modules de domaine
19
Apps client
4
Couches d'architecture
5
Services dans la stack
10
Tests automatisés
7 000+
Comptes rendus de problèmes
12
NestJSPrismaPostgreSQLpgBouncerRedisSocket.ioReact 19Vite+7
Ouvrir l'étude de cas
Apps client3 SPA web · 1 React NativePaquets partagéstypes · client api · hooks de requête · 2 kits UIModules de domaine19 modules · ~21k lignesPréoccupations centralesauth · politique · paramètres · outbox · stockageInfrastructurePostgres · Redis · stockage objet · service d'images Rust2 violationsconnuesdispatcher outbox → notifications · auth → enregistrement utilisateur
Chaque flèche pointe vers le bas. La valeur n'est pas la propreté — c'est que le rayon de souffle d'un changement se lit sur le diagramme, ce qui rend un registre de vérification possible. Les deux flèches en pointillés sont de vraies violations trouvées en comptant les imports plutôt qu'en faisant confiance à l'image.

Ferry

2026

Un outil pair-à-pair open source pour les équipes de développeurs, sous licence Apache-2.0. Chaque machine fait tourner le même démon — client et serveur à la fois — et une CLI, une extension VS Code et une app de bureau Tauri lui parlent toutes via un socket local. Sept crates Rust dans un seul workspace Cargo, avec la direction des dépendances imposée par le graphe de crates : la casser est une erreur de build, pas quelque chose qu'un relecteur doit attraper. Deux démons font tourner tout le pipeline de bout en bout : découverte, pairing, rosters signés, transfert chiffré, livraison.

Crates Rust
7
Tests
350+ Rust
Surfaces
CLI · VS Code · Desktop
Bindings générés
37 types
Primitives crypto
4 auditées
RustNoise XKSPAKE2ageed25519SQLitemDNSTauri+2
Ouvrir l'étude de cas
Ferry — l'écran d'envoi

OpenDerja_TN

2026 — en cours

Douze millions de personnes écrivent cette langue chaque jour et il n'en existe presque aucune trace correcte. Des contributeurs écrivent, corrigent et confirment de la derja de leur propre région, et il en sort un jeu de données citable, un lexique, et un traducteur construit sur le corpus. Non lucratif par conception. Le back-end est fait — un cœur de domaine sans framework, onze modules NestJS, un schéma de 42 modèles, de l'OAuth par fournisseur, une file de jobs pg-boss — et le projet s'ouvre maintenant aux contributeurs au lieu de rester en solo.

Modèles de données
42
Suites de tests
59 · 302 tests
Modules back-end
11
Régions modélisées
4
Plans de langage
3
Next.jsNestJSCœur sans frameworkPostgreSQLPrismapgBouncerpg-bosspg_trgm+3
Ouvrir l'étude de cas
Plan de contrôleTypeScriptbackendworkerscrapersconstruitPlan de donnéesRustdeduptextexportauditmediadélibérément videIntelligencePythonnlpdélibérément videRègle de promotion : mesurée, pas devinée.Rien dans un chemin de requête ne doit jamais attendre une inférence.
Une étape passe à Rust quand elle est mesurée comme un goulet d'étranglement à l'échelle réelle du corpus — pas quand il semble que ça irait plus vite. Les modules vides sont des jointures pré-échafaudées pour que le déplacement reste peu coûteux. Qu'ils soient encore vides est le but, et c'est écrit dans le propre registre du projet pour qu'une session ultérieure ne les traite pas comme un trou à combler.

Job Scraper 02

2026 — en cours

Un scraper FastAPI et un tableau de bord Streamlit dans deux conteneurs, pilotés par une API REST que l'interface se trouve juste à appeler. Colle ton CV et quelques mots-clés, clique Démarrer, et il cherche sur plusieurs sites d'emploi et classe chaque résultat de 0 à 10 par rapport à toi. Je l'ai construit pendant ma recherche d'emploi et il m'a trouvé le job. C'est un vrai paquet sur PyPI maintenant, avec une chaîne de release qui fait plus que taguer un commit.

Sur PyPI
pip install job-scraper02
Version
v0.3.0
Tests
26 · la CI lance la vraie app
Images de conteneur
3 (scraper · ui · tout-en-un)
Fournisseurs d'IA
3 + Lite Mode sans clé
FastAPIStreamlitPlaywrightSQLitepandasGroq / Anthropic / GeminiDocker Composen8n (optionnel)+2
Ouvrir l'étude de cas
Le tableau de bord des annonces notées

Publiés & publics

En conception

Travel tracker

2026 — en planification

Polarsteps est charmant et il jette tes données. Voici la version pour ceux qui veulent les chiffres : stats poussées, exports bruts, vraie reconstruction d'itinéraire. Usage personnel d'abord — ça ne devient public que si ça fait ses preuves.

KotlinJetpack ComposeMaterial 3Mapbox SDKNestJSRustPostgreSQLPostGIS

Projets de débutant — les débuts

Travaux d'équipe et projets d'apprentissage de 2023–2024. Pas le travail sur lequel je voudrais être jugé aujourd'hui, mais je les laisse en ligne — c'est là que j'ai commencé.