arii
Home

Blog

About

categories

mcba

a multi-tier asp.net core banking platform with customer and admin portals, bill payment system, account management, and rest api
2 min read updated
MCBA web app logo

A multi-tier banking platform built with ASP.NET Core. MCBA features separate customer and admin portals sharing a unified data layer, a RESTful API, an integrated bill payment system, and external data service synchronisation for real-time customer and account information.

key features

  • Multi-portal architecture (customer app, admin app, REST API)
  • User authentication with session management
  • Account management with real-time balance calculations
  • Transaction history with pagination and filtering
  • Bill pay system with one-off and monthly scheduled payments
  • Payee management for recurring bill payments
  • Transaction types (deposits, withdrawals, transfers, service charges, bill payments)
  • External data service integration for customer sync
  • Custom validation attributes for business logic
  • Role-based access control

tech stack

# backend
asp.net core mvc | entity framework core | sql server
# architecture
multi-project structure | repository pattern | dependency injection (autofac)
# frontend
razor views | bootstrap | javascript

api architecture

/api/customers    # fetch and update customer data
/api/accounts     # account information and balance

highlights

customer dashboard with transaction history, admin portal for user management, and bill payment system.

Home page
home page
Admin portal page
admin portal page

Building MCBA was my first real exposure to multi-project architecture. Splitting the app into separate model, customer, admin, and API layers made it clear how the same data layer can serve completely different consumers without duplicating logic.

The bill payment system was where the complexity lived. Managing scheduled one-off and monthly payments, validating payees, and keeping financial transactions accurate required careful business logic. Writing custom validation attributes like DateInThePast and HasMoreThanTwoDecimalPlaces was a good lesson in encapsulating domain rules in a reusable way rather than scattering checks across controllers.