StatusHub
One receiver in front of every payment provider.
- Go
- PostgreSQL
- TypeScript
- Docker
- Kubernetes
- Helm
- Terraform
The problem
A fintech integrating six payment providers writes six webhook receivers, six signature checks and six status vocabularies — and then writes them again for the seventh. Every one is a place to drop an event.
StatusHub is one receiver in front of all of them: it verifies each provider’s signature, normalises every payload into a single canonical transaction schema, and forwards with ordering, retries and replay.
What I built
- Signature verification for six provider schemes — HMAC-SHA256 and HMAC-SHA512, each with its own canonicalisation.
- Raw bytes hit Postgres before anything parses them. A payload we cannot understand is still a payload we did not lose.
- Ordered delivery, retries and replay, with a hash-chained audit trail and row-level security for tenant isolation.
- Multi-region deployment via Helm and Terraform.
Decisions worth naming
- Persist, then acknowledge. Nothing is acknowledged to a provider until it is durable. A faster acknowledgement is not a faster system; it is a system that discards evidence.
- An unrecognised status becomes
unknown, never a guess. A provider adding a status we have not seen must not be silently mapped onto one we have.
What is not finished
- Provider coverage is six schemes, not an exhaustive list — each new rail is a small adapter and a conformance test.