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.