Live dashboard: deployledger.vercel.app · API and infrastructure are available for local or self-hosted deployment.
DeployLedger is a self-hosted release-operations control plane for teams that want one calm, auditable view of delivery speed and change stability. It ingests deployment events, computes DORA metrics, exposes Prometheus health signals, and gives engineers a small dashboard for deciding whether the next release is safe to ship.
The project is deliberately shaped like a production service: async FastAPI + SQLAlchemy, a responsive React dashboard, signed GitHub webhooks, idempotent writes, a tamper-evident audit chain, container hardening, Kubernetes manifests, Terraform infrastructure, and CI that tests code and scans images.
| Area | Implementation |
|---|---|
| Backend | FastAPI, Pydantic v2, async SQLAlchemy, SQLite for local work and Postgres for deployment |
| Product UI | React + Vite dashboard with service scoping, trend visualization, environment matrix, release feed, and explicit demo/live state |
| Reliability | Liveness/readiness probes, Prometheus exposition, request latency histogram, deterministic seed data |
| Security | HMAC GitHub webhook verification, constant-time API-key checks, body-size limits, non-root images, read-only filesystems |
| Platform engineering | Docker Compose, Kustomize overlays, ECS/Fargate Terraform blueprint, release workflow, runbooks, Backstage catalog metadata |
DeployLedger models the current five-metric DORA model: change lead time, deployment frequency, failed deployment recovery time, change fail rate, and deployment rework rate. The definitions are kept close to the service code and the dashboard surfaces the window used for each calculation. See DORA's metric guide and the history of the model for the underlying research.
cd services/api
py -3.12 -m venv .venv
.\.venv\Scripts\Activate.ps1
python -m pip install -e ".[dev]"
$env:DEPLOYLEDGER_DEMO_SEED = "true"
uvicorn app.main:app --reloadOpen http://localhost:8000/docs. The default local database is deployledger.db; set DEPLOYLEDGER_DATABASE_URL to an async Postgres URL when you need a shared environment.
cd apps/web
npm install
npm run devThe dashboard is intentionally usable without an API: when VITE_API_URL is absent it renders deterministic demo data and labels itself as Demo mode. Set VITE_API_URL=http://localhost:8000 to use the live API.
copy .env.example .env
docker compose up --buildThe dashboard is at http://localhost:4173, the API is at http://localhost:8000, and Postgres is persisted in the deployledger-postgres volume. The Compose defaults are for local development only.
GET /api/v1/services— service catalog.POST /api/v1/services— register a service (API key required outside local mode).GET /api/v1/deployments— filter deployment history by service, environment, or status.POST /api/v1/deployments— ingest a deployment; repeat a request safely withIdempotency-Key.PATCH /api/v1/deployments/{id}— close a running deployment or record recovery details.GET /api/v1/metrics/dora?window_days=30— current DORA summary and daily trend.GET /api/v1/audit— newest entries from the append-only hash chain.POST /api/v1/webhooks/github— verify and ingest GitHub deployment events.
An importable OpenAPI sketch lives in docs/openapi.yaml. FastAPI also publishes a complete interactive schema in local environments.
- Demo fixtures are opt-in (
DEPLOYLEDGER_DEMO_SEED=true); production defaults to an empty database. - The audit chain is tamper-evident for a single writer. For multi-writer production deployments, put writes behind one database transaction/locking policy and export events to an immutable sink.
- The Terraform module expects a pre-existing VPC, private subnets, security groups, and Secrets Manager values. It does not create network boundaries on your behalf.
- OpenTelemetry's CI/CD semantic conventions are a natural next ingestion adapter; the current HTTP contract is intentionally small enough to sit in front of an event collector.
- Architecture
- Threat model
- Operations
- High change-failure runbook
- Kubernetes deployment
- Terraform deployment
MIT. See LICENSE.