Skip to content
All work

Case study 07 / 09

Personal project · open-source extension · 2023

The Banker

An open-source Django banking app that I extended with money transfers, email and SMS alerts, PDF statements and live currency rates.

Role
Developer of the extensions
Stack
  • Python
  • Django
  • PostgreSQL
  • Bootstrap 5
  • Twilio
  • ReportLab
  • Jazzmin
Links

Credit

Built on the open-source banking-system project by Maksudul Haque (MIT licence). The accounts and transaction core come from that project.

The Banker shown on a desktop monitor, laptop, tablet and phone: a purple dashboard of icon tiles for account, transactions, transfer money, deposit, withdraw, currency exchange, customer care and log in.
Device mockupDevice mockup of real screens: the main menu.

01

Overview

The Banker is an online-banking demo in which customers manage an account, deposit and withdraw money, send transfers and review their history.

I started from an existing open-source Django project that handles accounts and basic transactions, and built a new interface and a set of features around it over about a month in 2023.

02

The brief

A banking product is mostly about what happens around a transaction: telling the customer, keeping a record they can download and showing what their money is worth. The original project covered the transactions themselves; the brief I set myself was to add the services around them.

03

Role and scope

Role
Developer of the extensions
Scope
Built on Maksudul Haque’s MIT-licensed banking-system project, which provides accounts and basic transactions. Everything listed under features is my addition.

04

Main features

  • Money transfers

    Transfers between accounts, alongside the existing deposits and withdrawals.

  • Email notifications

    HTML emails for account activity, sent automatically when transactions happen.

  • SMS alerts

    Text-message alerts delivered through Twilio.

  • PDF statements

    The date-filtered transaction report can be exported as a PDF.

  • Currency rates

    A currency page showing live exchange rates against the Afghan afghani.

  • Profiles and support

    Profile editing, password change and reset by email, and a contact form.

05

How it’s built

  • Notifications from signals

    Email notifications are triggered by Django signals on transaction events, so the views that move money stay free of messaging code.

  • Generated documents

    Statements are rendered server-side with ReportLab, so the PDF matches the report the customer filtered on screen.

  • A rebuilt interface

    28 templates in a new Bootstrap 5 interface replaced the original front end; the login, registration, transaction-form and report templates were reworked from it.

  • Pull requests on a solo project

    Each feature was built on its own branch and merged through a pull request, 20 in total, which kept the history reviewable.

Integrations

  • Twilio SMS
  • SMTP email
  • FastForex exchange-rate API
  • REST Countries API
  • ReportLab PDF

06

Challenges and decisions

  1. Extending without rewriting

    The original models and transaction logic were kept intact. New behaviour hooks into them through signals and new views, which made the additions easier to reason about.

07

What was delivered

  • Transfers, notifications, PDF statements and a currency page on top of the original core
  • A rebuilt Bootstrap 5 interface
  • An admin back office styled with Jazzmin

Retrospective

What I would change for production

  1. Atomic transfers

    In this demo a transfer updates two balances in separate steps. A production system needs both updates inside one database transaction, with row locking.

  2. Tests around money movement

    The project has no automated tests. Transfers, statements and notifications would be the first things to cover.

  3. Isolating third-party APIs

    The REST Countries version the currency page used has since been deprecated. Wrapping external calls in a small adapter makes that kind of change a one-file fix.

Next case study 08 / 09

Next case study: Shams al Murjan

Client project · 2026

A Laravel ERP and client portal for Shams al Murjan, a used auto-parts trading company: containers, stock, invoicing, money exchange, payroll and investor accounting.

Shams al Murjan access portal: the company name in gold on a navy background, with two cards to sign in to the Admin Panel or the Client Portal.

Have a project in mind? Let’s talk it through.

Tell me what you are building, what it needs to do and when you need it. I will reply with questions, an honest view of the options and the next steps.