Projets
Quelques réalisations, et la nature des missions que je mène pour mes clients.
Projets professionnels
Les travaux réalisés pour mes clients sont couverts par une obligation de confidentialité. Je n'en publie ni le détail, ni les captures, ni le code — la même discrétion s'appliquera à votre projet. Voici en revanche la nature des missions et les technologies mises en œuvre.
- Développement web
- Next.js
- TypeScript
- React
- HTML/CSS
- API REST
- SQL
- Cloudflare Workers
- Développement applicatif
- Java
- Spring Boot
- Python
- PostgreSQL
- Test et recette
- Cahiers de recette
- Tests unitaires
- Tests fonctionnels
- JUnit
- Conduite de recette
- Recette avec les équipes métier
- Documentation technique
- Outils
- Git
- GitHub
- Docker
- Cloudflare
- Linux
- VS Code
- Cursor
- Slack
- Linear
J'en parle volontiers de vive voix, dans le respect de mes engagements.
Projets personnels et études
Voici quelques projets. J'essaie de mettre cette page à jour régulièrement et d'y ajouter des liens GitHub.
abdellahabdous.com
Site professionnel et back-office, déployés sur Cloudflare Workers.
ContexteMon propre site : une vitrine, mais aussi le point d'entrée de mes prospects. Il devait être rapide, conforme, et ne perdre aucun message.
- Architecture en couches : route, service, repository, domaine.
- Formulaire de contact protégé par Turnstile, écrit en base de données.
- Notification automatique à chaque demande reçue.
- Espace d'administration protégé par authentification Zero Trust.
- Next.js
- TypeScript
- Cloudflare Workers
- D1
- SQL
Gestionnaire de comptes bancaires
Application Java de gestion de clients, de comptes et d'opérations, adossée à PostgreSQL.
ContexteGérer des clients, leurs comptes et leurs opérations — avec la contrainte propre à l'argent : aucun solde faux, aucune opération perdue, même en cas d'interruption.
- Modèle relationnel sous PostgreSQL : clients, comptes et opérations, avec clés étrangères et contraintes garantissant la cohérence des données.
- Virements traités comme une transaction unique : le débit et le crédit sont validés ensemble, ou aucun des deux ne l'est.
- Montants manipulés en BigDecimal et non en virgule flottante, pour qu'aucune erreur d'arrondi ne se glisse dans un solde.
- Authentification avec mots de passe hachés, jamais stockés en clair.
- Règles de gestion isolées du code d'accès aux données, et couvertes par des tests JUnit : découvert refusé, montant négatif rejeté, solde recalculé.
- Java
- PostgreSQL
- JDBC
- SQL
- Transactions
- BigDecimal
- JUnit
QCM interactif
Application de quiz en Python, avec comptes utilisateurs et sauvegarde des parties.
ContexteUn quiz jouable par plusieurs personnes, où chacun retrouve ses parties précédentes — et où ajouter des questions ne demande pas de toucher au code.
- Inscription et connexion : mots de passe hachés avec Argon2 et un sel aléatoire, jamais stockés en clair.
- Base de données pour les comptes, les parties et les scores, avec reprise d'une partie interrompue.
- Questions et réponses chargées depuis un fichier texte : en ajouter une se fait en une ligne, sans modifier le programme.
- Séparation entre la logique du quiz, l'accès aux données et l'affichage.
- Python
- SQLite
- SQL
- Argon2
- Programmation objet
Désert Interdit
Adaptation en Java d'un jeu de plateau coopératif, avec interface graphique.
ContexteReproduire fidèlement les règles d'un jeu de plateau coopératif : un plateau qui évolue, des joueurs aux capacités différentes, et des conditions de victoire et de défaite qui s'entremêlent.
- Modélisation du plateau, des tuiles et des joueurs par une hiérarchie de classes, les capacités propres à chaque rôle étant portées par des interfaces.
- Séparation stricte entre les règles du jeu et l'affichage, pour que la logique reste testable sans lancer l'interface.
- Règles couvertes par des tests unitaires JUnit, y compris les cas de fin de partie.
- Interface graphique en Swing : plateau, actions disponibles, état de la partie en temps réel.
- Java
- Héritage
- Interfaces
- JUnit
- Swing / JFrame
Simulation proie / prédateur
Écosystème de lapins et de renards simulé sur une grille, en C++, avec rendu visuel.
ContexteObserver l'évolution d'une population de proies et de prédateurs au fil des tours : déplacements, reproduction, chasse et famine, sur une grille partagée.
- Hiérarchie de classes pour les animaux et le terrain, chaque classe découpée en en-tête et implémentation (.hpp / .cpp).
- Compilation pilotée par un Makefile, avec cibles séparées pour le programme et les tests.
- Comportements vérifiés un par un avec doctest : déplacement, reproduction, prédation, disparition.
- Rendu visuel de la grille à chaque tour, pour suivre l'évolution des populations.
- C++
- Programmation objet
- Makefile
- doctest
- Rendu visuel
Gestionnaire de fichiers en ligne de commande
Un shell écrit en OCaml : navigation dans l'arborescence, manipulation de fichiers et interprétation des commandes saisies.
ContexteRéécrire les commandes de base d'un terminal : se déplacer dans l'arborescence, lister, créer, copier, supprimer — le tout dans une boucle qui lit une ligne, l'interprète et l'exécute.
- Boucle lecture-analyse-exécution : chaque ligne saisie est découpée, reconnue, puis dirigée vers la fonction correspondante.
- Commandes représentées par un type somme, ce qui permet au compilateur de vérifier qu'aucun cas n'est oublié.
- Parcours du système de fichiers via les modules Sys et Unix : lecture des répertoires, déplacements, opérations sur les fichiers.
- Erreurs traitées explicitement — chemin inexistant, permission refusée — plutôt que laissées remonter en exceptions.
- OCaml
- Programmation fonctionnelle
- Système de fichiers
- Analyse de commandes
