Our Technology
Any self-respecting engineer can solve problems with whatever tools they're given — but some tools are simply better suited to the job than others. There's no such thing as a free lunch, but some get their lunch more effectively than others.
We recognize that there are a million ways to achieve a business goal, but far fewer that are maintainable, efficient, and secure. We adopt better options proactively, but the goals of your product — not fashion — decide what we use. Here's where we work, and what we work with.
Web Applications
Fast, accessible sites and full-stack apps.
Systems Programming
Rust for performance, safety, and portability.
High Assurance Computing
Types and tests that catch bugs before users do.
Security
Designed in from the start, never bolted on.
Infrastructure & Operations
Self-hostable, observable, and reproducible.
AI-Assisted Engineering
AI agents that speed us up, held to our standards.
Real-Time & Games
Simulation, physics, and multiplayer networking.
Hardware & Fabrication
From circuit boards to CNC toolpaths.
Web Applications
Much of our work is on the web: from marketing sites like this one to full-stack platforms with accounts, payments, scheduling, and rich-text editing. We favor a strongly typed stack end to end, so the database schema, the API, and the UI all agree with each other — and the compiler tells us when they don't.
When the browser needs to do heavy lifting, we reach for Rust compiled to WebAssembly — the animation behind this page is one example.
Systems Programming
Strongly-typed functional languages offer great security and referential transparency, but they aren't built for strict runtime performance, low overhead, or careful handling of memory and secrets. When those matter, you need systems programming.
Modern systems languages make that far more maintainable than it used to be. We consider Rust a top performer — elegant, fast, and sturdy — and use it for servers, command-line tools, document processing, geometry and toolpath generation, desktop apps, and code that runs in the browser.
High Assurance Computing
Too many bug reports come down to programs not doing what they were designed to do. There are excellent tools for preventing that, and we use them across every language we work in:
- Property-based testing à la QuickCheck — generating thousands of test cases rather than hand-picking a few — in Haskell, Rust, and TypeScript
- Datatype design with Generalized Algebraic Data Types, Higher-Kinded Types, and type-level programming
- Refinement and dependent types via Liquid Haskell and Idris
- End-to-end tests that drive a real browser through real user journeys
Security
Security should never be an afterthought — you can't slap some encryption on a communications channel and call it production-ready. We minimize attack vectors in the architecture before development begins:
- Passwords are hashed with Argon2, as close to the client as practical
- Public Key Infrastructure for encryption and signatures, preferring Elliptic-Curve Cryptography
- All HTTP and WebSocket traffic secured with current TLS standards
- Least-privilege access and rate limiting on sensitive endpoints
We also build on public ledgers, including smart-contract tooling for Cardano and Midnight.
Infrastructure & Operations
Shipping is only half the job. We deploy with containers and reproducible builds, run our own source hosting and CI, and wire in monitoring, centralized logs, and tested backups from day one — so problems are noticed (and fixed) before your customers notice them.
We're comfortable on managed cloud services, but we also favor stacks you can self-host, so you're never locked in to a single vendor.
AI-Assisted Engineering
AI coding agents are a genuine advancement, and we use them every day. Working with Claude, we hand well-specified tasks to agents — implementing features, writing tests, chasing down bugs, upgrading dependencies — and spend our own time on architecture, review, and the hard problems. The result is more of your budget going to what matters.
AI doesn't lower the bar. Every change still has to pass the same type checks, property tests, end-to-end tests, and human review as anything we write by hand, and AI-assisted commits are labeled as such. And in keeping with our honesty policy, we'll always tell you how AI is being used on your project.
Real-Time & Games
Games are some of the most demanding software there is: tight frame budgets, physics, and networking that has to feel instant. We build them in Rust with an entity-component-system architecture, real-time physics, client–server multiplayer networking, and platform integrations like Steam.
Hardware & Fabrication
Not all software lives in a browser. We write firmware for microcontrollers, design circuit boards, model parts for 3D printing, and turn vector artwork into machine toolpaths for laser and CNC work — useful when a project needs to sense, control, or make something in the physical world.
Not sure what your project needs?
That's what a consultation is for. Tell us the problem, and we'll recommend the right tools for it — even if that means something simpler than you expected.
Schedule a Consultation