A central production and sales management system for a premium brand
One pricing engine, two sales channels, one coherent platform — built for years of growth.
- Industry
- A premium beauty & lifestyle brand — a manufacturer of luxury goods selling through its own salons, e-commerce and a B2B wholesale channel across the Polish and European markets.
- The challenge in one sentence
- Uniting two organizations (retail + wholesale) around a single source of truth for product and price, with full isolation of financial data and an architecture ready for further modules.
- Phase I scope
- 9 functional modules + a dedicated B2B Partner Portal
- Timeline
- 8 months of active work + an analysis phase and hypercare
- Team
- A stable, 7-person team (no rotation during the project)
- Hosting model
- Self-hosted on the client’s infrastructure
- Integrations
- IdoSell e-commerce platform (3 stores) + NBP (currency and commodity rates)
- Nature of cooperation
- The first stage of a long-term development relationship
The challenge
The client — a premium beauty & lifestyle brand — was growing on two tracks. On one side, mature retail sales through a network of salons and a well-established online store. On the other, after acquiring a wholesale manufacturer, it entered the B2B market and began expanding into European markets.
These two parts of the business ran on separate tools and separate databases. There was no single, shared source of truth about the product, its attributes and — above all — its price. The hardest part was the pricing logic itself: product prices depend on many parallel calculation paths (type of raw material, channel, client type) and on changing commodity and currency rates. Every rate change meant recalculating thousands of items.
The client also set a strategic condition: the system had to be modular and open. After the first stage, further applications were planned — B2B settlements, invoices, parametric product configurators — all plugged into a shared data and authentication layer. The architecture could not close the door to that growth or lock the client into a single vendor.
Four pillars the system had to stand on
Pricing logic that is repeatable, auditable and fast — the same result every time, with a full breakdown into components and mass recalculation in minutes, not hours.
Security and data isolation — a wholesale partner cannot see costs, margins or other partners’ data through any channel, including the browser developer tools.
Performance — card and list reads under half a second, order placement measured in seconds, full catalog export in a minute.
Stability — high availability during business hours, daily backups, a documented disaster-recovery procedure, and staging and production environments.
Project goals
Together with the client we agreed that the first stage should deliver a complete operational foundation — a system ready for the daily work of both parts of the company, and at the same time a base that won’t require rebuilding as further extensions are added.
- A single source of truth about the product — data, attributes, photos, descriptions and base prices managed in one place and distributed to all channels.
- A central Dynamic Pricing Module — with three calculation paths, parameter versioning and a full audit of every computed price.
- A self-service B2B channel — a B2B Partner Portal with its own role hierarchy, an order-approval process and strict data isolation.
- Painless e-commerce integration — two-way exchange with the store platform without interfering with the working, well-ranked stores.
- Architecture for the future — a shared authentication and data layer, documented interfaces, full handover of code and rights.
The solution
We designed and built a central system in a layered, modular architecture. The backend is TypeScript end-to-end (Node.js / NestJS) with a PostgreSQL database; the frontend is React. The whole thing is prepared to run on the client’s infrastructure, with monitoring, background job queues and two separate environments.
The Dynamic Pricing Module — the heart of the system
We treated the Dynamic Pricing Module as a critical element, under the highest quality regime. Every price is computed server-side along a strictly defined sequence of components (raw material, components, labor, framing, finishes, channel margins) and stored together with a full breakdown, the calculation date and the version of parameters used.
As a result, calculations are fully repeatable and auditable — an administrator can see at any moment what a given price is made of and compare it with a previous calculation. Changing any parameter (e.g. a commodity rate pulled automatically from NBP) automatically flags all dependent prices for recalculation, and the mass recalculation runs in the background without blocking the team’s work.
The B2B Partner Portal — a self-service sales channel with data isolation
The B2B Partner Portal is the system’s second most important tool — all B2B sales flow through it. Each partner has its own company structure with a role hierarchy (owner, manager, employee), support for multiple delivery branches and a configurable order-approval process.
The key was data isolation enforced at the backend level, not in the interface. When handling a wholesale partner’s request, the system simply does not send cost fields, margins or other partners’ data — so there is no way to inspect them, even in the browser developer tools. An additional layer of protection is filtering at the database level itself.
A partner sees only its own catalog, its own net prices, its own orders and its own company data. Orders flow through a transparent process: placement, approval on the company side, automatic handover to the sales channel and live production statuses visible to the buyer.
Integrations — without rebuilding what works
The retail store, running for years, had an established position in search engines and a stable URL structure. The assumption was simple: don’t touch it. The system acts as the source of truth about the product and exchanges data with the e-commerce platform both ways — it exports the catalog with the right markup per store and receives orders for production, preserving the consistency of identifiers and URLs so as not to harm rankings or existing links.
Fluctuation buffers: each rate has its own change threshold. If a new value exceeds it, the system pauses automatic application and waits for manual approval — a safeguard against an erroneous or extreme reading from an external source.
- Catalog export to each store separately, with markup configured per channel (the wholesale channel with zero markup, retail stores with their own markups).
- Two-way synchronization of orders and statuses between the system and the store platform.
- Automatic rate fetching of currencies and commodity prices from NBP at a fixed time, with a buffer-and-approval mechanism.
- Data migration from existing databases — catalog, photos and categories — preserving the links to the source store.
Modular architecture and security
From day one the architecture is prepared for gradually plugging in the client’s further applications: a shared authentication layer, shared master data exposed via API, a documented contract for every module and a shared interface-component library. Every change of parameters, price lists and permissions goes into an immutable event log. Web-application security standards (including protection against injection, secure password storage, rate limiting on critical endpoints, rotatable session tokens) are built in, and integration keys never reach the client layer.
How we worked
We preceded the project with a short pre-implementation analysis phase: writing a detailed specification of the Dynamic Pricing Module, auditing the source data and verifying the integration scope on a test account. This gave both sides certainty about the scope before the main work began.
We ran delivery in sprints ending with formal acceptances, with a weekly demo for the client throughout the project. A stable, 7-person team worked in one lineup from start to finish — with no rotation of people along the way. After the production rollout we covered the system with a two-week period of intensive support (hypercare) and trained the client’s team.
- Test coverage of the Dynamic Pricing Module ≥ 90% — the highest regression regime for critical logic.
- Integration tests of whole end-to-end flows: order placement, catalog export, approval, channel synchronization.
- Code review of every change landing on the production branch, plus a CI/CD pipeline with reversible deployment.
- Full documentation of the architecture, data model and API interfaces, plus deployment, disaster-recovery and usage instructions.
Results
Phase I delivered a complete operational foundation for both parts of the business — a working system with a single source of truth about product and price, ready for further growth.
9 + 1 functional modules plus a dedicated B2B Partner Portal
≥ 90% test coverage of the Dynamic Pricing Module
< 0.5 s target read time for cards and lists (p95)
- Pricing logic
- One auditable pricing module with 3 calculation paths; mass recalculation in the background after rate changes.
- B2B sales
- A self-service B2B Partner Portal with backend-level data isolation and an order-approval process.
- Data consistency
- A single source of truth about the product feeding all sales channels.
- Business continuity
- Working stores left untouched — URLs, rankings and structure preserved.
- Security
- An immutable event log, per-role access control, protection of integration keys.
- Openness
- Full handover of code and rights, documented API — no vendor lock-in.
Client testimonial
„What mattered most to us was that the price is always computable and explainable, and the wholesalers’ data tightly separated. We got both — plus a foundation on which we are calmly building further modules.”
What's next
The first stage was, by design, the beginning of a long-term relationship. The architecture, prepared for growth, allows adding further elements without rebuilding the foundation:
- Parametric product configurators for the administrator and the B2B channel.
- Plugging the client’s existing applications (B2B settlements, invoices) into the shared data and authentication layer.
- Operational extensions: further integrations of payments, logistics and accounting systems.
- AI support for generating product descriptions and translations into target-market languages.
About EWOSOFT
EWOSOFT Systemy Informatyczne has operated since 2000. We specialize in high-performance B2B and B2C sales platforms, ERP/CRM-class systems and integrations between ERP, e-commerce and logistics systems. We co-created some of the first Polish ERP systems — that experience shapes how we design business logic and systems maintained for years. We work in stable teams, hand over the full code and rights, and build systems, not one-off projects.
Facing a similar challenge?
Let's talk about a dynamic-pricing module, ERP ↔ e-commerce integrations, or a system that grows with your company.