Featured personal

Featured personal

My personal creations

Five finished projects, four of them public on GitHub, and four prototypes built to answer a specific technical question. Most of this is from 2026, after I left MirraGames and spent the time rebuilding my own component library rather than someone else's codebase.

Finished

Built and public

An Android app taken to production, and four Unity packages that solve a problem I kept hitting. All of them are readable rather than described: the code is the argument.

  • The LockInGoals tracker screen with daily targets and a month calendar

    App

    LockInGoals

    Role
    Sole developer
    Period
    2026, two months to production
    Status
    Internal testing track on my own Google Play account, not published

    I kept losing the small daily things to the large ones, and no tracker on the store lets me own the data, the sync and the roadmap at the same time. Built from nothing to a production Android build in Unity in two months. State is CRDT backed, so edits on a phone and on a desktop merge without a server arbitrating. No account, no server, no network permission, and import and restore go through the Android Storage Access Framework rather than a broad filesystem grant.

    Outcome

    In daily use since release, with an adaptive layout that builds for anything Unity targets. The reusable pieces underneath it, the CRDT storage and my component library, came out of this and are current again.

  • The Transvoxel demo in Unity with its live stats and world controls panel open

    Open source

    Transvoxel

    Role
    Sole developer
    Licence
    MIT
    Backends
    CPU, GPU and hybrid

    Marching cubes leaves visible seams wherever two levels of detail meet. This is a clean, modular Unity implementation of Eric Lengyel's Transvoxel algorithm: seamless LOD triangulation over a density field managed by an octree, with sculpting and world parameters as live controls that rebuild the landscape while you move them, and a meshing backend you can switch between CPU, GPU and a hybrid of the two at runtime.

    Outcome

    240 FPS in real time, 10,000 metres of landscape ahead of the player, on hybrid CPU and GPU threading. Public on GitHub under MIT.

  • The EventAggregator source open in an editor, showing its two interfaces

    Open source

    EventAggregator

    Role
    Sole developer
    Surface
    Two interfaces and one class
    Dependencies
    None

    A type keyed publish and subscribe event bus for Unity with no allocation on the hot path. Producers publish plain objects or structs, listeners subscribe per event type, and there is no reflection, no code generation and nothing to configure. The whole thing is two interfaces and one class, which is the point: a message bus that needs a manual is a message bus people route around.

    Outcome

    Public on GitHub, and the decoupling layer I reach for first in my own projects.

  • The ConsoleContainer editor window showing separate consoles per system

    Open source

    ConsoleContainer

    Role
    Sole developer
    Surface
    Unity editor window
    Purpose
    Logging per system

    The Unity console is one bucket for every message from every system, so the moment a project has a few subsystems the log stops being readable. ConsoleContainer gives each system its own named console inside a dedicated editor window, keeping the timestamp, the source and the full call stack, with every stack frame clickable straight into the IDE exactly like the built in console.

    Outcome

    Public on GitHub. Debug output stays out of the shared console and inside the context that produced it.

  • A mesh rendered with a constant width outline around its silhouette

    Open source

    MeshOutline

    Role
    Sole developer
    Engine
    Unity 6
    Runtime cost
    None per frame

    Silhouette outlines usually cost something every frame: a post processing pass, a render texture, a command buffer or an Update loop. This does the expensive part, smooth normal generation, at edit time and serialises it straight into the scene, then draws a constant width outline with a classic two pass stencil technique. Bake once, ship it, and the frame budget never hears about it again.

    Outcome

    Public on GitHub, with no per frame cost, no camera setup and no post processing stack required.

Shelved on purpose

Prototypes and what they proved

Each of these was built to answer a question, and each was put down once it had an answer. They are here because the answers are the interesting part, and because one of them is the project everything else has been preparation for.

  • A procedurally generated low poly canyon rendered in Unity

    Prototype

    Spacevoxel

    Role
    Sole developer
    Status
    Prototype, still the goal
    First attempt
    2019

    The one I actually want to build: a world generated end to end, from landscape to structures, NPCs and quests, so that travelling far enough always puts you somewhere nobody has seen. I first tried it in 2019 and could not build most of it. The terrain half is now solved and public as Transvoxel, running on a hybrid CPU and GPU threading model.

    What it proved

    That the hardest dependency is no longer the blocker. What is left is time rather than capability, and this is the only one of the four I intend to finish.

  • Pocket Raft, a block built raft floating on an open sea

    Prototype

    Pocket Raft

    Role
    Sole developer
    Status
    Prototype, shelved
    Target
    Mobile browser in a WebView

    A block built survival game on a raft, made to find out how far Minecraft style terrain can be pushed on a phone running inside a WebView. Chunk generation, UV mapping, baked ambient occlusion and light propagation handled the way Minecraft handles them, on NativeArrays with HLSL shaders and loops written so that a chunk rebuild costs as little as it possibly can.

    What it proved

    That the whole voxel pipeline runs smoothly in a mobile WebView. Shelved on a market judgement rather than a technical one: the idea reads better on paper than it would have performed.

  • Run from Psycho, a dim basement level with vents and corridors

    Prototype

    Run from Psycho

    Role
    Sole developer
    Status
    Prototype, shelved
    Period
    3 to 4 months, at university

    An escape the building game, with a basement level modelled in 3ds Max and textured in 3D Coat by me, a cross platform player controller and an interaction system. It stopped one step short of an MVP, missing the NPCs that hunt the player and the interface work that would make it feel finished.

    What it proved

    Where my light baking, UV mapping and ShaderGraph fundamentals come from, all of which went straight into the commercial work that followed.

  • Rush the Padik, a stylised level runner with melee and gunfights

    Prototype

    Rush the Padik

    Role
    Sole developer
    Status
    Prototype, shelved
    Idea
    Music as the combat state

    A level runner where you kick and shoot your way to the exit, with a lobby for upgrading and dressing your character. The distinctive part was audio as a state machine: calm background music, a warning track the moment an enemy sees you, and hard bass while you fight. I commissioned a composer and bought the assets to do it properly.

    What it proved

    That the audio idea works, and something more useful: I built it because it was fun to build, not because anyone was waiting for it. Shelved once that was clear.

The commercial work is on its own page

Twenty four shipped titles across MirraGames and TeamGZ, including the five that went wrong and what I changed afterwards. If you would rather talk than read, email is the fastest way to start.