Rebuilding Netsuite’s gifting flow in 6 weeks

Engineering the integrations and workflows behind Oracle NetSuite’s gifting system.

November 13, 2025

Overview

A story for CTOs, tech leads, and the curious engineers who asked, “how did you ship that without fires?”

Oracle NetSuite’s sales reps were losing a chunk of every workday to a painfully slow gifting flow. Our brief was blunt: tighten the entire process until it feels instant, keep costs down, and don’t break security rules. We had six weeks.

Day one: choose the stack

We grabbed an open source UI library, bolted it onto React for the front end, Express for the back, and let Shopify carry the product catalogue. The open-source route spared us license drama and kept the codebase familiar to any future engineer Oracle or Social Imprints might hire. Additionally, open‑source libraries evolve faster than enterprise stacks, which meant we could ship stable code without waiting for a quarterly patch cycle.

Project tech stack we chose

insert-tech

But open source gave us a surprise. The UI kit offered gorgeous Tailwind markup yet zero ready‑made React components. We kept the markup, rewired the states, and moved on. The trade‑off bought speed without locking anyone into a vendor‑specific framework.

Two problems big enough to derail the schedule

GraphQL meets REST. Shopify splits its data across two APIs. GraphQL covers the shiny new stuff, REST stubbornly clings to legacy endpoints. Neither side could give us every call we needed. We built a lightweight adapter that calls GraphQL when possible, REST when necessary. The switch sits behind a single flag, so future deprecations won’t hurt.

High‑speed dashboards. Reps wanted live numbers on allocations and shipment status. Poor indexing or chatty queries would choke the page. We cached heavy reads, pushed deltas through webhooks, and kept average load times under 200 ms even on end‑of‑quarter spikes.

Self‑healing webhooks: the quiet hero

Shopify loves to drop webhooks without warning. No email, no log, just a missing order update at 3 a.m. We added a heartbeat that pings every ten minutes. If a webhook is missing, the service re‑registers it and back‑fills any lost events. No pager duty, no angry client emails. That single script has run for a year without human help.

Voices from the field

“We want to go back to base principles, and we want to fix the issue, not just temporarily solve the problem.” — Our dev team.

Address checker that pays for itself

Invalid addresses used to cost Social Imprints about a $1000 a week in return fees. We integrated a USPS validator that blocks PO boxes for perishable items and auto‑suggests corrections. Returns fell to near zero, saving roughly six grand a year—more than the validator’s licence by a long shot.

Authentication that doesn’t annoy people

Oracle never opened SSO to us, so we imported every authorized user into Shopify, hid the Shopify UI, and let reps reset passwords or use one‑time codes. When Oracle flips the SSO switch, we swap a middleware and the world keeps turning.

CI/CD that just works

GitHub Actions deploy front‑end and back‑end independently on every push to main. No Jenkins, no manual steps. Staging gets an automatic URL; production deploys need a human click. The flow kept releases boring and let the team cut server size down a notch, saving Social Imprints about $500 a month.

One year later: is it still healthy?

insert-stats

What we would build next?

Cleaner filters, smarter defaults, AI‑driven product suggestions, and deeper CRM hooks once Oracle opens SSO. All of it fits the existing stack, no rebuilds required.

Takeaways for teams with a four‑week deadline

Use the stable versions of open‑source tools your client’s engineers already know.

Loop in security and compliance during week one, not week four.

Document deprecation calendars (Shopify’s six‑month rhythm saved us panic).

Add self‑recovery to every third‑party integration—you will sleep better.

client:
Oracle NetSuite (internal sales org)
timeline:
6 weeks, start‑to‑finish
team:
1 designer, 3 devs, 1 pm
results:
100k+ gifts sent in 4mo
let’s build together

FAQ

How did the mixed GraphQL and REST layer work without chaos?
A tiny adapter checks which endpoint covers the required field. When Shopify retires the REST call, we flip a flag.
Why React and Express instead of a heavier framework?
Both are battle‑tested, easy to staff, and fit nicely with Tailwind UI markup. We avoided opinionated magic that would confuse future maintainers.
Did open‑source speed sacrifice security?
No. Popular libraries get more eyes, more patches. We locked to the latest LTS versions and passed Oracle’s security scan on the first run.
Any major outages after launch?
None. Webhook self‑healing and automated deploys caught small issues before users felt them.
How much ongoing maintenance does Shopify really need?
Expect touch‑ups twice a year when APIs deprecate. Plan for a one‑week sprint each time and budget accordingly.
What single change saved the most money?
Down‑sizing the AWS box after real traffic data. About six thousand dollars a year straight back to Social Imprints.
0 critical incidents
despite Shopify API churn
120,000 order volume
without chaos
1 Shopify API upgrade
completed in a one-week sprint
5 support requests
within 365 days

/* React (front-end) wired to an open source

Tailwind-based UI kit

Node.js + Express (back-end service layer)

Shopify Storefront API

GraphQL for new endpoints

REST for legacy calls, both wrapped in one custom adapter

Oracle SSO user import with optional password-less code login

USPS address-validation API

Self-healing webhook heartbeat (Node cron job)

GitHub Actions CI/CD pipeline — auto-deploy to staging, single-click to prod

AWS host trimmed post-launch to cut monthly spend */

Interested in working together? Schedule a call.

More insights

Beauty-tech
Business

From stalled prototype to trusted partner

Beauty-tech
Design

Turning a half‑built app into a brand‑ready experience

Beauty-tech
Tech

Engineering stability for BrowMagic