Gesture recognition
One reference image, no training. The recogniser compares hand graphs by their Laplacian spectra, live from a webcam.
First written in 2020, then extended to full-body tracking for a 2022 installation.
Management, design, communication and technology. Broad by default, deep where it matters.
Games, tools and objects that are fun to use, and useful when it counts.
I am a generalist with a technology specialization. I move between management, finance, communication, art and design, and engineering. AI and ML are where I go deepest technically, not the whole story. Most of what I do is take an idea from conversation to something real.
Generalist breadth with specialist depth. I am most useful at the seam between disciplines: scoping the idea, building the system, and translating it for the people who have to run it.
RangeThe wide layer is how I read people, money, taste and context: management and finance, leadership and communication, art and design, history and philosophy.
TechnologyNarrower and longer: the technical range that makes an idea buildable. Platform and product, software, electronics, hardware down to transistor level, mechanical and chassis design.
DepthThe narrow end is the specialization: AI and ML, and the systems that make them operable.
Scoping, proposals, budgets, effort estimation and vendor coordination. Comfortable with the commercial side, not just the build.
Coordinating small teams and cross-organisation stakeholders, writing documentation and translating between technical and non-technical people.
Visual identity, interaction, 3D and game art. Blender, Inkscape, FreeCAD and front-end craft; I care how the thing feels.
TypeScript and React, Go, Rust, Java and Python. Frontends, APIs, data access and integration; typed boundaries over glue.
LLM orchestration, evaluation design, Bayesian decision models, computer vision, uncertainty and provenance. A key part of the technology specialization.
Linux, Docker, Kubernetes, networking, offline deployment, high availability, observability and backups.
KiCad boards, ESP32 firmware, FreeCAD and 3D printing, game engines and interactive installations.
Literature-grounded design, baseline evaluation, failure analysis and technical writing. Publishing limitations, not just results.
Integrating an enterprise AI agent platform for a large client: identity, data access, alerting and offline porting. The client, the vendor and the systems stay out of this site by design; the CV carries the detail.
Games, tools and physical objects, judged on whether someone enjoys using them and whether they help. Some of it is commercial, some of it is a jam, all of it is built for someone other than me.
A steampunk engineering roguelike about building chain-reaction power grids. It started as a Ludum Dare entry and became a commercial release with a data pipeline, tests and a repeatable build process.
Five working systems from both sides: a gesture installation, a transistor computer, a training playground, a CNN inspector and a language-to-diagram tool.
One reference image, no training. The recogniser compares hand graphs by their Laplacian spectra, live from a webcam.
First written in 2020, then extended to full-body tracking for a 2022 installation.
A computer built from discrete transistor logic. Step the microcode, run a program, edit assembly and watch the bus.
The machine was built in 2020 from discrete logic; the browser simulator is the 2026 rebuild.
Draw a digit and classify it, or train a small classifier and watch the decision boundary move as it learns.
A teaching tool from the capstone era: small models you can train and inspect in the browser.
A convolutional network reading digits in three dimensions: layers, weights, activations and the decision.
The visualisation layer from the ML playground, separated so the network can be read in three dimensions.
The current diagram and your message. The demo keeps conversation state and supports class, sequence, activity, use case, component, state and object diagrams.
A fixed system prompt sets the role and the output contract. The current PlantUML source is included so an edit is targeted, not a full regeneration.
Any OpenAI-compatible endpoint with your own key, at temperature 0.2. The shared proxy is gone, so no model call happens without your key.
The response must start with CODE or NEED_CLARIFICATION. The parser extracts the fenced block, strips stray plantuml lines and repairs missing @startuml / @enduml delimiters.
UTF-8, raw zlib deflate, Base64, then PlantUML's custom URL alphabet. This runs in the browser with pako; no source leaves for encoding.
PlantUML's public server receives only the encoded source and returns SVG. The image, PNG export and editor link all come from that one artifact.
Describe a system in natural language and iterate with a model until the class diagram matches what you meant.
Built in 2025, when iterative LLM diagramming was still novel. In 2026 the interaction matters more than the generation. The shared proxy is retired; bring your own API key.
Not a fixed process. A rough shape that tends to appear whether the work is a service, a board or a model. The drawings below are artifacts from that practice, not a catalogue of the only shapes I work in.
Usually starts with talking to everyone who touches the problem: users, operators, buyers, the people who maintain it. Separating the request from the need is most of the work.
Then research, references, raw material and resources, a few rough alternatives, and a guess at effort and risk before committing to one.
At some point the idea has to take a technical shape: boundaries, data, interfaces, failure modes and a build order.
Building tends to happen in slices. Integrate early, put working pieces in front of the people who asked, and let feedback change the plan.
Eventually it has to survive real inputs and real operators. Documentation, a runbook, and enough context that someone else can run it.
A sketch, not a procedure. The order changes, the loops are real, and listening and building keep feeding each other. The two artifacts below are examples from that practice, not a taxonomy of the work I can do.
The architecture I reach for: typed clients, a gateway, service boundaries and a build path, with each module tied to a language.
Output of Model and Verify: boundaries, interfaces and the build path before the first service is written.
From schematic to firmware to assembly, with the tools I actually use at each stage and where the branches rejoin.
Output of Model and Operate: the actual route from schematic and board to firmware and assembly.
I am a builder in Hong Kong. My range runs from management and finance to communication, art and design, with technology as the specialization I use to bring projects to life. AI and ML are where that specialization goes deepest, not the whole identity.
I studied computer science at HKU, worked across an embedded startup, a science park and a consultancy, and now integrate an enterprise AI platform. I care about the unglamorous middle: integration, tests, release processes, and the parts that decide whether a system survives contact with reality.
Microcontrollers, a game jam entry, and a computer from discrete transistors.
Embedded video, automation at HKSTP, then enterprise delivery at Deloitte.
A solo capstone on probabilistic decision support, evaluated against five language models.
Analyst at Deloitte, studio owner at Chefs Hat, and an event platform for 300 to 400 jammers.