π Your 42 journey, recruiter-ready. Instant CV page and dynamic stats badges for π Γcole 42 students.
Just sign in!
Generate a clean, recruiter-friendly CV page at 42cv.dev/your-login:
- Profile header - display name, pool month/year, campus with country flag, profile photo (none / 42 campus / custom upload), and bio with Markdown support (bold, italic,
code) - Contact & links - email, phone, address, GitHub, LinkedIn, and personal website, each with its own icon
- 42 Statistics - level progress bar, outstanding votes, and campus cohort / cohort / all-time weekly rankings, each with recruiter-facing tooltips explaining what the numbers mean
- Professional experience - full-time, part-time, freelance, internship, apprenticeship, work-study; Markdown descriptions, auto-sorted by date; 42-validated entries show final score and a "Certified by 42" label
- Certifications - link Credly badges by URL or embed code; ownership verified by matching recipient name; displayed with badge image, issuer, and verification link
- Selected projects - pick up to 5 best projects shown pre-expanded; scores, outstanding vote stars, per-project GitHub links, and custom description overrides
- Skill tags - freeform categories with color-coded chips (Programming Languages, Tools, Libraries...); type to add, drag to reorder
- Achievements - curated selection from the 42 API with difficulty tier badges (easy, medium, hard, challenge)
- 42 Journey tab - toggleable second view with a year-by-year project activity heatmap, 42 skills as bars or radar chart, and a full validated project list grouped by year with collapsible descriptions
- Light / dark mode - visitors can toggle; you choose the default
- Login, campus, cursus, grade, level progress bar, 42 logo
- Coalition colors + 6 custom themes (Piscine, Neutral, Midnight, Carbon, Rose, Neon) and a Gold theme unlocked at level 21
- BlackHole countdown with color-coded urgency, or student / piscine period dates
- Optional profile photo (42 campus or custom upload), display name, email, validated project count
- Credly certification badges in the header area (max 4)
- Individual project score badge for each project (success / fail / subscribed)
- Copyable URL, Markdown, and HTML embed snippets
Live example: 42cv.dev/lsimanic
Auto-generated via local Puppeteer, cached 6h per user.
Interactive demo (no login required): 42cv.dev/demo
| Project | Score |
|---|---|
| kfs-4 | |
| ft_traceroute | |
| C Piscine Rush 00 |
- Go to https://42cv.dev/ and sign in with your 42 account
- CV: enable Make profile public, fill in your contact info, add work experience, skill tags, select achievements and featured projects - your CV is live at
42cv.dev/your-login - Badge: copy the URL or markdown snippet and paste it into your GitHub README
git clone https://github.com/lorenzoedoardofrancesco/42cv
cd 42cv
npm install
cp .env.example .env # fill in your credentials
npm run db:push
npm run devSee .env.example for the required environment variables (42 API credentials, database URL, NextAuth secret).
Next.js 16/React 19- Pages Router with Turbopack, API routes for SVG generationPrisma 7- ORM withPostgreSQL, PrismaPg driver adapterNextAuth v4- authentication via 42 OAuthTailwind CSS 4- CSS-first configurationReactDOMServer- renders React components to static SVG markupPuppeteer- local headless Chromium for OG image screenshotsDokploy- self-hosted PaaS on Hetzner VPS42 API- fetches user data, coalitions, projects with rate-limited queue
Why isn't my badge updating?
User data is cached for 12 hours. GitHub also caches images via its camo proxy. To force a refresh, append &v=2 (or any new param) to the badge URL in your README.
Why does my badge show as a link instead of an image? The badge URL must return a valid SVG. If your account isn't properly linked or the API returns an error, GitHub shows the alt text as a link. Make sure you've signed in at 42cv.dev and linked your 42 account.
Can I use a custom domain? Yes, deploy your own instance (see Self-hosting) and update the badge URLs to point to your domain.
lsimanic π» Author |
jlanza π€ Feature requests |
Forked from badge42 by JaeSeoKim, which generated 42 stats badges for GitHub READMEs. The original service went offline in 2023 and the codebase was outdated (Next.js 12, React 17, Prisma 3).
I upgraded the stack, fixed and redesigned the badge, and kept building from there. The CV page, dashboard, journey view, certifications, and everything else grew out of that original foundation.
π₯ badge42 - Original Contributors
All credit for the original badge42 implementation goes to JaeSeoKim and the contributors below.
JaeSeoKim π» Original author |
Sungwoo Park π |
Peer de Bakker π |
David RodrΓguez Elipe π€ |
Oles π |
JKCTech π |
Arsen Abajyan π» π |
leeoocca π» π |
ricardoreves π» π |
Nicolas Simon π |
Guillaume π π€ |
Riccardo Accomando π π€ |
gabcollet π |
MIT - see LICENSE. This project follows the all-contributors specification. Contributions of any kind welcome!
Revived, redesigned, and built into something more by Lorenzo Edoardo Francesco Simanic