Mon année de code façon Spotify Wrapped : un script scanne tous mes repos git locaux et en tire 10 cartes à partager (commits, série la plus longue, jour le plus intense, profil horaire, top repos, langages, discipline de commit). Chaque carte s'exporte en PNG 1080×1350, le format portrait que LinkedIn affiche en grand, et un bouton assemble 5 cartes (récap, commits, série, profil, langages) en un carrousel PDF prêt à publier sur LinkedIn.
- Commits de l'année, jours actifs, moyenne par jour codé
- Date du premier commit de l'année et mois record
- Plus longue série de jours consécutifs, avec une heatmap façon GitHub
- Jour le plus intense et jour de la semaine préféré
- Profil horaire (oiseau de nuit, lève-tôt, guerrier du week-end, métronome) et heure de pointe
- Repos touchés, repos créés dans l'année (premier commit dans l'année et activité sur au moins deux jours, pour écarter les vieux projets republiés d'un seul commit), top 5
- Lignes de code ajoutées et supprimées, répartition par langage (la doc et la config sont exclues)
- Part des commits au format Angular, types les plus fréquents, part des lignes de test
Le fichier src/data/wrapped.json ne contient que des agrégats. Les messages de commit ne sont jamais exportés. Un repo privé sur GitHub (ou sans remote GitHub) apparaît comme « Projet privé A, B, C… ». Pour afficher le nom d'un repo privé que tu acceptes de montrer : --reveal nom1,nom2.
- Next.js 16 (App Router, Turbopack), TypeScript, Tailwind CSS 4
html-to-imagepour l'export PNG,jspdfpour le carrousel PDFnext/ogpour l'image d'aperçu Open Graph (polices Bricolage Grotesque et JetBrains Mono en WOFF dansassets/, licence OFL)- Vitest pour les tests du calcul des stats
- Script de scan en TypeScript lancé avec
tsx,gitetghen ligne de commande
npm install
npm run scan # génère src/data/wrapped.json à partir de ~/IdeaProjects
npm run dev # http://localhost:3525Options du scan :
npm run scan -- --root ~/IdeaProjects --year 2026 --author riadh --owner riadh-mnasri --reveal riachess--root: dossier qui contient les repos (défaut~/IdeaProjects)--year: année à couvrir (défaut : l'année en cours, jusqu'à aujourd'hui)--author: motif (insensible à la casse) qui filtre l'auteur des commits, ce qui écarte les bots--owner: compte GitHub utilisé pour savoir quels repos sont publics (viagh repo list)--reveal: repos privés dont le nom peut être affiché
Aucune variable d'environnement n'est nécessaire. Sans gh authentifié, tous les repos sont traités comme privés.
npm testSite statique sur Vercel, déployé à chaque push sur main. Pour mettre à jour les chiffres : relancer npm run scan, committer src/data/wrapped.json et pousser.
- Scan multi-repos, anonymisation des repos privés
- 10 cartes FR/EN, export PNG 1080×1350
- Carrousel LinkedIn en PDF
- Image Open Graph générée à partir des chiffres clés
- Comparaison avec l'année précédente
© 2026 Riadh MNASRI