I'm Selim, a backend .NET engineer. Seven years of C#, five of them keeping one business platform alive in production: 5,000+ users, a SQL Server schema I designed, a .NET Framework 4.8 → .NET Core migration done without stopping the service, PostFinance payments behind a webhook secured with a shared secret, and third-level support straight from the people using it.
Off the clock I take things apart to see how they work. A game engine, read back from its binary. A DJ set, read from the sound itself.
| Project | What it does |
|---|---|
| bully-re · C++ | Rebuilding the Bully: Scholarship Edition engine from the shipped binary. File formats, animations, collisions and the AI behaviour trees are decoded and checked against the real game data, then rendered: pedestrians walk their patrols, smoke on the wall, sit on benches and pick fights. The game's own Lua scripts run on the embedded VM: the first two missions play through to their success screen, and in the third every pedestrian is born with the action tree and AI tree of its model, so the bullies chase, take their attack rights and strike exactly as the game's data says. 781 functions rebuilt so far, each one checked against the original. |
| legacy-lens · C# | Reads a legacy .NET Framework codebase on your own machine and measures what a move to modern .NET takes: 414,611 lines of Orchard assessed in under fifteen seconds, its 88 assemblies still building after conversion, verified on Windows, and every use of what modern .NET no longer has (System.Web, CodeDom, Remoting) counted file by file. For the files that will hurt, it generates characterization tests that are compiled and run before anyone sees them. Hands over a report a CTO reads in one page, reads assemblies whose source is gone with ILSpy's engine, and serves the same measurements to coding agents through sixteen MCP tools. Nothing leaves the machine, and the code is private. |
| cover-pool-kafka · C# | Mortgage loan events replayed through Kafka into a covered bond cover pool, with LTV and eligibility rules. |
| emotion-calculator · C# | Real-time visuals for a vinyl DJ set. The tempo is derived from the signal, never read from a tag, so it survives the pitch fader. |
| crate · TypeScript | A PWA for my record crate: Camelot keys after pitch, genre colours, and which track can follow which, live. |
| rea · TypeScript | My fork of REA, the MCP server that lets AI agents drive Ghidra and other reverse-engineering tools. I use it daily on bully-re and send what I fix back upstream. |
- ILSpy #4228: merged into ILSpy, the reference .NET decompiler. A named argument could inline the loop variable and break
foreachback into a raw enumerator loop; the fix keeps theforeach. - rea #974: a configurable Ghidra startup deadline for REA, the MCP server that lets agents drive Ghidra. Found the hard way, on an 8 MB binary that needed more than the fixed 330 seconds.
C# · .NET · ASP.NET Core · Entity Framework · SQL Server · Kafka · Blazor · React / TypeScript · Docker · Terraform · Ghidra
Most days include a training session and some time behind the decks, mixing vinyl on a pair of Technics MK2s. I grew up on 90s consoles and still tinker with retro handhelds, which is where the urge to open a game and see how it works comes from. Before backend work I wrote a WPF app that let quadriplegic users drive their wheelchair with their eyes, talking to an Arduino over a serial link.
Open to backend .NET roles in French-speaking Switzerland. The best way to reach me is LinkedIn.

