● Technologies

The stack we build on, and what each part is actually for

Every technology here comes with a line saying where we use it, because a wall of logos tells you nothing. If something you rely on is missing, ask. The list below is what comes up often enough to be worth writing down.

Core

Used on our own products and client work, day in and day out.

Regular

Shipped on client projects when the job calls for it.

Capable

We take this on, most often to maintain or migrate something that already exists.

Mobile

Native and cross-platform apps for iOS and Android.

Flutter

Our default for cross-platform. One codebase, both stores.

React Native

Cross-platform apps where the team already lives in React.

Swift

Native iOS where performance or deep platform access matters.

Kotlin

Native Android, including Jetpack Compose interfaces.

iOS

App Store submission, review, and staged rollouts.

Android

Play Console setup, release tracks, and device fragmentation.

Dart

The language behind our Flutter work.

Expo

Faster React Native delivery and over-the-air updates.

.NET MAUI

The supported successor to Xamarin for .NET shops.

Ionic

Web-tech mobile apps where an existing web team owns the code.

Objective-C

Maintaining and migrating older iOS codebases.

Web front end

Interfaces that stay fast on real devices and readable to search engines.

Next.js

Our default web framework. This site runs on it.

React

The component layer under almost everything we ship.

TypeScript

Types end to end, so a large codebase stays safe to change.

JavaScript

Where a build step is not worth it.

HTML5

Semantic markup, which is also what accessibility rests on.

CSS3

Modern layout without dragging in a framework by reflex.

Sass

On codebases that already standardised on it.

Tailwind CSS

Fast, consistent styling when a team prefers utilities.

Vite

Build tooling for single-page apps behind a login.

Redux

Predictable state on genuinely complex screens.

Angular

Maintaining and extending existing enterprise front ends.

Vue.js

Client teams already invested in Vue.

Nuxt

Server-rendered Vue applications.

Svelte

Lightweight interfaces where bundle size is the constraint.

Astro

Content-heavy sites that should ship almost no JavaScript.

Webpack

Legacy build pipelines that still need care.

Back end and APIs

The services behind the interface, and the languages we write them in.

Node.js

One language across the front end and the API.

Python

Data work, automation, and AI services.

Express

Small, direct HTTP services.

NestJS

Structured TypeScript APIs on larger teams.

FastAPI

Typed Python services, especially around models.

Django

Python applications that need an admin out of the box.

Flask

Focused Python services and internal tools.

GraphQL

When many clients need different shapes of the same data.

WebSockets

Live dashboards, chat, and presence.

PHP

Maintaining and modernising existing PHP systems.

Laravel

PHP applications with an established structure.

Symfony

Enterprise PHP codebases.

.NET

C# services, often alongside existing Microsoft infrastructure.

Spring

Java services in enterprise environments.

Go

Small, fast services where concurrency matters.

Rust

Performance-critical components.

Ruby on Rails

Inheriting and maintaining Rails applications.

Deno

Edge and isolated runtimes.

Bun

Faster JavaScript tooling and runtimes.

Data and storage

Systems of record, caches, search, and the layer that talks to them.

PostgreSQL

Our default database, including row-level security for tenant isolation.

Prisma

Typed data access with reviewable, reversible migrations.

SQLite

Embedded and on-device storage, and small production workloads.

Firebase

Auth, push, and realtime sync on mobile products.

MongoDB

Document storage where the shape genuinely varies.

MySQL

Existing systems and most CMS-backed platforms.

Redis

Caching, rate limiting, and job queues.

Supabase

Postgres with batteries included, for fast starts.

Elasticsearch

Full-text search across large catalogues.

Algolia

Hosted search when speed to launch beats control.

Kafka

Event streaming between services at volume.

RabbitMQ

Message queues and background job distribution.

SQL Server

Microsoft-stack data platforms.

DynamoDB

Key-value workloads on AWS.

Cloud, infrastructure and DevOps

Where the software runs, and how it gets there without drama.

AWS

Primary hosting, plus S3 storage and SES for transactional email.

Docker

Identical environments from a laptop through to production.

GitHub Actions

Build, test, and deploy on merge. Our own CD runs on it.

Nginx

Reverse proxy, TLS termination, and static serving.

Cloudflare

DNS, CDN, WAF, and origin certificates.

Ubuntu

The server operating system we deploy onto.

Git

Version control on every engagement, in a repository you own.

Linux

Server administration, hardening, and diagnosis.

Vercel

Managed hosting for Next.js when a team wants zero ops.

Kubernetes

Orchestration where the scale genuinely calls for it.

Terraform

Infrastructure as code, so environments are reproducible.

Ansible

Configuration management across fleets of servers.

Google Cloud

GCP hosting and managed services.

Azure

Microsoft-stack cloud deployments.

Jenkins

Existing CI pipelines we inherit and maintain.

GitLab

Repositories and CI where the client already standardised there.

Sentry

Error tracking, so we hear about failures before your users call.

AI and machine learning

Model-agnostic on purpose, with evaluation and cost control built in.

OpenAI API

Language features behind a provider-agnostic interface.

Anthropic Claude

Long-context reasoning and document work.

pgvector

Vector search inside the Postgres you already run.

LangChain

Orchestrating retrieval and tool use.

Hugging Face

Open models, including self-hosted where data cannot leave.

PyTorch

Custom and fine-tuned models where they genuinely earn their place.

TensorFlow

Existing ML pipelines and on-device inference.

OpenCV

Computer vision and image processing.

pandas

Data cleaning and analysis, usually the real work in an AI project.

NumPy

Numerical work underneath the analysis.

Jupyter

Exploration and shared analysis with your team.

Payments and platform services

The third-party systems a real product ends up depending on.

Stripe

Subscriptions, proration, dunning, and idempotent webhooks.

Twilio

SMS, phone verification, and reminders.

Auth0

Managed identity and single sign-on where procurement requires it.

Mapbox

Maps, geocoding, and live tracking interfaces.

LiveKit

Live video and screen sharing. Our meetings feature runs on it.

WebRTC

Peer-to-peer audio, video, and data.

CMS and commerce

When a platform is the right answer and a custom build is not.

WordPress

Content sites where editors need to work without us.

Shopify

Storefronts, themes, and custom apps.

WooCommerce

Commerce on an existing WordPress estate.

Strapi

Headless content for an app and a website at once.

Sanity

Structured content with a strong editing experience.

Contentful

Enterprise headless CMS.

Drupal

Large content estates with complex permissions.

Magento

Adobe Commerce storefronts.

Webflow

Marketing sites a client wants to edit visually.

Squarespace

Small sites where a platform beats a build.

Wix

Migrations off it, more often than onto it.

Design and quality

How it gets designed, and how we know it still works.

Figma

Design, prototypes, and handoff. Where the interface is decided.

Framer

Motion studies and interactive prototypes.

Sketch

Existing design systems that still live there.

Blender

3D and product visuals.

Jest

Unit tests on the logic that would hurt to get wrong.

Cypress

End-to-end tests through the interface a user actually touches.

Selenium

Browser automation on established suites.

Storybook

Component libraries a client team can browse and reuse.

FAQ

Questions about our stack

What if the technology we use is not on this list?

Ask. The list is what comes up often enough to be worth writing down, not a boundary. Most stacks are variations on the same handful of ideas, and a team that knows one relational database or one component framework well is rarely helpless in front of another. Where something genuinely is outside what we can support responsibly, we will tell you that on the first call rather than learn it on your budget.

Do we have to use your preferred stack?

No. If you already have a team, an existing codebase or a company standard, the right technology is usually the one your people can maintain after we leave. We will say when we think a choice will cost you later, and then we will build in what you have chosen. The exception is a decision that is genuinely unsafe rather than merely different, and that is rare enough to be worth arguing about properly when it happens.

How do you choose what to build something in?

Working backwards from constraints rather than forwards from preferences. Who maintains it after launch, how easily you can hire for it, whether the job is mostly interface or mostly data, whether anything runs away from a network, and how long it has to keep working. Those answers usually narrow it to two reasonable options, and at that point the difference between them matters far less than picking one and being consistent.

What do core, regular and capable actually mean?

They record how much of our own work sits on a technology, so breadth is never mistaken for equal depth. Core is what we use daily on our own products and client work. Regular is shipped on client projects when the job calls for it. Capable is work we take on, most often to maintain or migrate something that already exists. All three are real. They are not equally deep, and we would rather say so than imply otherwise across a hundred logos.

Some of our stack is old. Is that a problem?

It depends entirely on whether it is old or unsupported, which are different things. Mature and stable is usually good. Past end of life is a different matter: it means security patches have stopped, app stores may eventually refuse the build, and the pool of people willing to work on it shrinks every year. If you are not sure which side you are on, that is exactly what a software audit answers.

Can you work alongside our existing developers?

Often that is the best arrangement. We can take a subsystem while your team keeps the rest, pair with them on an unfamiliar part of the stack, or build something and hand it over for them to own. We write the code, documentation and deployment pipeline with that handover assumed, because software your own team cannot maintain is a liability no matter how well it runs today.

The list matters less than the choosing

Any agency can publish a hundred logos. What decides whether your project goes well is picking the right handful for your problem and being honest about the tradeoffs, including when the answer is a platform you can buy instead of anything on this page. That conversation is free, and we will give you a straight recommendation even when it costs us the work.

Available · typically replies within 24hGet in touch

Let's build something worth shipping

Tell us about your idea. With a track record of success and a commitment to client satisfaction, we'll help bring your product to life.

Email[email protected]
Based inMiami, Florida · USA