Amanti

Stagiaire ingénieur logiciel — projet appliqué · OpenTecc · February 2025 — May 2025

  • Java
  • Spring Boot
  • REST APIs
  • MySQL
  • Next.js
  • Material UI
  • Stripe
  • Shopify (Remix)
  • JUnit
  • Mockito
  • SonarQube
  • Docker

Au Maroc, les livreurs ne laissent pas les colis devant la porte : la livraison à domicile échoue donc quand personne n'est là. Amanti achemine les colis vers des commerces de proximité que les clients fréquentent déjà, pour qu'ils les récupèrent quand cela les arrange. J'ai construit la plateforme derrière : le back-end, le tableau de bord, les paiements et le plugin qui l'intègre aux tunnels de commande en ligne.

Le problème

Au Maroc, l'achat en ligne repose sur le paiement à la livraison : on paie le livreur au moment où le colis arrive. Les livreurs ne laissent pas les colis devant la porte comme aux États-Unis. Si personne n'est à la maison quand le livreur passe, la livraison échoue. Il doit revenir un autre jour, le colis fait des allers-retours, et le client continue d'attendre.

L'idée

La plupart des gens passent déjà chaque jour devant un commerce de quartier. Amanti transforme ces commerces en points de retrait : le livreur dépose le colis dans un commerce proche du client, et le client vient le récupérer quand cela l'arrange.

Le déroulement d'une livraison

  1. Le client commande en ligne. Sur la page de paiement habituelle de la boutique, il choisit un point de retrait près de chez lui au lieu de la livraison à domicile.
  2. Amanti reçoit la commande automatiquement. La boutique prévient Amanti dès que la commande est passée, et une livraison est créée.
  3. Le livreur dépose le colis au commerce. La remise est confirmée par un QR code et une photo, pour garder la preuve que le colis est arrivé.
  4. Le client récupère son colis. Il passe quand cela l'arrange, la remise est enregistrée de la même façon, et il paie le commerçant en espèces, comme il aurait payé un livreur.
  5. Le commerce règle les comptes. Depuis sa page dans Amanti, le commerçant envoie l'argent encaissé via Stripe, qui le répartit automatiquement : la boutique en ligne est payée pour la commande, et Amanti prend sa commission.

Ce que nous avons essayé d'abord

  • Demander au client de payer en ligne à l'avance. Le paiement à la livraison est la norme au Maroc, donc cette étape de paiement en ligne faisait abandonner les commandes.
  • Une extension de navigateur qui ajoutait l'option de point de retrait aux pages des boutiques. Cela revenait à exécuter notre code dans le navigateur des acheteurs, un risque de sécurité trop important.

La solution finale : un plugin de paiement

Nous avons construit un plugin Shopify natif qui ajoute le choix du point de retrait directement dans la page de paiement de la boutique, sans que le client quitte une page en laquelle il a déjà confiance. Shopify n'était que la première plateforme. Toute la logique de livraison et de paiement est restée dans le back-end d'Amanti plutôt que dans le plugin, pour qu'ajouter plus tard une autre plateforme e-commerce ne demande qu'un petit plugin connecté au même système.

Ce que j'ai construit

J'ai construit Amanti de zéro avec un autre ingénieur, pendant mon stage chez OpenTecc :

  • Le back-end Spring Boot qui gère chaque livraison, de l'arrivée de la commande jusqu'au versement final.
  • Le contrôle d'accès pour trois rôles utilisateurs, avec chaque action enregistrée automatiquement dans un journal d'audit. Il repose sur la programmation orientée aspect, pour qu'aucune nouvelle fonctionnalité ne puisse y échapper.
  • L'enregistrement des remises par QR code et photo, pour toujours savoir qui a eu le colis en dernier.
  • Les paiements Stripe qui répartissent chaque paiement entre la boutique en ligne et Amanti.
  • Le plugin Shopify et le tableau de bord d'administration Next.js pour les commandes, les expéditions, les retours et les paiements.

Nous avons modélisé le système en UML avant d'écrire la moindre ligne de code, puis j'ai fait passer la couverture de tests de 20 % à 80 % avec JUnit et Mockito, avec SonarQube pour la qualité du code.

Analytique

Le tableau de bord offre une vue complète de la santé de l'activité, avec des analyses en temps réel sur les commandes, la performance et les paiements.

Logistique

Gérez efficacement l'ensemble du cycle de vie d'une expédition, de la création à la livraison. Le système prend en charge un suivi détaillé, des journaux d'historique et des processus de dépôt sécurisés.

Retours

Un flux simplifié pour traiter les retours produits, garantissant satisfaction client et efficacité opérationnelle.

Paiements

Une intégration financière robuste avec Stripe, gérant les transactions sécurisées et les versements.

Paramètres

Des options de configuration système complètes pour les réglages généraux, la gestion du compte et le stockage.

Ce que j'en ai retiré

Amanti a été un projet charnière qui m'a appris à combler l'écart entre complexité technique et confort d'utilisation. J'ai appris à naviguer dans les subtilités de l'écosystème Spring Boot à grande échelle, en gérant la logistique du « dernier kilomètre » avec une gestion d'état robuste et un suivi en temps réel. Le principal enseignement a été l'importance de la conception itérative — passer d'une extension de navigateur à un plugin natif fut une décision difficile mais nécessaire, qui a finalement défini la réussite du projet.