Tools we trust. Boring on purpose.
We pick technology with multi-year support behind it, hire-ability around it, and a track record of not breaking in production. New shiny things are interesting; we just don't put them on your critical path.
Django + DRF.
The whole backend rests on Django 5 + DRF. Boring, audited, twenty years of production track record. Celery for async, gunicorn + uvicorn for serving, Python 3.13 + typed.
We use the same stack on every project so we move fast: same auth, same admin, same migration patterns, same retry semantics. New shiny frameworks stay off the critical path.
Next.js + shadcn.
Next.js 14 App Router only. TypeScript strict, no any in shipped code. Tailwind
for utility, shadcn for primitives, react-hook-form + Zod for forms.
We bias toward components we own (shadcn / custom) over vendor libraries we can't touch. When you inherit the codebase, every component is in your repo and editable.
Postgres + ClickHouse.
Postgres 16 for transactional. ClickHouse for analytics (billions of rows, sub-second). Redis for cache + broker + streams. MinIO for self-hosted object storage.
We deliberately split OLTP from OLAP — they have different query profiles, different backup needs, different failure modes. Postgres handles the truth, ClickHouse handles the aggregation, Redis is the glue.
OpenAI, Anthropic, Ollama.
Provider abstraction by default. GPT-4o for general reasoning, Claude for long-context and safety-sensitive flows, local Ollama / vLLM for on-prem deployments. Swap them without rewriting features.
Every model call goes through a router with cost budgets, fallback chains, and PII filters. We never lock you into one vendor — the contract layer is yours.
Docker Compose on a VPS.
Single-VPS deploys with Docker Compose unless the project genuinely needs Kubernetes (which is rarely). Nginx + Let's Encrypt in front. Self-hosted log aggregation (Loki + Grafana). Backups daily, restore drill monthly.
Cheaper than serverless at your scale, faster to debug than Kubernetes at our scale, and you own the box. We deploy by `git pull && docker compose up -d --build`.
Stripe + Paddle, production-grade.
Stripe for global card acceptance. Paddle / Lemon Squeezy for merchant-of-record invoicing. Webhook-driven reconciliation, refunds, disputes — wired into your admin from day one.
Every money path is idempotent end-to-end, audit-logged, and reconciles to the cent. We never represent money as a float — minor units only, with the currency stored explicitly.
We'll swap, when it makes sense.
Greenfield is rare. Most of the time you already have infrastructure. Here's what we'll keep — and what each swap actually costs.