Skip to content

Technology

What we build with, and why

This page is for the technical reader — a CTO, an IT manager, or the developer who will be asked whether we know what we are doing. Everyone else can skip it: what matters elsewhere on this site is what the software does, not what it is written in.

Two labels run through the list. In production means a system of ours runs on it today. We work with means we take engagements in it, but our own published systems do not feature it. We would rather you knew the difference.

Backend & APIs

Where the business rules live. Every rule is enforced here rather than in the interface, so it holds no matter which client calls it.

  • ASP.NET Core / C#In production

    Our clinical and equipment platforms — the systems carrying regulated data, audit trails, and full revenue cycles.

  • Node.js / ExpressIn production

    The booking-marketplace API: payments, availability, owner onboarding, and webhook processing.

  • TypeScriptIn production

    Strict typing end to end on our JavaScript services and front ends — fewer runtime surprises in production.

  • PythonWe work with

    AI/ML work, data processing, and reporting pipelines where the ecosystem is strongest.

  • PHP / LaravelWe work with

    Engagements on existing Laravel systems, and builds where the client's team already maintains PHP.

Web interfaces

Interfaces built for people doing a job under time pressure — a front desk at 8am, not a demo audience.

  • ReactIn production

    Operational dashboards, booking flows, and admin back offices.

  • Next.jsIn production

    Server-rendered applications and marketing surfaces where search visibility and first paint matter.

  • BlazorIn production

    A .NET web platform where sharing types between server and interface removed a whole class of bugs.

  • Razor / server-rendered .NETIn production

    The clinical platforms' interface layer, paired with vanilla ES modules for fast, dependency-light screens.

  • AngularWe work with

    Engagements where a client's existing front end or in-house team is already Angular.

  • Tailwind CSSIn production

    Design systems that stay consistent across hundreds of screens without a growing stylesheet.

Mobile & devices

The parts of an operation that happen away from a desk — and sometimes on hardware doing exactly one job.

  • Capacitor / IonicIn production

    A companion clinical app sharing the same API as the web platform, so records never diverge.

  • Native Android (Java/Kotlin)In production

    Two purpose-built tablet applications in production: a lobby check-in station and a card-reader terminal.

  • React NativeWe work with

    Cross-platform apps where one codebase for iOS and Android is the right trade-off.

  • FlutterWe work with

    Cross-platform builds where the client's team or existing app is already Flutter.

Data

The part that outlives every interface. Modelled carefully, because a bad schema is expensive for years.

  • SQL ServerIn production

    Clinical and equipment platforms, including row-level security enforcing organisation isolation in the database itself.

  • PostgreSQLIn production

    The booking marketplace and a platform that runs the same release against either engine.

  • Entity Framework CoreIn production

    Data access with global query filters for multi-tenant scoping and interceptors that audit every write automatically.

  • PrismaIn production

    Typed database access on our Node services, with transactional writes across bookings, payments, and inventory.

  • MongoDBWe work with

    Document-shaped workloads where a relational schema would fight the data rather than describe it.

Real time, AI & payments

The parts clients notice most: screens that update themselves, documents that write themselves, and money that arrives.

  • SignalR / WebSocketsIn production

    Live schedule updates, consent notifications, and a desktop-to-tablet payment bridge — nine channels in one platform.

  • LLM APIs (Gemini, Claude)In production

    Ambient documentation, code suggestion, and extraction — always server-side, with identifiers stripped before any call.

  • Stripe (incl. Connect & Terminal)In production

    Card payments, marketplace payouts to third-party accounts, platform fees, subscriptions, and tap-to-pay on a tablet.

  • EDI / clearinghouse integrationIn production

    Electronic insurance claims with payer acknowledgements and remittances ingested and posted automatically.

  • Cloud object storageIn production

    Encrypted documents and media with signed, expiring links rather than public URLs.

Running it

Deployment is not the last step of a build — it is the first day of the system's actual life.

  • DockerIn production

    Reproducible builds, so what passed review is what runs.

  • Vercel / Render / managed cloudIn production

    Managed hosting where the workload suits it, with preview environments per change.

  • Windows Server / IISIn production

    On-premises and private-server deployments, including clients whose data cannot leave their own infrastructure.

  • Scheduled backups & monitoringIn production

    Encrypted backups to separate storage, health and readiness probes, and alerting — with restores exercised, not assumed.

How we choose

The reasoning behind the list

A stack is a set of trade-offs, not a badge. These are ours.

Boring technology, deliberately

We choose mainstream, well-supported tools with long support horizons and a hiring pool. A framework that is exciting this year and unmaintained in three is a liability we would be handing you, not a feature.

The stack follows the problem

Regulated data with heavy reporting and a long support life goes to .NET and SQL Server. A payments marketplace that must ship fast goes to Node and PostgreSQL. We do not have one hammer and we do not pretend otherwise.

One API, every client

Web, mobile, and purpose-built devices talk to the same interface, so every rule is written once and enforced on the server. Reimplementing logic per platform is how systems quietly disagree with themselves.

Nothing you cannot leave

No proprietary runtime, no closed data format, no dependency on us. The code, the schema, and the documented architecture are handed over. We build for the day you might want to run it without us.

Straight answers

Technical questions, answered plainly

What technical evaluators ask us before a build is agreed.

Which stack will you use for our project?

Whichever fits the problem, decided during design rather than before we have met you. Regulated data with heavy reporting and a long support life tends toward .NET and SQL Server. A payments-heavy platform that must ship quickly tends toward Node and PostgreSQL. If your team already maintains a stack, that carries real weight — software your people can support is worth more than software we prefer.

Can you work on our existing system rather than rebuilding it?

Often, and it is usually the cheaper answer. We take engagements on existing codebases in the frameworks listed here. A rebuild is worth proposing only when the current system genuinely blocks the business — not because it was written by someone else.

Do we get the source code?

Yes — the code, the database schema, and the documented architecture. We build on mainstream technology with a real hiring pool specifically so you are never dependent on us. There is no proprietary runtime and no closed data format anywhere in what we hand over.

Can the system run on our own servers instead of the cloud?

Yes. We have deployed to managed cloud platforms, cloud virtual machines, and on-premises Windows Server — including for organisations whose data is not permitted to leave their own infrastructure. We have also built systems whose same release runs against different database engines, so hosting stays a decision rather than a rewrite.

How do you handle AI without sending our data to a third party?

Identifiers are stripped from text before it reaches a model, calls are made server-side under our own keys, no data is used for model training, and every automated action is logged. Nothing a model produces becomes a record until a person approves it.

Bring your architect to the call

We would rather answer hard technical questions early than discover the disagreement halfway through a build.