Our tech stack

The full set of tools we build on. Strong opinions, lightly held.

This is the menu, not the prescription. Each engagement picks 6-12 of these — the right tools for that workflow, not whatever was hot last year. Every entry has a short reason for being on the list. Tools that didn't earn their place have been removed; we update this annually.

Languages & frameworks

Python 3.12

Primary back-end. Async, fast, biggest AI ecosystem.

FastAPI

Modern async REST framework with built-in OpenAPI + Pydantic.

Django

When admin panels, ORM richness, or batteries-included win.

TypeScript

Frontend type safety. No raw JS in new projects.

Next.js 14+

SSR + ISR + server components. Vercel-first.

Astro

For content-heavy marketing sites where speed matters.

Node.js

When full-stack TypeScript is the right answer.

AI & machine learning

OpenAI GPT-4o

Default for general reasoning, classification, RAG.

Anthropic Claude

Long-context document Q&A, complex multi-step reasoning.

Llama 3 / Mistral

Local hosting when data residency or cost dictates.

pgvector

Vector search in Postgres — no extra service.

Sentence-Transformers

Re-ranking, embedding for non-OpenAI flows.

LangChain (selectively)

For orchestration patterns; rarely the whole framework.

LlamaIndex (selectively)

Indexing tooling when builds get document-heavy.

Data & storage

PostgreSQL 16+

Default relational store. JSONB, pgvector, ACID.

Redis

Cache + queue broker + rate-limit counter.

S3 / Cloudflare R2

Object storage. R2 cheaper if Cloudflare-stacked.

SQLite

For embedded use-cases and tools' local state.

Prisma / SQLAlchemy

ORMs. Schema-first migrations, type-safe queries.

Infrastructure & hosting

Vercel

Default for Next.js + edge functions + ISR.

Cloudflare

DNS, CDN, R2, Workers, WAF, bot challenge.

AWS (EC2 / RDS / Lambda)

When clients are already on AWS or scale requires it.

Railway / Fly.io

Smaller back-ends, Postgres, workers — simpler than AWS.

Docker

Portable builds. No local-dev surprises.

DevOps & observability

GitHub + Actions

Version control and CI/CD. PR-gated deploys.

Sentry

Error tracking with release fingerprinting.

Better Stack / Datadog

Logs + metrics + uptime in one pane.

Lighthouse / WebPageTest

Performance budget enforcement in CI.

Playwright

End-to-end tests for critical flows.

pytest, ruff, mypy

Python quality gates: tests, lint, types.

Payments, comms, integrations

Stripe

Payments, subscriptions, invoicing.

GoCardless

UK direct debit — usually cheaper than Stripe for B2B.

Twilio

SMS, WhatsApp Business API, voice.

Postmark / Mailgun

Transactional email with good deliverability.

Xero / QuickBooks / Sage

Accounting integrations.

HubSpot / Salesforce / Pipedrive

CRM integrations — bidirectional sync.

Security & identity

OAuth / OIDC

Google / Microsoft / Apple sign-in.

Magic-link auth

Passwordless. Fewer support tickets.

1Password / Doppler

Secrets management. Never plain env vars in source.

age / SOPS

Encrypted secrets in Git when needed.

Cloudflare WAF

Bot challenge, rate-limit, OWASP CRS.

How we pick the right subset for your project

The process is short and honest:

  1. Existing stack first. If you already run something reasonable, we extend it. We don't propose a rewrite to use our preferred tools.
  2. Constraints next. Data residency, compliance, integration requirements, team skills — these often narrow the choice to one or two options.
  3. Defaults last. Where there's genuine flexibility, we default to what we ship fastest and most reliably: Python + Postgres + Next.js + Vercel/Cloudflare.

Every choice is documented in the architecture decision record (ADR) we hand over at the end of the project. Future you, or your future engineer, will know why each tool was picked.

Frequently asked questions

Why so many tools — is this not over-engineering?

These are the options across the menu. Each project picks 6-10 of them, not all of them. The list is wide so we can match the right tool to the right job without falling back to 'whatever the agency knows.'

Do you have strong opinions, or do clients pick the stack?

Strong opinions, lightly held. We default to Python + Postgres + Next.js + Vercel/Cloudflare. If a client's existing stack is reasonable, we extend it. If it's actively painful, we say so honestly and propose a migration plan.

How do you keep this list current?

Yearly review (tools come and go). The list reflects 2026 production realities, not what was hot in 2021. We have removed: Heroku, Firebase, certain LangChain abstractions, Tailwind UI as a primary, several no-code platforms.

What about the AI vendors locking you in?

We use SDK wrappers (LiteLLM, Vercel AI SDK) so swapping OpenAI for Claude or local Llama is a config change, not a rewrite. Vendor lock-in on commodity inference is a real risk; we engineer around it from day 1.

Do you only use open-source?

No. We use commercial tools where they save time worth more than their cost (Vercel, Sentry, Datadog). We avoid commercial tools that lock data or are expensive to migrate off (most no-code, most all-in-one CRMs).

Will you teach our team this stack?

Yes — for engagements where we're handing over, we run knowledge-transfer sessions, write a stack-specific runbook, and document architecture decisions. Care plans optionally include monthly Q&A time with the team.

Related reading

Want to walk through an architecture?

Share the workflow or problem you're thinking about. We'll sketch the right architecture honestly, with trade-offs spelled out.