Zakaria Gafaoui AI Tech Lead & Solutions Architect — from MVP to enterprise production
Available Full map
EN FR
CV (EN) Ask my CV
Lens
  • Identity1
  • Missions10
  • Deep dive14
  • Skill5
  • Product2
  • Note3

Hover a node to reveal its second ring. Click to recentre the map on it.

Deep dive

How to structure a Python back end and a React front end that last

Brouillon Alstom 1,5 j priority P1

Context & constraints

Le même besoin revient sur chaque projet et sur les deux produits : authentification, contrat d'API, streaming, découpage des dossiers. Le rejouer de zéro coûte deux semaines à chaque fois.

Options considered

  • Contrat d'API rédigé côté front : rapide, mais le back suit toujours avec un train de retard
  • Schéma généré depuis le back, types dérivés côté front : une seule source de vérité

The decision

Le back publie le schéma, le front génère ses types

RationaleUne rupture de contrat devient une erreur de compilation, pas un bug d'intégration détecté en recette.

Accepted consequenceUne étape de génération dans la CI.

Implementation

@router.post("/ask", response_model=None)
async def ask(q: Question, user: User = Depends(current_user)):
    ctx = await search(q.text, scope=user.scope)
    if not ctx:
        return no_source_response()
    return StreamingResponse(generate(q, ctx), media_type="text/event-stream")

What broke

Le streaming SSE derrière un load balancer mal configuré : la réponse arrivait d'un bloc et l'attente perçue doublait.

The outcome

  • Un socle réutilisé d'un projet à l'autre, authentification et streaming inclus
  • Base commune d'AIHM et de Formea

What I would do differently

Poser la pagination et la gestion d'erreurs dans le contrat dès le départ, plutôt que projet par projet.

Extended universe