Tenjam Product Configurator

3D Configurator - 2026

After Laylo and Shayz, Tenjam commissioned the largest build of the series: a single configurator carrying 18 of their products. The work is in progress while Tenjam prepares the new furniture models.

The structure loads products on demand, keeping the page responsive on mobile despite the size of the catalog.

Blender workspace with the Baja series models and material node graph.

Role: Experience Design, 3D Product Interface, Front-End Development

Stack: Vite, TypeScript, Three.js, WebGPU, WebGL Fallback, Blender Scripting, Product Catalog Logic

Visit Project Preview

One configurator, 18 products.

Every product is described as data: model paths, thumbnails, finish information, depth rules. The scene reads the catalog instead of hardcoding it, so a new product is an entry, not an interface change.

Models load when a product is opened, never all at once. At this catalog size, that decision is what keeps the initial load small and the page usable on a phone.

Moon Chair in the configurator, comparing black and white cupholder options.

Each product carries its own logic.

Weights, riser options, cupholder variants, and depth guidance differ per product, and the configurator presents them as side-by-side comparisons instead of spec tables. The depth slider stays global, so switching products keeps the context the customer already set.

Mibster Chair comparison, standard setup against a two-weight setup.

Converting STL and IGS source files.

The source files for this catalog did not arrive only as STL. Several products came as IGS, a format Blender does not import, so those went through an online IGS to glTF conversion first, and the converted geometry came back with its own problem: broken face orientation.

I recalculated the orientation manually until the surfaces behaved, because every texture and material decision downstream depends on the faces pointing the right way. It is invisible work, and skipping it shows up immediately once a texture is applied.

Baja chair before the fix, with the texture flowing incorrectly across the surface.

Scripting the Baja texture mapping.

The Baja Club series resisted standard texturing. The models offer no easy structure to map onto, and the usual approaches drifted away from the product reference images.

A custom shader was the first attempt, and it never reached a satisfying result. The solution was a Blender script that applies the texture mapping correctly across the entire Baja series at once, using the reference imagery as its guide.

Blender scripting workspace with the Python UV script that fixes the Baja series mapping.

One material shared across the series.

The material itself stays simple: a single Baja swatch texture driven through a UV flow node into the shader, shared by every product in the series. The script guarantees each model presents its UVs the way that material expects.

Blender shading workspace with the Baja swatch material node graph and the series models.

The corrected texture flow.

With orientation recalculated and the scripted UVs in place, the woven stripe pattern flows along the furniture the way it does on the physical product. The before and after of this fix is the clearest single image of what the asset work on this project actually was.

Baja chair after the fix, with the stripe texture flowing correctly along the form.

The Baja series in the configurator.

The corrected models render in the browser with their finish options, seat heights, and depth feedback, alongside the rest of the catalog.

Baja Studio Chair rendered live in the configurator with finish options.

In progress, more models on the way.

Scene behavior, model management, water rendering, UI, and preload logic are split into separate modules, keeping the build manageable as products are added.

Three projects in, the series has grown into a steady working relationship with Tenjam. When the new models arrive, the remaining products enter the catalog.

Twisted Hex stool in the configurator with the yellow finish selected.

View all projects by Alex Dubranov