Tech Stack
Both DPGs are TypeScript-first pnpm + Turborepo monorepos that share a common technology base.
At a glance
Section titled “At a glance”| Concern | Signals DPG | Aggregator DPG |
|---|---|---|
| API framework | Fastify + Zod (fastify-type-provider-zod) | Fastify (BFF) |
| Web UI | React 19 + Vite (schema-driven) | Next.js 15 (App Router) + BFF |
| Background jobs | — | BullMQ worker |
| ORM / DB | Drizzle + PostgreSQL (partitioned items) | Drizzle + PostgreSQL |
| Cache / sessions / queue | Redis | Redis |
| Object storage | S3 | S3 |
| Auth | Better-Auth + API keys | Keycloak (OIDC) |
| Notifications | SMTP, SMS | SMTP (Mailpit local), SMS |
Runtime & package management
Section titled “Runtime & package management”- Node ≥ 24 (CI pins Node 24; Node 22 works locally for the Aggregator).
- pnpm is required (Signals pins
pnpm@11.x; Aggregator requires pnpm ≥ 10). Other package managers are not supported. - Turbo orchestrates
build,test,lint,typecheck,devtopologically. - Docker + Compose brings up Postgres, Redis, and (Aggregator) Keycloak + Mailpit. S3 is a real cloud dependency, not containerised.
Testing & quality
Section titled “Testing & quality”- Vitest for all tests. Integration tests are named
*.integration.test.tsand excluded from the default unit run. - Cross-package tests import the in-memory fake from a package’s
./testingexport — never mock the interface directly. - Target ≥ 70% line coverage.
- ESLint + Prettier via husky/lint-staged on staged files. Conventional Commits are required; do not bypass hooks with
--no-verify. - dependency-cruiser enforces interface-boundary rules in the Aggregator at CI time.
Observability
Section titled “Observability”A shared logger (pino-backed) is used everywhere. Every log entry carries operation, a status of success/failure/skipped, latency_ms for external calls, and error/error_type on failure. Log level comes from LOG_LEVEL.
Infrastructure & deployment
Section titled “Infrastructure & deployment”The cloud deployment is its own codebase (bluedots-automation) with a distinct toolchain:
| Concern | Tooling |
|---|---|
| Cloud provisioning | OpenTofu + Terragrunt (AWS EKS, VPC, IAM/IRSA, S3, storage) |
| Application deploy | Helm umbrella charts, driven by install.sh (no Makefile) |
| Ingress | Kong ingress controller (DB-less), KongClusterPlugin rate-limit tiers |
| TLS | cert-manager + Let’s Encrypt (letsencrypt-prod ClusterIssuer) |
| Image registry | GHCR (ghcr.io/blue-dots-economy/…), sha-<short> tags |
| Shared datastores | PostgreSQL + Redis (deployed by common-services) |
| Observability | Prometheus, Alertmanager, Loki, Alloy, Grafana (monitoring chart) |
See Infrastructure & Deployment Architecture and the CI/CD & Build Pipeline guide.
Documentation site
Section titled “Documentation site”This documentation site itself is built with Astro + Starlight and deployed to GitHub Pages — see the Guides and the repository README for how to run and deploy it.

