A regional logistics group, via its digital agency
Bringing regional purchase approvals into one portal
A purchasing portal for a logistics group across Singapore and Malaysia: one place to request, approve and track every purchase, connected to the finance system.
- Delivered by
- fullstack.sg, for the group’s digital agency. Names withheld.
- Year
- 2026
- Sector
- Logistics and distribution
- Engagement
- Development support for a digital agency
- Stack
- Next.js, TypeScript, Node.js, PostgreSQL
- InterfaceRequest, approval and review screens
- LogicApproval rules and permissions
- DataRequest history, plus 2,400 records migrated
- IntegrationsQueued hand-off to the finance system
- DeploymentPilot in one unit, then four
Purchase approvals lived in email
A purchase went through four people before it was paid, mostly over forwarded email.
Branch staff
email a purchase request
A manager
replies “approved” in the thread
Procurement
checks the supplier and documents
Finance
receives it and pays
Revisions were the weak spot
If a request went up after it was approved, it could need someone more senior to sign it off. The first approval was still in the email chain, though, so staff had to scroll back through the thread to check which amount had actually been approved.
The group’s digital agency had already designed a portal to replace all of this, and brought us in to build it.
Who did what
We built
- The screens people use
- The system behind them, including the approval rules
- The link to the finance system
- Moving 2,400 old purchase records across
The agency kept
- Design
- Content
- The relationship with the client
Not included: Replacing the finance system. The portal had to work alongside it.
How we built it
Rules first
Before building anything, we turned the company’s approval policy into clear rules the system could follow.
- Three approval levels, set differently for each business unit
- Nobody can approve their own request
- If the amount changes, the request goes back for approval, and the earlier decision stays in the history
Planning for the awkward cases
Purchasing is rarely straightforward, so the portal handles the exceptions as well as the normal path.
- Managers can send a request back with a reason
- Procurement can flag a supplier that’s no longer active
- Admins can hand pending approvals to someone else when an approver is away
- Every action records who did it, when and why, and people only see what their role and region allow
A safe hand-off to finance
Approved requests wait in a queue for the finance system, so nothing is lost if it’s busy or down.
- Each request carries its own reference, so a retry never creates a duplicate purchase
- Staff can see whether a request is waiting, accepted or needs attention
- Problems come with a plain explanation, such as an unknown supplier code
Tested on real situations
We delivered one complete workflow at a time. The agency reviewed each one, and staff tested it against real purchasing cases.
The result
Before
- Emailed requests
- Approvals in forwarded threads
- Spreadsheets to track status
- Guesswork about which version was approved
After
One record for every request
What was asked for, who approved it, and where it is now, in one place. Branch staff follow progress themselves, procurement sees what needs attention, and finance receives approved requests through a tracked hand-off.
- weeks
- 14weeksFrom discovery to user testing
- business units
- 4business unitsLive across Singapore and Malaysia
- people
- 212people180 requesters, 24 approvers and 8 procurement and finance staff
- requests a month
- ~450requests a monthApproximately, across all units
- old records moved
- 2,400old records movedHistorical purchases migrated into the portal
How it went live
Pilot
One Singapore business unit, for four weeks
Rollout
Four business units across Singapore and Malaysia
At handover, the agency received the code, the approval rules, the finance mappings and the instructions they need to run the next release.