A full-stack banking application built with Spring Boot and React, featuring secure JWT authentication, account management, and transaction tracking.
- Frontend: https://deluxe-liger-f29058.netlify.app
- Backend API: https://bankingapp-6ox5.onrender.com
- JWT-based authentication
- Rate limiting — account locked for 5 minutes after 5 failed login attempts
- Strong password requirements (min 8 characters, number and special character required)
- Session expiry handling
- Create checking and savings accounts
- View account details (balance, status, total in/out)
- Close accounts (requires zero balance)
- Dark mode support
- Deposit and withdraw funds
- Transfer money between accounts
- Transaction history with filtering (by type, date range, search)
- Transaction categorization (Food, Transport, Entertainment, etc.)
- Export transactions as PDF
- View and edit profile information
- Change password securely
- Java 21
- Spring Boot 3.4.1
- Spring Security — JWT authentication
- Spring Data JPA / Hibernate — ORM
- PostgreSQL — production database
- Lombok — boilerplate reduction
- Maven — build tool
- React 18 + TypeScript
- Vite — build tool
- Tailwind CSS — styling
- Axios — HTTP client
- jsPDF — PDF export
- React Toastify — notifications
- Docker — local PostgreSQL database
- Render.com — backend deployment
- Netlify — frontend deployment
- Java 21
- Node.js 18+
- Docker
git clone https://github.com/sifux5/bankingapp.git
cd bankingappdocker-compose up -d./mvnw spring-boot:runcd banking-frontend
npm install
npm run devNavigate to http://localhost:5173
users
- id, first_name, last_name, email, password, phone_number, created_at, updated_at
accounts
- id, account_number, account_type (CHECKING/SAVINGS), balance, active, user_id, created_at, updated_at
transactions
- id, from_account_id, to_account_id, amount, transaction_type, status, description, category, created_at
- Passwords hashed with BCrypt
- JWT tokens for stateless authentication
- Rate limiting on login endpoint
- Input validation on both frontend and backend
- CORS configured for frontend origin
bankingapp/
├── src/main/java/com/banking/bankingapp/
│ ├── config/ # Security, CORS, Rate Limiter
│ ├── controller/ # REST controllers
│ ├── dto/ # Data Transfer Objects
│ ├── entity/ # JPA entities
│ ├── mapper/ # DTO conversion (AccountMapper, TransactionMapper)
│ ├── repository/ # Spring Data repositories
│ ├── service/ # Business logic
│ └── util/ # JWT utility
├── banking-frontend/
│ ├── src/
│ │ ├── pages/ # Landing, Login, Register, Profile
│ │ ├── services/ # API calls
│ │ ├── components/ # Reusable components
│ │ │ └── modals/ # Modal components (Deposit, Withdraw, AccountDetail)
│ │ └── types/ # TypeScript interfaces
│ └── public/
├── docker-compose.yml
└── README.md
- Unit tests for
AccountMapperandTransactionMapper - Run with:
./mvnw test
Alex Kupper