Case study

PayLater Web Bank – Containerised Banking Mock

Banking sandbox for demos and prototyping. Complete with multi-factor auth, double-entry accounting, and partner API mocks, packaged in a Docker setup you can spin up in minutes.

Full-stackBackendSecurity & EndpointInternal tools
DjangoDjango REST FrameworkPostgresGunicornNginxHTMXDocker Composedjango-otp (MFA)PHPMailer

Industry

Fintech / Education

Role

Architect & full-stack developer

Timeframe

2022

Location

Copenhagen, Denmark

Published

Mar 1, 2022

Context

I needed a realistic retail banking sandbox to demonstrate account management, transfers, lending, and partner-bank integrations with proper auditability and security.

Approach

  • Built a Django + DRF app for customer and staff portals, backed by a double-entry ledger enforcing balanced debit/credit pairs.
  • Added TOTP MFA (django-otp) for logins and token-auth APIs for partner banks to initiate external transfers.
  • Used HTMX for responsive staff workflows (search, inline edits, account creation) without heavy SPA overhead.
  • Packaged with Docker Compose (app, Postgres, Nginx + Certbot) and seeded demo data via management commands.

Highlights

  • Ledger.transfer ensures atomic paired entries; ranks gate loan eligibility and status transitions.
  • External transfer flow calls partner APIs, tracks pending status, and logs metadata for reconciliation.
  • Staff dashboards run on HTMX partials; customers get classic web views for balances, transactions, and loan requests.
  • Deployment mirrors production topology: Gunicorn behind Nginx with optional TLS and per-environment configs.

Impact

  • Demonstrates a credible banking workflow with MFA and audit-ready ledgers.
  • Speeds demos and tests with prebuilt seeds and container parity.
  • Highlights emphasis on correctness, security, and practical developer ergonomics.