ProcureFlow
Source-to-Pay platform

Every purchase, from request to payment, in one place.

ProcureFlow handles the whole procurement lifecycle: requisitions, rule-based approvals, RFQs, purchase orders, goods receipt, three-way invoice matching and payment. Each of the nine roles works from its own queue, with an audit trail at every step.

React 19Spring Boot 3.5Java 21PostgreSQLJWT + RBACLight & dark
Procurement manager dashboard with action queue

Eight steps, nine roles

Approval routing comes from database rules (department, category and amount), so the chain changes without code changes. Final approval generates the purchase order.

Step 1Requisition

Requester adds line items and sees the approval path before submitting.

Step 2Department approval

Approve, reject or return with remarks, all recorded in history.

Step 3Sourcing & PO

RFQ bidding rounds, quotation comparison and PO award.

Step 4Vendor delivery

Vendors confirm and dispatch from their own portal.

Step 5Goods receipt

Warehouse logs GRNs and verifies full or partial deliveries.

Step 6Invoice matching

Three-way match of PO, GRN and invoice, with variances flagged.

Step 7Payment

Finance authorises release and tracks budget against spend.

Step 8Closed

The PO closes and the full trail stays in the audit log.

Screens

A token-based design system with light and dark themes, a collapsible sidebar, a shared data table and layouts that work down to phone width.

Sign in
Sign in
New requisition
New requisition with approval routing preview
RFQs
RFQ bidding rounds in the shared table
Dark dashboard
Admin dashboard, dark theme
Vendor quotations
Vendor portal: quotations
Role switcher
Admin role-perspective switcher
Support tickets
Support desk tickets
Sign up
Account request, approved by an admin
Mobile dashboard Mobile navigation drawer

Tech stack

A REST API secured with JWT, consumed by a single-page React app.

LayerTechnology
FrontendReact 19, Vite, React Router 7, Axios, lucide-react, CSS design tokens
BackendJava 21, Spring Boot 3.5: Web, Data JPA, Security, Validation
AuthJWT (jjwt), BCrypt, role-based access control
DatabasePostgreSQL with SQL schema and seed scripts
API docsspringdoc OpenAPI / Swagger UI

Limitations

  • Sample data. The RFQ, quotation, vendor, warehouse, invoice-matching and ticket screens partly use built-in sample data while their endpoints are completed.
  • Polling. Notifications refresh every 30 seconds; there is no push channel.
  • Tests. There is no automated end-to-end test suite yet.