Featured Project

3D Furniture Configurator & Production Platform

End-to-end platform for a custom furniture manufacturer: a 3D room planner that lets end customers design and price their furniture in the browser, connected directly to an ERP/production back-office that handles the catalog, dynamic pricing, cutting plans and order execution. From the first online configuration to the workshop floor, everything runs on the same data.

ClientCustom Furniture Manufacturer
Duration12+ months, ongoing
SurfacesD2C Web, Admin / ERP, API
High-level architecture
Customer Web
3D Configurator
Admin / ERP
Catalog & Production
GLB Models
S3 + CDN
Pricing & Domain Engine
~22 domain models
PostgreSQL
Redis
OpenTelemetry

What problem it solves

Custom furniture manufacturers operate at the intersection of e-commerce and industrial production. Each order is unique by definition — but the tools available were either off-the-shelf catalogs (no customization) or generic ERPs (no customer-facing experience). Sales, design, costing and production lived in separate worlds, glued together by spreadsheets and phone calls.

Manual quoting & pricing

Every custom configuration required a salesperson to compute material consumption, hardware lists and labor cost by hand from cabinet drawings. Quotes took days, and a single miscalculation eroded the margin on the whole order.

Disconnected production data

Cutting plans came from one tool, material stock lived in spreadsheets, orders arrived by email. There was no single source of truth for what was actually being produced today and what raw material it needed.

No D2C channel

Customers couldn't preview a custom configuration without booking an in-person consultation. Every online inquiry that didn't end with a meeting silently dropped — a major lost-revenue funnel for high-ticket custom furniture.

Three surfaces, one data model

A single domain engine powers all three surfaces. The price a customer sees in the 3D configurator is the same price the back-office uses to generate the offer, and the same materials list that ends up on the cutting floor. No re-entry, no spreadsheet bridge.

01 — Customer Web

3D Configurator & D2C Storefront

Next.js + React Three Fiber experience where customers draw their room in 3D, drop furniture from a curated catalog, customize materials, colors and dimensions, and receive an instant price quote. Saved configurations roll over into checkout, address management and payment — a full D2C funnel without an in-person consultation.

Interactive 3D room planner — draw walls, place doors and windows, snap furniture into position with measurement overlays

Real-time pricing — every material, dimension or hardware change recomputes the quote server-side against the same engine the ERP uses

Saved configurations — customers can resume their design across sessions, share it with sales, or convert it directly into an order

Integrated checkout — addresses, payment-return flow and order confirmation handled in the same app

Next.js 16React 19Three.jsR3FTailwind v4
configurator / Living Room
Room
Catalog
Materials
Quote
3D Room — 4.2 × 3.6 mLive preview
Wall cabinet — Oak Natural
2400 × 600 × 350 mm · 3 doors
Live quote
Panels — €482 Hardware — €74 Operations — recalculating
02 — Admin / ERP

Catalog, Pricing & Production Back-Office

Vite + React workspace for the manufacturer's team. Manage the cabinet (corp) library with embedded 3D GLB previews, define materials, hardware and suppliers, configure dynamic pricing rules, monitor cutting plans, expenses and the production calendar. Built around a granular permission-group system so each department only sees what it owns.

Cabinet builder with GLB previews — model viewer for every corp, panel and hardware item directly in the admin

Materials, hardware & suppliers — full catalog of panels, hardware (feronerie), additional products and supplier (furnizori) relations

Dynamic pricing rules — configurable rules engine for surcharges, discounts and operations (operatiuni) costs per cabinet

Cutting plans & remnants — visualize cutting layouts and track material remnants (resturi materiale) for reuse

Production calendar & orders — orders, deliveries and a production calendar in a single board

RBAC with permission groups — granular control per user/department, enforced both server-side and in the UI

React 19Vite 7Three.jsTailwind v4SWRZustand
admin / corpuri
CabinetTypeDimensionsPrice
Wall Cabinet 3DSuspendat2400 × 600 × 350€556
Base Sink 80Bază800 × 720 × 560€312
Corner PantryColțar900 × 2300 × 600€1,184
03 — Backend / API

Domain Engine & 3D Asset Pipeline

TypeScript + Node backend with around 22 domain models, a real-time pricing engine and a GLB/GLTF asset pipeline for 3D models. PostgreSQL for the source of truth, Redis for hot data, S3 for assets, OpenTelemetry for distributed tracing across every flow from configurator to order fulfillment.

~22 domain models — cabinets, panels, hardware, materials, suppliers, operations, pricing rules, orders, customers, addresses, saved configurations, expenses, remnants and more

GLB/GLTF asset pipeline — server-side optimization via @gltf-transform before models hit the CDN, keeping the configurator fast on mobile

Permission-aware controllers — every endpoint enforces RBAC, with permission groups composing fine-grained capabilities

Observability built-in — OpenTelemetry traces flow through Node, B3 propagation, OTLP HTTP exporter — production debuggability from day one

TypeScriptNode.jsPostgreSQLRedisS3OpenTelemetry
api.tutti / pricing engine
POST /catalog/configurations/quote200 OK · 38ms
Resolve cabinet → 3 panels, 7 hardware items Apply pricing rules (3 matched) Sum operations (cut, edge, drill) Cache result in Redis (TTL 5m)
trace · OpenTelemetry
http.server → catalog.controller pricing.service → 3 db queries redis.set quote:af3e — 1.2ms

The engine behind the configurator

A domain-driven TypeScript backend that treats every cabinet, panel, material and pricing rule as a first-class entity — designed so the same data answers a customer's "how much does this cost?" and a foreman's "what do we cut today?".

GLB/GLTF Asset Pipeline

Every cabinet has a 3D model. We process GLB/GLTF assets server-side with @gltf-transform — geometry deduplication, texture compression, draco encoding — before they hit S3 and the CDN. The configurator loads each model in under a second even on mid-range phones.

Lossless geometry optimization
CDN-fronted asset delivery

Permission-Aware RBAC

Every controller — catalog, orders, pricing rules, expenses — is guarded by a permission group system. Users belong to groups, groups compose fine-grained capabilities. Enforcement happens server-side; the admin UI hides what the user can't touch.

Composable permission groups
Per-endpoint authorization

Observability First

OpenTelemetry instrumentation across HTTP, database and Redis, with B3 propagation and OTLP HTTP export. Every customer quote and every back-office action is traceable end to end — production debugging without guesswork.

Distributed traces by default
B3 + OTLP exporters

Scalability & Deployment

Containerized and orchestrated in K3s, with PostgreSQL, Redis and S3-compatible object storage. Stateless API tier scales horizontally; cached pricing and 3D assets shield the database from the long tail of repeated configurator queries.

Architecture allows deployment in public cloud, on-premise or hybrid — the same Helm/k8s manifests run anywhere a Kubernetes control plane does.

K3s-native deployment
Stateless API tier, cache-first reads

What it changes in practice

3
Surfaces integrated on one data model
~22
Domain entities in a single schema
<50ms
Cached quote latency
Browser
3D configurator no install required

Technologies used

TypeScript
Next.js 16
React 19
Three.js / R3F
Tailwind v4
Node.js
PostgreSQL
Redis
S3
GLTF / GLB
OpenTelemetry
Kubernetes (K3s)

Selling something configurable?

Whether it's furniture, fashion, automotive or anything else where every order is unique, the pattern is the same: a 3D / interactive configurator on the customer side and a domain engine that keeps the back-office aligned. Get in touch and we'll talk through it.