- Go 97.5%
- PLpgSQL 2%
- Makefile 0.3%
- Shell 0.2%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
| cmd/meek-bank | ||
| db | ||
| docs | ||
| internal | ||
| .gitignore | ||
| app.env.example | ||
| CHANGELOG.md | ||
| CONTRIBUTING.md | ||
| go.mod | ||
| go.sum | ||
| LICENSE | ||
| Makefile | ||
| README.md | ||
| sqlc.yaml | ||
| wait-for.sh | ||
Meek Bank
Idea
Meek Bank attempts to lay the foundation of a modern, open source banking application for unbanked or underbanked people. Features primarily useful in middle income environments are sidelined. Some guiding principles:
- low hardware requirements
- scales well with additional cpu/memory
- flexible
- few dependencies
- simple setup
- easy onboarding of developers and users
- Postgres only
- Linux only (for now only Debian has been used)
Features
- single tenant, single legal entity
- ledger based accounting
- loan, saving and payment accounts and products
- groups and individuals as account holders
- multi-currency
- configurable business timezone (for COB, interest posting, and statement generation); API clients can operate in other timezones
- flexible scheduler
- stream based user notifications, emails
- configurable rounding policies
- office/branch based record permissions
- system permissions and permission sets
- authentication based on accessTokens/httpOnly cookies or OAuth
- idempotency both via http (header) and record based
- uuid version 7 IDs used for all safety relevant tables
The backend is complemented with a browser UI based on Svelte, which is hosted in a separate Git project. The browser UI supports almost all features of the backend.
Getting started
The Makefile represents the Debian development workflow, which requires Docker to be installed. The following prerequisites are based on this assumption, but production environments don't require Docker.
Prerequisites
- Go 1.24+
- Docker for Postgres and optional Keycloak
- golang-migrate for setting up database
- sqlc for working on database queries
- mockgen for generating mocks
- swag for generating Swagger docs
1. Clone and configure
git clone https://git.steinwinde.de/steinwinde/meek-bank.git
cd meek-bank
cp app.env.example app.env
Configure DB_ADMIN_USER (e.g. "postgres") and password, DB_USER (referred to as "meek_runtime" in the documentation) and password, DB_NAME, DB_HOST and DB_PORT in app.env.
2. Get the database up and running (Docker)
make createnetwork
make createpostgres
make createdb
make roles
make migrateup
make seed
3. Run the app
make server
The app should be listening on the port configured in SERVER_ADDRESS now.
4. And else?
To learn more in detail, please have a look at the .md files in the docs folder.
The project is rapidly developing - feedback and criticism is very welcome. Current target: A minimal viable product.
Licensing
This project is licensed under the Apache License, version 2.0.