βββββββββββββββββ βββββββ ββββββββββ ββββββββββββββ βββββββ βββ βββ
βββββββββββββββββββββββββββββββββββββ βββββββββββββββ ββββββββββββ βββ
ββββββββ βββ βββ ββββββ βββββββ ββββββ βββ βββ ββββββ ββ βββ
ββββββββ βββ βββ ββββββ βββββββ ββββββ βββ βββ βββββββββββββ
ββββββββ βββ ββββββββββββββββββββ ββββββ βββββββββββββββββββββββββββ
ββββββββ βββ βββββββ ββββββββββ ββββββ ββββββββ βββββββ ββββββββ
Full-stack inventory & procurement management platform
π§ Actively developed as a portfolio project targeting full-stack roles in Singapore.
StockFlow is a business-oriented inventory and procurement platform built to feel like a real internal operations tool, not a tutorial clone. It is designed around the actual workflows teams need to manage products, suppliers, purchasing, and stock visibility in one place.
The project focuses on production-minded full-stack engineering:
- clean REST API design
- layered Spring Boot architecture
- relational data modeling with PostgreSQL
- typed frontend development with React + TypeScript
- reusable CRUD patterns across modules
- a UI that feels like an internal business system rather than a demo
StockFlow currently supports full product and supplier management across both backend and frontend.
- Product CRUD
- Supplier CRUD
- Modal-based create/edit flows on the frontend
- Auto-refreshing data tables without page reload
- Layered backend structure with controller/service/repository separation
- DTO + mapper + exception handling structure for supplier module
- Product-to-supplier relationship
- Search, filtering, and pagination
- Purchase order domain modeling
- JWT authentication
- Role-based access control
- Dashboard analytics
- Audit logging
- Dockerized deployment and CI/CD pipeline
βββββββββββββββββββββββ ββββββββββββββββββββββββββββ βββββββββββββββ
β React Frontend βββHTTPβββΆβ Spring Boot Backend βββJPAββββΆβ PostgreSQL β
β TypeScript/TailwindββββJSONβββ REST API + Spring Sec. β β Database β
βββββββββββββββββββββββ ββββββββββββββββββββββββββββ βββββββββββββββ
Controller β Service β Repository β Entity β PostgreSQL
(HTTP/JSON) (Logic) (Data access) (DB map)
Page β Modal/Form β Service β API
(UI) (State) (HTTP) (Backend)
This pattern is intentionally repeated across modules so new business entities can be added consistently.
| Layer | Technology |
|---|---|
| Frontend | React 18, TypeScript, Tailwind CSS, Vite |
| Backend | Java 17, Spring Boot 3.5, Spring Data JPA, Spring Validation |
| Database | PostgreSQL 15 |
| Security | Spring Security, JWT (planned) |
| Build | Maven, npm, Vite |
| DevOps | Docker, Docker Compose, GitHub Actions (planned) |
| Testing | JUnit 5, Postman |
| Module | Status |
|---|---|
| Product management (CRUD) | β Done |
| Supplier management (CRUD) | β Done |
| Product-supplier relationships | π¨ In progress |
| Search, filter, pagination | π Planned |
| JWT authentication | π Planned |
| Role-based access (Admin / Manager / Staff) | π Planned |
| Purchase order workflow | π Planned |
| Stock updates & inventory history | π Planned |
| Dashboard analytics | π Planned |
| Audit logs | π Planned |
| Docker + CI/CD pipeline | π Planned |
The Product module is the first complete end-to-end feature and serves as the template for the rest of the system.
- Backend CRUD endpoints
- Frontend data table
- Add product modal
- Edit product modal with pre-filled values
- Delete product flow
- Automatic table refresh after save/delete
This module established the reusable full-stack pattern used by the rest of the project:
Entity β Repository β Service β Controller β Page β Modal
That pattern is now being reused for Suppliers and future modules like Purchase Orders.
The Supplier module is the second complete CRUD feature and expands the project toward procurement workflows.
- Supplier entity and repository
- Service layer with business logic
- Request/response DTOs
- Mapper layer
- Custom not-found exception
- Global exception handling
- Frontend supplier table
- Modal-based create/edit supplier form
- Delete supplier flow
- Automatic UI refresh after changes
- Name
- Contact person
- Phone
- Address
This module is the foundation for the upcoming product-supplier relationship and purchase order workflow.
Planned workflow:
DRAFT βββΆ SUBMITTED βββΆ APPROVED βββΆ RECEIVED
β
ββββΆ REJECTED
This module will eventually connect suppliers, products, order lines, approval states, and stock updates.
Planned authorization model:
| Action | Admin | Manager | Staff |
|---|---|---|---|
| View products & suppliers | β | β | β |
| Create / edit products | β | β | β |
| Manage suppliers | β | β | β |
| Create purchase orders | β | β | β |
| Approve / reject orders | β | β | β |
| View audit logs | β | β | β |
| Manage users | β | β | β |
stockflow/
βββ backend/
β βββ src/main/java/com/stockflow/
β β βββ controller/ # REST endpoints
β β βββ dto/ # Request/response DTOs
β β βββ entity/ # JPA entities
β β βββ exception/ # Custom exceptions + global handler
β β βββ mapper/ # DTO/entity mapping
β β βββ repository/ # Spring Data JPA repositories
β β βββ service/ # Service contracts
β β βββ service/impl/ # Service implementations
β β βββ security/ # JWT + Spring Security (planned)
β βββ pom.xml
β
βββ frontend/
β βββ src/
β β βββ components/ # Reusable UI components and modals
β β βββ pages/ # Route-level pages
β β βββ services/ # API service layer
β β βββ types/ # TypeScript models
β β βββ App.tsx
β βββ package.json
β
βββ docs/ # Architecture notes and diagrams
βββ docker-compose.yml
βββ README.md
| Method | Endpoint | Description |
|---|---|---|
GET |
/api/products |
Get all products |
GET |
/api/products/{id} |
Get product by ID |
POST |
/api/products |
Create a product |
PUT |
/api/products/{id} |
Update a product |
DELETE |
/api/products/{id} |
Delete a product |
| Method | Endpoint | Description |
|---|---|---|
GET |
/api/suppliers |
Get all suppliers |
GET |
/api/suppliers/{id} |
Get supplier by ID |
POST |
/api/suppliers |
Create a supplier |
PUT |
/api/suppliers/{id} |
Update a supplier |
DELETE |
/api/suppliers/{id} |
Delete a supplier |
- Java 17+
- Node.js 18+
- Maven
- Docker & Docker Compose
git clone https://github.com/YOUR_USERNAME/stockflow.git
cd stockflowdocker compose up -dcd backend
./mvnw spring-boot:runBackend runs at http://localhost:8080
cd frontend
npm install
npm run devFrontend runs at http://localhost:5173
- Products
- Suppliers
- Product-supplier relationship
- Search
- Filtering
- Pagination
- Better validation feedback
- JWT login
- Route protection
- Role-based permissions
- Purchase orders
- Order line items
- Approval workflow
- Stock updates on receive
- Dashboard analytics
- Audit logs
- Dockerized deployment
- GitHub Actions pipeline
- README/screenshots/demo polish
This project is being built as a portfolio-quality system to demonstrate the difference between knowing a framework and being able to design a real application with it.
It is intentionally structured to show:
- full-stack consistency
- scalable feature organization
- reusable CRUD patterns
- enterprise-leaning backend design
- thoughtful frontend state management
Built by YetAnotherFactsEnjoyer
A good commit for this would be:
docs(readme): update project status and add supplier module details