Esc
 Naviguer  Ouvrir Esc Fermer
Aller au contenu

17.1 — Projets fil rouge progressifs

Débutant 20 min prérequis : aucun

🎯 Objectif : transformer ce que tu apprends en projets que tu peux montrer. Chaque projet enseigne une compétence distincte. Suivre les 8 te fait passer du débutant au profil junior solide en 12-18 mois.

À l'issue de cet axe, tu sauras :

  • Comprendre la progression : 8 projets, ~1-3 par semaine pour les premiers, 1-2 mois pour les derniers
  • Identifier ce qu'on apprend (et ce qu'on n'apprend PAS) à chaque palier
  • Choisir des sujets qui te motivent VRAIMENT — sinon tu abandonnes en cours de route
  • Public sur GitHub avec README impeccable + démo en ligne — chaque projet
  • Documenter une décision technique par projet (mini-ADR) pour t'entraîner à argumenter

3 à 5 projets soignés battent 20 projets bâclés.

Un recruteur qui voit 20 repos avec un README à 5 lignes te classe en « code dump ». Un recruteur qui voit 5 repos avec README détaillé, tests, déploiement, captures, et discussions intelligentes en issues te classe en « profil sérieux ».

Lis 17.2 — Portfolio avant de te lancer.


Niveau Projet Durée approx. Compétences clés
─────────────────────────────────────────────────────────────────────────────────────
Découverte 1. Page perso statique 1-2 sem HTML, CSS, déploiement
2. TODO list (DOM, localStorage) 1-2 sem JS, état, persistance navigateur
─────────────────────────────────────────────────────────────────────────────────────
Confirmation 3. App météo (fetch API publique) 2-3 sem fetch, async, gestion erreurs, UI dynamique
4. SPA avec routing (React/Vue) 3-4 sem framework, composants, state global
─────────────────────────────────────────────────────────────────────────────────────
Junior solide 5. Full-stack CRUD + auth 5-8 sem backend, DB, sessions, déploiement complet
6. SaaS multi-tenant + paiement 8-12 sem BaaS, RLS, Stripe, multi-tenancy
─────────────────────────────────────────────────────────────────────────────────────
Niveau supérieur 7. App temps réel (WebSocket) 1-2 mois realtime, présence, sync, scaling
8. Contribution open source notable variable lecture de code, PRs, revue

Total : 6 à 12 mois en parallèle d’un travail / études, à raison de 5-10 h / semaine. Plus rapide en bootcamp / dispo full-time.


Un site simple : qui tu es, ce que tu fais, comment te contacter. Statique. Pas de backend.

  • HTML / CSS / un peu de JS — ou
  • Astro + Starlight si tu veux déjà de la doc.
  • Hébergement : Cloudflare Pages ou Netlify (gratuit).
CompétencePourquoi
HTML sémantique<main>, <nav>, <article>, headings cohérents
CSS moderneGrid, Flexbox, custom properties, responsive
AccessibilitéContrastes, alt sur images, focus visible
Lighthouse 95+Score perf + a11y dès le projet 1
Git + GitHubPremier repo public, push régulier
Domaine + DNSOptionnel : achète un domaine .me ou .dev
TLS autoCloudflare Pages le gère gratuitement
  • JS dynamique poussé.
  • Backend.
  • Base de données.
  • En ligne avec un domaine (gratuit ou payant).
  • Lighthouse mobile ≥ 95 perf, ≥ 100 a11y.
  • README qui explique le pourquoi.
  • Pas de console errors.

Beaucoup de devs sautent ce projet en pensant que c’est trivial. C’est une erreur — c’est ta vitrine personnelle que les recruteurs verront.


L’hello world de la programmation web. Permet d’ajouter, marquer comme terminé, supprimer, filtrer des tâches. Tout en JS pur (pas de framework).

  • HTML / CSS / JS vanilla.
  • Persistance : localStorage.
  • Bonus : drag-and-drop, raccourcis clavier.
  • Manipulation DOM (querySelector, addEventListener, createElement).
  • État dans la mémoire JS et synchronisation avec le DOM.
  • localStorage : sérialisation JSON, limites.
  • Délégation d’événements (un seul listener pour 50 tâches).
  • Accessibilité des inputs, labels, formulaires.

90 % des TODO list de débutants sont bâclées : pas d’a11y, pas de tests, structure spaghetti. C’est un excellent test d’autodiscipline — fais-le proprement.


App qui interroge une API météo (OpenWeather, Open-Meteo) et affiche la météo pour une ville donnée par l’utilisateur.

  • HTML / CSS / JS ou première touche TypeScript.
  • API : Open-Meteo (gratuite, sans clé) ou OpenWeather.
CompétenceDétail
fetch + async/awaitAppels HTTP réels
Gestion d’erreursRéseau, ville inconnue, rate limit
États UIloading / success / error / empty
Variables d’envClé API jamais en dur dans le code
GéolocalisationAPI navigator.geolocation, permissions
Cache localStocker la dernière requête en localStorage
TypeScriptTyper la réponse de l’API avec une interface
  • Mode hors-ligne (Service Worker).
  • Internationalisation (FR / EN).
  • Animations selon le temps (soleil, pluie).

Projet 4 — SPA avec routing (React / Vue / Svelte)

Section intitulée « Projet 4 — SPA avec routing (React / Vue / Svelte) »

Première vraie SPA : 3-5 pages avec navigation, état partagé, formulaires. Sujet libre qui te motive (catalogue de jeux vidéo, suivi de séries, gestionnaire de recettes…).

  • React 19 + Next.js 16 ou Vue 3.6 + Nuxt 4 ou Astro + Svelte 5.
  • Tailwind v4 ou Vanilla CSS modules.
  • Hébergement : Vercel ou Cloudflare Pages.
CompétenceDétail
ComposantsRéutilisabilité, props, événements
RoutingPages, params, navigation
State globalContext, Pinia, stores Svelte
FormulairesValidation, soumission, état contrôlé
Suspense / loading statesPatterns d’attente
Tests unitairesVitest sur les hooks / utils
  • 5 pages min, navigation fluide.
  • Au moins un formulaire validé.
  • 20-30 % de couverture Vitest sur la logique pure.
  • Lighthouse perf ≥ 90.
  • Déployé en ligne avec preview PR sur Vercel.

Le passage à grand. Tu construis backend + frontend qui parlent ensemble, avec utilisateurs authentifiés et persistance en DB.

  • Backend : Hono (Node 24) ou Next.js API Routes / Server Actions.
  • DB : Postgres (Neon, Supabase, ou Docker local) + Drizzle ou Prisma 7.
  • Auth : Better Auth ou Lucia (open source, contrôle total) ou Clerk (clé en main).
  • Frontend : Next.js 16 ou Nuxt 4.
  • Déploiement : Fly.io / Render / Vercel.

Un gestionnaire de notes type Notion lite : créer / éditer / supprimer / partager des notes. Plus utile qu’un « blog d’apprentissage » qui n’a aucune valeur concrète.

CompétenceDétail
Schéma DBTables, relations, indexes, migrations
REST ou Server ActionsEndpoints typés, validation Zod
AuthSessions, cookies HttpOnly + SameSite, password hash argon2id
AuthorizationUne note = 1 owner ; pas d’accès cross-user (IDOR)
Tests d’intégrationVitest + Testcontainers ou Docker compose
CIGitHub Actions : lint + test + build + deploy
Observabilité minimaleSentry pour les erreurs
Variables d’env.env.example, secrets cloud
  • Auth fonctionnelle (signup / login / logout / forgot password).
  • CRUD complet d’une ressource (notes, tâches, recettes…).
  • Tests d’intégration sur les endpoints (≥ 60 % couverture).
  • Déployé en ligne, accessible via URL.
  • Sentry branché.
  • CI verte sur GitHub.

C’est le projet pivot de ton portfolio. À l’issue, tu peux postuler en junior. Investis du temps.


Aller au-delà du junior : multi-tenancy, paiement, abonnements, RLS. Gérer des utilisateurs qui paient pour utiliser ton produit.

  • Tasky Pro — task manager B2B avec workspaces et plans payants.
  • Receipts — gestion notes de frais avec OCR + export.
  • MeetingMinder — récap de réunions IA + résumé.
  • Supabase ou Neon + Drizzle (Postgres + auth managées).
  • Stripe Subscriptions + webhook handler.
  • Resend ou Loops pour les emails transactionnels.
  • PostHog pour le product analytics.
  • Cloudflare R2 pour les uploads.
CompétenceDétail
Multi-tenant1 user = N workspaces, données cloisonnées
RLS PostgresRow-Level Security : isolation au niveau DB
StripeCheckout, subscriptions, webhooks idempotents
WebhooksSignature, retries, déduplication
Email transactionnelTemplates, deliverability, DKIM
RBACOwner / admin / member par workspace
Audit logQui a fait quoi, quand
GDPRExport données, suppression compte

Le paiement, le webhook, et la synchronisation entre Stripe et ta DB sont LE point dur. Beaucoup de bugs, beaucoup d’edge cases (cards déclinées, downgrade, prorata). C’est exactement ce qu’un employeur veut voir que tu sais faire.


Maîtriser la communication bidirectionnelle, la synchronisation multi-clients, et les contraintes du scaling realtime.

  • Whiteboard collaboratif (à la Excalidraw).
  • Chat temps réel avec présence et typing indicators.
  • Mini-Notion collaboratif avec Yjs (CRDT).
  • Auction live type Catawiki.
  • Multi-joueur 2D simple (Tic-tac-toe, Pictionary).
  • Hono + WebSocket ou PartyKit / Liveblocks (pour économiser le scaling).
  • Yjs si collaboration de document.
  • Redis pub/sub si multi-node.
CompétenceDétail
WebSocket vs SSEQuand chacun
PrésenceHeartbeat, online/offline state
CRDTPourquoi Yjs > last-write-wins
Scaling statefulSticky sessions, fan-out Redis
ReconnectBackoff, idempotence

Le realtime est complexe. Si tu débutes, commence par Liveblocks ou PartyKit (managed) plutôt que d’écrire ton serveur WebSocket maison. Tu apprendras le reste plus tard.


Pas un projet à soi mais une contribution significative à un projet établi. C’est la signature qui change tout sur un CV.

  1. Identifie une lib que tu utilises.
  2. Lis ses issues marquées good-first-issue, help-wanted.
  3. Comprends le CONTRIBUTING.md.
  4. Ouvre une PR sur un bug ou une petite feature.
  5. Itère sur les commentaires des mainteneurs.
TypeExemples
Frameworks frontendReact, Vue, Svelte, Astro, Next.js
BackendHono, Fastify, Drizzle, Prisma
OutilsBiome, ESLint, Vitest, Playwright
UI libsRadix UI, Reka UI, Headless UI, Tailwind
AI/RAGAI SDK Vercel, LlamaIndex, Mastra
NiveauExempleValeur CV
Fix typocorriger « returnss » → « returns »Symbolique
Doc amélioréesection manquante, exemple plus clairBonne
Bug fixreproduire, fixer, ajouter testTrès bonne
Petite featureissue acceptée, PR mergéeExcellente
Mainteneurcommits récurrents sur 6+ moisNiveau senior

Beaucoup de devs annoncent « je vais contribuer à React ! » et abandonnent à la première friction. C’est un investissement long : trouver le bon issue, comprendre le code, parler avec les mainteneurs. Compte plusieurs semaines pour un premier merge.


« Slow is smooth, smooth is fast. »

HabitudePourquoi
Time-box chaque projetSinon dérive infinie sur le projet 5
MVP d’abordVersion minimale en ligne, puis on itère
Pause de 1 sem entre 2 gros projetsRecharge, idéation, recul
Ne PAS commencer 3 projets en parallèleTu en finis 0
Public dès le jour 1Pression positive, feedback
README dès le commit 1Pas en fin (sinon jamais)
Tests dès le tier 1Plus tu attends, moins tu en feras

C’est OK d’abandonner. Critères pour décider :

  • Tu n’apprends plus rien (déjà maîtrisé) → passer au suivant.
  • Tu détestes le sujet → changer de sujet, pas de tech.
  • Tu as bloqué 3 jours sur le même bug → demander de l’aide (Discord, Stack Overflow, Reddit).
  • Tu te sens coincé sans savoir pourquoi → pause d’une semaine.

Ne jamais abandonner par culpabilité. Toujours par décision claire.


Une fois la progression terminée, deux options :

OptionQuoi
Spé sur 1-2 axesSuis l’axe 16 (mobile, IA, real-time, edge, Web3) et fais un mini-projet de spé
ProfondeurReprends le projet 5 ou 6, ajoute des features sérieuses (search, exports, RBAC fin, audit, i18n)

Beaucoup de devs alternent : 1 projet de spé puis ajout de features sur leurs projets existants. C’est sain.


Tu as commencé 4 projets en parallèle. Aucun n'est terminé. Que ferais-tu ?
Tu hésites entre projet 5 (CRUD + auth) et projet 7 (real-time WebSocket). Tu n'as fait que la TODO list. Lequel choisir ?
Pour le projet 6 (SaaS payant), tu hésites à intégrer Stripe parce que c'est complexe. Que fais-tu ?
Tu vises une contribution OSS (projet 8) à React directement. Bonne idée ?

  • frontendmasters.com — parcours guidés
  • roadmap.sh — feuilles de route par profil
  • Build Your Own Xgithub.com/codecrafters-io/build-your-own-x
  • The Odin Project — gratuit, full-stack
  • Codecrafters — projets challengeants payants (Redis, Git, Docker)
  • Frontend Mentor — designs réalistes à coder

Suite : 17.2 — Portfolio — comment présenter tes projets pour qu’ils convertissent.