Work

Things I've made.

A product I ship and run, a real-time 3D editor and runtime I am building in Zig, and a workshop of small tools I wrote because I wanted them to exist.

Shipped

Running in production.

In progress

A real-time 3D editor and runtime, in Zig.

This is an editor and a runtime sitting on top of a Vulkan renderer, both written in Zig. You build a scene visually, placing entities and their components and adjusting them through an inspector alongside the lights, meshes, physics and UI, and the result serialises out to a .zon file. A separate runtime then reads that file back and drives the whole application from it without containing a single line of code specific to the scene, so the data is what describes the application while the runtime stays entirely general.

There are three executables built over one shared engine module and a single entity-component-system world: the editor itself, the generic runtime, and a scene wired up by hand that exercises the render and interaction paths an empty scene would quietly leave untested. It is the closest thing I have to a hard real-time problem at the moment, because a frame budget, a GPU and a compiler all have to be satisfied at once and none of them will negotiate. It is also the codebase my model fleet works against, which means the verification step runs against a real compiler instead of a benchmark that was designed to be passed.

Private while it's in progress.

Workshop

Small tools, written to be read.

The rest of the workshop is at codeberg.org/litozor, mirrored to GitHub.

This page

How the site is built.

The site is plain HTML, CSS and ES modules, with no framework, no build step, no bundler and nothing at all to install at runtime. Every JavaScript and CSS file stays under 150 lines and opens with a header setting out what it does and what it must never do, and a script in the repo checks both of those mechanically so that the rules cannot quietly rot as the site grows.

One set of pages carries two different reads of the same material. Brief is the short version and gives you the claims, the numbers and a way to reach me inside a single screen, while Deep puts back the architecture and the tradeoffs for anyone who wants to know how something was actually built. Both versions sit in the HTML at the same time, which means that with JavaScript turned off you simply get all of it.

assets/
├── kernel/    bus, router, mode
├── modes/     brief/ · deep/ renderers
└── features/  indicator, shortcuts, hints

Source: github.com/Linh35/lelinh.dev

Next

Available for contract and full-time remote.

linh@lelinh.dev