RoughWorks
& Brilliant Solutions
Lighting hardware by Gemstone Lights and AdaptiV Lighting.
Web design, 3D and development by Rough Works.
Now playing ·
A Colour You Haven’t Picked Yet
Overview
Brilliant Solutions installs permanent lighting across the Denver area — Gemstone Lights track along the roofline, AdaptiV fixtures in the beds. The whole proposition is that one install covers every season: warm white on an ordinary Tuesday, red and green in December, orange and purple in October, and whatever colour the owner feels like in between.
Their WordPress site sold it the way lighting sites always do, with photographs of houses that were already lit, in colours somebody else had picked. A homeowner standing on their own driveway had no way to answer the one question that decides the sale: what would this look like on my house? The site could show them the product. It could not let them hold it.
The demo was a photo gallery
What is being sold is a colour you choose. Every page showed a colour already chosen, on a house that wasn’t yours, and left the imagining to you.
Twenty-eight scripts before the lights
Salient, WPBakery Page Builder and Slider Revolution between them pulled 28 external scripts and 16 stylesheets into the homepage, to show photographs.
Pinch-zoom was switched off
The viewport tag carried user-scalable=0. On a phone, where most of this traffic lands, nobody could zoom in on the thing they were buying.
The warranty contradicted itself
The homepage and the FAQ gave different labour terms, and the parts figure understated what the manufacturer actually publishes. Numbers typed out by hand drift apart.
Let Them Light Their Own House
The hero is not a photograph. It is a house, modelled and rendered live in Three.js, wearing the same two systems the company installs — addressable pixels along the roofline, fixtures in the landscape — and the visitor drives them. Colour, warmth, brightness, animation, roofline or landscape, three camera views, dusk or daylight. Seven named looks sit underneath: everyday elegance, architectural accents, Christmas, candy cane, Halloween, stars and stripes, ocean. Each one deep-links, so a Halloween campaign can land on a house already lit orange and purple. Around it are ten static pages generated by one build script, 136 of the company’s own installation photographs behind a filter, and every warranty figure declared exactly once.
One scene carries the whole argument
The roofline runs as individually addressable pixels and the landscape as its own zone, exactly as the hardware does, so recolouring the website is recolouring the product. The model is repaired and compressed to 1.5 MB — furniture that never appears removed, window and door assemblies split into a second 114 KB file — and edge quality comes from a 4× multisampled composer that steps its own pixel ratio down after a one-off GPU timing probe. On a phone the scene goes full-screen and the panel becomes a bottom sheet.
Seven looks, and a URL for each of them
The looks strip sits under the hero and lights the house above rather than opening a new page. Each look also has a page of its own and a link that arrives with the light already on, so an ad for Christmas installs can land on a red-and-green roofline before the visitor touches anything. The preset list in the build script and the preset list in the scene are checked against each other, so a look cannot appear in the strip without existing in the render.
136 houses they actually lit
Every photograph on the site is this company’s own work, served as 640 and 1600-wide WebP with real aspect ratios in a manifest so the grid never reflows as it loads. The filter splits holiday colour from warm white, which is the distinction buyers are actually deciding between, and any photo opens full screen. There is no stock photography anywhere on the site.
The warranty exists in one place
Warranty terms, the phone number, the address and all eighteen FAQ answers live in the build script and are interpolated everywhere they appear, including the FAQ structured data. The old site disagreed with itself about the labour warranty; this one cannot, because there is only one copy. The manufacturer’s terms were read off their own warranty page rather than carried across from the old copy.
Ten Pages, One Scene, No CMS
Ten static pages, and a product you can hold
The rebuild is ten pages of static HTML emitted by a single Python build script. No WordPress, no page builder, no plugin surface, and no database. Asset URLs carry a content hash computed at build time, so an edit busts its own cache, and the deployable tree is generated from scratch on every build.
Every path the old site had indexed is kept — /gallery/, /faq/, /support/, /contact/, /privacy-policy/ — with stubs for the rest, so the cutover is a straight swap and not a redirect chain.
28 external scripts → 5
The old homepage pulled 28 external scripts and 16 stylesheets before it drew anything. The rebuild loads five scripts and one stylesheet, and the biggest of the five is the 3D scene itself.
A 1.5 MB house, 163 KB of renderer
The compressed model is 1.5 MB and the Three.js bundle 163 KB over the wire. That is the whole cost of a demonstration a photograph could not make.
Seven looks, three views, two times of day
Forty-two views of the thing being sold, every one of them a tap away and every one addressable by a link an ad can point at.
It fails honestly
A lost WebGL context, or a model that will not load, falls back to the poster photograph with the headline and both calls to action still in place. With prefers-reduced-motion set, the scene renders its scene and stops.
Status — running on a private preview build ahead of cutover from WordPress.
Every Screen We Shipped







Let's Build
Something Great
Not sure where your own site stands? We’ll send back a free teardown inside two business days — what’s slow on a job-site signal, what Google can’t see, and how you read next to two competitors down the road.
Free · 48-hour turnaround · no call required
Trades & Construction
Consumer Brands