Technologies
Established tools, chosen for the long run.
We work across 80 technologies, but we favour mainstream, well-supported choices — easier to hire for, safer to maintain, and less likely to strand your product when a trend passes.
Interfaces that load fast, stay accessible and are easy for the next developer to change.
- ReactComponent-based interfaces for products and internal tools.
- Next.jsOur default for web applications: rendering, routing and APIs in one codebase.
- TypeScriptTypes across the stack, so mistakes surface at build time.
- JavaScriptThe language of the web, for everything TypeScript compiles to.
- Vue.jsProgressive framework, often for extending existing products.
- NuxtServer-rendered Vue applications and content sites.
- AngularEnterprise applications already standardised on Angular.
- SvelteLightweight interfaces where bundle size matters.
- Tailwind CSSUtility-first styling for consistent design systems.
- ViteFast builds and development servers for modern frontends.
- StorybookDocumenting and testing UI components in isolation.
Cross-platform where it serves the product, native where performance or platform features demand it.
- FlutterCross-platform apps with consistent UI and near-native performance.
- React NativeMobile apps that share code and skills with a React web product.
- ExpoTooling and over-the-air updates for React Native apps.
- SwiftNative iOS features, extensions and performance-critical screens.
- KotlinNative Android development and platform integrations.
- FirebaseAuthentication, push notifications, analytics and crash reporting.
Services with clear boundaries, documented contracts and the observability to run them.
- Node.jsAPIs and services that share a language and types with the frontend.
- NestJSStructured, modular Node.js backends for larger teams.
- ExpressMinimal HTTP services and integration endpoints.
- PythonData processing, AI workloads and scripting.
- DjangoBatteries-included web applications with a strong admin.
- FastAPITyped, high-performance Python APIs — often in front of AI models.
- GoHigh-throughput services, workers and command-line tools.
- Spring BootJava services in organisations standardised on the JVM.
- .NETC# services and Microsoft-centric enterprise systems.
- LaravelPHP applications, including extending existing Laravel products.
- PHPMaintaining and modernising established PHP systems.
- GraphQLFlexible APIs where many clients need different shapes of data.
- tRPCEnd-to-end type-safe APIs within TypeScript monorepos.
Relational by default, with search, streaming and warehousing when the product needs them.
- PostgreSQLOur default database — integrity, JSON when needed, vector search for AI.
- MySQLRelational workloads on existing MySQL estates.
- MongoDBDocument storage for genuinely schemaless data.
- RedisCaching, rate limiting, queues and short-lived state.
- SupabaseManaged Postgres with auth and storage for fast-moving products.
- PrismaType-safe database access and migrations in TypeScript.
- ElasticsearchFull-text search, filtering and log analytics.
- Apache KafkaEvent streaming between systems at high volume.
- RabbitMQReliable message queues for background work.
- SnowflakeCloud data warehousing for analytics and reporting.
- Google BigQueryServerless analytics over large datasets.
Model-agnostic: we choose the model for the task, then wrap it in evaluation, guardrails and monitoring.
- ClaudeReasoning-heavy agents, document analysis and long-context work.
- OpenAIGeneral-purpose language, vision and embedding models.
- Google GeminiMultimodal models, especially within Google Cloud.
- Mistral AIEfficient open-weight models, including EU-hosted options.
- Hugging FaceOpen models, datasets and fine-tuning tooling.
- LangChainOrchestration for retrieval pipelines and tool-using agents.
- PyTorchCustom model training and fine-tuning.
- OllamaRunning open models locally or on private infrastructure.
Platforms sized to the product — from managed hosting to full cloud estates.
- AWSFull-scale cloud infrastructure for complex requirements.
- Google CloudData and AI workloads, and Google Workspace organisations.
- Microsoft AzureBusinesses standardised on Microsoft identity and tooling.
- VercelHosting and preview environments for Next.js applications.
- CloudflareDNS, CDN, edge security and bot protection.
- DigitalOceanStraightforward, cost-predictable hosting for smaller services.
- NetlifyStatic sites and frontend hosting with build previews.
Infrastructure as code, automated delivery, and the visibility to know when something is wrong.
- DockerReproducible builds and environments from laptop to production.
- KubernetesOrchestration when a system genuinely needs it — not before.
- TerraformInfrastructure defined in reviewable, version-controlled code.
- GitHubSource control and code review.
- GitHub ActionsCI/CD pipelines: tests, builds and deployments on every change.
- GitLabSource control and pipelines for self-hosted teams.
- PrometheusMetrics collection and alerting.
- GrafanaDashboards for metrics, logs and traces.
- SentryError tracking and performance monitoring.
- DatadogFull-stack observability for larger estates.
Payments, storefronts and content management without reinventing what already works.
- StripeCheckout, subscriptions, invoicing and marketplace payouts.
- ShopifyStorefronts, custom apps and headless commerce.
- PayPalAdditional payment methods at checkout.
- SanityStructured, headless content for marketing and product teams.
- ContentfulEnterprise headless CMS across multiple channels.
- StrapiSelf-hosted, open-source headless CMS.
- WordPressContent sites, including headless WordPress.
Design handover, automated testing and authentication — the parts that keep a product trustworthy.
- FigmaInterface design, prototypes and design systems.
- JestUnit and integration testing for JavaScript and TypeScript.
- VitestFast unit testing for Vite-based projects.
- CypressEnd-to-end testing of critical user journeys.
- PostmanAPI design, documentation and contract testing.
- Auth0Enterprise authentication, SSO and identity management.
- ClerkUser management and authentication for modern web apps.
How we choose.
We pick technology for your situation: the skills of the team that will own it, the systems it has to fit with, the scale it genuinely needs and the cost of running it. We would rather use a boring tool well than an exciting one badly.
If you already have a stack, we generally work within it. If you’re starting fresh, talk to us and we’ll explain the options and their trade-offs in plain terms.
Have a product worth building?
Tell us what you are trying to achieve. The first conversation is about understanding the problem — not selling you a solution.