Recherche alternance

Développeur full-stack · 24 mois · Disponible immédiatement

Télécharger le CV

3 semaines entreprise / 1 semaine école
Mastère IA, Développement & Data — IPSSI Montpellier

Portfolio

IRADI Amir
Développeur full-stack

Du monorepo au microservice, je conçois des systèmes complets en temps réel, données, et interfaces soignées. En voici quelques-uns.

01 — À propos

J'aime les projets où l'architecture compte

Développeur full-stack, je passe le plus clair de mon temps à relier des choses : un site à un service, une base à un temps réel, une idée à une interface qui la rend évidente.

Je travaille surtout en TypeScript sur l'écosystème Next.js, avec une vraie appétence pour les systèmes distribués, le temps réel et la donnée. Quand un problème demande un autre outil , Python, un bot, une file de jobs , je vais le chercher.

Côté pro, 16 mois chez Equans Ineo à concevoir et déployer une plateforme de supervision IoT pour des parcs photovoltaïques — du dashboard temps réel jusqu'au conteneur Docker en production, avec de vrais utilisateurs sur le terrain.

Ce portfolio rassemble ce qui résume le mieux ma façon de travailler : une expérience en entreprise de bout en bout, un écosystème perso ambitieux avec ses satellites, et un side-project pour le plaisir.

Basé à
Montpellier (34)
Focus
Full-stack · Temps réel · Data
Stack
TypeScript · Next.js · Node · Python
Statut
Alternance 24 mois · dispo immédiatement

02 — Expérience

En entreprise

16 mois chez Equans Ineo, en stage puis en alternance, à construire une plateforme de supervision IoT utilisée en production sur des parcs photovoltaïques.

0116 mois

mai 2025 — aujourd'hui

Stage, puis contrat d'apprentissage

Développeur full-stack & IoT

Equans Ineo MPLR · Montpellier

Conception et développement de bout en bout d'une plateforme de supervision IoT pour parcs photovoltaïques : tableaux de bord temps réel, carte interactive, gestion des alertes et visualisation de données techniques, utilisée par les techniciens et les administrateurs.

  • Architecture backend : API REST, authentification JWT et gestion des rôles ; intégration des données capteurs et de services tiers (GPS, météo, géolocalisation).
  • Conteneurisation des applications avec Docker et participation au déploiement sur l'infrastructure serveur.
  • Développement d'un assistant IA 100 % local (Ollama + RAG) pour interroger la documentation technique interne, sans dépendance à un service cloud.
  • Recueil des besoins auprès des équipes métier (techniciens, maintenance, clients), documentation technique, tests et validation.
  • Formation de 2 stagiaires aux bases du développement Python pendant deux semaines : structures de données, algorithmique, exercices pratiques.
  • React
  • Node.js
  • MongoDB
  • Docker
  • Tailwind CSS
  • Git
  • Ollama · RAG
02

juin — août 2024

Stage

Développeur web

Herbo Services · Stage

Audit des besoins avec les équipes, puis conception et mise en ligne d'un site web opérationnel.

  • HTML
  • CSS
  • JavaScript
  • PHP

03 — Projets

Sélection

Quatre projets, deux mondes. Garden et ses satellites , le replay-service et le bot Discord , forment un écosystème lié autour de la même ligue ; BTS Tierlist est le pas de côté qui fait du bien.

01Projet phare2026En Production
Logo Garden

Garden

Un Transfermarkt pour une ligue amateur League of Legends l'écosystème complet.

  • Turborepo
  • pnpm
  • Next.js 15
  • TypeScript
  • tRPC 11
  • Prisma
  • PostgreSQL
  • MongoDB
  • Auth.js · Discord
  • Redis · Upstash
  • Socket.io
  • Riot API
  • Cloudinary
  • Tailwind 4

Garden est une plateforme web qui traite une ligue amateur de League of Legends comme une vraie compétition : valeurs des joueurs, marché des transferts, classements, matchs, stats et un draft en temps réel. C'est le cœur de l'écosystème.

L'ensemble vit dans un monorepo Turborepo + pnpm : le site (apps/web), un serveur temps réel dédié au draft (apps/realtime), et des packages partagés base de données, moteur de draft, types et config réutilisés partout.

Architecture monorepo
apps/web (le site), apps/realtime (serveur Socket.io pour le draft : timer, état pick/ban, persistance Redis), packages/db (Prisma + seed), packages/draft-engine (logique de draft réutilisable), plus des packages de types et de config partagés.
Zone publique
Homepage, transfermarket (valeurs des joueurs, comparaison, fiches détaillées), league (classement, matchs, stats, rulebook, historique), draft, rank, news et customs.
Zone authentifiée
Gestion d'équipe de bout en bout : roster, budget, contrats, transferts, paris, notifications et profil.
Back-office admin
CRUD complet sur joueurs, équipes, matchs, champions, news, paris, contrats et utilisateurs.
Deux bases, deux usages
PostgreSQL pour la ligue officielle, MongoDB pour les customs (saison 2, leaderboard avec tiers, ELO, MVP et ACE). Chaque monde a son modèle de données.
Intégrations & jobs
Auth.js (Discord), Riot API pour les données joueurs, Cloudinary pour les médias, Redis Upstash pour le temps réel, et des tâches cron.
Homepage de Garden : bannière « Eyes on the prize » et liste des plus grosses valeurs de joueurs du moment.
↳Homepage · les gros noms du moment
Fiche joueur de Garden : profil, KDA, win rate, CS moyen, market value et contrat.
↳Fiche joueur · valeur & stats
↳ se branche à Garden
02Microservice Python2026

Replay-service

Un service Python qui lit un replay .rofl et en sort le scoreboard, prêt pour Prisma.

  • Python
  • FastAPI
  • CLI · lol-stats
  • lol_replay_stats
  • ROFL / ROFL2
  • Pydantic

Replay-service est un service Python indépendant (FastAPI + CLI, package lol_replay_stats) qui lit un fichier replay .rofl de League of Legends et en extrait automatiquement le scoreboard, formaté pour remplir directement des lignes Prisma PlayerMatchStats.

Le but est concret : éviter à l'admin de saisir les stats d'un custom à la main. Il upload le .rofl, le service renvoie les 10 lignes (5 BLUE / 5 RED) avec champion, K/D/A, CS, gold, dégâts, vision, durée et vainqueur.

parser.py
Lit le header ROFL/ROFL2 d'un replay et en extrait le JSON de métadonnées.
stats.py
Enrichit les données brutes : KDA, CS/min, gold/min, kill participation, damage share…
api.py & cli.py
Une API minimale (GET /health, POST /replays) exposée par « lol-stats serve --port 8000 », et la commande « lol-stats parse game.rofl » pour parser un replay directement en ligne de commande (--raw, -o pour la sortie).
Intégration Garden
Depuis le détail d'un match custom, un bouton « Importer .rofl » POST le fichier vers la route Next.js admin /api/admin/replays/parse, qui proxy vers le service (REPLAY_SERVICE_URL). L'UI pré-remplit les 10 lignes, puis la mutation tRPC match.recordResult écrit le MatchGame et les 10 PlayerMatchStats en une seule transaction Prisma.
Découplé par design
Service stateless et optionnel : sans lui le site tourne, on perd juste l'import automatique des stats.
↳ partage customs & rating avec Garden
03Bot · Node.js2025 — aujourd'huiEn production
Logo Bot Discord

Bot Discord

Un bot Discord modulaire : queue 5v5 custom, équilibrage d'équipes et rating Glicko-2.

  • Node.js
  • discord.js 14
  • MongoDB
  • Mongoose
  • Express
  • Glicko-2
  • axios

Projet à part entière : un bot Discord modulaire qui anime un serveur de joueurs et organise les parties customs 5v5, avec son propre système de classement. Architecture nette en handlers / services / models / controllers / routes, persistance MongoDB via Mongoose.

Il forme un satellite de Garden : ses customs et son rating partagent le vocabulaire et les tiers de la ligue, et une couche d'intégration expose une API pour résoudre les matchs.

Queue 5v5 custom
File d'attente interactive (boutons + menus) : sélection de rôle (Top, Jungle, Mid, ADC, Support, Fill) et niveau 1-5 pour l'équilibrage. Commandes !custom start / stop / reset / reroll.
Team builder
Un algorithme de backtracking compose deux équipes équilibrées selon les rôles et les niveaux des joueurs présents dans la queue.
Rating Glicko-2
Rating Glicko-2 interne traduit en score 0-100 et 7 tiers au thème jardin (Seed, Sprout, Bloom, Thorn, Crown, Eden, Heaven), sous-divisés III → I, avec 10 games de placement.
API d'intégration
Une couche eloIntegration et des routes Express (POST /matches/resolve) résolvent un match et mettent à jour les ratings — le pont avec l'écosystème Garden.
Animation de serveur
Modération d'images sur utilisateurs surveillés, réponses aléatoires, templates de messages avec @everyone, reaction-roles et tickets.
Message Discord du bot : classement 5v5 custom des joueurs par rating, avec tiers (Thorn, Bloom), winrate et stats.
↳Leaderboard 5v5 · tiers & rating
Message Discord du bot : liste des commandes (queue 5v5, stats & classement, administration ELO).
↳Commandes · queue, stats & ELO
04Side-project2026Pour le fun
Logo BTS Tierlist

BTS Tierlist

Arirang : une SPA pour classer et noter en ligne les 14 titres du nouvel album de BTS.

  • React 19
  • Vite 8
  • Tailwind 4
  • Framer Motion
  • @dnd-kit

Le pas de côté qui fait du bien : Arirang, une single-page app pour classer et noter les 14 titres de l'album ARIRANG de BTS (sorti le 20 mars 2026), directement en ligne.

Pas de backend, pas de monorepo ? juste une interface soignée qui donne envie de glisser des titres et de débattre des classements. Le projet plaisir entre deux gros chantiers.

Tierlist drag & drop
On glisse les titres dans des tiers S/A/B/C/D/F, avec des animations fluides signées Framer Motion et @dnd-kit.
Notes & moyenne
Chaque titre se note sur 10 en étoiles, et la moyenne de l'album se calcule automatiquement.
Direction artistique
SPA premium au thème noir/vermillon : orbes ambiantes, typographie coréenne verticale et marquee animé.
Interface tierlist d'Arirang : rangs S à F vides à remplir, titres non classés de l'album et typographie coréenne verticale.
↳Tierlist · rangs S → F
Onglet Notes d'Arirang : note moyenne 8.2/10 et notation par étoiles de chaque titre de l'album.
↳Notes · moyenne d'album

04 — Contact

On en parle ?

Un projet, une opportunité, ou juste envie d'échanger sur l'un de ces chantiers.