Kwest — Earthworks Takeoff
In development
Desktop application · Kotlin/Compose shell, Rust kernel
Earthworks measurement for tendering. It digitises contours from PDF
drawings, builds a triangulated surface from them, and computes cut and
fill volumes against a design surface — the numbers that go into a tender.
The interesting part is the split. The interface is Compose Desktop in
Kotlin, but every piece of geometry lives in a Rust kernel loaded in-process
through Java's Foreign Function & Memory API. Kotlin never holds a point
or a triangle, only opaque handles — so hit-testing, snapping and volume
calculation all happen in one place, in a language suited to it. The 3D
viewport is a separate Rust-owned window reading kernel memory directly.
Working on it has been an education in measuring before optimising. A slow
canvas turned out to be anti-aliasing rather than architecture; a slow
render turned out to be re-parsing the PDF page on every frame. Both would
have been the wrong thing to rewrite.
kubitKarl — Bill of Quantities
In development
Desktop application · Kotlin, Compose Desktop
A single-user tool for preparing bills of quantities, built for the way
Australian quantity surveying actually works, to replace the commercial
package I had been using.
Almost every design decision comes back to money being exact. Rates and
quantities are BigDecimal from end to end — never floating
point — stored as decimal strings and parsed back on load. Rounding is
half-up and happens in exactly one place, so a printed line always foots:
the quantity shown times the rate shown equals the amount shown. Billing
quantities round up, which is a domain rule rather than a mathematical one.
Structurally it's three modules with dependencies pointing strictly inward,
and the innermost one has no framework in it at all — no UI, no database,
no I/O. That makes the part that computes the money testable on its own,
which is the part I most want to be right.
Ironbark Civil & Concreting
Demonstration
Marketing site · Astro, Cloudflare
A complete marketing site for a civil and concreting contractor —
a fictional one. The business doesn't exist; the build was
an exercise in seeing how fast a content site can be made, and it's kept
out of search results deliberately so it can't mislead anyone.
The target was perfect Lighthouse scores on a throttled mobile connection,
and a budget to keep them there: a cap on page weight, on requests, and
effectively zero JavaScript on content pages. The budget runs in CI, so
busting it fails the build rather than being discovered later. The initial
page shipped at a few kilobytes over the wire.
Behind it: a git-based CMS so the "client" could edit their own pages, and
two Cloudflare Workers — one handling CMS authentication, one taking the
contact form, checking a Turnstile token and sending the enquiry on. The
form's bot protection loads only when someone actually starts typing,
which is what keeps the contact page inside the budget.
karloneill.com
Live
Web application · Rust
This site. A single compiled Rust binary that renders every page on the
server — no JavaScript framework, no build step, nothing to install on the
machine that runs it.
Axum handles routing, Askama compiles the HTML templates into the binary
so a mistake in a template fails the build rather than a request, and sqlx
talks to PostgreSQL with migrations that apply themselves at startup. It
runs as a supervisor-managed process behind nginx on a DigitalOcean
droplet, and deploys by pushing to a branch.
The colophon goes into how it's put together, and
there's a small live demonstration of the database
path if you want to poke at it.