Skip to main content
GrN.dk

Main navigation

  • Articles
  • Cases
  • Contact
  • Your Digital Project Manager
  • About Greg Nowak
  • Services
  • Container
    • Excel Freelancer
    • Kubuntu - tips and tricks
    • Linux Apache MySQL and PHP
    • News
    • Image Gallery
User account menu
  • Log in

Join my community / free newsletter — sign up here

Breadcrumb

  1. Home
  2. Cases

A crystal hall rendered live in the browser — then profiled until it ran everywhere

Client
GrN.dk — demo shelf (demo.grn.dk)
Sector
3D on the web / product presentation
Period
August 2026

demo.grn.dk/kristallsaal ↗

The Kristallsaal entrance view: a dark exhibition hall with cones of light from the ceiling, a mirror-polished floor, and the title card 'Kristallsaal — ein 3D-Erlebnis in geschliffenem Kristall' over the walkway.

At a glance

Kristallsaal is a walk-through jewellery hall that runs entirely in the browser: six vitrines of cut-crystal pieces under museum lighting, a mirror-polished floor, and light that actually splits into colour inside the stones. There is no engine download and no build pipeline — one HTML file, one JavaScript module and Three.js, served as static files. It exists to answer a client question with a demo instead of a slide: what does "3D product presentation on the web" feel like at the high end?

Real dispersion — light splits into colour inside the cut stones (Three.js r185)
GPU-profiled performance tiers: the mirror floor goes first, the crystal goes last
Static deploy: one HTML file + ~90 KB of app JS, no build step, no engine download

The challenge

Real-time crystal is one of the hardest materials the browser can be asked to draw. Faceted refraction, dispersion (the rainbow fire inside a cut stone) and a mirror floor are all expensive effects, and the audience for a piece like this — a jeweller's customers — will open it on whatever device they happen to hold. A demo that is beautiful on a gaming PC and a slideshow on a mid-range phone would prove the opposite of what it is meant to prove.

The solution

A vanilla Three.js (r185) build: physically-based crystal with real dispersion, an HDRI-lit hall, post-processing bloom, and a guided walk between vitrines — around 90 KB of application JavaScript on top of the library, loaded through an import map. No bundler, no framework; the whole piece deploys as static files like the rest of the demo shelf.

Then the unglamorous half: the scene was GPU-profiled and given explicit performance tiers. The renderer measures what the device can sustain and degrades in a chosen order — the mirror floor is the first luxury to go, the crystal itself is the last — so a phone gets a simpler hall rather than a broken one. The tier logic was tuned against measured frame rates, not guesses.

The results

The hall runs from desktop workstations down to modest phones, holding its look where the GPU allows and degrading in the intended order where it does not. It shipped through the same card-driven AI delivery loop as everything else here — wow-factor pass, accessibility pass (44 px touch targets), and a cache-busted version badge for every deploy.

As a sales artefact it does its job in the first five seconds: instead of describing what browser 3D could do for a product, it hands the client a URL.

  • three.js
  • WebGL
  • 3D
  • Custom Development
  • AI agents

Got a project that needs the same kind of hands-on delivery?

Your digital project manager

Review Greg on Google

Greg Nowak Google Reviews

 

Illustrated infographic summarizing: Your AI Agent Has Shell Access. What Can It Reach?
Your AI Agent Has Shell Access. What Can It Reach?
2026-08-13

A practical guide to mapping what a shell-enabled AI agent can reach, then containing its access to files, credentials, networks, tools, and high-impact actions.

Illustrated infographic summarizing: Cloudflare Changed DoH JSON. What Else Is Parsing DNS as Text?
Cloudflare Changed DoH JSON. What Else Is Parsing DNS as Text?
2026-08-12

Cloudflare’s DoH JSON change exposes brittle DNS parsing. Find affected scripts, test both formats, and choose a safer integration contract.

Illustrated infographic summarizing: Your Website Can Answer Questions Now. Should It?
Your Website Can Answer Questions Now. Should It?
2026-08-11

NLWeb makes conversational website search practical to deploy. The real question is whether your content, users and team are ready to support it.

Illustrated infographic summarizing: AI Search Finally Has Reports. Now Connect Visibility to Revenue
AI Search Finally Has Reports. Now Connect Visibility to Revenue
2026-08-11

Google and Bing now expose first-party AI search data. The real task is connecting citations and impressions to analytics, CRM outcomes, and revenue.

Illustrated infographic summarizing: The Bot Passed Your CAPTCHA. What Did It Do Next?
The Bot Passed Your CAPTCHA. What Did It Do Next?
2026-08-11

Passing a challenge is only one signal. Session analysis, server-side validation and endpoint-specific controls help reduce bot abuse without blocking customers.

Illustrated infographic summarizing: WordPress 7.1 Moves Image Work Into the Browser—Test Every Media Hook
WordPress 7.1 Moves Image Work Into the Browser—Test Every Media Hook
2026-08-11

WordPress 7.1 shifts image processing into supported browsers. Here is what to test across hooks, CDNs, formats, security headers, and fallbacks.

Illustrated infographic summarizing: Prompt Caches Have Write Costs Now—Audit What Your Workflow Reuses
Prompt Caches Have Write Costs Now—Audit What Your Workflow Reuses
2026-08-10

GPT-5.6 makes cache writes billable. See how to spot wasted writes, stabilise prompt prefixes, place breakpoints and measure whether caching pays.

Illustrated infographic summarizing: The AI Crawler in Your Logs May Be Wearing a Borrowed Name
The AI Crawler in Your Logs May Be Wearing a Borrowed Name
2026-08-09

A User-Agent is a claim, not proof. See how to verify AI crawler traffic before it shapes reporting, robots.txt decisions, or WAF exceptions.

Illustrated infographic summarizing: AI Agents Need a Spending Brake, Not Just a Billing Dashboard
AI Agents Need a Spending Brake, Not Just a Billing Dashboard
2026-08-08

AI agent costs can climb inside a single workflow. Runtime budgets, loop detection, outcome metrics, and safe handoffs keep that spending under control.

Illustrated infographic summarizing: Drupal 12 Slipped to December. Drupal 10 Still Runs Out of Road
Drupal 12 Slipped to December. Drupal 10 Still Runs Out of Road
2026-08-07

Drupal 12 arrives as Drupal 10 support ends in December 2026. Moving to Drupal 11.3+ first keeps two mandatory upgrades manageable.

More articles
RSS feed

Footer

  • All articles
  • Contact

GrN.dk web platforms, web optimization, data analysis, data handling and logistics.