Building a Bank POC — Secure Foundations

Mediasoup Flow

I started this project a few days ago as a personal challenge: I wanted a focused, production-minded playground where I could sharpen systems design, reliability, and backend craftsmanship. The idea was simple — build a Bank Proof-of-Concept (Bank POC) that behaves like a real banking core: secure, observable, and transaction-safe.

This post is intentionally short — the repo is early-stage. Right now the README is written and JWT-based user authentication is implemented. No flashy UI yet; the point is to demonstrate how the backend should work and to level up my engineering skills.


⚙️ High-Level Architecture (The Fortress Blueprint)

+---------+      HTTPS       +------------+      SQL      +-----------+
|  Client |  <----------->   | Spring API |  <--------->  | PostgreSQL|
+---------+                 +-----+------+               +-----------+
                                  |
                       Redis <----+----> Kafka (optional)
                         |                     ^
                   (cache, OTP, locks,         |
                    sessions, streams)         |
                                               |
                                       Metrics/Logs/Traces
                                          /    |       \
                                 Prometheus  Grafana   ELK/Logstash

💡 Why I picked this project

  • Leveling up: working through concurrency, idempotency, observability, and resilience is the fastest practical way I know to get better at backend engineering.
  • Real-world constraints: unlike toy apps, financial systems force you to think about atomicity, auditability, and failure modes.
  • Portfolio & storytelling: this project is both a learning log and a portfolio piece I can point to during interviews.

⚙️ What’s implemented (so far)

  • README: clear architecture overview, core user flows, and run instructions.
  • JWT Authentication: secure, stateless authentication using Spring Security. This includes token issuance and the basic auth flow for users to sign in.

That’s it for code features so far — everything else is planning, architecture notes, and infra scaffolding. I started small on purpose: get auth right, then build the account/transfer flows the correct way.


🧱 Core principles I’m following

  • Database as source of truth — balances live in Postgres, not Redis.
  • Atomic transfers — debit and credit happen inside a single DB transaction.
  • Idempotency — all transfer endpoints will accept an idempotency key to prevent double spending.
  • Auditability — immutable audit logs for every money-moving action.
  • Observability-first — metrics, traces, and structured logs from day one.

🧩 Example user flow (planned)

  1. Register → user gets kyc_status = PENDING, account created INACTIVE.
  2. Admin KYC approve → user and account become ACTIVE.
  3. Set PIN → user sets card transaction PIN (hashed & stored).
  4. Login → JWT issued; device trust and OTP flows may be used for untrusted devices.
  5. Transfer → user submits transfer with idempotencyKey and pin → server validates, locks accounts, executes atomic transfer.

🧭 Next immediate steps

I’ll be iterating in short cycles. Next work items (in approximate order):

  1. Account creation + balances (with safe locking patterns)
  2. Transfer endpoint with idempotency (SELECT FOR UPDATE; audit logs)
  3. Add Redis distributed locks for cross-instance safety
  4. Add Prometheus metrics & Jaeger spans for transfer flows
  5. Write integration tests (DB + transaction scenarios)

I’ll publish follow-up posts as features land.


🎯 Why this is a good showcase

Even in early stages, this project shows:

  • Thoughtful architecture choices
  • Real security baseline (JWT auth)
  • Focus on reliability and observability
  • A plan to incrementally add production-grade features

That’s exactly the sort of work I want to talk about with engineering teams and interviewers.


🧩 Repo

https://github.com/NeurologiaLogic/bankpoc-secure-transfer-system

# Clone
git clone https://github.com/NeurologiaLogic/bankpoc-secure-transfer-system.git
cd bankpoc-secure-transfer-system

# Start infra (Postgres, Redis, Prometheus, Grafana, Jaeger)
docker compose up -d

# Run the app (from project root)
./mvnw spring-boot:run

© 2025 Patrick Kwon. All rights reserved.