Portfolio · 42 Lyon · 2024 → 2026
Start lightsFeux de départ
Portrait of Mathéo Vachon
Driver · 20 · Lyon, FrancePilote · 20 ans · Lyon
github.com/MathTheMith

MathéoVachon

Software developer trained at 42 Lyon, from low-level C to TypeScript on the web. Motorsport fan who wants to put code to work for performance.

Développeur formé à 42 Lyon, du C bas niveau au web en TypeScript. Passionné de sport automobile, je veux mettre le code au service de la performance.

InternshipStage
From Nov 2026Dès nov. 2026
Work-studyAlternance
From Jan 2027Dès janv. 2027
LocationMobilité
Anywhere in FranceFrance entière
Track mapPlan du circuit8 turns · 3 sectors8 virages · 3 secteurs
Click a turn to jump straight to it.Clique un virage pour y aller directement.
Formation lap · Driver sheetTour de formation · Fiche pilote

EducationFormation

42 Lyon, since 2024. Digital Technology Architect track, common core completed (bachelor level). Project-based, peer-to-peer learning with no lectures.

École 42 Lyon, depuis 2024. Cursus Architecte en Technologie du Numérique, tronc commun validé (niveau Licence). Pédagogie par projets et par les pairs.

French Baccalaureate STI2D, digital systems, 2024. Lycée Ferdinand Buisson, Voiron. European English section.

Bac STI2D, spé. SIN, 2024. Lycée Ferdinand Buisson, Voiron. Option anglais européen.

LanguagesLangages

  • Cunix, threads
  • C++98 → STL
  • TypeScriptReact, NestJS
  • PythonFlask, data
  • AssemblyAssembleurbasicsbases

ToolsOutils

GitDockerLinuxNginxPostgreSQLSQLiteBabylon.jsTailwindBlenderFigma

Off trackHors piste

Native French, English B2. Follows endurance racing (WEC) and GT championships closely, the engineering as much as the racing. Boxing, parkour, tennis, snowboarding, chess.

Français natif, anglais B2. Suit l'endurance (WEC) et les championnats GT de près, côté technique autant que course. Boxe, parkour, tennis, snowboard, échecs.

S1
2024 → 2025

Foundations in CLes fondations en C

The first sector of the curriculum: rewrite everything by hand. The libc, printf, file reading, processes, algorithms. No libraries, no shortcuts.

Premier secteur du cursus : tout réécrire à la main. Libc, printf, lecture de fichiers, processus, algorithmique. Pas de bibliothèque, pas de raccourci.

T1Algorithms · pair projectAlgorithmique · en binôme

push_swap

Sort a stack of integers using two stacks and only eleven operations, in as few moves as possible. Our strategy: pre-sort by quartiles into stack B, then move each element back into A at the lowest cost.

Trier une pile d'entiers avec deux piles et onze opérations seulement, en en utilisant le moins possible. Notre stratégie : pré-trier par quartiles vers la pile B, puis réinsérer chaque élément dans A au coût minimal.

C11 operations11 opérationsprivate repo · code on requestdépôt privé · code sur demande
VisualizerVisualiseur
operationsopérations
0
lastdernière
—

The algorithm in 4 stepsL'algo en 4 étapes

  1. Compute Q1, the median and Q3.
  2. [Q1, med] → pb + rb, [med, Q3] → pb, everything else → ra. Keep 3 elements in A.
  3. Sort the last 3 directly.
  4. For each element of B, cost = rotations of A + rotations of B (sharing rr/rrr). Push the cheapest one.
  1. Calcul de Q1, médiane et Q3.
  2. [Q1, méd] → pb + rb, [méd, Q3] → pb, le reste → ra. On garde 3 éléments dans A.
  3. Tri direct des 3 restants.
  4. Pour chaque élément de B, coût = rotations A + rotations B (avec rr/rrr mutualisés). On pousse le moins cher.

42 grading scaleBarème 42

100 numbers: under 700 moves for full marks. 500 numbers: under 5,500.

100 nombres : moins de 700 coups pour la note max. 500 nombres : moins de 5 500.

Libft ↗

The libc rebuilt by hand. Reused in every C project that follows.

La libc refaite à la main. Réutilisée dans tous les projets C qui suivent.

ft_printf privateprivé

printf with varargs: %c %s %p %d %i %u %x %X %%.

printf avec varargs : %c %s %p %d %i %u %x %X %%.

get_next_line privateprivé

Line-by-line reading with a static buffer, any buffer size.

Lecture ligne par ligne avec buffer statique, taille de buffer quelconque.

pipex privateprivé

Reproduce < in cmd1 | cmd2 > out with fork, pipe, dup2 and execve.

Reproduire < in cmd1 | cmd2 > out avec fork, pipe, dup2 et execve.

so_long privateprivé

A small 2D game in MiniLibX, with .ber map validation and a reachable-path check.

Petit jeu 2D en MiniLibX, validation de carte .ber et chemin atteignable.

S2
2025

Unix systems & graphicsSystèmes Unix & graphisme

The technical core: processes, signals, file descriptors, threads and mutexes, then a 3D engine with no GPU.

Le cœur technique : processus, signaux, descripteurs de fichiers, threads et mutex, puis un moteur 3D sans GPU.

T2Systems · pair projectSystèmes · en binôme

Minishell

A Bash-like shell written from scratch in C: tokenizer, quotes, $VAR and $? expansion, pipes, redirections, heredocs, builtins and signals. The terminal below replays its behaviour, so type your own commands.

Un shell façon Bash écrit de zéro en C : tokenizer, quotes, expansion de $VAR et $?, pipes, redirections, heredocs, builtins et signaux. Le terminal ci-dessous en rejoue le comportement : tape tes propres commandes.

C · readlinefork · pipe · dup2 · execvesource code ↗code source ↗
mvachon@42lyon: ~ minishell
➜ Minishell$
1 · Tokens1 · Tokens
2 · Processes2 · Processus
3 · Status3 · Statut
0
TryEssaie

Parsing

Splits input into tokens (words, |, <, >, >>, <<), handles single and double quotes and expansion, and catches syntax errors before anything runs.

Découpe en tokens (mots, |, <, >, >>, <<), gestion des quotes simples/doubles, expansion, détection des erreurs de syntaxe avant toute exécution.

ExecutionExécution

One fork per command, a pipe between each stage, redirections through dup2, lookup in PATH. Try unset PATH then ls.

Un fork par commande, pipe entre chaque étape, redirections via dup2, résolution dans PATH. Essaie unset PATH puis ls.

SignalsSignaux

Ctrl-C gives the prompt back with $? = 130, Ctrl-D exits, Ctrl-L clears. History with ↑ ↓.

Ctrl-C redonne la main avec $? = 130, Ctrl-D quitte, Ctrl-L efface. Historique avec ↑ ↓.

T3Concurrency · soloConcurrence · solo

Philosophers

The dining philosophers: N threads, N forks guarded by mutexes, and nobody may starve. This simulation follows the project's strategy: even philosophers start late, fork order is reversed, and thinking time is computed.

Le dîner des philosophes : N threads, N fourchettes protégées par des mutex, et personne ne doit mourir de faim. Ici la simulation reprend la stratégie du projet : départ décalé des pairs, ordre de prise des fourchettes inversé, temps de réflexion calculé.

C · pthreadmutex · data racesprivate repo · code on requestdépôt privé · code sur demande
Simulation./philo 4 410 200 200
presets:préréglages :
eatingmangesleepingdortthinkingpensewaiting for a forkattend une fourchettedeadmort
T4Graphics · pair projectGraphisme · en binôme

Cub3D

A raycasting engine in the style of Wolfenstein 3D (1992): one ray per pixel column, the DDA algorithm to find the wall, and a texture picked by which face was hit. Parses a .cub map and validates it with a flood fill.

Un moteur de raycasting à la Wolfenstein 3D (1992) : un rayon par colonne de pixels, algorithme DDA pour trouver le mur, texture choisie selon la face touchée. Parsing et validation par flood-fill d'une carte .cub.

C · MiniLibXDDA · N/S/E/W texturesDDA · textures N/S/E/Osource code ↗code source ↗
PlayableJouableclick, then WASD / arrows · drag to turn · Shift to sprintclic puis WASD / flèches · glisser pour tourner · Maj pour sprinter
Click to take the wheelClique pour prendre le volant

Touch controlsCommandes tactiles

What's happeningCe qui se passe

  • 480 rays cast per frame
  • Perpendicular distance to avoid the fish-eye effect
  • A different texture per side (N, S, E, W)
  • Collision margin, sprint, minimap
  • 480 rayons lancés par image
  • Distance perpendiculaire pour éviter l'effet fish-eye
  • Texture différente par orientation (N, S, E, O)
  • Collisions avec marge, sprint, minimap

.cub mapCarte .cub

S3
2025 → 2026

Networking, infra & teamworkRéseau, infra & équipe

HTTP by hand, Docker infrastructure, then the final project of the common core in a team of five.

Protocole HTTP à la main, infrastructure Docker, puis le projet final du tronc commun en équipe de cinq.

T5Networking · team of 3Réseau · équipe de 3

Webserv

An HTTP/1.1 server in C++98 inspired by nginx. A single non-blocking poll() handles every I/O: clients, CGI pipes and files. No threads, and the main process never forks except for CGI.

Un serveur HTTP/1.1 en C++98 inspiré de nginx. Un seul poll() non bloquant pour toutes les entrées/sorties : clients, pipes CGI et fichiers. Pas de threads, jamais de fork du processus principal hors CGI.

C++98sockets · poll · CGIsource code ↗code source ↗
Simulated requestsRequêtes simuléespick a request and follow it through the poll() loopchoisis une requête, suis-la dans la boucle poll()
event loopboucle d'événements
config.conf

          
requestrequête

            
responseréponse

          
T6Infrastructure · soloInfrastructure · solo

Inception

A multi-container infrastructure built by hand: every image is built from Debian with its own Dockerfile, no prebuilt images. Nginx with TLS as the only entry point, WordPress on php-fpm, MariaDB, persistent volumes and a private network.

Une infrastructure multi-conteneurs montée à la main : chaque image est construite depuis Debian avec son propre Dockerfile, sans image préfabriquée. Nginx en TLS comme seul point d'entrée, WordPress sur php-fpm, MariaDB, volumes persistants et réseau privé.

Docker · ComposeTLS 1.2/1.3source code ↗code source ↗
DiagramSchéma

T7Final project · team of 5 · Tech LeadProjet final · équipe de 5 · Tech Lead

Blindspot

ft_transcendance, the final project of the common core: an online 3D chess platform with real-time games over WebSockets and an AI opponent written in Rust, compiled to WebAssembly and running in the browser.

ft_transcendance, le projet final du tronc commun : une plateforme d'échecs en ligne en 3D, parties en temps réel par WebSockets et adversaire IA en Rust compilé en WebAssembly, qui tourne dans le navigateur.

TypeScript · React · NestJSBabylon.js · Rust/WASMsource code ↗code source ↗
3D boardPlateau 3Ddrag sideways to orbitglisse sur le côté pour tourner
Scholar's mate, in 7 pliesLe coup du berger, en 7 demi-coups

My roleMon rôle

Technical Lead and architect of the team. I built the interactive 3D rendering with Babylon.js, integrated the AI engine, implemented Google OAuth 2.0 sign-in and took part in deployment (Nginx, HTTPS).

Technical Lead et architecte de l'équipe. J'ai réalisé le rendu 3D interactif avec Babylon.js, l'intégration du moteur d'IA, l'authentification Google OAuth 2.0 et participé au déploiement (Nginx, HTTPS).

The platformLa plateforme

  • Real-time online play, reconnection and grace period
  • Minimax AI in Rust → WASM, inside a Web Worker
  • Secure accounts: salted hashes, email verification, OAuth
  • Friends, online status, direct messages, profiles
  • Jeu en ligne temps réel, reconnexion et délai de grâce
  • IA Minimax en Rust → WASM, dans un Web Worker
  • Comptes sécurisés : hash + sel, vérification email, OAuth
  • Amis, statut en ligne, messages privés, profils

Stack

ReactViteTailwindSocket.IONestJSPrismaPostgreSQLJWTDockerVitestPlaywright
PITPit stop · weekend rushesArrêt au stand · rushes du week-end

Pit stopAu stand

Rushes: a subject drops on Saturday morning, a random teammate, a defence on Sunday evening. Plus a few side projects. The Connect Four below is playable against a port of my minimax AI.

Les rushes : un sujet tombe le samedi matin, un coéquipier tiré au sort, soutenance le dimanche soir. Et quelques projets à côté. Le Puissance 4 ci-dessous se joue contre un portage de mon IA minimax.

CONNECT4 · minimax α-β

What the AI saw, column by columnCe que l'IA a vu, colonne par colonne

Wong-kar-Wai ↗rush · C

2048 in the terminal with ncurses: merging, random spawns, resize handling, save file.

2048 dans le terminal avec ncurses : fusion, apparition aléatoire, redimensionnement, sauvegarde.

hotrace ↗rush · C

Key/value lookup on a hand-written hash map: open addressing, linear probing, rehashing.

Recherche clé/valeur sur une table de hachage faite main : adressage ouvert, sondage linéaire, rehash.

Alcu ↗rush · C

A Nim game against an unbeatable AI (modulo 4 strategy), with a Raylib graphical bonus.

Jeu de Nim contre une IA imbattable (stratégie modulo 4), bonus graphique en Raylib.

yasl ↗rush · YASL

Programs in an esoteric multi-stack language, up to a Mandelbrot renderer.

Programmes dans un langage ésotérique à piles multiples, jusqu'à un rendu de Mandelbrot.

Connect4 ↗C · minimax

Connect Four against a minimax AI with alpha-beta pruning and an adaptive depth, any board size up to 999×237. Playable on the left.

Puissance 4 contre une IA minimax avec élagage alpha-bêta et profondeur adaptative, grilles jusqu'à 999×237. Jouable à gauche.

CPP 00 → 09 ↗C++

The C++ modules: OOP, canonical form, templates, STL containers.

Modules C++ : POO, forme canonique, templates, conteneurs STL.

T8
Personal project · 2026Projet personnel · 2026

Where it all comes togetherLà où tout se rejoint

Code and motorsport in one project: read the data of a car on track and make it readable to get faster.

Le code et le sport auto dans le même projet : lire la donnée d'une voiture en piste et la rendre lisible pour progresser.

T8Personal · sim racingPerso · sim racing

Visual Telemetry

A telemetry dashboard for Assetto Corsa Competizione: reads the game's shared memory live, splits laps automatically and colours the track map by throttle and brake to study trail braking lap after lap.

Dashboard de télémétrie pour Assetto Corsa Competizione : lecture de la mémoire partagée du jeu en direct, découpage automatique des tours, carte du circuit colorée selon gaz et frein pour analyser le trail braking tour par tour.

Python · Flask · SQLiteDocker · Nginx · CIsource code ↗code source ↗
Lap replayReplay d'un tourgenerated sample data · hover or drag across the tracedonnées d'exemple générées · survole ou glisse sur la trace
throttlegazbrakefreintrail brakingcoastingroue libre
—
lap timetemps au tour
—
S1
—
S2
—
S3
—

Capture

Reads ACC's Shared Memory. A lap ends when the normalised track position wraps from ~1.0 back to ~0.0. Every lap is written to disk immediately, so nothing is lost if the app crashes.

Lecture de la Shared Memory d'ACC. Un tour se termine quand la position normalisée repasse de ~1.0 à ~0.0. Chaque tour est écrit sur disque immédiatement, rien n'est perdu si l'appli plante.

Dashboard

History filterable by track and car, lap summary, coloured map, pedal and speed traces, fullscreen focus mode with a draggable split.

Historique filtrable par circuit et voiture, récap du tour, carte colorée, traces pédales/vitesse, mode focus plein écran avec séparation déplaçable.

Infra

Nginx serves the front end and proxies /api/* to Flask, which is never exposed directly. API key on write endpoints, pytest tests and GitHub Actions CI.

Nginx sert le front et proxifie /api/* vers Flask, jamais exposé directement. Clé d'API sur les écritures, tests pytest et CI GitHub Actions.

Chequered flagDrapeau à damier

Let's talkOn se parle ?

I'm looking for an internship from November 2026 or a work-study contract from January 2027, ideally with a racing team or around performance data. Happy to relocate anywhere in France.

Je cherche un stage à partir de novembre 2026 ou une alternance à partir de janvier 2027, idéalement dans une structure de course ou autour de la donnée de performance. Mobile partout en France.

Emailmath.vac06@gmail.com
GitHubMathTheMith ↗
RésuméCVCV_Matheo_Vachon.pdf ↗
Based inBasé àLyon · Grenoble