Skip to content
serpico.

Food manufacturing, wholesale

A B2B CRM with a Wholesale Customer Portal: First Working Version in 3 Hours

The CRM brings together wholesale orders, picking by actual weight, documents and settlements, while a separate portal lets customers see their orders, invoices and balance on their own. We built it on a proven foundation from a previous project, so the first working version with all modules was ready in about 3 hours.

Project type
B2B CRM with customer portal
Market
Ukraine
Timeframe
October 2026
Tech stack
Next.js 16 · React 19 · Tailwind CSS v4 · Supabase · Vercel
screens in the CRM
19
screens in the customer portal
9
to the first working version
~3 hrs
daily backups retained
30
A B2B CRM with a Wholesale Customer Portal: First Working Version in 3 Hours

Challenge

The company's wholesale customers sent orders through different routes: via the website and via messengers. Each order then went through a long chain: checking, picking, reconciliation, documents and payment control.

The hardest part of this process is weight. Products sold by weight are picked at their actual weight, which differs from the ordered amount, so the invoice total changes after the order has been assembled. This has to be reflected in the documents and in settlements with the customer.

Customer structure was a separate challenge. One wholesale buyer can have several delivery points, several logins for their staff and several legal entities that receive invoices. The usual "one customer, one account" model does not work here.

Customers also needed their own portal: browse the catalogue, place an order, see the invoice, finances and current balance without calling a manager. Since the portal handles financial data, the requirements for login security and data storage were high.

What we did

We built the system on top of the marketplace CRM we had previously developed for the same company. The same stack (Next.js 16, React 19, Tailwind CSS v4, Supabase, Vercel), ready-made notifications, roles and stage logic meant we did not have to start from scratch. That is why we assembled the first working version with all modules, a mobile version and the customer portal in a single overnight session of about 3 hours.

CRM for the team (19 screens)

  • orders with invoices and processing stages;
  • customers with delivery points, multiple logins and multiple legal entities;
  • products, prices and promotions;
  • analytics, integrations, users;
  • administrator, manager and operator roles.

Wholesale customer portal (9 screens)

Catalogue, cart, orders, invoice, finances and balance, profile. The portal has no database of its own and works only through the CRM API, so the data is always the same in both places.

Security

  • the login token is tied to the password version: after a password reset, all sessions end immediately;
  • rate limits on password guessing by login and by IP address;
  • data lives in a private schema that is not exposed through the public API, with access only via server-side functions;
  • daily backup at 01:30, with the last 30 snapshots retained.

Results

In October 2026 the company received two connected systems: a 19-screen CRM for the team and a 9-screen portal for wholesale customers. Orders from the website no longer get lost between messengers, and the invoice, actual weight, documents and balance are visible on one card.

What this gives the business:

  • customers see their own orders, invoices and outstanding balance;
  • managers work with the customer's full structure: delivery points, logins, legal entities;
  • prices and promotions are configured in one place;
  • data is protected at the architecture level, not just by a password.

The next stage we are planning is synchronisation with 1C (BAF), so that documents and settlements are not duplicated in the accounting system.

What makes the project different

The key feature is speed without loss of quality. The first version appeared in about 3 hours not because we simplified the task, but because we reused proven parts of the previous CRM: roles, notifications, stages. For the business this means that every new product built on the shared foundation comes faster.

The second feature is a customer portal without its own database. All data passes through the CRM API, so there is no risk of the portal and the manager seeing different numbers. A private data schema and sessions tied to the password version close the typical weak spots of customer portals.

Published: · Updated:

Questions about this project

Why was it possible to build the first version in a few hours?

The system is built on the CRM we had already developed for this company: the same stack, roles, notifications and stage logic. So we did not write these parts again but adapted them to the wholesale process. Without that foundation the timeline would have been longer.

What does the cost of a B2B CRM with a customer portal depend on?

The price depends on the number of modules, the complexity of the customer structure and the required integrations, for example with 1C. With an existing foundation, as in this case, development goes faster. We give an estimate after reviewing your ordering process.

How does the system handle the actual weight of products?

Picking is recorded at actual weight, and the order invoice is calculated from the goods actually assembled. The customer sees the current invoice and their balance in the portal, and the manager sees them in the CRM.

How secure is the wholesale customer portal?

Data is stored in a private schema that is not exposed through the public API, and access goes only through server-side functions. There are rate limits on password guessing by login and IP, and a password reset immediately ends all active sessions.

Can the system be integrated with 1C or BAF?

Synchronisation with 1C (BAF) is planned as the next stage of this project. The architecture with a separate API for the portal and the CRM makes it possible to connect accounting systems without reworking the interface.

Who owns the code and data after launch?

We set out the terms for code, access and data in the contract before work starts. Daily backups at 01:30 are kept for the last 30 days, so data can be restored if needed.

More case studies

SEO, Google Ads and a Rozetka Launch for a Food Producer: Google Position 12.6 → 5.5 and a 426-Product Feed
SEO ServicesLocal SEOGoogle Ads

SEO, Google Ads and a Rozetka Launch for a Food Producer: Google Position 12.6 → 5.5 and a 426-Product Feed

We run SEO, Local SEO, Google Ads and Shopping and brought the product range to Rozetka: a 426-product feed, automated attributes and a pricing formula for products sold by weight. We found an error that showed 97 of 422 products as "in stock" with no stock. The average Google position improved from 12.6 to 5.5, and clicks in June 2026 grew by 28%.

average Google position, June 2025 vs June 2026
12.6 → 5.5
clicks in June 2026 vs June 2025
+28%
Read case study →
A Marketplace and Order CRM: Three Sales Channels in One Dashboard
Web Development

A Marketplace and Order CRM: Three Sales Channels in One Dashboard

One dashboard brings together feeds, orders, stock, waybills and prices from a WooCommerce store and the MauDau and Rozetka marketplaces. Data syncs automatically on a schedule, so the team no longer moves information between dashboards by hand and has a single point of control for all channels.

screens in the dashboard
18
API routes
74
Read case study →
Adding New Products to BAS: An Approval Service for 5 Departments Instead of an Excel Template
Web Development

Adding New Products to BAS: An Approval Service for 5 Departments Instead of an Excel Template

Instead of an Excel template passed from person to person, we built a service where 5 departments fill in a new product card in parallel, the CFO approves it, and accounting exports the 65-column BAS technical sheet with one click. Development took 6 days, and manual data transfer into the accounting system is no longer needed.

days of development
6
departments in the workflow
5
Read case study →

Want results like these?

Tell us about your goals and we'll estimate your project's growth potential.

Book a call →

Free consultation

Tell us about your project and we'll prepare a growth plan