Read this in Português.
A full-stack banking management system built with Java 21 / Spring Boot and a vanilla HTML/CSS/JS frontend. OpenBank simulates the core operations of a retail bank: customer and account management, deposits/withdrawals/transfers, transaction history and administrative reporting, with role-based access for customers and staff.
Originally built as a final project for a Systems Development / Information Systems Programming course; cleaned up and documented here as a portfolio piece.
- Two authentication flows — separate login for customers and staff/administrators, secured with JWT.
- Customer management (CRUD) — create, list, search, update and delete customers (deletion blocked while linked accounts exist).
- Account management — configurable account types and account creation per customer.
- Balance & transaction history — per-account statements with filtering.
- Operations — deposits, withdrawals and transfers, with the responsible staff member recorded on administrative operations.
- Reporting — administrative report listing and querying.
- Validation & authorization — request validation, role-based route protection, and consistent JSON error responses.
| Layer | Technology |
|---|---|
| Backend | Java 21, Spring Boot, Spring Web, Spring Data JPA, Spring Security, JWT |
| Database | MySQL 8 |
| Frontend | HTML5, CSS3, vanilla JavaScript |
| Build | Maven (wrapper included) |
flowchart LR
Browser["Browser<br/>(static frontend)"] -->|fetch / JSON| API["Spring Boot API<br/>(REST + JWT)"]
API -->|Spring Data JPA| DB[(MySQL)]
API -->|role-based access| Auth["Security Layer<br/>(customer / staff)"]
openbank/
├── README.md
├── base_de_dados/
│ └── openbank.sql # Schema + demo data
├── documentacao/
│ └── Documentacao_Openbank.pdf
└── projeto/
├── api/ # Spring Boot REST API
│ ├── .env.example
│ ├── pom.xml
│ └── src/
└── frontend/ # Static HTML/CSS/JS client
├── index.html
├── css/
├── js/
└── pages/
- Java 21
- MySQL 8 (or compatible)
- An up-to-date browser
- Any static file server for the frontend (e.g. VS Code Live Server)
Run base_de_dados/openbank.sql against your MySQL instance to create the schema and load demo data.
cd projeto/api
cp .env.example .envEdit .env and set at least DB_USERNAME, DB_PASSWORD and JWT_SECRET to your own local values. .env is git-ignored and must never be committed with real credentials.
./mvnw spring-boot:run # Linux/macOS
mvnw.cmd spring-boot:run # WindowsThe API is served at http://localhost:8080.
Open projeto/frontend in VS Code and start it with Live Server (or any static server), then open index.html in the browser.
These accounts exist only in the local demo dataset seeded by openbank.sql — they are not real credentials and only work against a database you seeded yourself.
| Role | Password | |
|---|---|---|
| Customer | luan@email.com |
123456 |
| Staff/Admin | admin@openbank.local |
123456 |
Released under the MIT License.
Luan Cabral — luancabralcon@gmail.com