~/stack

// stack

Pragmatic tools.
Documented defaults.

Six layers, one opinion per layer. We can — and do — work outside our defaults when the brief demands it, including building on WordPress when editorial depth or an existing team makes it the right call.

// layers

Each layer, in detail.

// 01frontend

Frontend & UI runtime

Type-safe React with a design system baked in from day one. We standardize on a small set of primitives so velocity stays high after launch — not just during it.

  • react
  • typescript
  • design system
  • a11y

// toolbox

2 default · 6 optional

  • React 19

    RSC-aware, suspense-first

    default
  • TypeScript

    strict, no any escape hatches

    default
  • TanStack Start

    type-safe routing + SSR

    optional
  • Next.js

    when app router fits the brief

    optional
  • Tailwind v4

    tokens via @theme inline

    optional
  • Radix UI

    headless, accessible primitives

    optional
  • Framer Motion

    scoped, intentional motion

    optional
  • Storybook

    component contracts + visual tests

    optional

// lang

TypeScript strict

// router

TanStack / App Router

// styling

Tailwind + tokens

// 02backend

Backend & API layer

Edge-friendly server functions and typed RPC by default. We pick boring tools with great ergonomics — Postgres, Drizzle, Hono — and avoid bespoke frameworks that bus-factor your team.

  • node
  • rpc
  • postgres
  • edge

// toolbox

2 default · 6 optional

  • Node 22

    LTS, native fetch

    default
  • Hono

    edge-first HTTP framework

    default
  • tRPC

    end-to-end typed RPC

    optional
  • Drizzle ORM

    SQL-shaped, no leaky magic

    optional
  • Postgres

    Neon · Supabase · RDS

    optional
  • Zod

    runtime contracts at every edge

    optional
  • BullMQ

    queues + scheduled jobs

    optional
  • Resend

    transactional email

    optional

// db

Postgres + Drizzle

// validation

Zod everywhere

// auth

Better-Auth / Clerk

// 03content & data

Content architecture & schema

Most marketing sites die in the CMS. We model content like a product — explicit schemas, versioning, and a clean editorial UI. WordPress is a first-class option when editorial depth, plugins, or an existing team make it the right call.

  • cms
  • schema
  • headless
  • i18n

// toolbox

2 default · 5 optional

  • WordPress

    headless via WPGraphQL · ACF · custom post types

    default
  • Payload

    self-hosted, TS-first CMS

    default
  • Contentful

    enterprise workflows + locales

    optional
  • MDX

    long-form docs + marketing

    optional
  • Algolia

    search + faceting

    optional
  • Cloudinary

    image pipeline + transforms

    optional
  • Mux

    video encoding + delivery

    optional

// editorial

WordPress / Payload

// delivery

headless + ISR

// preview

draft mode wired

// 04infrastructure

Infrastructure & delivery

We deploy to the edge by default and reach for region-locked compute when data gravity demands it. Infra is described in code, reviewed in PRs, and reproducible from a clean laptop in under thirty minutes.

  • edge
  • iac
  • ci/cd
  • dns

// toolbox

2 default · 6 optional

  • Cloudflare

    Workers · R2 · KV · Images

    default
  • Vercel

    preview deploys + ISR

    default
  • AWS

    RDS · S3 · Lambda when needed

    optional
  • Fly.io

    region-pinned long-running apps

    optional
  • Terraform

    infra as reviewed code

    optional
  • GitHub Actions

    CI, releases, scheduled jobs

    optional
  • Docker

    reproducible local + CI

    optional
  • Turborepo

    monorepo builds + cache

    optional

// host

Cloudflare / Vercel

// iac

Terraform

// ci

GitHub Actions

// 05observability

Observability & quality

If it's not measured, it's a rumor. Every project ships with structured logs, traced requests, real-user performance metrics, and an on-call surface — wired in before launch, not after the first incident.

  • logs
  • traces
  • rum
  • errors

// toolbox

1 default · 7 optional

  • Sentry

    errors + performance + replays

    default
  • Datadog

    APM + infra dashboards

    optional
  • Grafana

    self-hosted metrics + alerts

    optional
  • Logflare

    structured logs at scale

    optional
  • Statuspage

    public incident comms

    optional
  • PagerDuty

    on-call rotations

    optional
  • Playwright

    E2E + visual regression

    optional
  • Vitest

    unit + integration tests

    optional

// errors

Sentry

// uptime

Better Stack

// tests

Vitest + Playwright

// 06commerce & payments

Commerce & payments

Composable commerce when speed and merchandising matter, and traditional carts when ops require them. Payments, tax, and subscription logic isolated behind clean interfaces so the storefront stays portable.

  • commerce
  • stripe
  • subscriptions
  • tax

// toolbox

2 default · 6 optional

  • Shopify Hydrogen

    headless storefront on Oxygen

    default
  • Stripe

    payments · billing · tax

    default
  • Medusa

    open-source commerce backend

    optional
  • Paddle

    merchant-of-record for SaaS

    optional
  • Algolia

    PLP search + recs

    optional
  • Klaviyo

    lifecycle email + SMS

    optional
  • Segment

    event pipeline

    optional
  • GA4 + Plausible

    product + privacy analytics

    optional

// storefront

Hydrogen / custom

// payments

Stripe

// analytics

GA4 + Plausible

// principles

How we choose what goes in.

// boring on purpose

We pick the second-newest tool, not the bleeding edge. Postgres before vector-DB-of-the-month.

// typed end to end

TypeScript from the database row to the button click. Zod at every untrusted boundary.

// edge-first, region-aware

Default to the edge. Move workloads close to data only when latency or cost demands it.

// owned, not leased

Source, infra, and content live in your repos and your accounts. We hand over keys on day one.

// 09 — engage

Don't rent a team.
Own an engineering partner

Tell us what your business needs its digital platform to do. We'll respond within one business day — with a senior engineer, not a sales script.

// engagement

platform engineering · min 6 mo

// response_time

< 1 business day

// accountability

one team · one platform · one outcome