Skip to content
Learni
View all tutorials
Développement Web

Comment créer un storytelling personnel sur votre site en 2026

Introduction

Le storytelling personnel est l'art de transformer votre parcours professionnel en une histoire captivante qui engage vos recruteurs ou clients. En 2026, avec les sites web statiques ultra-performants, intégrer cela directement dans votre portfolio est essentiel pour vous démarquer. Imaginez une timeline interactive qui déroule votre journey dev : du premier 'Hello World' à vos projets open-source.

Ce tutoriel beginner vous guide pas à pas pour créer une section storytelling sur votre site HTML/CSS/JS. Pas de frameworks lourds, juste du vanilla pour une perf maximale (Core Web Vitals parfaits). À la fin, vous aurez un composant copier-collable, responsive et animé. Pourquoi c'est crucial ? 85% des recruteurs passent moins de 10s sur un CV ; une story visuelle les retient 3x plus longtemps. Prêt à narrer votre épopée dev ? (142 mots)

Prérequis

  • Connaissances basiques en HTML, CSS et JavaScript (niveau beginner).
  • Un éditeur de code comme VS Code.
  • Un navigateur moderne (Chrome/Firefox).
  • Pas de serveur requis : ouvrez simplement index.html dans le navigateur.

Initialiser le projet

terminal
mkdir storytelling-personnel
cd storytelling-personnel
touch index.html style.css script.js
code .

Cette commande crée un dossier projet minimal et l'ouvre dans VS Code. Chaque fichier a un rôle précis : HTML pour la structure, CSS pour le style, JS pour l'interactivité. Évitez les frameworks pour ce beginner tutoriel afin de maîtriser les bases sans dépendances.

Comprendre la structure narrative

Un bon storytelling suit une arc narratif : accroche (problème), montée (apprentissages), climax (réussites), résolution (vision future). Nous structurerons cela en timeline verticale avec 4 milestones. Chaque étape inclut du texte personnel, une image et une animation CSS. Analogy : comme un film, chaque scène build le suspense.

Structure HTML de base

index.html
<!DOCTYPE html>
<html lang="fr">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Mon Storytelling Personnel</title>
  <link rel="stylesheet" href="style.css">
</head>
<body>
  <section class="storytelling">
    <h1>Mon Voyage Dev</h1>
    <div class="timeline">
      <div class="milestone" data-year="2020">
        <div class="icon">🚀</div>
        <h2>Découverte du Code</h2>
        <p>Premier 'Hello World' en HTML. Passion immédiate !</p>
      </div>
      <div class="milestone" data-year="2022">
        <div class="icon">💻</div>
        <h2>Premier Job Junior</h2>
        <p>Construction d'une app React pour un client local.</p>
      </div>
      <div class="milestone" data-year="2024">
        <div class="icon">⭐</div>
        <h2>Projet Open-Source</h2>
        <p>500 stars sur GitHub pour mon CLI tool.</p>
      </div>
      <div class="milestone" data-year="2026">
        <div class="icon">🎯</div>
        <h2>Vision Future</h2>
        <p>Lead Dev Fullstack IA.</p>
      </div>
    </div>
  </section>
  <script src="script.js"></script>
</body>
</html>

Ce HTML crée une timeline avec 4 milestones personnalisables. Les data-year serviront pour les animations JS. Remplacez les textes par votre histoire réelle. Piège : oubliez pas le viewport meta pour mobile responsiveness.

Styliser la timeline

Appliquez maintenant des styles pour un effet timeline verticale avec ligne connectrice. Utilisez Flexbox pour simplicité beginner et animations CSS pour fluidité (sans JS lourd).

Feuille CSS responsive

style.css
body {
  margin: 0;
  font-family: 'Segoe UI', sans-serif;
  background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
  min-height: 100vh;
  display: flex;
  align-items: center;
  justify-content: center;
  color: white;
}

.storytelling {
  max-width: 800px;
  padding: 2rem;
}

h1 {
  text-align: center;
  font-size: 3rem;
  margin-bottom: 4rem;
  text-shadow: 2px 2px 4px rgba(0,0,0,0.3);
}

.timeline {
  position: relative;
  display: flex;
  flex-direction: column;
  gap: 2rem;
}

.timeline::before {
  content: '';
  position: absolute;
  left: 50%;
  top: 0;
  bottom: 0;
  width: 4px;
  background: rgba(255,255,255,0.3);
  transform: translateX(-50%);
}

.milestone {
  display: flex;
  align-items: center;
  position: relative;
  animation: fadeInUp 1s ease-out;
}

.milestone:nth-child(1) { animation-delay: 0.2s; }
.milestone:nth-child(2) { animation-delay: 0.4s; }
.milestone:nth-child(3) { animation-delay: 0.6s; }
.milestone:nth-child(4) { animation-delay: 0.8s; }

@keyframes fadeInUp {
  from { opacity: 0; transform: translateY(30px); }
  to { opacity: 1; transform: translateY(0); }
}

.milestone:nth-child(odd) {
  flex-direction: row-reverse;
}

.icon {
  font-size: 3rem;
  width: 80px;
  height: 80px;
  background: white;
  color: #667eea;
  border-radius: 50%;
  display: flex;
  align-items: center;
  justify-content: center;
  box-shadow: 0 10px 30px rgba(0,0,0,0.3);
  z-index: 1;
}

.milestone > div:last-child {
  flex: 1;
  padding: 1rem 2rem;
  background: rgba(255,255,255,0.1);
  backdrop-filter: blur(10px);
  border-radius: 20px;
  margin: 0 2rem;
  box-shadow: 0 8px 32px rgba(0,0,0,0.2);
}

@media (max-width: 768px) {
  .timeline::before { left: 20px; }
  .milestone { flex-direction: column !important; }
  .milestone > div:last-child { margin: 1rem 0 0 60px; }
}

Ce CSS rend la timeline responsive avec gradient bg, ligne centrale et animations staggered. Backdrop-filter pour effet glassmorphism moderne. Piège : testez toujours sur mobile ; les media queries ajustent pour petits écrans.

Ajouter de l'interactivité

Rendez-la vivante avec JS : scroll reveal et hover effects. Utilisez IntersectionObserver (natif, performant) pour trigger animations au scroll.

Script JS interactif

script.js
document.addEventListener('DOMContentLoaded', () => {
  const milestones = document.querySelectorAll('.milestone');

  // IntersectionObserver pour scroll reveal
  const observer = new IntersectionObserver((entries) => {
    entries.forEach(entry => {
      if (entry.isIntersecting) {
        entry.target.style.opacity = '1';
        entry.target.style.transform = 'translateY(0)';
      }
    });
  }, { threshold: 0.3 });

  milestones.forEach(milestone => {
    milestone.style.opacity = '0';
    milestone.style.transform = 'translateY(50px)';
    milestone.style.transition = 'opacity 0.6s ease, transform 0.6s ease';
    observer.observe(milestone);
  });

  // Hover effects
  milestones.forEach(milestone => {
    milestone.addEventListener('mouseenter', () => {
      const year = milestone.dataset.year;
      milestone.querySelector('h2').textContent += ` (${year})`;
    });
    milestone.addEventListener('mouseleave', () => {
      const year = milestone.dataset.year;
      milestone.querySelector('h2').textContent = milestone.querySelector('h2').textContent.replace(` (${year})`, '');
    });
  });

  // Smooth scroll to top
  window.addEventListener('scroll', () => {
    if (window.scrollY > 100) {
      // Ajoutez un bouton back-to-top si voulu
    }
  });
});

Ce JS ajoute reveal au scroll et hover qui affiche l'année. IntersectionObserver est 60fps friendly vs scroll listeners. Piège : DOMContentLoaded évite erreurs si JS charge avant HTML ; testez sans internet.

Données en JSON pour personnalisation

data.json
{
  "story": {
    "title": "Mon Voyage Dev",
    "milestones": [
      {
        "year": 2020,
        "icon": "🚀",
        "title": "Découverte du Code",
        "description": "Premier 'Hello World' en HTML. Passion immédiate pour le web !",
        "image": "https://via.placeholder.com/300x200?text=2020"
      },
      {
        "year": 2022,
        "icon": "💻",
        "title": "Premier Job Junior",
        "description": "Construction d'une app React pour un client local. Apprentissage intensif.",
        "image": "https://via.placeholder.com/300x200?text=2022"
      },
      {
        "year": 2024,
        "icon": "⭐",
        "title": "Projet Open-Source",
        "description": "500 stars sur GitHub pour mon CLI tool en Node.js.",
        "image": "https://via.placeholder.com/300x200?text=2024"
      },
      {
        "year": 2026,
        "icon": "🎯",
        "title": "Vision Future",
        "description": "Devenir Lead Dev Fullstack IA et mentor.",
        "image": "https://via.placeholder.com/300x200?text=2026"
      }
    ]
  }
}

Ce JSON centralise vos données pour facile update. Intégrez-le en JS avec fetch('./data.json') pour dynamic content. Avantage : non-codeurs peuvent éditer ; piège : validez JSON pour éviter parse errors.

Déploiement sur GitHub Pages

terminal-deploy
git init
git add .
git commit -m "Initial storytelling portfolio"
git branch -M main
git remote add origin https://github.com/votreusername/storytelling-personnel.git
git push -u origin main
# Puis activez GitHub Pages dans Settings > Pages > Source: Deploy from branch main

Déployez gratuitement en 1 min sur GitHub Pages. Remplacez votreusername. URL finale : username.github.io/storytelling-personnel. Piège : assurez index.html à la root ; Pages supporte assets statiques parfaitement.

Bonnes pratiques

  • Personnalisez profondément : remplacez placeholders par vos vraies anecdotes (noms projets, metrics comme "+30% perf").
  • Optimisez perf : compressez images <100KB, minifiez CSS/JS avec outils comme Terser.
  • Accessibilité : ajoutez aria-label sur icons, contrastes WCAG AA.
  • SEO : meta title/desc avec mots-clés "portfolio dev [votre nom]".
  • Test cross-browser : Chrome, Safari, Firefox.

Erreurs courantes à éviter

  • Stories génériques : évitez "j'aime coder" ; dites "j'ai scalé une app de 1k à 100k users".
  • Surcharge animations : limitez à 60fps ; testez avec Lighthouse.
  • Non-responsive : toujours media queries ; testez sur phone.
  • JSON malformé : utilisez validator.json pour checker.

Pour aller plus loin

Intégrez à Next.js pour SSR, ou Framer Motion pour animations avancées. Découvrez nos formations Learni sur le développement web et notre tuto portfolios avancés. Ressources : MDN Timeline, Awwwards inspirations.

Comment créer storytelling personnel site 2026 | Learni