Tech stack

The technology we run in production

Languages

GoOur default for platform and transaction services.
TypeScriptEverything on the product and tooling side, front to back.

Platform and runtime

KubernetesThe runtime for the platform, on GCP.
TerraformAll infrastructure defined as code.
CloudflareDNS, CDN and edge protection in front of the platform.

Delivery and CI

Flux CDKubernetes manifests live in our GitHub monorepos and are applied continuously by Flux.
GitHub ActionsContinuous integration for every change.
GitHubCode and manifests.

Workflows and eventing

TemporalDurable orchestration for platform workflows.
RedpandaThe event log behind our event sourcing.
NATSLightweight messaging for async coordination between services.
Change data captureStreams changes out of stores where event sourcing is not in place yet.

Data stores

PostgreSQLWhere reliability and consistency matter most.
MongoDBGeneral service data.
CassandraWhere write and query performance are critical.
ElasticsearchSearch.
ClickHouseAnalytical and live operator data.

APIs and communication

gRPCAll internal service-to-service communication.
JSON over HTTPThe external platform API surface.

Frontend

React and Next.jsOperator and driver product surfaces, in TypeScript.
GraphQLHow the front end talks to the platform.
Tailwind CSSStyling.
shadcn/uiComponent primitives, wired through our design system.

Data platform and analytics

LakehouseOur lake, run by Lakekeeper on Google Cloud Storage.
TrinoThe query engine across the lakehouse.
dbt and AirflowModelling and orchestration for the data pipelines.
BigQueryThe gold data layer.
LookerReporting and exploration on top of BigQuery.

Observability

PrometheusMetrics across every service.
OpenTelemetryTraces and instrumentation from one standard.
SigNozWhere metrics and traces are indexed and explored.

How something ends up in the stack

Someone tries a tool on one service, and if it works other teams adopt it. We replace a tool when the alternative is clearly better.