Aller au contenu principal
Projets

Case 003 / Work

Orient-Express.com

Développeur front, lead de fait · 2024 — 2025

4 min de lecture

Années
2024 — 2025
Périmètre
Arrivée en août 2024 · 3 développeurs front encadrés · propriété technique du projet
Stack
Next.js · Drupal headless · TypeScript · JSON Schema · Storybook
Site live
orient-express.com
Orient-Express.com — hero

J’arrive sur Orient Express en août 2024, pendant que le lead dev est en vacances. Je pose l’architecture et je démarre seul. Quand il revient, il est pris sur d’autres projets et me laisse la place. Je ne serai jamais lead sur le papier ; je le serai en pratique jusqu’à mon départ en 2025, avec trois développeurs front dont je répartis le travail et relis le code.

La reprise

La plateforme réunit trois univers sous un même système : les trains, les hôtels, les yachts. Chacun a son identité et ses parcours de réservation, et tout tient sur une seule base de composants.

L'univers Trains d'orient-express.com, La Dolce Vita
Frame 01 Trains. La Dolce Vita.
L'univers Hôtels d'orient-express.com, La Minerva à Rome
Frame 02 Hôtels. La Minerva.
L'univers Yachts d'orient-express.com, le Corinthian
Frame 03 Yachts. Le Corinthian.

Pour la construire, nous avons repris l’architecture du Louvre. Un front headless, une API qui renvoie un arbre de composants, des gabarits composables côté contribution. Je venais de passer quatre ans dedans ; je savais ce qui marchait, et je savais surtout ce qui coûtait cher.

  • Next.js
  • Drupal headless
  • TypeScript
  • JSON Schema
  • Storybook

Ce que j’ai enlevé

Sur le Louvre, on pouvait imbriquer sans limite. Un dropdown dans un drawer, un drawer dans un dropdown, aussi profond que la contribution le voulait. C’était la fonctionnalité, et c’était puissant. C’était aussi une charge mentale considérable pour l’équipe qui devait tenir tout ça en tête.

Sur Orient Express, j’ai plafonné la composition à un seul niveau. Un enfant dans un enfant, pas plus.

Contrat component.schema.json

{ "properties": {  "type": { "enum": ["page", "section", "card", "dropdown"] },  "children": { "type": "array", "items": { "$ref": "#/$defs/leaf" } }une feuille. Elle n'a pas d'enfants.} }

API

{ "type": "page", "children": [{ "type": "section", "children": [{ "type": "card", "children": [{ "type": "dropdown" }refusé]}]}]}

Front

Le même schéma qu'avant, avec une référence changée. Les enfants pointent vers une définition qui ne peut plus s'imbriquer, donc le quatrième niveau n'est pas un bug que l'équipe doit rattraper : il ne valide jamais. Pointez n'importe quel nœud.

C’est la décision dont je suis le plus content, et c’est une décision de retrait. Refaire le système illimité était à ma portée ; j’ai choisi de ne pas le faire.La flexibilité a un prix. Il est payé par les gens qui maintiennent, et il ne se voit pas dans une démo.

Ce que j’ai automatisé

J’avais écrit un script de génération de composants. Sur Orient Express, il est en place dès le premier jour. Chaque nouveau composant naît donc conforme : schéma, story Storybook, structure. Personne n’a à se rappeler la convention, elle est produite par l’outil.

Nous avons aussi repris les layouts et les formulaires, correctement typés cette fois. Un front piloté par les données a toujours le même point faible, et c’est le formulaire.

Ma place dans l’équipe

L’équipe comptait deux développeurs back, deux chefs de projet, le lead dev et moi, puis trois développeurs front. Je passais autant de temps avec les back et la gestion de projet qu’avec le front, parce que les décisions qui coûtent cher se prennent à la frontière entre les couches, rarement à l’intérieur.

Ce n’était pas un rôle et personne ne me l’a confié. C’est là que j’étais utile.

Ce que ça prouve

Le site a continué d’évoluer un an après mon départ. C’est le seul test qui compte pour une architecture : est-ce qu’elle survit à celui qui l’a posée.

Je n’ai jamais été lead sur le papier. L’architecture, le plafond sur la composition, l’outillage qui rend chaque nouveau composant conforme d’office : rien de tout ça n’a eu besoin de mon titre, et au bout du compte rien n’a eu besoin de moi.

Projet suivantCase 001 / Work

Spliz

Fondateur, product engineer · 2026 →

spliz.app7 min de lecture