TruScapes
B2B e-commerce where every buyer sees their own price
A role-based B2B store for an outdoor lighting supplier, with pricing tiers applied per buyer account.

The challenge
B2B selling rarely has one price list. A national contractor, a regional distributor and a sole trader each buy on different terms. Standard e-commerce platforms assume one public price per product, so trade pricing tends to live in spreadsheets, phone calls and people’s memory.
TruScapes sells outdoor and landscape lighting to trade buyers and needed its online store to reflect how it actually sells.
The requirement
- A storefront where an approved buyer logs in and sees the prices agreed for their account.
- Separate roles with separate permissions, so staff, sellers and buyers each see only what they should.
- Catalogue, order and account management in one admin area.
- Card payments and invoicing that fit B2B purchasing.
The solution
We built a custom B2B commerce platform rather than bending a consumer storefront to fit. Buyers are assigned a pricing tier on their account, and the tier is applied when they browse, so the catalogue they see is already priced for them. Nobody has to request a quote for a standard order.
Roles are a core part of the system. Each role has its own interface and its own set of permitted actions, enforced by the API and not only hidden in the interface.
Administrators manage products, buyer accounts, tier assignments and orders from a single dashboard.
Architecture
A React frontend talks to a NestJS API backed by PostgreSQL. Pricing is resolved on the server for each request, based on the buyer’s tier, so a price can never leak to an account that should not see it. Role checks sit in the API layer for the same reason. Payments and invoices run through Stripe.
Technology
React, NestJS, PostgreSQL and Stripe.
Outcome
TruScapes has a trade store that matches its pricing model: buyers self-serve at their agreed prices, and the rules that used to be applied by hand are applied by the platform.

