Shillings
A Go backend that simulates a payment provider plus the surrounding identity and ledger primitives — split into independently scalable web and application layers that talk over a custom protocol.
Shillings is a Go service that pretends to be a payment provider so you can test client integrations end-to-end without ever touching a real payments stack.
Architecture
The web layer and the application layer are deliberately separated so they can scale independently:
- Web server — Handles incoming HTTP traffic, fronted by Nginx as a load balancer.
- Application server — Owns business logic: authentication, payments, accounts.
- MySQL — Stores user profiles, credentials, and the transaction ledger.
- Redis — Caches user profiles for hot reads.
- Protobuf — The two layers communicate over a custom protocol on top of Protobuf.
Everything ships as Docker images and comes up with a single make prod.
API surface
A minimal but realistic set of endpoints to integrate against:
POST /v1/signupandPOST /v1/login— JWT-based auth.GET /v1/account— current user profile and balance.POST /v1/topup— credit the wallet.POST /v1/pay— transfer between accounts.GET /v1/transactions— paginated transaction history.
Why
Mostly to design and ship a cleanly-layered Go service end-to-end — schema, transport, deployment, the lot. Useful as a fixture for integration tests against a payments-like API without paying for sandbox access.