Les fondations de
mon identite visuelle
Toutes les briques visuelles du site, au même endroit. Couleurs, typographie, composants : si quelque chose change ici, c'est répercuté sur tout le site.
Couleurs
Fond global, header, navigation, composants fonces
CTA primaires, highlights, effets neon, elements interactifs
Titres et corps de texte sur fond fonce
Fond de contenu, zones de travail, cartes legérés
Regle d'usage : L'orange #e8622a est la seule couleur d'accent. Il n'existe pas de variante approchante : chaque usage doit utiliser exactement cette valeur.
Textes secondaires sur fond sombre
* 0.40 passe AA uniquement pour le grand texte (18px+ regular ou 14px+ bold). Interdit sous 16px.
Typographie
Composants
Heros de page
components/ui/lamp.tsxLamp Effect
Effet neon anime
Utilise en en-tete de la page d'accueil
Rising Lights
components/ui/rising-lights.tsxCards CTA
components/ui/get-in-touch.tsxCV Online
Design System
Carte offre d'emploi
components/job-hunter/offer-card.tsxvariant CDI
Product Owner Senior
SaaS Corp
✅ Points forts
- Poste PO Senior : correspondance parfaite
- Secteur eCommerce : Expérience confirmee
- Rémunération dans la cible
⚠️ Points de vigilance
- Entreprise peu connue, a valider
- Stack technique a confirmer en entretien
variant Freelance
Product Manager Freelance
FinTech Startup
✅ Points forts
- Mission freelance bien remuneree
- Localisation ideale
⚠️ Points de vigilance
- Secteur Finance peu couvert dans le profil
Clic Ignorer : ouvre un textarea libre pour saisir la raison. Bouton Confirmer enregistre dans la knowledge base (type: ignore_feedback) et affine les futures recherches. Bouton Passer ignore sans raison.
Liste de candidatures
components/job-hunter/apply-tab.tsxitem sélectionné / non sélectionné
Vue CV généré (CVView)
components/job-hunter/cv-tab.tsxVersions du dossier (3)
expertise delivery retail + IA en prod
14:22
change l'accroche pour valoriser le retail
14:35
raccourcis le resume profil
14:41
Titre du poste
Product Owner Senior - eCommerce & Digital
PO Senior | 10 ans | eCommerce · Retail · Finance
Introduction
Product Manager expérimenté avec 10 ans en delivery digital.
Expert en discovery, roadmap OKR et coordination pluridisciplinaire.
Livraisons de 0 a 3M utilisateurs dans les secteurs eCommerce et Finance.
Disponible rapidement.
Expériences clés (3)
Head of Product
2022 - 2026
RetailTech SA
Ownership roadmap cross-plateformes. 3 refontes majeures. -40% TTM.
Product Owner
2019 - 2022
FinServ Group
Backlog paiements B2B. 0 a 500k transactions/mois.
Chef de projet digital
2016 - 2019
Agence Conseil
8 clients grands comptes e-commerce. Budget 300k EUR moyen.
competences
Vision produit
Roadmap OKR
Product discovery
Backlog management
Delivery agile
Outils
JIRA
Figma
Power BI
ContentSquare
Langues
Secteurs
eCommerce / Retail
Finance / Fintech
B2B SaaS
Méthodologies
Scrum
Kanban
SAFe
Lean
Parcours complet (3)
Head of Product
2022 - 2026
RetailTech SA
Ownership de la roadmap cross-plateformes. 3 refontes majeures en 4 ans.
Product Owner
2019 - 2022
FinServ Group
Pilotage backlog paiements B2B. 0 a 500k transactions/mois.
Chef de projet digital
2016 - 2019
Agence Conseil
8 clients grands comptes e-commerce. Budget 300k EUR moyen.
Certifications
SAFe PO/PM v6
Capgemini / Gladwell Academy
Prise de parole en public
Staffff.fr
ContentSquare Find & Fix
ContentSquare Academy · + Certified
Management 3.0
Rhapsodies Conseil
PSPO I
Scrum.org
Formations
Master Grande Ecole
NEOMA Business School
DUT Techniques de Commercialisation
Universite Cote d'Azur
Aperçu du contenu. La mise en page finale est disponible dans le fichier PowerPoint.
Carte Expérience
components/ui/experience-card.tsxsurvol ou clic pour passer en mode Over · clic sur le nom = lien externe
Head of Product
Ownership de la roadmap cross-plateformes (web, mobile, API) sur un périmètre de 3 squads agiles.
Product Owner - Paiements B2B
Pilotage du backlog paiements B2B dans un contexte de forte croissance (0 a 500k transactions/mois).
Timeline Expériences
components/ui/experience-timeline.tsxligne verticale · dot lumineux par annee · annee dedupliquee · whileInView
Head of Product
Ownership de la roadmap cross-plateformes (web, mobile, API) sur un périmètre de 3 squads agiles.
Product Owner - Paiements B2B
Pilotage du backlog paiements B2B dans un contexte de forte croissance (0 a 500k transactions/mois).
Breadcrumb
components/ui/breadcrumb.tsxdark
light
Boutons
Badges
statut Général
tag page indisponible (get-in-touch.tsx)
anciennete publication (offer-card)
localisation (offer-card)
type contrat (offer-card)
score global (offer-card)
Coach anglais / Morgan
Avatar & états vocaux
components/english-coach/english-coach-client.tsxModes de session (2)
components/english-coach/english-coach-client.tsxConversation libre
Lancez un sujet de votre choix
Job interview
Preparation entretien PO/PM
La zone de conversation s'ouvre inline sous les cartes de choix, sans changement de page.
Bulles de conversation
components/english-coach/english-coach-client.tsxPret a pratiquer ? Quel exercice aujourd'hui ?
Simulons un entretien PM.
Waveform & micro
components/english-coach/english-coach-client.tsxScore de session
components/english-coach/english-coach-client.tsxPictos
Concus sur mesure
Icones de marque
Regle : les pictos "Maison" utilisent exclusivement fill="currentColor" avec des formes geometriques (rect, circle) et des variations d'opacite. Aucun stroke. Les pictos "Marque" respectent les guidelines officielles de chaque plateforme.
Interactions
Mode admin - reordonner les cartes
components/ui/get-in-touch.tsx
Declenchement
- Bouton visible uniquement si session active (next-auth)
- Position : au-dessus de la grille, aligne a droite
- Icone 6 points (drag handle) + label Organiser / Terminer
- Bordure orange #e8622a quand actif
Comportement drag
- Pointer Events (mouse + touch, cross-device)
- Carte soulevee : scale 1.06, opacity 0.6, z-index 20
- Reordonnancement : swap sur pointerenter de la cible
- Framer Motion layout='position' + spring 400/35/0.8
Animation wiggle
- CSS @keyframes admin-wiggle : rotate -1.5deg -> +1.5deg
- 0.25s alternate infinite ease-in-out
- Decalage par index : delay = index x 30ms (effet vague)
- Applique sur le wrapper interne, pas sur motion.div
Persistance
- localStorage : clé gbe-home-card-order-v1
- Sauvegarde a la fin du drag (pointerup)
- Validation : taille + presence de tous les noms
- Cursor grabbing + userSelect none pendant le drag
État actif du bouton admin. Visible uniquement quand connecte.
Principes
Lisibilite avant tout
Contraste WCAG 2.1 AA minimum (4.5:1 texte courant, 3:1 grand texte). Texte secondaire sur fond sombre : opacite 0.55 minimum. Taille corps : 16px+. Hiérarchie evidente sans effort de lecture.
Un accent, jamais deux
L'orange #e8622a est unique. Il ne se dilue pas en variantes approximatives ni en degrades succèssifs.
Mouvement avec sens
L'animation accompagne l'action, elle ne la précède pas. Chaque transition existe pour une raison fonctionnelle. Toutes les animations respectent prefers-reduced-motion.
Cohérence systémique
Chaque decision de design vaut pour tous les contextes. Un composant resout tous ses cas d'usage ou est refactorise.
Accessibilité native
RGAA 4.1 / WCAG 2.1 AA sur toutes les pages. Navigation clavier complète, ARIA sémantique (tablist, progressbar, dialog, live regions), skip link, landmarks. L'accessibilité est une contrainte de conception, pas un ajout a postériori.
Confidentialité par defaut
Mesure d'audience via Plausible Analytics (exemption CNIL, sans cookie). Aucun PII collecte. Abstraction lib/analytics.ts. Opt-out via localStorage sur /privacy. Separation dev/prod par variable d'environnement.
Responsive
Mobile-first. Toutes les pages ciblent iOS Safari + Chrome Android en priorite (390px), puis s'enrichissent pour tablette (640px+) et desktop (1024px+).
Breakpoints Tailwind
tailwind.config.ts| Cible | Largeur | Prefixe | Changements clés |
|---|---|---|---|
| Mobile | < 640px | (default) | 1 colonne, hamburger drawer, champs empiles, padding px-4 py-8 |
| Tablet | 640px - 1023px | sm: | 2 colonnes, champs cote a cote, px-6, type scale +1 cran |
| Desktop | >= 1024px | lg: | 3 colonnes, nav horizontale, sidebar DS, px-14, py-12, titres full scale |
Touch targets (WCAG 2.5.5)
min-h-[44px] / minHeight: 44Minimum 44x44px sur tous les elements interactifs. La zone de tap peut depasser la taille visuelle.
Corrections appliquees (2026)
offer-card.tsxPostuler / Ignorer
+ min-h-[44px]apply-tab.tsxOfferListItem
+ min-h-[44px]apply-tab.tsxCTA Générer CV
+ min-h-[44px]english-coach-clientBoutons back / End
padding -> 12pxenglish-coach-clientSessionCard button
+ minHeight: 44header.tsxDrawer nav items
py-3.5 + min-h-[44px]Grilles adaptatives
grid-cols-1 sm:grid-cols-2 md:grid-cols-3Typographie adaptative
text-2xl sm:text-4xl lg:text-7xl| Element | Mobile | Tablet (sm:) | Desktop (lg:) |
|---|---|---|---|
| Hero H1 (landing) | text-2xl (1.5rem) | text-4xl (2.25rem) | text-7xl (4.5rem) |
| H1 Job Hunter / English Coach | text-2xl | text-4xl | text-6xl (3.75rem) |
| Stats CV-online | text-xl (1.25rem) | text-2xl | text-2xl |
| Corps de texte | text-sm (0.875rem) | text-sm | text-sm / text-base |
Comportements par composant
components/*components/header.tsxMobile
Hamburger 44x44px, drawer plein largeur, fermeture par tap exterieur ou navigation
Tablet (sm:)
Identique mobile (pivot a md: 768px)
Desktop (md:/lg:)
Barre horizontale, tous les liens visibles, lang toggle, auth button inline
components/ui/get-in-touch.tsxMobile
1 colonne, gap-3, padding px-4
Tablet (sm:)
sm:grid-cols-2, sm:gap-5
Desktop (md:/lg:)
md:grid-cols-3, md:gap-6
components/job-hunter/offer-card.tsxMobile
Score labels w-14, points en 1 col, CTAs min-h-[44px]
Tablet (sm:)
Score labels sm:w-24
Desktop (md:/lg:)
sm:grid-cols-2 pour points forts / vigilance
components/job-hunter/apply-tab.tsxMobile
Liste + detail empiles, OfferListItem min-h-[44px], scrollIntoView
Tablet (sm:)
Identique mobile
Desktop (md:/lg:)
md:flex-row - liste w-72 gauche, detail scrollable droite
components/english-coach/english-coach-client.tsxMobile
Bottom bar fixed, safe-area-inset-bottom, waveform 5 barres, boutons min-h-[44px]
Tablet (sm:)
Identique mobile
Desktop (md:/lg:)
waveform 9 barres (window.innerWidth > 390)
app/CV-online/page.tsxMobile
px-5, stats grid-cols-3 gap-3, titres text-2xl
Tablet (sm:)
sm:px-6, sm:gap-4, sm:text-3xl
Desktop (md:/lg:)
max-w-2xl centre, Expérience list py-5
components/footer.tsxMobile
flex-col, liens empiles
Tablet (sm:)
md:flex-row, liens en ligne
Desktop (md:/lg:)
md:flex-row, max-w-5xl centre, justify-between
iOS Safari : safe area & DVH
app/layout.tsx + app/globals.cssDynamic Viewport Height
100vh inclut l'adress bar iOS. dvh = hauteur reelle visible. Applique via @supports dans globals.css.
@supports (min-height: 100dvh) {
.min-h-screen {
min-height: 100dvh;
}
}Safe area insets
La bottom bar du Coach est fixed. Transcript et barre incluent tous deux env(safe-area-inset-bottom).
/* bottom bar */ paddingBottom: calc( 26px + env(safe-area-inset-bottom, 0px)) /* transcript */ paddingBottom: calc( 160px + env(safe-area-inset-bottom, 0px))
viewport-fit: cover
Requis pour que env(safe-area-inset-*) soit non nul. Configure via Next.js Viewport export.
// app/layout.tsx
export const viewport: Viewport = {
viewportFit: 'cover',
}touch-action
Supprime le 300ms tap delay iOS sur tous les elements interactifs. Range inputs : touch-action: none pour eviter le scroll parasite.
/* globals.css */
button, a, [role="button"] {
touch-action: manipulation;
}
input[type="range"] {
touch-action: none;
}Scroll interne : overscroll-behavior
components/english-coach/english-coach-client.tsx/* English Coach - transcript */ overscrollBehaviorY: 'contain'
Les zones de scroll interne (transcript de session) utilisent overscroll-behavior-y: contain pour empecher le pull-to-refresh iOS de s'activer pendant l'utilisation.
Composants juridiques
Composants d'information contextuelle sur les traitements de données et les mentions légales. Utilises sur toutes les pages impliquant un envoi de données a un tiers.
DataProcessingNotice
components/ui/data-processing-notice.tsxVotre offre, profil et CV sont analyses par un fournisseur IA. Les sessions et versions de CV sont archivées dans Vercel Blob. En savoir plus
Votre audio est transmis pour transcription (Groq ou OpenAI). L'audio brut n'est pas archive. La transcription et le resume de session sont conserves. En savoir plus
Votre cas peut être envoyé a plusieurs fournisseurs IA (Claude, Gemini, Mistral, Groq). Les cas et réponses sont archives. N'incluez pas de données sensibles superflues. En savoir plus
Props : variant ('cv' | 'audio' | 'council'), privacySection (ancre href vers /privacy), className.
AudienceDisclosureBanner
components/audience-disclosure-banner.tsxCe site utilise une mesure d'audience sans cookie publicitaire. Les outils prives traitent les données nécessaires a leur fonctionnement. En savoir plus
Bandeau discret en bas de la home page. Sans props. Lien vers /privacy.