+ B2B PORTAL REBUILD

B2B distributor portal for the foodservice arm

Migrated a WordPress and Drupal hybrid to Next.js + Sanity with SAP middleware-backed distributor pricing. Bilingual TH/EN. Shipped Q2 2024, two weeks ahead of the annual distributor conference.

CLIENTNestle Professional Thailand
YEAR2024
STACKNext.js 14 · Tailwind · Sanity CMS · Auth0 · SAP middleware (signed REST) · Sentry · Vercel
TIMELINEFive months end to end. Discovery Feb 2024, UAT late April, launch late May 2024 ahead of the June distributor conference.

Author: . Published . Last updated .

Nestle Professional Thailand cover
+ problem

What the client asked for

Nestle Professional Thailand's distributor portal had calcified into a WordPress and Drupal hybrid that had accreted over roughly seven years of regional IT decisions. The foodservice team, responsible for supplying NESCAFE, MAGGI, NESTEA and MILO in bulk formats to hotels, hospitals, schools and catering operators across the kingdom, was managing three separate content surfaces: a public marketing site on WordPress, a Drupal-based distributor login with a 2016-era interface, and a standalone recipe database in yet another system. The distributor login had become a friction point. Distributors called the hotline rather than logging in, because the Drupal instance showed static pricing from quarterly uploads and SKU availability lagged reality by up to forty-eight hours. The Bangkok-based digital lead wanted a unified stack, bilingual TH/EN routing that respected Thai script rendering, and a path to self-service content management for the foodservice marketing team.

+ process

How it was built

We kicked off in February 2024 with a two-week discovery sprint in Nestle Professional Thailand's offices off Rama IX road, shadowing the foodservice team, interviewing six distributor account managers, and auditing the existing Drupal data model. The scope crystallized into four workstreams: a public Next.js marketing surface with Sanity CMS for brand catalogue and campaign pages; a distributor portal with Auth0-backed authentication consuming SAP middleware for live pricing and inventory; a CMS-driven recipe library and chef training section with role-based access; and bilingual routing with Thai as the default locale. We scoped deliberately tight: five months, three senior engineers plus a fractional product designer, with Nestle's internal SAP middleware team as a fixed interface. We did not touch SAP directly. Their middleware team exposed a signed REST endpoint that abstracted IDoc into predictable JSON, and we built a thin adapter layer in Next.js API routes to normalize responses and handle the distributor-specific pricing matrix. We shipped weekly to a Vercel preview environment shared with Nestle's QA lead. The full platform shipped in late May 2024.

  • Next.js 14
  • Tailwind
  • Sanity CMS
  • Auth0
  • SAP middleware (signed REST)
  • Sentry
  • Vercel
+ outcome

What shipped and what it changed

Distributor login time dropped meaningfully in the weeks post-launch, with the pilot group reporting a smoother reordering flow that surfaced their negotiated pricing without the previous drift between portal and invoice. The share of phone orders placed through the hotline, previously a high portion of total volume, fell as distributors began self-serving for routine reorders. The foodservice team published a meaningful body of recipes and training modules in the first month without a single dev ticket, a marked shift from the previous quarterly release cadence. Nestle Professional Thailand extended the engagement through Q3 2024 for phase two features. The relationship continues.

+ the technical win

The critical architectural decision was treating Nestle's SAP middleware as an opaque boundary rather than an integration target. Their internal team managed IDoc schema changes, SAP release cycles, and endpoint security. We consumed a single signed REST contract with versioned paths, building a distributor-aware pricing layer in Next.js API routes that cached responses at the edge and fell back to stale data with Sentry alerts rather than hard failures. This abstraction meant our build velocity stayed independent of SAP release windows, which operated on quarterly cycles. The pricing layer resolved distributor-specific matrices by reading claims from the Auth0 session, mapping to a distributor code in the middleware request, and merging live SAP pricing with CMS-managed promotional overrides when present. For SKUs with no live price, the layer surfaced a negotiated fallback rather than blocking the cart.

+ scope

What was delivered

  • WordPress + Drupal hybrid migration to Next.js + Sanity.
  • Auth0-backed distributor portal with role claims.
  • SAP middleware adapter (signed REST), edge-cached, distributor-aware pricing.
  • Bilingual TH/EN routing with Thai as the default locale.
  • Sanity-driven recipe library and chef training with role-based access.

Brief in the inbox, reply within 24 hours.

Yes or no, a scope, a price. No discovery deck, no agenda tag team.