Work / Case study 02

NuORDER · 2023–2024 · In use

Order Intent × NuORDER Assortments

Every season, enterprise retail buyers finish building their assortment plan in NuORDER - then export it and email it to brands, who re-enter it by hand. Order Intent made that handoff disappear.

Domain
Wholesale / B2B
My role
Staff Product Designer
Timeline
2023 – 2024
Status
Shipped · In use
NuORDER Submit Order Intent modal shown in context
Project gallery

The full scope at a glance - the Order Intent flow and the design-system and accessibility work underneath. Browse it here, or read the full story below.

View full

01The problem

A seasonal plan, trapped behind a manual handoff.

Retail buyers at department stores like Macy's and Nordstrom build detailed seasonal assortment plans in NuORDER Assortments: products, stores, quantities, and visual merchandising, all mapped out.

Then the workflow fell off a cliff. They extracted the plan, exported it to a spreadsheet, and emailed it to each brand. Brands re-keyed every line into their own platform by hand. This process is slow, error-prone, and disconnected from the live catalog. Order Intent replaced that gap with a direct, structured connection.

02Context · Two products, one wholesale transaction

Connecting Assortments to the brand platform.

NuORDER ran two separate products serving opposite sides of wholesale buying. Both built independently, with no connection between them. Order Intent was the bridge.

Sell side

NuORDER B2B brand platform

Brands like Adidas, Nike, and New Balance manage their product catalogs and receive purchase orders from retail partners.

No connection: manual handoff via email
Buy side

NuORDER Assortments

Retailers like Macy's, Nordstrom, and Target plan store floors each season. They decide which products go to which locations, in what quantities, with what merchandising.

03Initiating Order Intent from NuORDER Assortments

Built into the workflow buyers already knew.

The whole interaction lives inside the assortment a buyer is already working in. "Submit order intent" sits in the assortment action menu (shown above) - no new tool, no export step, no new workflow to learn. From there, three decisions shape what the brand receives.

Entry point

"Submit order intent" lives in the assortment action menu. No new workflow to learn.

Scope control

The buyer chooses to send the entire assortment, or a filtered view only.

Entire assortment Filtered view only

Version tracking

Send as a new intent, or update a previously shared version from this assortment.

New Order Intent Update a previous version

Submitting an Order Intent lets the brand view the assortment inside their own portal, including only the key fields. Intents can be updated by the retailer but not retracted - and the brand keeps access to every version.

04The brand is notified

The brand is notified the moment intent is sent.

Brand reps are notified the moment a retailer sends an Order Intent - by email and inside the platform. Both channels carry the same key context: who sent it, which assortment, and a direct link to view it.

Email notification to the brand sales rep
Gmail showing the NuORDER Assortment Order Intent notification email with a View Assortment Order Intent button
In-app notification in the NuORDER B2B platform
NuORDER B2B platform with the notifications panel open showing new Assortment Order Intent alerts
05Brand-side detail & version history

One source of truth, every version preserved.

On the brand side, the rep opens the intent, previews the assortment, and assigns ship dates - working directly against the order, not a spreadsheet attachment.

Because retailers can revise and resend, brands can see the full history of updates and always know exactly which version they're looking at.

Version log side panel for Order intent #OI-1045 listing three versions, each with date, author, a summary of what changed, and an Export action, with Version 3 marked Current
Order Intent detail - brand-side preview
Order Intent detail page showing merchant, buyer, rep, ship dates, version log, and a line-item table of products with color, size, UPC, price, and quantity

The brand opens the intent to a full preview - merchant, buyer, rep, totals, and every line with color, size, UPC, price, and quantity - with a version tag and a direct path to assign ship dates and export.

Sync to ERP - push the latest version into the brand's order system
Order Intent detail page with the Sync order intent with ERP modal open, summarizing the intent, merchant, product and unit counts, and total before creating or updating the order in the brand's ERP system

From the same detail view, the brand syncs the intent straight into their ERP - creating or updating the order from the latest version, with every line carried across. The handoff that used to mean re-keying a spreadsheet becomes a single confirm step.

Outdated version - caught before a stale sync
Order Intent detail page for #OI-1045 with an amber banner reading ‘A newer version of this order intent is available - this intent was modified after you opened the page. Refresh to review the latest changes before syncing,’ and a Refresh to latest button

Because retailers can revise and resend at any time, the page a rep opened can go stale mid-review. When a newer version lands, a banner surfaces it in place - and steers them to Refresh to latest before they sync or export, so a confirmed order is never built from an outdated intent.

06 · The key decision
"This linkage is what separates Order Intent from a spreadsheet attachment."

The products in an Order Intent are referenced, not copied. When a brand rep clicks through, they're looking at their own catalog data - not a retailer's interpretation of it.

Retailer quantities map to the brand's own SKU structure - sizes and colors matched to brand variants. Clicking a product opens the actual catalog entry.

07Phase 2 · Closing the loop

Brand Assortment Proposals - the other direction.

Order Intent let retailers send purchase intent to brands. Brand Assortment Proposals completed the reverse: brands like Ralph Lauren can now send a seasonal proposal directly to their retail partners - Macy's and Bloomingdale's - giving buyers a ready-made starting point for their planning.

The result: a genuinely two-way collaboration channel between brands and retailers, built on the same infrastructure as Order Intent.

Retailer → Brand · Order Intent Brand → Retailer · Assortment Proposals
Brand side · Creating & sending a proposal

On the brand side, a proposal starts inside the order workflow the brand already lives in. From their orders, a brand user moves into Assortments, drafts a proposal from their own product data and seasonal strategy, and sends it to a chosen retail partner - who receives it as a shared planning asset, not a finished order.

1 · Orders - the brand's starting point
Ralph Lauren Orders page in NuORDER showing a table of orders with an Order intents tab marked '2 new', from which the brand moves into Assortments

The brand works from Orders - confirmed orders plus an Order intents tab carrying what retailers have sent. From here they move into Assortments to build a proposal of their own.

2 · Proposals - the brand's assortment home
NuORDER Assortments Proposals list showing saved seasonal proposals with name, ID, creator, and created date, and a New proposal button
3 · New assortment proposal
New assortment proposal modal over the Proposals list, with fields for assortment name, deliveries, and doors, and a Create button
4 · Building the proposal from brand product data
S24 Ralph Lauren Men proposal in the NuORDER Assortments grid: rows of styles with color, class, size range, delivery month, units, cost and retail, with live totals in the footer

The brand drafts the proposal in the same Assortments grid retailers use - styles, colorways, delivery months, and bulk quantities from its own catalog, with live cost, retail, and markup totals.

5 · Send the proposal to a retail partner
Send Assortment Proposal modal with scope options (entire assortment or filtered view), a retailer selector, retail contact field, and optional note, with a Send Proposal button
6 · Sent - handed to the retailer
The proposal grid with a confirmation toast reading 'Assortment Proposal was sent to Olga Stanis at Acme Fashion Retailer'
Retailer side · Receiving & accepting a proposal

On the retailer side, the proposal arrives as a shared planning asset, not a finished order. The buyer is notified by email and inside the platform, reviews a read-only preview, and - when ready - accepts it, mapping the brand's data into a native retailer assortment they can plan against.

1 · Email - a new proposal has been shared
Gmail showing an 'Assortment Proposal from Ralph Lauren' email: a new proposal has been shared, a note from the sales rep, and a View Assortment Proposal button
2 · In-app - the proposal lands in Drive
NuORDER Drive Proposals list with the notifications panel open showing 'Acme Fashion Retailer sent you an Assortment Proposal', and the S24 Ralph Lauren Men proposal marked New in the list
3 · Read-only preview - a safe review moment
S24 Ralph Lauren Men proposal shown to the retailer as a read-only preview, with a banner reading 'This is a read-only preview of the Assortment Proposal' and an Accept Assortment Proposal button

Because brand and retailer assortments can use different data structures, the proposal opens read-only first. The buyer reviews products, quantities, and delivery context before anything is mapped into their own planning infrastructure.

4 · Accept - bring it into retailer planning
Accept Assortment Proposal modal with options to create a new assortment from the proposal or add it to an existing one, a name field, destination, deliveries, doors, a pre-filled Brand field, and a 'Share assortment with the proposer' toggle

On accept, the buyer decides how it enters their workflow - a new assortment or merged into an existing one - renaming it, picking deliveries and doors, with the brand pre-filled. The proposal becomes a native retailer assortment, ready to plan and turn into an order.

08A more visual way to work the assortment

The same assortment, seen visually.

Buyers build assortments in a dense data grid - rows of products against columns of doors, quantities, and targets. But merchandising is a visual act, and a spreadsheet hides what a line actually looks like. So I added a Tile view: the same assortment rendered as large product cards - imagery, colorway, price, and SKU - switchable from the toolbar with a single Tile / Grid toggle.

The hard part wasn't the cards. It was that tile and grid are two windows onto one assortment - so everything a buyer does in one has to be true in the other, instantly.

NuORDER Assortments Grid view: a dense data table with one row per product showing Style #, description, color swatch, color ID, class, size range, department, delivery month, units, cost and retail, with two rows selected and live totals in the footer

Grid view - the dense, data-first default: every product is a row, with color, class, size range, delivery month, units, cost, and retail in sortable columns.

NuORDER Assortments Tile view: a grid of large product cards each showing a model photo, product name, SKU, colorway swatch and price, with a Tile/Grid toggle in the toolbar, two products selected, and live totals in the footer

Tile view - the same assortment as the grid above, made visual: a buyer can read it at a glance while the toolbar, selection, and footer totals stay identical.

One assortment, kept in sync both ways.

Tile and grid don't hold their own copies of the data - they share a single underlying model, so a change made in either view is the same change.

01

Drag to reorder, everywhere

Drag a tile to a new position and the product's order updates in the grid's rows too. Both views read and write the same sequence, so the order a buyer arranges visually is the order their team sees in the data.

02

Selection & actions carry over

Selecting products, Add to, Set targets, and Remove all operate on the same set - select two tiles, switch to grid, and exactly those two rows are still selected and actionable.

03

Totals never diverge

Products, units, cost, retail, and markup in the footer are computed once from the shared model. Switching views re-presents the plan - it never recalculates a different number.

09What this project reinforced about enterprise design
01

It's rarely just screens

The hardest problems lived in data models, legacy systems, and platform conflicts between two independently built products. My job was to understand that complexity deeply enough to design around it - not expose it to users.

02

Legacy changes through collaboration

Colors and components were embedded in code, not a library. I audited the CSS, translated it into clearer design decisions, and partnered with engineering to make changes safely.

03

Make progress shippable

Instead of handing over a big batch of improvements, I worked within engineering rituals - breaking changes into tickets and aligning them with sprint planning so they moved alongside product work.

10Appendix · Go deeper
The Submit Order Intent modal, in full

The complete dialog: an explanatory note, scope control (entire assortment / filtered view), brand-contact picker (up to 100 users), send options (new / updated version), and an optional note to the brand.

Submit Order Intent full modal open over the NuORDER Assortments grid, with the action menu showing the Submit order intent option

Two variations of the same dialog, driven by the Send options choice:

Submit Order Intent modal with Send as a new Order Intent selected
Send as new - the default path: a fresh Order Intent delivered to the brand contact.
Submit Order Intent modal with Send as an updated version selected and the Select existing Order Intent dropdown open
Send as updated version - reveals a picker to choose an existing intent from this assortment, so the brand receives a new version on the same thread.
Accessibility audit notes

The token migration was also an accessibility pass: I documented contrast ratios, flagged failing pairs, and defined accessible defaults for interactive states.

Shipping a feature is only half the work. When engineers implemented the designs, the UI wasn't matching what I'd specified - not from carelessness, but because they were referencing their own internal color library rather than the design tokens I'd defined.

The problem
First version after integration: the Submit order intent modal with a mint support link at 1.89:1 contrast (WCAG fail) and a mis-styled submit button, beside a contrast-checker panel showing WCAG AA and AAA failures
First version after the integration - the support link shipped in an inaccessible mint (#46D0C8, 1.89:1) and the submit button used the wrong style. I audited each pairing against WCAG and flagged every failure.
The root cause
Engineering's color stylesheets - raw SCSS and palette variables - mapped into semantic design tokens in Figma
Engineering stylesheets as the color reference - their raw palette variables were the de-facto source of truth. I translated those values into semantic tokens in Figma, so design and code finally referenced one system.
The result
New accessible alert system: error, warning, info, and success alerts, each with documented bg/border/text tokens and contrast ratios all passing WCAG AA or AAA
New alert system - accessible defaults for every status, each background / border / text pairing documented with its contrast ratio and passing WCAG AA or AAA.