Aller au contenu
HL
DisponibleEN
Étude de cas / fintechlivré

MENA Trade

SaaS de signaux de trading par IA avec cours, abonnements par paliers et interface EN + darija en RTL

Tableau de bord mobile de MENA Trade affichant les cartes Learning Center, Headlines et Events Calendar au-dessus d'un panneau Gold Market Analysis en direct avec le cours XAUUSDCalendrier financier de MENA Trade sur mobile avec filtres de période, recherche d'événements, nombre d'événements par impact et tableau des événements économiques du jour
Tableau de bord mobile : cartes de fonctionnalités et panneau de marché de l'or (XAUUSD) en direct.

En bref

Plateforme
Application web responsive (navigateur sur ordinateur et mobile)
Calendrier
Juin 2025 à février 2026
Rôle
Lead développeur full-stack
Commits
189 sur 196 écrits par moi
Langues
Anglais et darija marocaine (RTL)
Actifs couverts par les signaux
EURUSD, XAUUSD, NASDAQ 100, S&P 500

Vue d'ensemble

MENA Trade est une plateforme de formation au trading et de signaux destinée aux traders particuliers marocains et de la région MENA. Elle combine des signaux de trading générés par IA sur l'EURUSD, l'or, le NASDAQ 100 et le S&P 500 avec un coach de trading IA, des analyses de marché, un calendrier économique, un journal de trading et des cours, le tout vendu en formules Free, Advanced et Ultra. J'étais le lead développeur full-stack et j'ai construit l'application Next.js, le panneau d'administration, les parcours de paiement et le worker de signaux sur AWS.

Le défi

Le produit devait produire des signaux de trading selon un planning, et pas seulement à la demande d'un utilisateur, puis les distribuer à chaque utilisateur dans la limite du quota de sa formule. Les appels à Claude, à Gemini et aux API de données de marché sont facturés à la requête : un signal ne valait donc la peine d'être généré que lorsque le marché était ouvert et que la configuration était solide. L'application devait aussi fonctionner en anglais et en darija marocaine avec une mise en page de droite à gauche. Elle avait besoin de moyens de paiement adaptés à un public marocain (virement bancaire et USDT) en plus de Stripe. L'application web est hébergée sur Netlify, dont les timeouts des fonctions serverless excluent les tâches longues comme une analyse multi-timeframe suivie d'un appel à Claude.

Mon rôle

Entre juin 2025 et février 2026, j'ai écrit la quasi-totalité du code (189 commits sur 196). J'ai construit l'application Next.js 15 App Router : environ 180 route handlers d'API couvrant l'authentification, les signaux, le coach IA, l'analyse forex/actions, les actualités, le calendrier, la formation, les notes, les abonnements et le parrainage, plus 40 modèles Mongoose. J'ai aussi écrit l'authentification JWT/session sur mesure avec double authentification TOTP, le panneau d'administration basé sur les rôles (utilisateurs, abonnements, demandes de paiement, retraits des affiliés, support, statistiques) et les traductions EN/darija avec next-intl. Côté signaux, j'ai construit le moteur de signaux à score de confluence et le worker dockerisé, et écrit les scripts de configuration AWS pour ECS Fargate et EventBridge. Le diffuseur web push et e-mail, le checkout et les webhooks Stripe, la vérification des paiements par virement bancaire et en USDT, et le système de commissions d'affiliation étaient aussi de mon ressort.

Architecture

  1. Clients

    • Application web

      Next.js 15, React 19, Tailwind CSS, Radix UI, GSAP

      Tableau de bord, signaux, coach IA, analyses, calendrier, notes et cours, avec la direction du document basculée en RTL lorsque la locale darija est active.

    • Panneau d'administration

      Next.js App Router

      Écrans restreints par rôle pour les utilisateurs, les abonnements, les demandes et justificatifs de paiement, les affiliés et les retraits, les tickets de support et les statistiques.

  2. Edge/Diffusion

    • Hébergement et middleware

      Netlify, Next.js middleware

      Next.js déployé sur Netlify, avec un middleware qui protège les routes du tableau de bord et sert un mode maintenance contrôlé depuis l'administration.

  3. Services

    • Routes d'API

      Next.js route handlers, Zod

      Environ 180 handlers couvrant l'authentification, les signaux, le coach IA, les données de marché, les actualités, la formation, les notes, les abonnements et le parrainage.

    • Worker de signaux

      Node.js, Docker, AWS ECS Fargate

      Conteneur autonome qui vérifie quels marchés sont ouverts, génère les signaux et confirme que les nouveaux signaux sont bien persistés en base avant de les diffuser.

    • Planificateur

      AWS EventBridge

      Quatre règles cron lancent le worker toutes les 30 minutes : trois couvrent le forex et l'or du dimanche 22:00 au vendredi 22:00 UTC, et une couvre les indices américains pendant les heures de cotation américaines en semaine.

    • Moteur de confluence

      TypeScript

      Note sur 100 les indicateurs techniques et la structure de marché en daily, 4H et 1H, ajoute des bonus plafonnés de kill zone et d'actualité calme, et rejette toute configuration sous 70.

  4. Données

    • Base de données principale et cache

      MongoDB, Mongoose

      Utilisateurs, signaux, abonnements, paiements, parrainages et journaux de notifications, plus un cache adossé à MongoDB avec des TTL par clé.

    • Stockage de fichiers

      AWS S3 (presigned URLs)

      Médias des cours, pièces jointes des notes et justificatifs de paiement par virement, envoyés directement depuis le navigateur.

  5. Services tiers

    • Fournisseurs d'IA

      Anthropic Claude, Google Gemini

      Claude rédige les signaux, le coaching et les analyses ; Gemini sert au sentiment de marché et au filtrage des actualités.

    • Données de marché

      Yahoo Finance, Alpha Vantage, Twelve Data

      Données OHLCV multi-timeframe, avec une table de correspondance des symboles par actif pour chaque fournisseur et un repli sur un autre fournisseur en cas d'échec.

    • Paiements

      Stripe, BNB Smart Chain RPC

      Checkout, webhooks, remboursements et annulations Stripe depuis l'administration, plus une vérification on-chain des paiements USDT auprès de plusieurs endpoints RPC publics et un parcours manuel de virement bancaire.

    • Notifications

      Web Push (VAPID), Resend

      Notifications push navigateur et modèles d'e-mails bilingues pour les signaux, avec désactivation automatique des abonnements push expirés.

Décisions clés

  1. 01

    Sortir la génération des signaux de Netlify vers Fargate

    Une exécution de signal récupère les données sur trois timeframes, les note puis appelle Claude avec la recherche web, ce qui se heurtait aux timeouts des fonctions Netlify et provoquait des erreurs 504 que j'ai dû corriger. J'ai packagé le générateur et le diffuseur dans un worker Docker distinct qu'EventBridge lance sur ECS Fargate. La contrepartie est une deuxième cible de déploiement (builds d'images de conteneur), en échange de l'absence de timeout de requête et d'un calcul facturé à l'exécution.

  2. 02

    Ne tourner que lorsque le marché est ouvert

    Les règles EventBridge suivent les horaires de cotation de chaque classe d'actifs, et le worker revérifie les heures de marché avant de générer quoi que ce soit : aucun appel d'IA ni de données de marché n'est donc effectué quand les marchés sont fermés. Le prix à payer est de maintenir la logique de planification correcte à deux endroits.

  3. 03

    Score déterministe d'abord, LLM ensuite

    Un moteur de confluence à base de règles note chaque configuration sur 100 : biais daily 25, confirmation 4H 25, entrée 1H 20, indicateurs 15 et structure 15. Les bonus de kill zone et d'actualité calme ne s'appliquent qu'au-dessus d'un score de base de 65 et sont plafonnés à 10 points : ils ne peuvent donc pas faire passer une configuration faible dans un palier supérieur. Les configurations sous 70 sont rejetées avant tout appel à un modèle ; celles qui obtiennent 80 ou plus sont rédigées par Claude Sonnet 4 et les autres par Claude Haiku, si bien que le modèle le plus coûteux n'est utilisé que pour les signaux les plus solides.

  4. 04

    Une authentification sur mesure plutôt qu'un fournisseur hébergé

    J'ai construit une authentification JWT et par cookie de session avec double authentification TOTP et codes de secours, trois rôles (user, admin, super_admin) et un interrupteur de mode maintenance dans le middleware. Cela a permis de garder les données d'utilisateur, de formule d'abonnement et de rôle dans un seul modèle MongoDB. En contrepartie, je dois maintenir moi-même la gestion des sessions et le code de 2FA qu'un fournisseur d'authentification hébergé fournirait autrement.

  5. 05

    Limites de débit en couches et cache persistant

    Des limites par service (par exemple Yahoo 1 requête par 60 secondes, Claude 30 et Gemini 40 par 60 secondes) protègent les API en amont. Le chat du coach IA ajoute des limites par utilisateur en rafale, par minute et par heure selon la formule, en plus des quotas quotidiens par formule (5, 10 ou 20 messages au coach IA par jour). Un cache à TTL stocké dans MongoDB continue de fonctionner malgré les cold starts serverless, contrairement à un cache en mémoire.

  6. 06

    Des moyens de paiement locaux en plus de Stripe

    Beaucoup d'utilisateurs ciblés ne paient pas par carte : j'ai donc ajouté le virement bancaire avec codes de référence et justificatif envoyé sur S3 pour validation par un administrateur. J'ai aussi ajouté une vérification USDT qui lit directement la blockchain via une liste d'endpoints RPC publics de BNB Smart Chain, avec repli, plutôt qu'une API d'explorateur à clé.

Résultats

  • J'ai livré une plateforme de trading bilingue (anglais et darija, RTL) avec signaux, coach IA, analyses forex et actions, calendrier économique, journal de trading avec pièces jointes et cours.
  • J'ai déplacé la génération planifiée des signaux de Netlify vers Fargate, facturé à l'exécution, ce qui a éliminé les timeouts 504.
  • J'ai diffusé les signaux par web push, dans la limite du quota quotidien de chaque formule (1, 2 ou 5 notifications push par jour), et par e-mail bilingue sur les formules payantes.
  • J'ai rendu les formules Free, Advanced et Ultra payables par Stripe, virement bancaire ou USDT on-chain, le tout géré depuis le panneau d'administration.
  • J'ai construit un programme d'affiliation qui suit les parrainages et crédite une commission lorsqu'un utilisateur parrainé passe à une formule supérieure, avec des retraits validés par un administrateur.

Stack

Frontend
Next.js 15 (App Router)React 19TypeScriptTailwind CSSRadix UIGSAPFramer Motionnext-intlreact-hook-formZodTradingView widgetsRechartslightweight-charts
Backend
Next.js route handlersMongoDBMongooseJWT + session cookiesspeakeasy (TOTP 2FA)web-pushResendNodemailer
IA
Anthropic Claude (Sonnet 4, Haiku 3.5)Google Gemini
Infrastructure
NetlifyDockerAWS ECS FargateAWS ECRAWS EventBridgeAWS S3AWS Secrets Manager
Paiements
Stripe Checkout and webhooksUSDT on BNB Smart Chain (public RPC)Bank transfer with proof upload

MENA Trade · captures d'écran

Écran des notes de trading de MENA Trade avec une barre d'utilisation du stockage, des options de tri et un formulaire Create Note pour la date, le résultat, le montant, le type d'analyse et le marché
1 / 1Journal de trading : stockage des pièces jointes par formule et formulaire structuré pour consigner chaque trade.