Skip to content
serpico.

Food manufacturing, wholesale

Hurtom: A B2B CRM and Wholesale Customer Portal

Hurtom brings wholesale orders, order picking with actual weights, documents and account balances together in one CRM with a separate customer portal. Thanks to a ready foundation from a previous project, the first working version with all modules was ready in about 3 hours.

Client
Lviv meat processing producer
Region
Lviv, 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
Hurtom: A B2B CRM and Wholesale Customer Portal

Challenge

The producer's wholesale customers sent orders through different channels: the website and messaging apps. Each order then went through a long chain: review, picking, reconciliation, documents and payment tracking.

The hardest part of this process is weight. Meat products are picked with an actual weight that differs from the ordered weight, so the invoice amount changes after the order has been picked. This has to be reflected in the documents and in the account balance with the customer.

Customer structure was a separate challenge. A single wholesale buyer can have several delivery locations, several logins for its staff and several legal entities that invoices are issued to. The usual "one customer, one account" model does not work here.

Customers also needed their own portal to browse the catalog, place orders, and see their invoice, finances and current balance due 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 Hurtom on top of the marketplace CRM we had previously developed for the same producer. 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 work session, in about 3 hours.

CRM for the team (19 screens)

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

Wholesale customer portal (9 screens)

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

Security

  • the login token is tied to the password version: after a password reset, all sessions end immediately;
  • password brute-force limits by login and by IP address;
  • data is stored in a private schema that is not accessible through the public API, with access only through server-side functions;
  • a daily backup at 1:30 AM, with the 30 most recent snapshots retained.

Results

In October 2026, the producer got 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 across messaging apps, and the invoice, actual weight, documents and balance due are visible on a single card.

What this means for the business:

  • customers see their own orders, invoices and outstanding balance;
  • managers work with the customer's entire structure: locations, 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 sync with 1C (BAF), so that documents and account balances are not duplicated in the accounting system.

What makes this project special

The key feature is speed without compromising quality. The first version was ready 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 every next product built on the shared foundation costs less time.

The second feature is a customer portal without its own database. All data goes through the CRM API, so there is no risk of the portal and the manager seeing different numbers. And the private data schema plus 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?

Hurtom is built on the CRM we had already developed for this producer: the same stack, roles, notifications and stage logic. So instead of writing these parts again, we adapted them to the wholesale process. Without that foundation, the timeline would have been longer.

What drives the cost of a B2B CRM with a customer portal?

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

How does the system handle the actual weight of products?

Picking is done with actual weights, and the order invoice is generated based on the picked goods. The customer sees the up-to-date invoice and their balance due 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 accessible through the public API, and access goes only through server-side functions. There are password brute-force limits by login and IP, and a password reset immediately ends all active sessions.

Can the system be integrated with 1C or BAF?

Sync 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 the terms for code, access and data in the contract before work starts. Daily backups at 1:30 AM are retained for the last 30 days, so data can be restored if needed.

More case studies

Lviv Meat Processing Producer: SEO, Google Ads and a Rozetka Marketplace Launch
SEO ServicesLocal SEOGoogle Ads

Lviv Meat Processing Producer: SEO, Google Ads and a Rozetka Marketplace Launch

Our longest-standing client: a Lviv meat producer with a chain of branded stores. Since February 2024 we have handled SEO, Google profiles for the stores, Google Ads and Shopping, plus the move to marketplaces: a 426-product feed for Rozetka and a fix for a critical stock error.

average Google position, June 2025 vs June 2026
12.6 → 5.5
clicks in June 2026 vs June 2025
+28%
Read case study →
A CRM for a Meat Producer's Marketplaces, Orders and Pricing
Web Development

A CRM for a Meat Producer's Marketplaces, Orders and Pricing

For a Lviv meat processing producer, we built a single dashboard that brings together feeds, orders, stock, shipping labels and prices from the client's own WooCommerce store and the MauDau and Rozetka marketplaces. The system now has 18 screens, 74 API routes, 6 roles and 5 scheduled automated jobs.

screens in the dashboard
18
API routes
74
Read case study →
Adding New Products to 1C (BAS): A Workflow Across 5 Departments
Web Development

Adding New Products to 1C (BAS): A Workflow Across 5 Departments

Instead of an Excel template, we built a tool where 5 departments fill in a new product card in parallel, the CFO approves it, and accounting exports the BAS technical sheet with one click. Development took 6 days.

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.

Free consultation

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