Work
ClientClient · Desktop application

Hardware store: inventory and sales

Inventory and sales for a hardware store, deployed locally, with a REST API in Java 17 and Spring Boot, SQL Server and an Angular interface.

Screenshot of Hardware store: inventory and sales
SYSTEM.md

The problem

The business needed to control its stock and sales without depending on external services.

What I built

A Spring Boot REST API on SQL Server with normalized schemas and an Angular SPA, deployed locally.

Outcome

A local inventory and sales system with no dependency on external services.

Decisions that mattered

  1. 01

    Real-time stock

    Every entry and exit updates stock instantly, and movement reports explain where each figure comes from.

  2. 02

    Role-based access

    Check-in and check-out with JWT authentication and role-based access control (RBAC).

  3. 03

    Tidy data

    Normalized SQL Server schemas keep products, movements and users consistent.

Technologies

  • Java 17
  • Spring Boot
  • SQL Server
  • Angular
  • JWT

C4 model. The pulsing line is the main path of a request.

Level 1 · who uses the system and what it connects to

Browser · LAN1Browser · LANCashierSells and records movementsAdministratorControls stock and reportsHardware storesystemInventory and sales

Level 2 · the applications and data stores it is made of

Browser1REST · JWT2JDBC3CashierSells and records movementsInterface[Angular SPA]Sales, inventory andreportsREST API[Spring Boot · Java 17]Rules, JWT and rolesDatabase[SQL Server]Normalized schemas

Level 3 · the components inside the API

calls1rulesport2SQL3REST controllers[REST controllers]Check-in, check-out andstockServices[Application services]Stock, entries, exits andaccessEntities[Entities]Products, movements andusersJPA repositories[JPA · Hibernate]Persist to SQL ServerDatabase[SQL Server]Normalized schemas
  • Person
  • System
  • Container
  • Database
  • Main path
  1. 01Checkout
  2. 02Angular
  3. 03Spring Boot REST API
  4. 04SQL Server

CV

Get my CV

Leave your email and I will send the CV there. First I check the address is yours with a code.