Distributed SMS notification platform in Go on AWS — SQS, RDS Postgres behind RDS Proxy, KEDA autoscaling on k3s, Terraform. Load runs are gated on SQL invariants, and the campaign evidence is reconciled against CloudWatch.
Go
1
117 commits
updated Aug 20, 2026
Event-driven SMS notification service built in Go.
Correctness under injected provider failure: idempotent at-least-once delivery, no duplicate sends, no drops, dead-letter redrive drilled — and throughput reported only alongside invariants checked against the database in SQL (internal/verify defines nine), never latency alone.
It accepts message requests, enqueues send jobs to SQS, processes sends asynchronously in workers, ingests provider webhooks, and reconciles final delivery state.
cmd/api: HTTP API (POST /v1/sms/messages, GET /v1/messages/{id})cmd/worker: SQS consumer that sends messages to providercmd/webhook: webhook ingest endpointinternal/: domain, service, queue, store, provider, observability codedeploy/k8s: Kubernetes manifests and overlaysinfra: Terraform infrastructure — deliberately small: public subnets + SG-locked ingress (no NAT), no load balancer (DNS → server EIP → ingress-nginx NodePort), one k3s server + one spot worker ASG, RDS Postgres reached directly by the pgx pools (no RDS Proxy), SQS FIFO + DLQ, SSM for accessdocs/architecture: architecture diagramsSee diagrams: docs/architecture/README.md.
Prerequisites:
psqlmake init
make run-* targets load .env.local.env.local values for your local setup if needed.make run-api
make run-worker
make run-webhook
curl -X POST http://localhost:8080/v1/sms/messages \
-H 'Content-Type: application/json' \
-d '{
"tenantId":"foodapp",
"idempotencyKey":"demo-1",
"to":"+14155552671",
"templateId":"txn_confirm_v1",
"vars":{"name":"Sam","orderId":"A-123"}
}'
make up # start postgres + localstack
make queues # create local SQS queues
make migrate # run schema
make seed # seed baseline data
make test # unit tests
make test-integration # integration tests
make down # stop local infra
make reset # stop + delete volumes
make k8s-upmake k8s-restartinfra/origin/main explicitly (git fetch origin && git switch -c my-branch origin/main). Local main checkouts in worktree setups run behind — three stale-base incidents in one week, including the PR that added this line.MIT — see LICENSE.
Go
90.1%
HCL
7.5%
Shell
1.3%
Distributed SMS notification platform in Go on AWS — SQS, RDS Postgres behind RDS Proxy, KEDA autoscaling on k3s, Terraform. Load runs are gated on SQL invariants, and the campaign evidence is reconciled against CloudWatch.
Go
1
117 commits
updated Aug 20, 2026
Event-driven SMS notification service built in Go.
Correctness under injected provider failure: idempotent at-least-once delivery, no duplicate sends, no drops, dead-letter redrive drilled — and throughput reported only alongside invariants checked against the database in SQL (internal/verify defines nine), never latency alone.
It accepts message requests, enqueues send jobs to SQS, processes sends asynchronously in workers, ingests provider webhooks, and reconciles final delivery state.
cmd/api: HTTP API (POST /v1/sms/messages, GET /v1/messages/{id})cmd/worker: SQS consumer that sends messages to providercmd/webhook: webhook ingest endpointinternal/: domain, service, queue, store, provider, observability codedeploy/k8s: Kubernetes manifests and overlaysinfra: Terraform infrastructure — deliberately small: public subnets + SG-locked ingress (no NAT), no load balancer (DNS → server EIP → ingress-nginx NodePort), one k3s server + one spot worker ASG, RDS Postgres reached directly by the pgx pools (no RDS Proxy), SQS FIFO + DLQ, SSM for accessdocs/architecture: architecture diagramsSee diagrams: docs/architecture/README.md.
Prerequisites:
psqlmake init
make run-* targets load .env.local.env.local values for your local setup if needed.make run-api
make run-worker
make run-webhook
curl -X POST http://localhost:8080/v1/sms/messages \
-H 'Content-Type: application/json' \
-d '{
"tenantId":"foodapp",
"idempotencyKey":"demo-1",
"to":"+14155552671",
"templateId":"txn_confirm_v1",
"vars":{"name":"Sam","orderId":"A-123"}
}'
make up # start postgres + localstack
make queues # create local SQS queues
make migrate # run schema
make seed # seed baseline data
make test # unit tests
make test-integration # integration tests
make down # stop local infra
make reset # stop + delete volumes
make k8s-upmake k8s-restartinfra/origin/main explicitly (git fetch origin && git switch -c my-branch origin/main). Local main checkouts in worktree setups run behind — three stale-base incidents in one week, including the PR that added this line.MIT — see LICENSE.
Go
90.1%
HCL
7.5%
Shell
1.3%