Technology

We choose boring, well-supported technology on purpose.

The interesting decisions in a project are about your business, not about the framework. We use a small, stable stack we know deeply - which means fewer surprises, faster builds, and a system other engineers can be hired to maintain.

01 / THE STACK

Seven layers, and why each one.

If a tool is not on this list, it is not that we cannot use it - it is that we will not introduce it to your project without a reason we can defend.

LanguageTypeScript, end to end

One language across web, mobile and server, with types that catch mismatches before deployment.

WebReact, Next.js

Server rendering for public pages, a real application framework for consoles, one deployment model.

MobileReact Native, Expo

Android-first from a single codebase that also ships to iOS, with a managed build and release pipeline.

DataPostgreSQL

Relational integrity, row-level access control, and reviewed migrations. Your data outlives every screen.

BackendManaged Postgres platforms and edge functions

Authentication, storage and server functions without a server to babysit.

InteractiveWebGL via three.js, built in code

Real-time 3D authored as source rather than exported from a modelling tool, so it can be changed later and kept inside a performance budget.

DeliveryTypechecks, automated tests, staged environments

Every change is typechecked and tested before it reaches anything a user touches.

02 / STANDARDS

Five standards we hold to.

Each one is a decision that costs a little time up front and saves a category of failure later.

Authorization lives in the database

Permission checks are enforced where data is stored, so a direct API call cannot bypass what the interface hides.

Private data uses private storage

Identity documents and sensitive files are never publicly addressable; access is granted through short-lived signed links.

Failure is visible

A query that fails renders as a failure, never as an empty state that looks like real data. This one rule prevents more bad decisions than any dashboard.

Migrations are reviewed

Every schema change is written, versioned and reviewed - never applied by hand to a live database.

Sensitive actions are logged

Who did what, and when, in a durable record you can produce later.

03 / THIS SITE

The nearest thing to a live example.

This site runs on the stack above: one Next.js codebase deployed as three isolated surfaces, server-rendered pages with small client islands, a strict content security policy, and a 3D hero built in code that degrades to a static image on low-end hardware or when you have asked for reduced motion. It carries no analytics, no advertising tags and no tracking pixels.

04 / ON AI

Where AI helps, and where it does not.

We use AI tooling in our own engineering where it speeds up work, and we build AI features into products where they solve a stated problem. We do not add them because the category is fashionable, and we will tell you when a proposed AI feature would be slower, less accurate or more expensive than a straightforward rule.

Have a question or an idea worth moving?