Projects

What I build and run outside work, plus projects from my studies and my PhD.

  1. 2024 – Present

    homelab

    Kubernetes platform, run like production

    A 10-machine k3s cluster hosting about thirty self-hosted apps. Everything, from the OS install to each app’s deployment, is declared in git and rolled out by Argo CD.

    • No inbound port open: Cloudflare Tunnel, a WAF, Gateway API and SSO in front of every app
    • Unattended upgrades at three levels: node OS, Kubernetes and apps
    • Tested restores, off-site backups, and a GPU that wakes on demand for local LLMs
    • Kubernetes (k3s)
    • Argo CD
    • Cilium
    • Vault
    • Authentik
    • Longhorn
    • Fedora CoreOS
    • Ansible
    • Prometheus
    • Grafana
    • Ollama
  2. 2026 – Present

    WO

    Web app for group trips, built and run in production

    Plans a weekend away with friends, family or colleagues in one place: choosing a stay together, splitting expenses and settling up, meals and the grocery list, activities, how everyone gets there with CO2 estimates, and a shared photobook and playlist. Available in four languages, on desktop and as an app on phones.

    • Next.js, TypeScript and PostgreSQL; unit and property tests with Vitest, end-to-end tests on desktop and mobile with Playwright
    • Hosted in France on an OVHcloud server turned into a one-node k3s cluster, with the infrastructure in OpenTofu and Flux deploying each release’s Helm chart, rolling back on failure
    • Built for GDPR: payment details encrypted at rest, data export and account deletion, automatic clean-up 18 months after a trip
    • Next.js
    • React
    • TypeScript
    • PostgreSQL
    • Drizzle
    • Tailwind CSS
    • Playwright
    • Kubernetes (k3s)
    • Helm
    • Flux
    • OpenTofu
    • OVHcloud
  3. 2025 – Present

    freqtrade-operator

    Open-source Kubernetes operator, written in Go

    Runs freqtrade trading bots on Kubernetes. Bots, strategies, backtests and the web UI are custom resources, so a whole trading setup is declared and versioned like any other app.

    • Versioned API, from v1alpha1 to v1beta1, with conversion webhooks
    • Helm chart published as an OCI artifact; signed release images with SBOMs
    • Tested in CI with envtest and end to end on a kind cluster
    • Go
    • controller-runtime
    • Kubernetes CRDs
    • Helm
    • GitHub Actions
    • cosign
  4. 2026

    wol-relay

    Small Go service for the homelab

    Turns an HTTP call into a Wake-on-LAN broadcast. Pods can’t send one themselves, since pod networks don’t forward broadcasts, so the relay runs on a node’s host network. It powers on the GPU workstation that runs my local LLMs only when a service needs it.

    • About 150 lines of Go, standard library only, with tests
    • Distroless, non-root image for amd64 and arm64, built on native runners and merged into one manifest
    • Helm chart with host networking and every capability dropped, deployed by Argo CD
    • Go
    • Kubernetes
    • Helm
    • Docker
    • GitHub Actions
  5. 2023 – 2025

    ScaleHub

    Research testbed tool from my PhD

    Builds short-lived Kubernetes clusters that mix bare-metal servers, VMs and Raspberry Pi boards, then runs repeatable Apache Flink scaling experiments on them. The results in my IC2E 2024 and SAC 2026 papers and in my thesis come from it.

    • Provisions Grid’5000 nodes and a local Raspberry Pi cluster from one config file, joined over a Tailscale mesh into a single K3s cluster
    • Ansible deploys the full stack (Flink, Kafka, MinIO, Prometheus, VictoriaMetrics, Grafana, Chaos Mesh), each part on its own
    • An in-cluster runner controlled over MQTT rescales Flink step by step through savepoints, adds network latency with Chaos Mesh and exports the metrics
    • Python
    • Kubernetes (K3s)
    • Ansible
    • EnOSlib
    • Apache Flink
    • Kafka
    • Chaos Mesh
    • Prometheus
    • VictoriaMetrics
    • Tailscale
  6. 2020

    Interceptor

    Linux systems programming in C, from my Master’s

    A tracer that attaches to a running x86-64 process and changes what it executes: it sets breakpoints, calls functions inside the target, injects new code into its memory and redirects a function to it with a trampoline. Together with the CNES rocket project that followed, it’s what got me into C and Linux systems.

    • Reads and writes another process’s memory through /proc/<pid>/mem, and finds its layout in /proc/<pid>/maps
    • Finds functions in the ELF symbol table with libelf, including in position-independent executables
    • Calls posix_memalign and mprotect inside the target to get an executable page for the injected code
    • C
    • Linux
    • ptrace
    • libelf
    • x86-64
    • CMake