//tech-stack
What we work in, and why we choose it that way
This is not a list of everything anyone here has ever touched. It is what we are willing to put into production for a client and support through a handover.
Server-side
- PHP 8
- Node.js / TypeScript
- Python
- Go
- Java
Chosen per project against the team that will maintain it, not against fashion.
Client-side
- React
- TypeScript
- Vite
- Tailwind CSS
- Progressive enhancement
Server-rendered where it helps the user and the crawler; a single-page app only where the interaction genuinely needs one.
Data
- PostgreSQL
- MySQL / MariaDB
- Redis
- Message brokers
- Reversible migrations
Relational by default. A document or event store is used where the access pattern actually calls for one.
Platform & delivery
- Docker
- Terraform
- GitHub Actions / GitLab CI
- nginx
- Structured logging and tracing
Every environment is described in code, so it can be rebuilt rather than remembered.
Engineering principles
Four rules we apply to every technology decision
The boring choice is usually the right one
A technology with a decade of production history, a large hiring pool and a stable upgrade path costs less over the life of a system than one that is briefly exciting. We reserve novelty for the places where it earns its keep.
Your team has to be able to maintain it
If a stack cannot be staffed from the market you actually hire in, it is the wrong stack, whatever its technical merits. Technology selection is a hiring decision as much as an engineering one.
No lock-in we would not accept ourselves
Infrastructure is expressed in code, data lives in open formats, and nothing important depends on a service that cannot be replaced. You should be able to move suppliers without rewriting the system.
Security and data protection are design inputs
Access control, audit logging, retention and deletion are decided during design. Adding them to a live system afterwards is expensive and usually leaves gaps nobody documents.
A note on this website
The site you are reading is built the way we build client work. The pages are prerendered to static HTML and served by nginx, the API is PHP 8.3 against MariaDB, and no web font, analytics script or third-party widget is loaded before you have agreed to it. Typefaces come from your own operating system, so no request for this page reaches any third party at all. Every company detail on every page resolves from one shared identity file, which is checked by an automated guard on every deployment, so the registry code in the footer cannot drift away from the one in the structured data.