estock.ma
eStock
Ventes, achats et stock pour les entreprises marocaines.
- Rôle
- Seul : produit, design, code et infrastructure
- Année
- 2026
- Site
- estock.ma
Le problème
eStock est la refonte multi-tenant d’une application de stock historique en Symfony et Vue, qu’un distributeur utilise encore chaque jour. Devis, bons de livraison, factures, achats, stock et paiements dans un seul outil qui fonctionne sur téléphone, pensé pour les règles marocaines : ICE, TVA, droit de timbre et montants en lettres.
Ce que j’ai construit
- 01 Des espaces avec des dossiers annuels, des rôles par espace et un catalogue de permissions résolu par dossier.
- 02 Un grand livre de stock comme unique source de vérité : lots FIFO, coût moyen pondéré et transferts entre dépôts.
- 03 Neuf types de documents partageant un seul moteur de formulaire : lignes réordonnables par glisser-déposer, sections, sous-totaux, et une remise répartie sur les taux de TVA avec le même algorithme en JavaScript et sur le PDF.
- 04 Un import qui transfère la base historique d’un vrai client dans un espace neuf, numérotation et historique compris.
- 05 Des tableaux de bord aux graphiques SVG rendus côté serveur, dans des couleurs vérifiées pour le daltonisme.
- 06 Une page d’accueil en français, anglais et arabe (de droite à gauche), dont les captures sont générées automatiquement depuis un espace de démonstration.
Les détails qui m’ont obsédé
- Presque tout est annulable : un document validé revient en brouillon, ses mouvements de stock sont inversés et son numéro est conservé.
- Montants et quantités sont calculés en décimales à précision arbitraire, jamais en flottants.
- Chaque action utilisateur est enregistrée dans un journal d’audit ClickHouse à rotation automatique, lisible comme un historique en langage clair.
- Une recherche globale ⌘K qui applique exactement les mêmes règles de visibilité que les listes qu’elle parcourt.
Stack
- Laravel 13
- PHP 8.4
- ClickHouse
- MySQL 8.4
- Redis
- Pest
- Cloudflare R2
- Resend
- Alpine.js
- Tailwind CSS
- Blade
- Docker