Stage de fin d'études — 6 mois — 2027 — Paris

Développeur full-stack Java / React.

Élève-ingénieur en dernière année à CY Tech, après 2 ans et 7 mois d'expérience professionnelle. J'ai conçu et mis en production, seul, un système MES / IIoT complet — back-end Spring Boot, console React, trois applications Android — en pilotant des agents IA de développement.

6surfaces applicatives en production
~380endpoints REST, un seul contrat OpenAPI
~330classes de tests back-end
1seul développeur sur le système

Projets

Deux produits réels, pas des exercices. Pour chacun : la contrainte d'abord, l'architecture ensuite, et les décisions que j'assume — avec leur coût.

MES / IIoT pour une usine de cuir

Jiarun · mission indépendante · 2026 · seul développeur du système logiciel
jiarun.tech
En production

Commandes, opérations, déclarations de production, rémunération à la pièce et supervision machines. Un back-end unique alimente six surfaces : la console d'administration, la console plateforme, le site public, et trois terminaux Android en atelier.

LA CONTRAINTE

  • Échelle cible : 100 sites × ~110 identités ≈ 10 000 comptes. Aucune lecture ne peut charger une collection entière côté client — pagination et filtrage serveur partout.
  • Six clients, un seul contrat. Web, plateforme, site public, tablette d'atelier, mobile opérateur et écran de production doivent rester cohérents sans synchronisation manuelle.
  • Données sensibles. Les salaires à la pièce ne doivent jamais franchir la frontière client, et aucune erreur serveur ne doit exposer de SQL, de trace ou de donnée personnelle.

L'ARCHITECTURE

2 automates PLCatelier de pulvérisation
MQTT / Mosquitto → séries temporelles
Back-end Spring Boot 4 · Java 17→25 PostgreSQL + TimescaleDB · 55 migrations Flyway · Spring Security / JWT · Redis + Caffeine
expose
Contrat OpenAPIsource unique de vérité
génère
Client TypeScriptopenapi-typescript
Client Kotlinmodule partagé
Console adminReact 19
Console plateformeReact + MUI
Site publicweb
Tablette atelierAndroid Kotlin
Mobile opérateurAndroid Kotlin
Écran productionAndroid Kotlin

Le contrat change → les six surfaces cassent à la compilation, pas en production.

TROIS DÉCISIONS QUE J'ASSUME

Pagination par curseur plutôt que par numéro de page, sur l'historique des commandes.

Pourquoi : l'historique est une UNION de plusieurs sources ; un OFFSET par-dessus perd et duplique des lignes dès qu'une écriture arrive entre deux pages. Le coût : plus de « aller à la page 12 », et un état de curseur à gérer côté client. C'est un prix que j'ai accepté sciemment.

Re-plateformage de la console Vue 3 vers React 19.

Pourquoi : le modèle de lecture devait de toute façon être réécrit pour l'échelle — c'était la seule fenêtre où changer de plateforme coûtait peu. TanStack Query pour le cache et l'invalidation, TanStack Router pour un routage typé à la compilation, et la génération de types depuis l'OpenAPI. Le coût : une console Vue 3 fonctionnelle mise au rebut. Si le produit était resté sur un seul site, je serais resté sur Vue 3 — la migration ne se serait pas payée.

Contrat d'erreur : code métier stable + identifiant de trace opaque, jamais de prose serveur.

Pourquoi : les exceptions, le SQL, les valeurs soumises et les données personnelles restent dans les journaux serveur sous un traceId ; le client ne reçoit qu'un code et des arguments structurés qu'il traduit lui-même. Le support relie l'incident par le traceId sans jamais exposer la donnée. Le coût : un adaptateur unique à maintenir sur chaque client, et l'interdiction d'afficher un message renvoyé par le serveur.

QUALITÉ ET EXPLOITATION

  • ~330 classes de tests back-end et tests d'architecture ArchUnit ; côté web Vitest + Testing Library + MSW, recette visuelle Playwright sur 4 résolutions.
  • Budget de bundle tenu à 250 Ko gzip sur le JS initial, vérifié à chaque build (size-limit).
  • Internationalisation FormatJS avec pseudo-localisation et détection de dérive entre catalogues.
  • Déploiement Docker Compose + Nginx + HTTPS, supervision Micrometer / Prometheus, tracing Zipkin, erreurs remontées dans Sentry.
  • Frontière de secrets vérifiée mécaniquement par un hook de pré-commit — aucune valeur réelle dans les dépôts de code.
Java 17–25Spring Boot 4 PostgreSQLTimescaleDB FlywayRedis React 19TypeScript TanStackTailwind KotlinMQTT DockerNginx PlaywrightArchUnit

Assistant IA multicanal et back-office — plateforme de fidélisation

Ruby Tech · stage puis CDI à temps partiel · 2026 → aujourd'hui · équipe de 4
En cours

Plateforme B2B pour la restauration : réservation, paiement en ligne, points de fidélité et assistant conversationnel. Dans une équipe de quatre, je porte seul deux chantiers de bout en bout.

ASSISTANT IA — PÉRIMÈTRE COMPLET

  • Cadrage et parcours de conversation : quelles intentions l'assistant sert, où il doit passer la main à un humain, ce qu'il n'a pas le droit d'affirmer.
  • Intégration Spring AI directement dans le back-end Spring Boot — l'assistant n'est pas un service isolé qui devine : il appelle les API métier (catalogue, disponibilités, réservation, solde de points) et répond à partir de l'état réel du système.
  • Canal WhatsApp en connexion directe à l'API WhatsApp Business Cloud (Meta) : réception par webhooks, messages template, respect de la fenêtre de service de 24 heures, reprise de conversation et journalisation.
  • Un même socle sert le canal web et le canal WhatsApp — la logique métier ne se duplique pas par canal.

BACK-OFFICE REACT + TYPESCRIPT

  • Écrans de gestion des établissements, des réservations, des paiements et des programmes de fidélité, pour des commerçants qui ne sont pas des utilisateurs techniques.

Avant la plateforme, pendant le stage : exploitation du serveur de commande en réseau local (Spring Boot, MySQL, Redis, MQTT, Nginx sous Docker Compose), accès distant SSH / FRP, automatisation de l'installation Ubuntu et bornes Android Kotlin en mode kiosque.

Spring AISpring Boot WhatsApp Cloud APIAppel d'outils ReactTypeScript MySQLRedis Docker Compose

Développer avec des agents IA

Un agent n'échoue presque jamais parce qu'il code mal. Il échoue parce qu'il a reçu le mauvais contexte, ou qu'il n'avait aucun moyen de savoir qu'il se trompait. Voici le système que j'ai construit pour livrer six surfaces en production avec un seul développeur.

1Le contexte est un budget

Le fichier lu à chaque session ne contient que les contresens qui tuent et des pointeurs. Pas de contenu. Tout le reste se charge à la demande. Un document que l'agent lit toujours mais n'utilise presque jamais coûte de la place à celui qui compte.

2Une règle vit à la couche la plus forte

Si une machine peut la vérifier → c'est un garde-fou exécutable (hook de pré-commit, test d'architecture, vérificateur de graphe documentaire). Sinon → une règle de domaine. Sinon → de la mémoire. Une règle qui réapparaît après avoir été écrite est rangée trop bas.

3Neuf domaines, pas une bibliothèque

Chaque famille de tâches a un seul propriétaire : garde-fous back-end, forme des requêtes, qualité des tests, branches et migrations, standards d'interface par terminal, fenêtre de version. L'effectif est fixé : en ajouter un demande une décision, sinon la bibliothèque enfle et plus rien ne se déclenche au bon moment.

4Une source, plusieurs clients

Les règles sont écrites une fois et générées vers les formats des différents outils d'agent. Un vérificateur mécanique refuse la dérive entre la source et les copies — exactement le même principe que le contrat OpenAPI côté produit.

5Agents en parallèle, dépôts isolés

Les worktrees Git donnent à chaque agent sa propre copie : deux surfaces avancent en même temps sans se marcher dessus, et chaque intégration reste une opération lisible dans l'historique.

6Le test est le contre-pouvoir

Un test doit pouvoir tuer une affirmation : oracle indépendant de l'implémentation, pas de miroir du code, pas d'instantané de réponse entière. Le nombre de tests suit le nombre d'invariants, pas le nombre de lignes modifiées. C'est ce qui empêche un agent de se valider lui-même.

Ce que ça change concrètement : l'IA ne m'a pas fait écrire du code plus vite — elle m'a fait passer plus de temps sur ce qui ne se délègue pas. Décider quelle donnée est la vérité. Décider ce qui casse à la compilation plutôt qu'en production. Décider ce qu'on refuse de construire.

Compétences

Ce que j'ai réellement mis en production, pas une liste de mots-clés.

Back-end
Java 17–25, Spring Boot 4 (Security / JWT, Data JPA, Cache, WebSocket, Actuator), Spring AI, API REST contract-first (OpenAPI)
Front-end
TypeScript, React 19 (TanStack Router / Query / Table, react-hook-form + Zod, Tailwind), Vue 3 et Vue 2, internationalisation, accessibilité
Données
PostgreSQL / TimescaleDB, MySQL, Redis, Flyway ; modélisation et optimisation de requêtes à l'échelle
Qualité
JUnit 5, ArchUnit, Vitest + Testing Library + MSW, Playwright, budgets de performance
DevOps
Linux / Ubuntu, Docker Compose, Nginx, GitLab CI / GitHub Actions, Micrometer + Prometheus, Zipkin, Sentry
Mobile / IoT
Android Kotlin et Java (Jetpack Compose, Hilt, Retrofit), MQTT / Mosquitto, automates PLC
IA appliquée
Claude Code, Codex, Cursor — découpage de tâches et gestion du contexte, garde-fous exécutables, agents en parallèle sur worktrees Git, génération de tests sous contrainte de qualité
Langues
Français B2 — cursus d'ingénieur suivi intégralement en français · Anglais B2 · Chinois langue maternelle

Parcours

2026 → aujourd'hui
Développeur full-stack — CDI à temps partiel
Ruby Tech · plateforme de fidélisation pour la restauration · après un stage de 5 mois dans la même entreprise
2026
Développeur full-stack, seul sur le système logiciel
Jiarun · MES / IIoT en production · mission indépendante
2024 → 2027
Diplôme d'ingénieur en informatique — 3e année (FISE 3)
CY Tech — CY Cergy Paris Université · spécialité informatique embarquée · cursus en français
2021 → 2024
Développeur front-end / Android
Tangshan Huahong Technology, Chine · interfaces web d'équipements d'acquisition 3D (Vue / JavaScript) et terminal de paiement par reconnaissance faciale (Android Java)
2017 → 2021
Licence en ingénierie électronique et de l'information
Université Xidian, Xi'an, Chine · parcours sino-français

Ce que je cherche

Un stage de fin d'études de 6 mois en 2027, à Paris ou en Île-de-France, en développement web full-stack. Je cherche une équipe qui travaille en contact direct avec ses clients, et pour qui l'IA sert la conception et l'architecture — pas seulement l'exécution. Je serai à l'aise pour prendre la responsabilité d'un périmètre tôt : c'est la façon dont j'ai appris jusqu'ici.