Aller au contenu principal
G.B

Architecture

Vue globale de la plateforme g-berenger.com : produits, interconnexions, boucles IA et décisions techniques.

01 · Diagramme global

Utilisateur / Browser
Auth
Produit
IA / API
Stockage
NavigateurGuillaume
Google OAuth
NextAuth v5Google OAuth 2.0
Offre/Offre · Public
Services · Modalites · CTA
CV Online/CV-online · Public
Job Hunter/job-hunter · Auth
Offres · Scoring · CV · Feedback
Assistant CV/cv-assistant · Auth
CV autonome · Feedback loop
English Coach/english-coach · Auth
STT · Mistral · TTS (Morgan)
LLM Council/Council · Public
4 modèles · Peer review · Inngest
Claude SonnetAnthropic
GPT-4o + WhisperOpenAI
Mistral Largemistralai
Llama 3.1 70BGroq
ElevenLabs TTSDaniel · 1.25x
SerpAPIGoogle Jobs
WTTJwelcometothejungle.com
APECapec.fr
sessions · knowledge base
Vercel Blobknowledge base JSON
Vercel Blobsessions CV + English Coach
Vercel BlobCouncil cases
InngestOrchestration workflows

02 · Boucle de retour CV

Boucle de retour CV

Utilisateurretour texte + fichiers
feedback + CV actuel
API /cvaction: revise
prompt + attachments
Claude Sonnetvision + PDF
CV v+1
Nouvelle versionchip v2, v3...
immédiat
Rendu UImise à jour instantanée
permanent
Vercel Blobcv_rule · cv_fact_correction · ignore_feedback
futures sessions
Contexte enrichiCV + raisons d'ignorance injectées

Les fichiers joints (images, PDF, texte) sont envoyés à Claude en tant que blocs de contenu multimodaux. L'API choisit automatiquement le mode vision (image), document (PDF, beta) ou texte.

03 · Interconnexions produits

Job HunterAssistant CV

Transfert offre sélectionnée via sessionStorage (jh-offer-for-cv)

Job Hunter + Assistant CVGPT-4o + Claude Sonnet

GPT-4o : auto_generate (profil + offre) · revise · generate (génération editorial CV). Claude Sonnet : chat (conversation preparatoire + feedback)

English CoachGroq/OpenAI + Mistral + ElevenLabs

Whisper STT (Groq, fallback OpenAI) · Mistral small chat (Morgan) · ElevenLabs TTS (Daniel 1.25x)

LLM Council4 modèles + Inngest

Claude (President + Andrej/Otis) · GPT-4o (Bob) · Mistral Large (Charlie) · Llama 3.1 70B (Diana) · blind peer review · orchestration Inngest

Tous les produitsVercel Blob

knowledge base JSON (max 1000 entrées, OIDC automatique prod) · sessions CV · sessions English Coach · cases Council

04 · Pipeline LLM Council

Pipeline LLM Council · 18 étapes Inngest

Questionutilisateur
OtisClaude Sonnet 5
CLASSIFIED
CASE_BRIEF
enjeux · nature · périmètre
GENERATING

Génération indépendante en parallèle

AndrejClaude Sonnet 5Evidence & Falsification
BobGPT-4oDivergence & Possibility
CharlieMistral LargeDecomposition & Systems
DianaLlama 3.1 70BNuance & Critique
ANONYMIZING
Trooper 99code déterministe
aliases + shuffle
Membre A · B · C · D
pas d'auto-review
REVIEW_PASS_1

Blind Peer Review

Pass 1
4 reviewers · 6 critères scorés
Verrouillé
Pass 2
calibration incertitude
AGGREGATING
Trooper 99merge + ranking
S=0.20R+0.20E+0.20Q+...
CouncilAggregate
score · médiane · dispersion
STRUCTURING
OtisClaude Sonnet 5 · structuration
Claim Map · Dissent Map
Evidence Register · Structural Alerts
PRESIDENT_PASS_1

President · Claude Sonnet 5

Pass 1
8 lenses · sans scores jury
Verrouillé
Pass 2
confrontation signaux jury
COMPLETED
ADJUDICATION_RECORDconclusion · confiance · minority insights
Résultat Councilaffiché dans l'UI
LLM (Claude / GPT-4o / Mistral / Llama)
Code déterministe (Trooper 99)
Verrouillage (pas de rétroaction)
President (adjudication finale)

Chaque étape est un step.run() Inngest checkpointé - reprise automatique en cas d'échec. L'état complet est persisté dans Vercel Blob (council/cases/{caseId}.json) à chaque étape.

05 · Couches techniques

Frontend
Next.js 16.2 (App Router + Turbopack)React 19Tailwind CSS 4Framer MotionTypeScript 5
Auth
NextAuth v5 betaGoogle OAuth 2.0proxy.ts (deprecation middleware Next 16)
IA / API
Claude Sonnet 4-6/5 (Anthropic)GPT-4o (OpenAI)Mistral Large + small (mistralai)Llama 3.1 70B (Groq)ElevenLabs TTSWhisper STTSerpAPI (Google Jobs)WTTJ API (welcometothejungle.com)APEC API (apec.fr)JSZip (PPTX binaire)
Stockage
Vercel Blob · knowledge baseVercel Blob · sessionsVercel Blob · Council casesInngest · orchestration
Infra
Vercel (team gbe2)Turbopackg-berenger.com

06 · Décisions clés

proxy.ts plutôt que middleware.ts

Next.js 16 a déprécié middleware.ts pour la protection de routes. proxy.ts est la convention retenue.

SSE plutôt que WebSocket

Routes job-hunter streamant via Server-Sent Events (maxDuration: 120s). Compatible Vercel sans config supplémentaire. Le revise charge les attachments base64 avant de streamer la réponse.

Design tokens centralisés

Toutes les couleurs passent par DS dans lib/design-tokens.ts + style inline. Aucune classe Tailwind arbitraire pour les couleurs brand.

extractJSON() pour les réponses Claude

Extrait le JSON par la première { et la dernière } pour robustesse face aux préambules / postambules que Claude peut ajouter malgré les instructions 'JSON uniquement'.

Vercel Blob pour la knowledge base

Un seul fichier JSON (max 1000 entrées) lu/écrit via @vercel/blob. OIDC automatique en prod, token en local. Partagé entre Job Hunter et Assistant CV.

Attachments multimodaux (vision + PDF + texte)

Les fichiers joints dans le feedback sont envoyés en blocs de contenu Claude : ImageBlockParam (image), DocumentBlockParam beta PDF, ou texte concaténé au prompt. Max 5 Mo / fichier, 4 fichiers par envoi.

JSZip pour la génération PPTX

Les templates .pptx sont des ZIP de XML. Manipulation par string/regex sans DOM : portable, sans dépendance lourde. Template unique : Template CV Fr.pptx. Ciblage par ID de forme stable (carte sémantique statique SLIDE1/SLIDE2). Slide 1 : toutes les zones générées. Slide 2 : seule l'en-tête (titre_poste id=101) est modifiée - le parcours, les certifications, les formations et le bloc PROJET IA sont figés dans le template.

ElevenLabs + Whisper pour Morgan

English Coach Morgan utilise ElevenLabs (eleven_turbo_v2_5, voix Daniel) pour la synthèse vocale et Whisper vià Groq (fallback OpenAI) pour la transcription. Vitesse TTS 1.25x optimisée pour les sessions de pratique.

Mode admin drag & drop home page

Bouton 'Organiser' visible uniquement quand session active. Drag & drop via Pointer Events (mouse + touch). Framer Motion layout='position' + spring 400/35/0.8. Ordre sauvegardé dans localStorage (gbe-home-card-order-v1).

Sessions CV : persistance Vercel Blob par offre

Chaque génération crée une Session (job-hunter/sessions/{id}.json). Une session contient l'offre + CVVersion[] (cv, angle, template, timestamp, feedback). La knowledge base (types: cv_rule, cv_fact_correction, cv_layout_issue, cv_feedback legacy, ignore_feedback) enrichit les futures générations et recherches.

Analytics : Vercel Analytics sans cookie publicitaire

Vercel Analytics via @vercel/analytics/react. Pas de cookie publicitaire. Opt-out effectif : clé localStorage va_opt_out - si active, <Analytics /> n'est pas monte et aucun événement n'est envoyé. Abstraction lib/analytics.ts (useAnalytics hook, guards opt-out). 20 événements types. Consentement géré depuis /privacy. AnalyticsProvider dans layout.tsx. Source de verite : lib/privacy/privacy-config.ts.

Contrat central des violations CV (cv-violation.ts)

CVViolationCode = type union de 16 codes stables. CVRepairability = blocking | local | llm | warning. makeViolation() produit une CVViolation typée. LEFT_COLUMN_OVERFLOW (local, truncate_list) : détecte quand les zones colonne gauche dépassent leur capacité PPTX. Classificateur de retours : 6 catégories déterministes (integrite, durable, factuel, layout, local, ambigu) sans LLM.

Orchestrateur validateCompleteCV (cv-validation.ts)

Point d'entrée unique pour toutes les validations : structure, editorial, layout, facts/refs, parcours_complet. Déduplique par clé (code|field|itemIndex ou code|message). Retourne CompleteValidationResult avec compteurs par réparabilité. Remplace les appels dispersés à validateCVStructure/validateCVEditorialQuality/validateCVLayout dans route.ts.

Pipeline CV : brouillon émis avant toute validation

runEditorialPipeline émet cv_draft pending AVANT la validation de la stratégie. Si la stratégie est invalide, envoie cv_draft invalid puis throw. L'utilisateur voit toujours un brouillon même en cas d'échec précoce. Séquence : draft -> strategy -> refs -> validateCompleteCV -> local repair -> llm repair (si besoin) -> revalidation -> persist.

GROUPED_REPAIR_RESPONSE_FORMAT étendu (phase 5)

Schéma strict étendu avec titre_poste (anyOf null|string) et experiences_clés (anyOf null|array). runGroupedRepair reçoit la liste des CVViolation pour déterminer exactement quels champs réparer. Descriptions trop longues réparées par LLM (plus de truncateToWordBoundary silencieux dans le pipeline).

07 · Pages juridiques et conformite

/privacy

Politique de confidentialité bilingue FR/EN. 24 sections. Traitements reels documentes. Opt-out analytics effectif (va_opt_out localStorage -> Vercel Analytics non monte). Source : lib/privacy/privacy-config.ts.

/mentions-légales

Mentions légales bilingues FR/EN. Éditeur, hébergeur, propriété intellectuelle. SIRET 927 830 166 00017 (MR BERENGER GUILLAUME) renseigne.

/cgu

Conditions générales d'utilisation bilingues FR/EN. Outils personnels et experimentaux. Absence de garantie IA. Droit francais.

DataProcessingNotice

Composant contextuel d'information sur les traitements (variant: cv | audio | council). Affiche avant tout envoi de données a un tiers. Lien vers /privacy#section.

AudienceDisclosureBanner

Bandeau discret en bas de la home. Formulation factuelle (exemption CNIL Vercel Analytics en cours de vérification). Lien vers /privacy.

lib/privacy/privacy-config.ts

Source de verite centrale : contacts, domaines, fournisseurs, traitements, conservation. Utilisee par toutes les pages juridiques. docs/privacy/ pour la documentation interne.

g-berenger.com · Architecture v4 · 2026-08-30Retour au site