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 Compax Tech Radar, Vol. 01 · August 202631 technologies plotted in four quadrants and four rings. Every entry is listed in full below the diagram.AdoptTrialAssessHoldTechniquesPlatformsToolsLanguages & FrameworksZero JavaScript by default — Adopt11. Zero JavaScript by default — AdoptNative scroll timelines — Adopt22. Native scroll timelines — AdoptServer-side PDF rendering — Adopt33. Server-side PDF rendering — AdoptTable-driven RBAC — Adopt44. Table-driven RBAC — AdoptFull handover, no lock-in — Adopt55. Full handover, no lock-in — AdoptEnd-to-end types — Trial66. End-to-end types — TrialDesign tokens as the only source — Trial77. Design tokens as the only source — TrialClient-side canvas PDF — Hold88. Client-side canvas PDF — HoldCSS-in-JS — Hold99. CSS-in-JS — HoldPostgreSQL — Adopt1010. PostgreSQL — AdoptBun — Adopt1111. Bun — AdoptRedis — Adopt1212. Redis — AdoptSelf-hosted Docker Compose — Adopt1313. Self-hosted Docker Compose — AdoptStatic hosting at the edge — Adopt1414. Static hosting at the edge — AdoptServerless Postgres — Assess1515. Serverless Postgres — AssessKubernetes for small teams — Hold1616. Kubernetes for small teams — HoldPlaywright — Adopt1717. Playwright — AdoptGitLab CI — Adopt1818. GitLab CI — AdoptLightning CSS — Adopt1919. Lightning CSS — AdoptDrizzle Kit — Adopt2020. Drizzle Kit — AdoptStorybook — Trial2121. Storybook — TrialInfisical — Trial2222. Infisical — Trialbetter-auth — Trial2323. better-auth — TrialLighthouse in CI — Assess2424. Lighthouse in CI — AssessTypeScript — Adopt2525. TypeScript — AdoptAstro — Adopt2626. Astro — AdoptDrizzle ORM — Adopt2727. Drizzle ORM — AdoptSvelteKit — Trial2828. SvelteKit — TrialElysia — Trial2929. Elysia — TrialGSAP — Assess3030. GSAP — AssessTailwind CSS — Hold3131. Tailwind CSS — Hold

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

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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.

  6. 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.

  7. 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.

  8. 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.

  9. 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

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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.

  6. 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.

  7. 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

  1. 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.

  2. 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.

  3. 19Adopt

    Lightning CSS

    Bundling, minification and transpiling of modern CSS with no plugin chain. Read its shorthand-folding rules before writing scroll-driven animation.

  4. 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.

  5. 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.

  6. 22Trial

    Infisical

    Self-hostable secret management with per-environment scoping. Chosen over a hosted vault because the client keeps the instance.

  7. 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.

  8. 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

  1. 25Adopt

    TypeScript

    Every line of application code, in strict mode. A JavaScript file in a new repository needs an argument.

  2. 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.

  3. 27Adopt

    Drizzle ORM

    Queries that read like the SQL they compile to, with the schema as the single source of both types and migrations.

  4. 28Trial

    SvelteKit

    Where an application is genuinely stateful. Less framework between the developer and the DOM, and the compiled output is small.

  5. 29Trial

    Elysia

    Bun-native HTTP with schema validation and inferred client types. Fast, and the type inference is the actual reason.

  6. 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.

  7. 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.