CabinForge is a real-time 3D marketing experience for a modular-cabin manufacturer — a Three.js journey where a cabin assembles, reconfigures and furnishes itself as you scroll — paired with a bespoke headless CMS and admin panel that lets a non-technical team edit every word, image and enquiry without touching the 3D scene.
A modular-cabin manufacturer needed a website that felt as engineered as the product itself, and a way for staff to keep it up to date without a developer in the loop.
Portable cabins are a considered, high-value purchase. Flat product photos undersell the engineering. The brief was to make the range tangible online — let a buyer "walk around" a cabin and step inside — while staying fast on mobile networks and mid-range CPUs.
At the same time, sales and marketing needed to change copy, swap photography, reorder sections and follow up on enquiries themselves — with zero risk of breaking the delicate 3D scene, camera paths or scroll choreography.
The public site, the CMS API and the admin panel are independent deployables. The site reads published content from the API but never depends on it to render — if the CMS is unavailable, it falls back to its built-in content.
Scroll-driven Three.js journey and per-route WebGL heroes, orchestrated with GSAP ScrollTrigger and Lenis smooth scroll. Code-split so the homepage doesn't pay for every scene up front.
REST API for published content, media and quote requests. JWT admin auth with bcrypt, Zod validation, Helmet, CORS, rate limiting and HPP. Cloudinary for image storage.
A separate React app: dashboard with KPIs, nested page editors with reorderable sections and toggles, a Cloudinary-backed media library, and a quote-request workflow with private notes.
A single primitive-built cabin morphs between four product configurations as the visitor scrolls — no pre-baked video, all live WebGL with camera choreography per scene.
The CMS drives ordinary text and image values only. 3D geometry, materials, camera paths and animation logic are deliberately out of the editor's reach.
Statistics count up on scroll into view across the Industries, About and Projects routes, reflecting live figures from the CMS.
Every public page ships with hardcoded fallback content, so the site renders fully even when the CMS API is temporarily unavailable.
Website enquiries flow into the admin as a filterable table with a New → Contacted → Quoted → Closed status workflow and private follow-up notes.
Cloudinary-backed uploads with in-browser cropping, searchable metadata (alt text & captions) and reuse across any page section.
Every image below is a live render of the running application, captured against an isolated instance seeded with fictional data. Grouped by section, each shot is tagged with the distinct visual / render types it demonstrates. This is a 3D product experience and a CMS — not an analytics dashboard — so its "visual vocabulary" is WebGL renders, KPI tiles, tables, cards, badges, grids, editors, forms and maps rather than line/bar/pie charts.

The scroll journey opens on a fully rendered WebGL cabin. A progress HUD tracks the walkthrough as the visitor scrolls "inside".

Page-intro hero with a live progress bar and a per-model category rail that tracks the 3D walk-around.

Each model pairs a spec card (model code, feature bullets, CTA) with a layered image slider of real photography.

Full-bleed hero introducing the (fictional) manufacturer, with dual calls to action.

An editorial image-and-copy block, one of several reveal-on-scroll layouts on the route.

A second, more detailed 3D cabin hero, above a row of KPI counters that animate up on scroll into view (captured here at their final, settled values).

A continuously rotating 3D cabin sits beside a quick-contact card. All contact details are fictional placeholders.

The public enquiry form that feeds the admin quote pipeline, supported by service info cards.

An embedded map keyed to the address. Because the address here is a fictional placeholder, the embed resolves to a world view rather than a real pin.

The Projects route (re-enabled in this isolated copy for capture) leads with its own animated statistics.

Large full-bleed project tiles reveal one at a time on scroll. Project codes are generic, fictional placeholders.

Split-screen authenticated entry to the CMS. Credentials shown are throwaway demo values.

Overview KPIs, a page-card grid with publish-state badges, and a persistent sidebar navigation.

The dashboard's recent-quotes table with colour-coded status pills, populated with fictional enquiries.

The full enquiry pipeline with status filters and per-row contact detail. All names, emails and phones are invented.

Drill-down modal with the enquiry, a status selector and a private admin-notes field for follow-up.

Searchable thumbnail grid of Cloudinary-backed assets with alt-text captions and dimensions.

Per-page editor with publishing state, SEO fields, and a helper sidebar reminding editors the 3D scene is protected.

Deep, typed field editing: button labels, scroll targets and image fields with media-library attach and per-image alt text.