Case study · Artience Procurement System
Artience cut procurement approval from 7 days to 2
Requisitions, purchase orders, receiving reports and payment requests now run on a single approval engine that emails the next approver the moment it becomes their turn. Routing rules change without a developer. Printed forms change without a deployment.
Snapshot
| Client | Artience, manufacturing (printing inks) |
| Users | 20, growing as more of the company moves onto it |
| Stack | Laravel 12, React 19, Inertia, PostgreSQL, Docker |
| Timeline | Five months to production, one developer |
| Approval cycle time | 7 days, now 2 at most |
| First month | 26 documents processed |
| Policy changes needing a developer | Every one, before. Zero, now. |
The Challenge
Procurement ran on spreadsheets and email. Three things follow from that, and Artience had all three.
- Approvals waited on whoever was free. A requisition needed several people in sequence, and their schedules shifted. Nothing told an approver it was their turn, so a document moved when someone happened to open the right email. End to end, that averaged 7 days.
- A stalled request looked identical to a live one. One sitting unread was indistinguishable from one under review, so finding it meant chasing three departments.
- The approved document was not always the filed one. Forms were assembled by hand in Word, and a retyped figure stays invisible until someone reconciles the invoice.
If your approval chain lives in email, this is your situation whether or not it has cost you yet. It costs you at audit.
The Approach
One engine, four document types. The four forms are one lifecycle: raise a document, route it through a defined sequence of approvers, feed the next document. I built one engine that works on any document type instead of four that each know their own form. For Artience that means a policy change is made once and applies everywhere, rather than four edits with four chances to leave two departments on different rules.
The system chases people, not the requester. When a step becomes active, its approver is emailed immediately, and the outcome is emailed back when they act. This is the change that moved the number: the 7 days was mostly documents sitting still while nobody knew they were waiting.
Routing is configuration. A step names a person, a role, or the head of the requesting department, and requires all approvers or any one. So a policy change is an administrator's afternoon rather than a development ticket, and because department heads resolve at the moment of approval, a promotion does not silently route documents to someone with no authority over them.
Forms stay the client's. Artience's Word templates already existed and were already approved internally. The system fills one with the record data, stamps the signature, and merges the attachments into a single PDF. Rebuilding each form in HTML would have made every future change a developer's job forever.
The Build
Five months to production, built solo: the approval engine, the four document types, the Word templating and PDF assembly, and the administration screens that keep routing rules and form templates in the client's hands.
Results
| Before | After | |
|---|---|---|
| Approval cycle time | 7 days | 2 days at most |
| Approver knows it is their turn | When they open the right email | Emailed on assignment |
| Locating a stalled request | Ask three departments | Visible on the document |
| Approval record | Email threads | Actor and timestamp per step |
| Policy change turnaround | Developer ticket | Administrator edit, same day |
26 documents went through in the first month, across 20 users, and both numbers are still climbing as departments move over. This is an early rollout rather than a finished migration, and the cycle time is what it produced first.
Cycle times and volumes are Artience's own figures. What is verifiable in the system itself: four document types on one engine, every decision carrying an actor and a timestamp, and routes and templates held as administrator-editable records rather than code.
Next
If your approvals live in email and your forms live in Word, the fix is a defined path with a record on it. Get in touch.