Retour aux projets
Cartes cadeaux numériques · Algérie

Odigix

Un des principaux fournisseurs de cartes cadeaux numériques en Algérie. J'ai construit toute la plateforme, frontend et backend : d'une API Laravel qui livrait des codes pré-chargés fin 2023 à la commande directe chez les fournisseurs et une boutique Next.js aujourd'hui.

Voir le site
LaravelNext.jsInertia + ReactLaravel MCPMySQLRedisHorizonEvolution API (WhatsApp)
Rôle
Toute la plateforme, frontend et backend
Depuis
Fin 2023, à temps plein depuis janvier 2026
Utilisateurs
Plus de 30 000 inscrits
Stack actuelle
Next.js, Laravel, admin sur mesure, Laravel MCP

Le problème

Les cartes cadeaux internationales (PlayStation, Steam, Apple, Netflix) ne sont pas vendues en magasin en Algérie, et les cartes bancaires et postales algériennes ne passent pas sur les plateformes qui les vendent. Pendant des années, la seule option, c'était les messages privés Instagram et les groupes WhatsApp : paiement à la main, code envoyé en capture d'écran, et l'espoir qu'il soit valide.

Odigix devait remplacer ça par une vraie boutique : on cherche, on paie par SlickPay ou OneClick, et on reçoit son code en quelques secondes. Pour ça, il faut intégrer des prestataires de paiement locaux et construire la couche autour, parce qu'aucune passerelle internationale ne comble ce manque.

La boutique Odigix sur mobile : bannière cartes iTunes, catégories et navigation du bas
La boutique Next.js sur mobile

Comment la plateforme a évolué

  1. Fin 2023

    Une API Laravel et des codes pré-chargés

    Une boutique Quasar (Vue.js), une API Laravel et Laravel Nova pour l'administration. Chaque commande était livrée depuis un stock de codes achetés et saisis à l'avance par l'admin.

    • Quasar
    • API Laravel
    • Laravel Nova
  2. Ensuite

    La commande directe chez les fournisseurs

    Les API des fournisseurs ont rejoint le circuit de livraison : un code peut être acheté au moment où il est commandé. Le stock local reste utilisé en premier.

    • API fournisseurs
    • Files d'attente
    • Idempotence
  3. Aujourd'hui

    Une boutique Next.js et un admin sur mesure

    Next.js pour le référencement, un admin sur mesure avec la gestion du SEO à la place de Nova, et Laravel MCP pour qu'un assistant IA puisse travailler avec les données et les actions de l'admin.

    • Next.js
    • Inertia + React
    • Laravel MCP

Du stock dormant à la commande directe

Dans la première version, pour vendre un code, il fallait l'avoir acheté avant. L'admin achetait des codes en gros, les saisissait dans le stock, et les commandes étaient livrées depuis ce stock. Ça marchait, mais ça immobilisait la trésorerie dans des codes, limitait le catalogue à ce qui avait été acheté, et laissait dormir tout ce qui ne se vendait pas.

Avant

Un stock acheté à l'avance

  1. 1L'admin achète des codes en gros
  2. 2Les codes sont saisis dans le stock
  3. 3Les commandes sont livrées depuis ce stock

De la trésorerie immobilisée, un catalogue limité à ce qui a été acheté, et du stock dormant pour ce qui ne se vend pas.

Aujourd'hui

Le stock local d'abord, les fournisseurs à la demande

  1. 1Une commande arrive et elle est payée
  2. 2Si un code est en stock local, il est livré depuis le stock
  3. 3Sinon, il est acheté chez un fournisseur à ce moment-là

Moins de stock à porter, et un catalogue qui s'agrandit sans acheter chaque produit à l'avance.

L'intégration des fournisseurs a changé le métier plus que le code : le stock n'avait plus besoin d'être important, et de nouveaux produits pouvaient entrer au catalogue sans être achetés d'abord.

Comment une commande est livrée

Une fois le paiement confirmé, la livraison est une tâche en arrière-plan, pas une étape du paiement. La tâche cherche le code en stock local, l'achète chez un fournisseur s'il n'y en a pas, puis l'envoie au client. La démo ci-dessous rejoue cette tâche : choisissez une situation et passez la commande.

Essayez

Livrer la commande #1042

Le numéro de commande et les lignes du journal sont fictifs. Les règles sont celles d'Odigix.

Choisissez une situation, puis passez la commande.

Quatre règles font l'essentiel du travail :

  • Le stock local d'abord. Les codes déjà achetés passent avant toute nouvelle commande, pour que le stock se vende au lieu de vieillir.
  • La livraison passe par des files d'attente. Les tâches tournent sur Laravel Horizon. Un fournisseur lent retarde une commande sans bloquer le paiement, et une tâche qui échoue est relancée.
  • Chaque achat chez un fournisseur porte une clé d'idempotence, une par article. Un fournisseur peut facturer puis ne pas répondre à temps. La relance porte la même clé, elle ne peut donc pas devenir un second achat. Un code cadeau vaut de l'argent : l'acheter deux fois, c'est perdre de l'argent réel.
  • Plusieurs API fournisseurs, chacune avec ses formats et ses pannes. La tâche de livraison doit rester correcte quand un fournisseur est lent ou en panne, pas seulement rapide quand tout va bien.

Le code est ensuite affiché à l'écran, envoyé par e-mail et par WhatsApp grâce à une intégration Evolution API. Si le client ferme la page, il le retrouve dans l'historique de ses commandes.

Les paiements

SlickPay et OneClick confirment les paiements différemment, avec des délais différents. Un paiement ne compte qu'une fois vérifié par Odigix auprès du prestataire, et le même paiement reçu deux fois ne doit rien changer.

  1. 01

    Le client paie

    Sur SlickPay ou OneClick, sur la page de paiement du prestataire.

  2. 02

    Deux signaux reviennent

    Le client revient sur Odigix et le prestataire envoie une notification. Aucun des deux n'est cru sur parole.

  3. 03

    Le statut est vérifié auprès du prestataire

    Odigix demande directement au prestataire si le paiement est passé, quel que soit le signal arrivé en premier.

  4. 04

    Le paiement est enregistré une seule fois

    Idempotent

    Chaque paiement est identifié par le prestataire et la référence. Une notification envoyée deux fois, ou un double clic, trouve le paiement déjà enregistré et ne change rien.

  5. 05

    Il est rattaché à une seule commande

    Pas de devinette

    Grâce à la référence envoyée au prestataire. S'il ne correspond pas à exactement une commande, il est laissé à une personne, jamais attribué à la commande la plus proche : les cartes cadeaux ont des montants fixes, les totaux identiques sont fréquents.

  6. 06

    La commande est payée, la livraison démarre

    La commande passe en payée et la tâche de livraison décrite plus haut est mise en file.

Aujourd'hui : Next.js, un admin sur mesure et MCP

  • La boutique est passée sur Next.js pour le référencement. Chaque produit et chaque catégorie a maintenant une page rendue côté serveur, que les moteurs de recherche peuvent explorer, ce que l'application Quasar ne permettait pas.
  • Un admin sur mesure a remplacé Laravel Nova. Il est construit avec Laravel, Inertia et React, et permet à l'équipe de gérer le SEO du site depuis le tableau de bord.
  • Laravel MCP dans l'admin. Les opérations d'administration sont exposées comme outils MCP : un assistant IA peut travailler avec les mêmes données et les mêmes actions que l'équipe.

Résultats

  • Un des principaux fournisseurs de cartes cadeaux numériques en Algérie, avec plus de 30 000 inscrits
  • Des commandes livrées automatiquement, depuis le stock local ou directement chez un fournisseur
  • Un catalogue qui s'agrandit sans acheter de stock à l'avance
  • Une boutique pensée pour le référencement, et un admin avec lequel un assistant IA peut travailler via MCP

Vous avez un projet similaire ?

Expliquez-moi où vous en êtes et ce qui vous bloque. Réponse rapide sur WhatsApp, devis gratuit.