Skip to content

Projects

What I build, hack on, and tinker with.

C
Actively developed

Caracole

Simcade fighter sim with a dynamic campaign

A Mirage F1 over an alternate-timeline Levant in the early 2000s. The air-combat simulator grown out of the Delta Project, with a full nonlinear flight model, avionics and HUD, pilot G-physiology and a persistent dynamic campaign. It all runs on double-precision Godot 4.7 with C#, real-world terrain via Terrain3D, weather and cloud rendering, cloud generation in Rust.

GodotC#RustPhysicsGamedev
Learn more →
S
Actively developed

SCPCB Bevy Remake

SCP: Containment Breach reimplemented in Rust/Bevy

A from-scratch adaptation of the original Blitz3D game, using it as a behavioural reference rather than porting it line by line. Loaders for the original asset formats (RMesh, DirectX .x), a B3D-to-glTF conversion pipeline, seeded facility generation, a first-person controller, doors and keycards, HDR lightmap baking. An unofficial derivative project, CC BY-SA like the original game.

RustBevyRenderingglTFGamedev
H

Homelab

Self-hosted infrastructure, declarative and version-controlled

Around twenty Docker containers run in production. Headscale as a mesh VPN with Authentik for OIDC, Forgejo, Jellyfin, Technitium DNS, Firefly III, Ollama on a remote GPU woken over Wake-on-LAN. Native IPv6, nftables, LUKS. The whole thing is migrating to declarative NixOS. One flake already covers the NAS (ZFS RAIDZ1, Samba, backups) and the laptop, with a custom installer ISO that can rebuild any host from scratch.

DockerNixOSArch LinuxHeadscaleZFSIPv6
View articles →
a
Actively developed

automusic & SUKIYAKI Radio

Self-hosted music library, from ingest to playback

Two halves of the same itch, quitting streaming. automusic aggregates tracks from YouTube Music, SoundCloud, Apple Music and Soulseek, deduplicates and tags them through beets, offers a review queue for bad matches, and serves everything via Navidrome (FastAPI backend, Svelte 5 front end). SUKIYAKI Radio is the Discord bot that streams that library into a voice channel around the clock, with listener requests, saved playlists, station IDs and a genre-sticky random-walk radio mode.

PythonFastAPISvelteDockerdiscord.py
B
Paused

Bangumi

Real-time control room for a Twitch stream

OBS overlays and an admin dashboard for running a live show. Viewer accounts and currency backed by channel points, event handling (subs, follows, redemptions), aggregated YouTube and Niconico chat, audio transcription through Whisper. The backend is written in ASP.NET Core, layered, with EF Core and SignalR. Vue 3 dashboard, Pixi.js overlays. Integration tests on Testcontainers, Docker Compose deployment.

.NETASP.NET CoreVue 3SignalRPostgreSQL
B

BeamOpenTracking

Native Linux 6DOF head tracking for BeamNG.drive

BeamNG only supports head tracking on Windows, through TrackIR. This mod wires the driver camera to opentrack's UDP stream and makes all six degrees of freedom usable on Linux. A game-engine Lua extension, a camera filter, JSON action bindings, and a Python opentrack simulator for testing without hardware. The axis-invert defaults were measured against real hardware, not guessed.

LuaLinuxopentrackModding
P
On hold

Peti Virage

Racing game with deep tyre physics

Everything in this racing-game prototype starts at the tyres. Pacejka PAC2002 model with combined slip, per-zone tread thermal simulation, wear, relaxation length, force-feedback wheel support. First written in Rust with Bevy, then ported to Godot + C# while keeping the physics in Rust behind a GDExtension. The Bevy build stays frozen as the reference for the maths. The PSX look is the intended art direction, not what's on screen yet. On hold, because going further needs an amount of 3D modelling I can't produce yet.

RustGodotC#PhysicsGamedev
View articles →
J

Job Search CLI

Job-search automation CLI tool

Python CLI (Typer/Rich/Pydantic) that scrapes job listings (Indeed, LinkedIn, France Travail API, WTTJ, RSS), deduplicates, scores first by regex then by LLM through Ollama, and exports to an Obsidian vault. It also generates per-listing CVs and cover letters, rendered through LaTeX to PDF, with a translation pass by a second local model.

PythonTyperPydanticOllamaLaTeX
D
Design phase

DRZ400S EFI Conversion

Electronic fuel-injection conversion of a motorcycle

The idle hangs, and it starves for fuel under wheelie. Hence the plan to take this DRZ400S from carburettor to fuel injection. The architecture is worked out: 38 mm Keihin throttle body, a machined 36-1 flywheel for the crank trigger, a Speeduino NO2C as interim ECU, then a custom ECU on an RPi Pico 2 (RP2350) using PIO state machines for trigger decoding and ignition timing. Still on paper. Nothing machined, nothing wired.

Embedded CRPi PicoPIOReal-time
F
Design phase

FTS Handheld

Handheld LoRa mesh communicator

A portable mesh-radio communicator. RP2350, MeshCore radio, fold-back keyboard, Sharp memory LCD, LTE Cat-1 bis modem as a fallback. Right now it's only a decision record (trade-offs on audio, storage, sensors, size and cost), with no PCB and no firmware. The repo exists to keep the reasoning straight before anything gets etched.

RP2350LoRaKiCadHardware
s

sukiyaki.fr

This site

Bilingual static site built with Astro, Tailwind CSS v4 and MDX. OG images are generated on the fly by Satori, search comes from Pagefind, and deployment runs through Docker and Forgejo Actions.

AstroTailwindMDXDocker

Skills

Languages

PythonRustCC#KotlinJavaBashTypeScriptNixSQLLua

Infra & DevOps

DockerLinux (Arch, NixOS)GitHeadscaleAuthentikZFSnftablessystemdIPv6CI/CD

Web & Backend

Vue.jsSvelteAstroFastAPIASP.NET CoreDjangoFlaskSpring BootPostgreSQLREST APIs

Engines & Games

GodotBevyglTFavian3dCompute shaders

Embedded & Hardware

RPi PicoArduinoFreeRTOSBLESPI / PIO

Contact

contact@sukiyaki.fr