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:
- Existing stack first. If you already run something reasonable, we extend it. We don't propose a rewrite to use our preferred tools.
- Constraints next. Data residency, compliance, integration requirements, team skills — these often narrow the choice to one or two options.
- 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.