Tech Radar
What we
build with
Every agency lists the same logos. This is the version with the reasoning attached — what we reach for by default, what we are trying on real work, what we are still reading about, and what we no longer start a project with.
Vol. 01 · August 2026 · 31 entries · 3 new
The rings
- Adopt
- Our default. We reach for this without a discussion.
- Trial
- Running in production on at least one project.
- Assess
- Worth the time to understand. Not in client work yet.
- Hold
- We do not start new work with this. Existing work is fine.
- New
- Added or moved since the last edition.
Select any point to jump to its entry. Nothing here is a recommendation for your stack — it is a record of ours, and the ring is an opinion we are willing to defend.
Techniques9 entries
- 1Adopt
Zero JavaScript by default
A page ships no script until something on it genuinely needs one. Most of the interaction people ask for is an anchor, a details element, or a target selector.
- 2Adopt
Native scroll timelines
Scroll-linked motion belongs to the compositor, not to a scroll listener. Everything animated on this site hangs off a CSS scroll timeline and costs nothing on the main thread.
- 3Adopt
Server-side PDF rendering
A long-lived headless Chromium worker produces the same document for every user. Client-side generation makes the output a property of the visitor’s browser.
- 4Adopt
Table-driven RBAC
Roles, permissions and their join are rows an administrator can edit. Once a permission is a hardcoded check against a role name, every new rule is a deployment.
- 5Adopt
Full handover, no lock-in
Source, pipeline, secrets and infrastructure end up in the client’s accounts. If we are the only ones who can deploy it, it was never delivered.
- 6Trial
End-to-end typesNew
The front end imports the API’s own types instead of a generated client. No codegen step, and a broken contract is a type error rather than a runtime 500.
- 7Trial
Design tokens as the only source
Every colour and spacing value is a custom property in one stylesheet, and a component that hardcodes a hex fails review. Works; the discipline is the hard part.
- 8Hold
Client-side canvas PDF
Screenshotting the DOM to a canvas gives a different document per browser, breaks selectable text, and fails on the fonts that matter. Render on the server.
- 9Hold
CSS-in-JS
Runtime style injection buys scoping that scoped stylesheets and cascade layers now give for free, and it charges for it in hydration.
Platforms7 entries
- 10Adopt
PostgreSQL
The default database for anything with relationships. JSONB, full-text search and window functions remove most of the reasons projects reach for a second store.
- 11Adopt
Bun
Runtime, package manager and test runner in one binary. Install and cold-start times are the difference we actually feel day to day.
- 12Adopt
Redis
Sessions, rate limits and job queues. Kept for those; not used as a cache in front of a database that is not yet slow.
- 13Adopt
Self-hosted Docker Compose
For clients who must own the box: one file that a new engineer can read, and the same file locally and in production.
- 14Adopt
Static hosting at the edge
A prerendered site needs a CDN, not a server. Cloudflare Pages and Netlify both end the conversation about uptime for marketing sites.
- 15Assess
Serverless PostgresNew
Scale-to-zero branches per pull request are genuinely useful. We want more evidence on cold starts and connection limits under real load first.
- 16Hold
Kubernetes for small teams
Two services and a database do not need a control plane. It buys elasticity nobody asked for and charges an operations role the client has not hired.
Tools8 entries
- 17Adopt
Playwright
End-to-end tests, visual checks and the odd build-time screenshot run through one API. It also drives the renderer that produces this site’s showreel.
- 18Adopt
GitLab CI
Pipelines live in the repository and run on the client’s own runners, which is what makes handover a permissions change rather than a migration.
- 19Adopt
Lightning CSS
Bundling, minification and transpiling of modern CSS with no plugin chain. Read its shorthand-folding rules before writing scroll-driven animation.
- 20Adopt
Drizzle Kit
Migrations generated from the schema and then committed as plain SQL. What runs in production is a file we reviewed, not a diff computed at deploy time.
- 21Trial
Storybook
The review surface for shared components, so a state can be looked at without routing to a page that produces it. Earns its keep once components are reused.
- 22Trial
Infisical
Self-hostable secret management with per-environment scoping. Chosen over a hosted vault because the client keeps the instance.
- 23Trial
better-authNew
Sessions, OAuth and organisation membership as tables in our own database rather than a third-party user directory. Good so far on one production system.
- 24Assess
Lighthouse in CI
A budget that fails the pipeline is more honest than a score checked before launch and never again. We are still choosing thresholds we would actually enforce.
Languages & Frameworks7 entries
- 25Adopt
TypeScript
Every line of application code, in strict mode. A JavaScript file in a new repository needs an argument.
- 26Adopt
Astro
Content sites and marketing sites, this one included. Ships HTML by default and lets a component opt into hydration, which is the right way round.
- 27Adopt
Drizzle ORM
Queries that read like the SQL they compile to, with the schema as the single source of both types and migrations.
- 28Trial
SvelteKit
Where an application is genuinely stateful. Less framework between the developer and the DOM, and the compiled output is small.
- 29Trial
Elysia
Bun-native HTTP with schema validation and inferred client types. Fast, and the type inference is the actual reason.
- 30Assess
GSAP
Reserved for timelines a scroll offset cannot express. It renders our showreel; it reaches no visitor-facing page, and that boundary is deliberate.
- 31Hold
Tailwind CSS
Not on our own work. With a token system in place its utilities restate the tokens in markup, and the class strings become the thing you maintain. We are fluent in it on client codebases that already use it.
Next step
Tell us what
you need built
Send the idea in whatever shape it is in — a document, a sketch, or two sentences. You get a written scope and a fixed figure back before anything is committed to.