Vemente
A procurement requisition tool: a three-step request wizard, a five-stage approval pipeline and a chat thread on every line item.
Internal Tool · Procurement Operations
At a glance
- Category
- Internal Tool · Procurement Operations
- Product
- B2B Procurement SaaS · Internal tool · multi-tenant
- Platform
- Web · responsive
- Our role
- 2-role architecture (Operator/Admin) · 3-step requisition wizard · Admin approval + 5-state routing · In-thread chat + audit log
- Stack
- Postgres · Pusher (Chat) · AWS S3 · SendGrid
- Outcome
- Vemente shipped as a B2B procurement requisition manager where every request is one ID, one chat thread, and five clean states.
Procurement was buried in email, and the spreadsheet was older than the company.
Vemente's operations teams were ordering office supplies, software, hardware, and one-off services through long Outlook threads, every request a fresh chain, every status update a reply-all, every attachment a re-uploaded copy. Procurement was tracking the lot in a single spreadsheet that nobody outside the finance team could trust.
The brief was to replace that ritual without losing it. Operators still need to ask in plain language, attach things, and chase. Admins still need approval gates, urgency flags, audit trails, and a place to keep financial details that the requester should never see.
We split the product into two roles from day one, Operator and Admin, and built a proper five-state pipeline underneath every requisition: Submitted → Review → Sourced → Shipped → Completed. The thread moved out of email and into the line item itself.
Three steps, no more email threads.
The operator side opens to My Requisitions, a clean list with date, ID, urgency, company, total order value, and the current pipeline state. From there, Create New Requisition opens a 3-step wizard rather than a wall of fields.
Step 1, General Information: requisition name, phone, shipping address (standard or new), currency, urgency, and an optional Advanced block for delivery mode and special terms. Step 2, Product Information: a repeatable line-item block with description, name, quantity, and remarks. Step 3, Attachments: drop PDFs, images, or ZIPs and submit.
Every wizard state is autosaved, the back button is non-destructive, and the operator never sees a price field, financial routing is admin-only.
Every requisition, every state, one screen.
Admins land on the Requisitions queue, every active request across the company in a single table, filtered by date, order name, and pipeline state. The status pill on each row is the routing handle: Review → Offer Accepted → Ordered → Shipped → Received → Paid → Feedback (the operator-visible Completed state).
Moving a requisition through states is a one-click action. Each transition fans out a SendGrid email and a Pusher push, and writes to the audit log under the requisition. Admins see urgency flags, sender company, total order value in their currency, and an unread-message dot on every line that has new chat traffic.
Two-role privacy rules keep the financial column locked to admins, operators never see margin, supplier price, or PO numbers. They see the state, the conversation, and the ETA.
The conversation lives where the requisition lives.
Open any requisition from either side and the screen splits: the requisition above (status track, general info, products, attachments), the chat below. Operators chat with their admin counterpart, admins chat with the operator, same pane, same scroll, attachments inline.
Pusher carries the realtime layer; SendGrid mirrors every message as an email digest for users who still live in their inbox. The attachment shelf shows every PDF, image, and ZIP ever added to the requisition with a preview, size, and remove control, operators see only their uploads, admins see everything.
Notifications stream into a dedicated tab, account approval, status transitions, new attachments, new messages, admin replies. Read-state syncs across devices so nothing pops twice.
One desk for procurement, one ledger underneath.
The admin dashboard rolls every active requisition into a single operating view, User Approvals at the top (invite-only admins, role-scoped operators), the Requisitions queue with state filters, and a spend ledger that only the admin role can read.
Profile Settings are split by role. Operators get name, email, phone, password change. Admins get the same plus the ability to invite new admins via Send Invite (email-only, no public sign-up surface for the privileged role). The whole portal sits behind row-level privacy rules so the role is the gate, not the URL.
Vemente shipped as a multi-tenant web app on Postgres, with Pusher for chat realtime, AWS S3 for attachments, and SendGrid for transactional mail. Every requisition is one ID, one thread, five states, and zero email replies-all.
From email-and-spreadsheet to a workflow with an ID.
Vemente shipped as a B2B procurement requisition manager where every request is one ID, one chat thread, and five clean states. Operators submit through a 3-step wizard, admins route through approval and procurement, and the spend ledger lives behind a privacy rule rather than a permission email.