About this blog

This blog is where the Trellis development team writes about the work that goes into building Trellis and the technical decisions, rewrites, tooling, the occasional post-mortem, and whatever else seems worth writing down.

What is Trellis

Trellis is a revenue generation platform for long-term sustainable change to systemic issues. Day to day, that means we run silent and live auctions, raffles, event ticketing, check-in, donation processing, tax-receipt generation, and the reporting that ties all of it together for charities across North America.

We're a lean team, so a lot of what we end up writing about is how we squeeze more out of tooling, automation, and good defaults.

How we work

A few things that come up a lot on this team:

  • We invest heavily in developer experience. Fast CI, clean boundaries, good generators. These are not nice-to-haves, they're the thing that lets a small team ship a large product.
  • We track DORA metrics and actually use them to make decisions, not just display them in a dashboard that no one looks at.
  • We let adoption happen naturally. New tools get tried, shown around, and if they're useful, the team picks them up without being forced to.
  • We automate the boring and repetitive so the team can spend its time on the interesting and hard stuff. Automation is not the goal, it is the thing that gets us to the goal.
  • We ship on a trunk-based workflow with an automated release pipeline that promotes low-risk changes through developstagingproduction with only a small amount of human in the loop, leaning on our automations and testing to prevent regressions.

Technology stack

Our stack is full-stack TypeScript, end to end. Apps and services share types, libraries, and generators through a single Nx monorepo with 13 applications and over 1,500 libraries.

Apps

Servers

Infra

  • AWS EKS for our cluster.
  • RDS for managed Postgres, S3 for object storage.
  • Kubernetes for orchestration, with autoscaling driven by event-loop lag and queue depth rather than CPU alone.
  • Sentry for errors, p95 tracing, Profiling, and Core Web Vitals.
  • CircleCI for CI workloads running in conjunction with Nx Cloud CI for distributed task execution and caching.

Automations and tooling

  • Linear for issue tracking and project management.
  • A fully automated release pipeline driven by Linear Change Risk Tier (DORA) tags — T0/T1 low-risk changes promote through environments without manual intervention.
  • A dedicated DORA database that correlates deployment frequency, lead time, change failure rate, and MTTR across CircleCI and Linear.
  • Vitest + MSW for unit and integration tests, Playwright for e2e, and k6 for smoke and load testing.
  • Heavy investment in our own generators, codemods, executors, and Nx plugins that lives inside the monorepo.

What you'll find here

Honestly, whatever we find is worth writing down. Deep-dives into our Nx setup, the reasoning behind a rewrite, testing philosophy, a post-mortem on something that went sideways, how we think about AI, year-in-review posts — if a decision was interesting enough to talk about internally, it's probably worth a writing a post about.

If that sounds like something you'd read, subscribe to the RSS feed.


Written and maintained by the engineering team at Trellis.