Skip to content

lorenzoedoardofrancesco/42cv

Repository files navigation

42cv.dev logo

πŸš€ Your 42 journey, recruiter-ready. Instant CV page and dynamic stats badges for πŸŽ“ Γ‰cole 42 students.
Just sign in!

License: MIT Self-hosted on Hetzner React 19 Next.js 16 TypeScript

✨ Features

πŸ“„ Public CV - share your profile with recruiters

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

🎴 Stats badge - embed live stats in your GitHub README

  • 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

πŸ‘€ Preview

CV page

Live example: 42cv.dev/lsimanic

42cv.dev/lsimanic preview

Social preview (OG image)

Auto-generated via local Puppeteer, cached 6h per user.

42cv.dev/lsimanic OG preview

Dashboard

Interactive demo (no login required): 42cv.dev/demo

42cv.dev dashboard demo

Stats badge

lsimanic's 42 stats
lsimanic's 42 stats

Project Score
kfs-4 lsimanic's 42 kfs-4 Score
ft_traceroute lsimanic's 42 ft_traceroute Score
C Piscine Rush 00 lsimanic's 42 C Piscine Rush 00 Score

πŸ€“ Usage

  1. Go to https://42cv.dev/ and sign in with your 42 account
  2. 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
  3. Badge: copy the URL or markdown snippet and paste it into your GitHub README

πŸ› οΈ Self-hosting

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 dev

See .env.example for the required environment variables (42 API credentials, database URL, NextAuth secret).

🧰 Tech stack

  • Next.js 16 / React 19 - Pages Router with Turbopack, API routes for SVG generation
  • Prisma 7 - ORM with PostgreSQL, PrismaPg driver adapter
  • NextAuth v4 - authentication via 42 OAuth
  • Tailwind CSS 4 - CSS-first configuration
  • ReactDOMServer - renders React components to static SVG markup
  • Puppeteer - local headless Chromium for OG image screenshots
  • Dokploy - self-hosted PaaS on Hetzner VPS
  • 42 API - fetches user data, coalitions, projects with rate-limited queue

❓ FAQ

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.

πŸ‘₯ Contributors


lsimanic

πŸ’» Author

jlanza

πŸ€” Feature requests

πŸ—‚οΈ About this project

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

πŸ›

πŸ“„ License

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

About

πŸš€ Your 42 journey, recruiter-ready. Instant CV page and dynamic stats badges for πŸŽ“ Γ‰cole 42 students.

Topics

Resources

License

Stars

Watchers

Forks

Contributors

Languages