Rethinking product data for complex b2b commerce


Digital transformation is rarely a one-off exercise. For CFS, an initial programme moved their extensive product data from offline printed catalogues into Sanity, laying the foundations for a more connected digital ecosystem. The next challenge was to build on that work by improving how customers understood and selected products across platforms.
CFS manufactures fixing systems for construction projects, where products follow highly complex and variable technical structures. Unlike standard ecommerce models, product data could not be limited to simple attributes such as size or colour. Each product type, from bolts to cast-in channels, required entirely different schemas, making traditional PIM solutions inflexible and difficult to scale.
This complexity made it hard for customers to compare products and for internal teams to manage and launch new variants efficiently. At the same time, B2B trade customers needed deeper technical detail to support procurement decisions, highlighting the need for a more adaptable and future-proof approach.
We built a composable, best-of-breed platform using NetSuite, Sanity, Next.js, Algolia, ShapeDiver and Vercel, designed specifically to handle the complexity of CFS’s product catalogue.
At the core of the solution is a fully custom product model in Sanity that allows CFS to define the schema of each product as it is created. This enables product data structures to flex based on real-world requirements, while maintaining consistency through shared standards such as NBS materials. Products with overlapping characteristics can still be meaningfully compared, even when their underlying schemas differ.
These dynamic schemas are bound to parametric 3D models via ShapeDiver, allowing product visuals to update automatically based on variant data such as dimensions or performance values. This removes the need for unique renders per variant and significantly reduces time to market. Algolia powers fast, accurate product discovery, while integration with NetSuite allows products to be enriched in Sanity and automatically generate up-to-date product datasheets. The frontend is delivered in Next.js and deployed on Vercel for performance and scalability.
CFS now has a scalable product platform purpose-built for complex B2B commerce. Customers can more easily discover, understand and compare products, while internal teams benefit from reduced overhead and faster product launches.
Dynamic 3D visualisation, flexible product schemas and automated datasheet generation have created a robust foundation for future growth, supporting more informed procurement journeys across digital channels.






A traditional PIM struggles with complex product catalogues because it relies on rigid, table-based schemas that are difficult to evolve over time.
A more effective approach is to treat product data as structured, decoupled content rather than rows in a database. This allows complex attributes, nested variants, and evolving product models to be handled flexibly without constant migrations or system rewrites.
Modern headless CMS platforms make this possible by acting as a “content lake,” where product information is modelled as flexible objects instead of fixed tables. Tools like Sanity are often used for this because they support dynamic schemas and multi-dimensional content modelling.
Shared standards such as NBS (National Building Specification) materials and structured relationships allow products with overlapping characteristics to be compared meaningfully, even when their underlying schemas differ. Customers can evaluate options based on performance and specification rather than simple attributes.
We connected product data to parametric 3D models using Grasshopper 3D and ShapeDiver. As dimensions and performance values change, the product visual updates automatically. This removes the need for thousands of static renders, reduces storage overhead, and significantly improves frontend performance while accelerating time to market.
Product data managed in Sanity is integrated with NetSuite and used to automatically generate up-to-date datasheets. The same data also drives the 3D models and the website, ensuring consistency across every output without manual duplication.
The flexible content structure allows technical data to be layered and presented contextually. Trade users can access the depth of detail they need, while the interface remains usable and searchable through Algolia-powered discovery.
Algolia search is powered by the structured product data, allowing users to find products by specification, performance or intent rather than browsing endless categories. Search becomes the primary navigation tool.
Future-proofing a growing product catalogue comes down to two key strategic decisions.
First: choose the right technology architecture.
Decouple your data from the presentation layer by using an API-first, headless approach. This ensures your product data is not locked into a single frontend or vendor and can evolve as your business does. Our preference is Sanity, as it allows you to leverage an open and flexible content platform and configure the frontend around your business needs, rather than forcing your business to adapt to rigid technology constraints.
Second, and arguably most importantly, design your products as data, not visuals.
Avoid modelling products purely based on how they look today. Instead, structure them around clear, reusable real-world data attributes (for example, Material = Carbon). These atomic attributes tend to remain stable over time, whereas fashionable or marketing-led terms change frequently. A product described today as “eco-friendly” or “low-carbon” may be labelled very differently in five years, but the underlying material, composition, or performance data remains constant.
Do not reinvent the wheel. Lean on established industry standards such as schema.org or, in construction, NBS Uniclass. Every industry has its own conventions. By following them, you make your catalogue more scalable, interoperable, and ready for whatever comes next.
