Skip to content

Repository files navigation

Code Wrapped

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.

Read this in English

Ce que ça mesure

  • 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

Confidentialité

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.

Stack

  • Next.js 16 (App Router, Turbopack), TypeScript, Tailwind CSS 4
  • html-to-image pour l'export PNG, jspdf pour le carrousel PDF
  • next/og pour l'image d'aperçu Open Graph (polices Bricolage Grotesque et JetBrains Mono en WOFF dans assets/, licence OFL)
  • Vitest pour les tests du calcul des stats
  • Script de scan en TypeScript lancé avec tsx, git et gh en ligne de commande

Démarrage

npm install
npm run scan          # génère src/data/wrapped.json à partir de ~/IdeaProjects
npm run dev           # http://localhost:3525

Options 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 (via gh 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.

Tests

npm test

Déploiement

Site 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.

Feuille de route

  • 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

About

My year in code, Spotify Wrapped style: scans local git repos and renders 10 shareable FR/EN cards with PNG export. Next.js, TypeScript, Tailwind.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages