Projects
Everything I’ve built, in two tracks: applied AI systems that run for real users, and deep learning models I rebuilt from first principles. Open any project for the full write-up, examples, and tech stack.
Applied AI Systems
Production-oriented LLM, RAG, agent, evaluation, and data-platform work — systems that run for real users.

Alert Agent — MCP-Powered Incident Investigation
Code is private (company / client work)
An LLM agent at Dailymotion that picks up data-platform alerts from Slack and investigates them through dedicated MCP servers for Airflow, GCP, and BigQuery.
Built with:
Gemini
MCP
Airflow
BigQuery
GCP
Slack

Code-Hinter — AI Grading Inside VS Code
GitHub: Code-HinterDemo video: Code-HinterWeb app codeWeb app demo
A Centrale Lyon team project: professors create exercises in VS Code, students submit from the editor, and an AI model grades against the professor’s criteria.
Built with:
TypeScriptVS Code API
Python
Flask
Next.js

Juridia — Multilingual Legal RAG
Code is private (company / client work)
A production retrieval and question-answering system for more than 100,000 Arabic and French legal documents, combining semantic, keyword, and metadata search.
Built with:
FastAPI
PostgreSQLQdrantLlamaIndex
React

CadQuery Agent — Local Text/Image to Editable 3D
A local, privacy-first agent that turns text, a reference image, or both into editable CadQuery Python and exportable STL/STEP geometry using open-weight models.
Built with:
Python
FastAPICadQuery
Ollama
Docker
Three.js

Coflow — Code Map for VS Code
A VS Code extension that draws how your code runs: from the whole system and the file that starts it, down to every line of one function. Runs locally, free to use.
Built with:
TypeScriptVS Code API
Python

Glitch — Android App against Autopilot Phone Habits
Private project: I see real potential in it, so the code stays closed for now.
A small Android app that shows your apps in a new random order, so you look before you tap. No permissions, no internet, no tracking.
Built with: KotlinJetpack ComposeAndroid
GitHub Actions

Kinetra — AI-Powered Fitness Companion
Private project: I see real potential in it, so the code stays closed for now.
An AI fitness companion: guided workouts, a camera coach that checks your form, body measurements from a photo, and a supportive community.
Built with:
FastAPI
PostgreSQLExpoMediaPipe
ONNX
Deep Learning & Research
Models built from first principles: transformers, multimodal learning, computer vision, generative models (GANs, diffusion, text-to-image), reinforcement learning, graph learning, speech and real-time audio.

NatVC — Real-Time Neural Voice Conversion
Code is private (company / client work)
Any-to-any voice conversion that runs in real time under a live-application latency budget — my Centrale Lyon MSc thesis, carried out during my internship at SteelSeries.
Built with:
PyTorch
Accelerate (multi-GPU)StreamVCLLVC
TensorBoard

Bilingual Net — English ↔ Darija Translation
GitHub: Bilingual NetDemo video: Bilingual Net
A from-scratch encoder–decoder Transformer for translation between English and Moroccan Darija — a low-resource dialect — with residual pre-LN attention and five decoding strategies.
Built with:
PyTorch
Streamlit
PoetryBeam search

Tiny LLM — GPT-2 Reimplemented From Scratch
A GPT-2-style model rebuilt from scratch during my 3D Smart Factory internship: Flash Attention, pre-LayerNorm blocks, and LoRA fine-tuning. My most-starred repo.
Built with:
PyTorchLoRAOpenWebText

Image-to-CadQuery — Custom Vision-to-Code Model
Code is private (company / client work)
A custom image-to-CadQuery neural network that maps CAD images to executable modeling tokens without calling an LLM or hosted model API.
Built with:
PyTorchResNet18Transformer
Hugging Face Datasets
pytest

CartPole RL — Twelve RL Methods on One Benchmark
CartPole-v1 solved twelve ways in one small PyTorch code base: tabular Q-learning, SARSA and Monte Carlo control, DQN with double, dueling, prioritized and n-step variants, REINFORCE, actor-critic, A2C and PPO, plus CNN policies that learn from rendered pixels, all under one evaluation protocol.
Built with:
PyTorchGymnasium
NumPyMatplotlib
pytest

Diffusion Workbench — Diffusion and Flow Models on One Loop
DDPM (ε, x0 and v prediction, DDIM), score SDEs (VP, VE), flow matching, EDM and classifier-free guidance in plain PyTorch, sharing one U-Net or DiT, one training loop, one sampler interface and one evaluation, compared on MNIST with a classifier-feature FID and quality-versus-NFE curves.
Built with:
PyTorch
torchvisionMatplotlib
pytest

English-to-Arabic Translator — Transformer Machine Translation
GitHub: English-to-Arabic Translator
English-to-Arabic neural machine translation with an encoder-decoder Transformer written from scratch in PyTorch, with a shared BPE tokenizer, beam search and BLEU / chrF evaluation; the same code works for any language pair.
Built with:
PyTorchCustom TransformersBeam search
Hugging Face Datasets
pytest

FrozenLake RL — Classical RL Methods Checked against the Exact Optimum
FrozenLake, Taxi and CliffWalking solved with fourteen classical reinforcement-learning methods, from value iteration and Monte Carlo control to SARSA(lambda), Dyna-Q and DQN on one-hot states, each scored exactly from the transition model and on 1,000 real episodes.
Built with:
Python
NumPyGymnasium
PyTorchMatplotlib

GAN Workbench — Ten GAN Variants on One Training Loop
Ten GAN types (GAN, DCGAN, cGAN, ACGAN, LSGAN, WGAN, WGAN-GP, SNGAN, pix2pix, CycleGAN) written in plain PyTorch behind one training loop, one data pipeline and one evaluation, so switching method is one flag and the comparison on MNIST and synthetic shapes is fair.
Built with:
PyTorch
torchvisionMatplotlib
pytest

LunarLander RL — Eleven Deep-RL Methods on One Benchmark
LunarLander-v3 trained with DQN, double and dueling DQN, REINFORCE, A2C, PPO and discrete SAC on the discrete lander, and DDPG, TD3, SAC and Gaussian PPO on the continuous one: each algorithm is one readable PyTorch file, and all share the same networks, seeds, evaluation and comparison table.
Built with:
PyTorchGymnasium
NumPyMatplotlib
pytest

MountainCar RL — Every RL Family on One Sparse-Reward Task
MountainCar, discrete and continuous, solved with tabular Q-learning and SARSA, tile coding, DQN variants, REINFORCE, A2C, PPO, DDPG, TD3, SAC and the cross-entropy method in one PyTorch code base, with reward shaping and novelty bonuses as flags to show which methods find the flag on their own.
Built with:
PyTorchGymnasium
NumPyMatplotlib
pytest

Pendulum RL — Swing-up and Acrobot with Every Classic RL Method
Pendulum swing-up (continuous torque) and Acrobot (discrete actions) solved with DDPG, TD3, SAC, PPO, A2C, REINFORCE, the cross-entropy method, DQN variants and tile-coded SARSA(lambda) in one PyTorch code base, all under the same step budget, evaluation and plots.
Built with:
PyTorchGymnasium
NumPyMatplotlib
pytest

Pong RL — Pong from Pixels with Seven Deep RL Methods
Pong from raw pixels with Karpathy's policy gradient, REINFORCE with a baseline, A2C, PPO, DQN, double DQN and dueling DQN (with prioritized replay and n-step returns) in one PyTorch code base; a built-in 40x40 numpy Pong lets every method beat its opponent in minutes on one CPU thread, and the same code runs on Atari Pong.
Built with:
PyTorchGymnasium
NumPyMatplotlib
pytest

Speech Emotion Recognition — 8 Audio Classifiers Tested on Unseen Speakers
GitHub: Speech Emotion Recognition
Eight ways of classifying emotion in speech compared on RAVDESS: raw waveform, MFCC, log-mel spectrogram, handcrafted features and a frozen WavLM, all trained on the same split and tested on actors never heard in training, with the overfitting measured and fixed.
Built with:
PyTorch
Hugging Face Transformerslibrosa
scikit-learn

STT Workbench — Speech-to-Text Approaches in PyTorch
Speech recognition built from scratch in PyTorch: CTC, attention encoder-decoder, LAS, hybrid CTC/attention and RNN-Transducer on BiLSTM, Transformer or Conformer encoders, with every decoding algorithm and WER/CER evaluation, tested on small 8 kHz datasets.
Built with:
PyTorchBeam search
ONNX
Kaggle
pytest

Text2Image — Twelve Text-to-Image Architectures Side by Side
Twelve text-to-image architectures (Stable Diffusion U-Net, DiT, JiT, MMDiT, single-stream DiT, SANA, MeanFlow, Transfusion, autoregressive, MaskGIT, VAR, MAR) in PyTorch that share one dataset, text tokenizer, training loop and automatic evaluation, trained and benchmarked on a CPU on a captioned-shapes task.
Built with:
PyTorchCustom Transformers
NumPy
pytest

TTS Workbench — Text-to-Speech Approaches in PyTorch
Text-to-speech built from scratch in PyTorch: Tacotron 2, Transformer-TTS, FastSpeech 2, VITS and a HiFi-GAN vocoder with a built-in aligner and MCD / F0 / MOS evaluation, compared on small 8 kHz datasets.
Built with:
PyTorch
NumPyMatplotlib
Kaggle
pytest

U-Net Image Segmentation — Six Segmentation Variants Measured on the Same Data
GitHub: U-Net Image Segmentation
U-Net in PyTorch with every design choice as a flag (skip connections, max-pool vs strided conv, single vs double conv, residual blocks, a SegNet-like model without skips and a fully connected baseline), all trained on synthetic shapes and Oxford-IIIT Pet and compared with IoU, Dice and a threshold sweep.
Built with:
PyTorch
torchvision
pytestMatplotlib

PairVC — Real-Time Voice Conversion from Paired Speech
GitHub: PairVCLive demo: PairVC
A tiny causal voice converter that turns your voice into a target voice live, 20 ms at a time on one CPU core. It learns from a big offline teacher model, on paired speech.
Built with:
PyTorch
ONNX
Streamlit
JavaScript
Kaggle

JointVC — Disentangled Voice Conversion, Trained in One Run
Private for now: I’m still exploring this research, so the code isn’t published yet.
Ongoing research: a tiny real-time voice converter whose content encoder, speaker encoder and decoder learn together, and the open problem at its heart, disentanglement: keeping who speaks out of what is said.
Built with:
PyTorch
ONNX
Hugging Face Transformerstorchaudio

HR-Jev — GPT-2 for HR Outcome Prediction
A GPT-2 model, written from scratch and initialized from pretrained weights, that reads employee records written as sentences and predicts attrition, job level, job satisfaction, and monthly income.
Built with:
PyTorch
Hugging Face
Gradio
pytest
TensorBoard

Text Classification — Emotion Detection with RNNs, LSTMs and GRUs
Emotion classification of short English sentences with RNN, LSTM and GRU models in PyTorch, each built with nn.* and from scratch, fed one-hot or GloVe embeddings: 12 models, one recipe, 91 to 92% test accuracy.
Built with:
PyTorchGloVeNLTK
Pandas
pytest

GNN Molecular — Seven GNNs for Molecular Properties
Code is in a private repository for now.
Seven graph neural networks (GCN, MPNN, DCNN, GIN, GAT, GraphSAGE, AttentiveFP) that predict molecular solubility (ESOL) from the graph of atoms and bonds, compared on one split in a tested Python package.
Built with:
PyTorch
PyTorch GeometricRDKitMoleculeNet
pytest

Image Captioner — Multimodal Image Captioning
Image captioning built by hand in PyTorch: a ViT-style encoder turns images into visual tokens and a Transformer decoder writes the caption.
Built with:
PyTorchCustom Transformers
Poetry

ViT Image Classifier — Vision Transformer From Scratch
A Vision Transformer built from scratch in PyTorch: patch embedding, positional encoding, multi-head attention, a [CLS] token, and fine-tuning.
Built with:
PyTorch
PoetryViT

ImageGen — GANs and Diffusion behind One Training Loop
DCGAN, a SNGAN/BigGAN-style ResNet GAN and a DDPM U-Net in plain PyTorch behind one training loop, one sampler and one checkpoint format, all class-conditional with EMA weights, with presets for MNIST, CIFAR-10 and AFHQ animal faces and training on a CPU, one GPU, several GPUs or several machines.
Built with:
PyTorch
torchvision
Hugging Face Datasets
torchrun
pytest

MusicGen — Transformer vs LSTM vs RNN for Music
Symbolic music generation compared across Transformer, LSTM, and RNN on the same corpus, with a Streamlit app that generates downloadable songs.
Built with:
PyTorch
Keras
StreamlitABC notation

MyTorcha — A Deep Learning Framework From Scratch
A deep learning framework built from scratch on NumPy: a Tensor autograd engine with CNN, RNN, LSTM, GRU, attention and Transformer layers, 20 activations, 10 losses and 8 optimizers, every gradient verified against finite differences and PyTorch. The original scalar engine is kept as a teaching chapter.
Built with:
Python
NumPy
pytest
PyTorch

SegNet Semantic Segmentation — Pixel Labelling with Pooling-Index Unpooling
GitHub: SegNet Semantic Segmentation
SegNet written from the paper in PyTorch: a VGG16 encoder, a decoder that upsamples with the saved max-pool indices, cross-entropy plus soft dice loss, pixel accuracy and mIoU, trained on toy shapes, Oxford-IIIT Pet and Mapillary Vistas street scenes.
Built with:
PyTorch
torchvision
pytest
Kaggle

YOLO Object Detector — YOLOv1 from the Paper, in PyTorch
YOLOv1 written from the paper in PyTorch: the 24-layer network, the sum-squared-error loss, target encoding, decoding, non-max suppression and mAP, trained from random weights on synthetic shapes, MNIST digits, PASCAL VOC or any YOLO-format dataset.
Built with:
PyTorch
torchvision
pytest
Kaggle