CS Hub
LiveNode, TypeScript, Fastify, PostgreSQL, SuiteScript RESTlet, Shopify Admin GraphQL, OAuth and TBA
- ~90,000sales orders a year in the book it edits against
- 2 to 4 hoursof customer service time saved a day across the team
The constraint
Customer service edits orders in Shopify and those edits reach NetSuite through a managed integration app. The warehouse runs consolidated multi-order wave picking, and once an order sits on a released wave NetSuite refuses to change committed lines. The sync cannot carry the edit through, it fails, and the two systems drift apart. The integration logic sits inside a managed app, so it cannot be changed, and the wave itself cannot be unpicked by script or through the interface.
What I built
An internal web application that takes the managed integration out of the path for these edits and holds its own direct connections to both systems. An edit or an order care verdict used to take an agent five to ten minutes across two systems depending on complexity; the team now saves two to four hours a day between them. Agents get one screen to swap, add, remove, cancel, relocate and batch-edit lines, change addresses and shipping methods, add notes, and handle returns review, with both systems updated from a single action.
How it works
A NetSuite RESTlet does the work the interface will not allow: it stages and clears pick tasks in the right order, removes fulfillments, closes lines instead of deleting them, and puts everything back in a consistent state. Setting one pick task complete regenerates the wave and re-locks the others, so the whole sequence has to be staged before anything is marked done.
Shopify is edited separately through its order-edit API. The two sides run in a fixed order with one deliberate exception, because a user event script resets line locations on every save.
Every action is written to a Postgres operations log before either system is called, with a status for each system. That log is the reconciliation backstop when one side succeeds and the other does not, and it feeds the usage dashboard. Edits apply automatically, but money never moves until an agent presses the button.
Sign-in is through Google Workspace and restricted to the company domain, with per-user permissions on each action and a request queue for the operations only certain people should approve.