Independent developer · Lebanon

Four platforms.
One match.

I build cross-platform game infrastructure and the networking that makes it hold together — plus the backends and tools around it.

Windows · macOS · Linux · iPadOSone lockstep simulation
Ed25519signed auto-update
C++ · Node · Next.jsday to day
Work

What I maintain.

GeneralsX shipping

Command & Conquer: Generals Zero Hour, running natively on Windows, macOS, Linux and iPadOS — with the original lockstep simulation intact, so all four platforms can play the same match.

Every peer hashes its own simulation source into a build identity and refuses a join that would silently desync. Updates are delivered through a signed release manifest and verified before anything is written.

C++lockstep netcode NAT traversalVulkan / DXVK Ed25519

The Z Connect

A student network built around a single card — campus discounts, mentorship and opportunities in one membership, with the partner and branch tooling behind it.

Next.jsNode PrismaPostgres

Infrastructure

The unglamorous half: relays, build pipelines that verify four platforms before anything ships, signed releases, and update paths that fail closed instead of guessing.

LinuxUDP relays CICloudflare
Download

GeneralsX

You need your own copy of Zero Hour installed. This contains no EA game data, and it never modifies your existing installation — it installs beside it.

Latest build

Unzip anywhere and run GeneralsX-Setup.cmd. It installs to its own folder and updates itself from then on.

Windows  64-bit
64 MB Download
SHA-256 685f23415f0493716784e316fd5aabf146e34e5128a3f4a96bfc2a8fc8b35f2d
Check it certutil -hashfile GeneralsX-win64.zip SHA256
macOS  Apple silicon
soon
Linux  x86-64
soon
iPadOS
soon

Every release is listed in a signed manifest. The installer checks the Ed25519 signature and the file’s SHA-256 before it writes anything — if either fails it refuses and leaves your game untouched.

This is an unsigned executable, so don’t take my word for it: the hash above is the one the installer enforces, the VirusTotal link is that exact file, and the launcher is built by CI from a commit rather than from my desktop. If the hash you compute doesn’t match the one here, don’t run it.