
Ali Fassi Fihri
Fès
Ali Fassi Fihri
Développeur web
Category : Web development
Développeur full-stack avec deux ans d’expérience, je conçois et développe des applications web performantes et évolutives, en intervenant sur l’ensemble du cycle de vie d’un projet, de l’analyse des besoins jusqu’au déploiement. J’ai travaillé sur des projets variés, notamment des plateformes de gestion d’entreprise, des systèmes de B2B avec suivi des marchés publics, des dashboards analytiques et des outils d’automatisation pour le scraping et le traitement de données.
Je maîtrise le stack MERN ainsi que NestJS pour des architectures modulaires et maintenables. Mes réalisations incluent des applications basées sur des microservices, des systèmes orientés événements avec RabbitMQ, et des APIs sécurisées intégrant PostgreSQL avec Drizzle ORM et MongoDB. J’ai également participé à la mise en place de pipelines CI/CD et au déploiement via Docker pour assurer la scalabilité et la fiabilité des services.
Parmi mes projets, on peut citer la création d’un système multi-entreprises pour la gestion des utilisateurs et des marchés publics, un scraper automatisé pour l’extraction de données financières et réglementaires, ainsi qu’un dashboard de suivi et d’analyse des performances pour le trading et la data visualisation. D’autres projets typiques incluent le développement d’outils collaboratifs internes, de plateformes e-commerce, de systèmes de notification en temps réel et d’API pour applications mobiles.
Je privilégie une approche pragmatique, centrée sur la qualité du code, la sécurité, les tests et la maintenabilité. Mon objectif est de livrer des solutions fiables, évolutives et adaptées aux besoins métier, tout en automatisant et optimisant les processus quand cela est possible.
Je maîtrise le stack MERN ainsi que NestJS pour des architectures modulaires et maintenables. Mes réalisations incluent des applications basées sur des microservices, des systèmes orientés événements avec RabbitMQ, et des APIs sécurisées intégrant PostgreSQL avec Drizzle ORM et MongoDB. J’ai également participé à la mise en place de pipelines CI/CD et au déploiement via Docker pour assurer la scalabilité et la fiabilité des services.
Parmi mes projets, on peut citer la création d’un système multi-entreprises pour la gestion des utilisateurs et des marchés publics, un scraper automatisé pour l’extraction de données financières et réglementaires, ainsi qu’un dashboard de suivi et d’analyse des performances pour le trading et la data visualisation. D’autres projets typiques incluent le développement d’outils collaboratifs internes, de plateformes e-commerce, de systèmes de notification en temps réel et d’API pour applications mobiles.
Je privilégie une approche pragmatique, centrée sur la qualité du code, la sécurité, les tests et la maintenabilité. Mon objectif est de livrer des solutions fiables, évolutives et adaptées aux besoins métier, tout en automatisant et optimisant les processus quand cela est possible.
Portfolio
Working hours
- Monday:08h00 To 18h00
- Tuesday:08h00 To 18h00
- Wednesday:08h00 To 18h00
- Thursday:08h00 To 18h00
- Friday:08h00 To 18h00
- Saturday:Not available
- Sunday:Not available
SAFAQAT — description du projet
SAFAQAT est une plateforme web dédiée à la gestion des appels d’offres et des bons de commande (BOC) dans le cadre des marchés publics au Maroc. Elle s’adresse aux acteurs qui doivent suivre, saisir et piloter des BOC en lien avec l’écosystème des achats publics, notamment en s’appuyant sur les données du portail marchespublics.gov.ma.
Objectifs métier
Centraliser la gestion des BOC (création, suivi, statuts, détail).
Gérer les utilisateurs et leurs rôles (dont administration).
Référencer et détailler les acheteurs publics et leurs contacts.
Automatiser la collecte d’informations sur le portail national grâce à un service de scraping (navigateur automatisé), avec file d’attente et traitement asynchrone.
Valider les identifiants des comptes entreprise sur le portail via un worker dédié (Puppeteer), en coordination avec le service utilisateurs.
Architecture technique
Le dépôt est organisé en monorepo :
Frontend (safaqat-frontend) : application Next.js (App Router), React, TypeScript, Tailwind CSS, état et données avec Zustand, TanStack Query, formulaires React Hook Form + Zod, tests Jest / Testing Library.
Backend (SAFAQAT-Scraper-microservice) : plusieurs microservices NestJS derrière une API Gateway ; échange asynchrone via RabbitMQ ; bases PostgreSQL (une par domaine : authentification, utilisateurs, BOC, acheteurs, etc.) ; contrats partagés dans une librairie @app/contracts ; login portail partagé pour scraper et validateur (@app/marches-portal-login).
Les services typiques incluent notamment : auth (JWT, sessions, OTP, e-mail), user, boc, acheteur, scraper, validator, api-gateway, et d’autres modules selon les besoins (ex. ao-service).
Déploiement et exploitation
Docker Compose (dossier Deployment/Docker-compose) pour lancer l’ensemble : frontend, gateway, services, bases PostgreSQL, RabbitMQ, avec healthchecks, réseaux isolés et volumes persistants.
Fichiers .env pour secrets, URLs, paramètres du scraper et de la messagerie.
Qualité et intégration continue
GitHub Actions : compilation des services, tests unitaires par microservice, tests frontend, build Next.js, jobs d’intégration / e2e selon la configuration du workflow ; le scraper est également couvert par build + tests dans la CI.
SAFAQAT est une plateforme web dédiée à la gestion des appels d’offres et des bons de commande (BOC) dans le cadre des marchés publics au Maroc. Elle s’adresse aux acteurs qui doivent suivre, saisir et piloter des BOC en lien avec l’écosystème des achats publics, notamment en s’appuyant sur les données du portail marchespublics.gov.ma.
Objectifs métier
Centraliser la gestion des BOC (création, suivi, statuts, détail).
Gérer les utilisateurs et leurs rôles (dont administration).
Référencer et détailler les acheteurs publics et leurs contacts.
Automatiser la collecte d’informations sur le portail national grâce à un service de scraping (navigateur automatisé), avec file d’attente et traitement asynchrone.
Valider les identifiants des comptes entreprise sur le portail via un worker dédié (Puppeteer), en coordination avec le service utilisateurs.
Architecture technique
Le dépôt est organisé en monorepo :
Frontend (safaqat-frontend) : application Next.js (App Router), React, TypeScript, Tailwind CSS, état et données avec Zustand, TanStack Query, formulaires React Hook Form + Zod, tests Jest / Testing Library.
Backend (SAFAQAT-Scraper-microservice) : plusieurs microservices NestJS derrière une API Gateway ; échange asynchrone via RabbitMQ ; bases PostgreSQL (une par domaine : authentification, utilisateurs, BOC, acheteurs, etc.) ; contrats partagés dans une librairie @app/contracts ; login portail partagé pour scraper et validateur (@app/marches-portal-login).
Les services typiques incluent notamment : auth (JWT, sessions, OTP, e-mail), user, boc, acheteur, scraper, validator, api-gateway, et d’autres modules selon les besoins (ex. ao-service).
Déploiement et exploitation
Docker Compose (dossier Deployment/Docker-compose) pour lancer l’ensemble : frontend, gateway, services, bases PostgreSQL, RabbitMQ, avec healthchecks, réseaux isolés et volumes persistants.
Fichiers .env pour secrets, URLs, paramètres du scraper et de la messagerie.
Qualité et intégration continue
GitHub Actions : compilation des services, tests unitaires par microservice, tests frontend, build Next.js, jobs d’intégration / e2e selon la configuration du workflow ; le scraper est également couvert par build + tests dans la CI.
- 🇬🇧 English
- 🇫🇷 French
- 🇲🇦 Arabic
Please sign in as a customer to give your feedback

