A showroom TV that tells the story itself.

One web app for AHA’s showroom TV: a pitch that plays itself, a path-traced 3D tour of the experience centre, pressable product demos and an idle loop.

Role
Owner, product and engineering. Built with Claude Code
When
Sep – Oct 2026
Built with
JavaScript · three.js · WebGL · WebCodecs · Service Worker · Supabase / Postgres
Where
AHA Smart Homes
15 → 5½ minPitch length
20 → 57 fpsHeaviest animation
−35%TV memory

How it helped AHA

  • A demo anyone can runWhoever is showing a visitor round plays AHA’s story from the remote: seven chapters, including a 3D walk through the experience centre.
  • Working when nobody presentsLeft alone, the TV loops AHA’s moments, products, client stories, both centres’ opening hours and a QR code.
  • Films to sendDemo films are recorded straight from the app, with 720p versions small enough to email.

The problem

  • The first guided walkthrough took 15 minutes and depended on who was presenting.
  • The screen is a 2 GB TV with a D-pad remote, and its BACK button leaves the app.
  • Five separate pages did overlapping jobs: a desktop map, a TV mode, a wall display, a sleep page and a calendar.

What I did

  • One app for every screen: the TV and laptops run the same app, and the five older pages folded into it.
  • A pitch that plays itself: seven chapters, each flowing into a “To remember” slide. Read →
  • The experience centre in 3D: path-traced offline, then crossfaded between lighting scenes on the TV. Read →
  • Products you can press: the X7 switch, the smart lock, the aroma diffuser and the hub, each demoed on screen.
  • An idle loop: after 20 quiet seconds the TV plays AHA’s moments, also exported as a standalone screensaver. Read →
  • Films from the app: demo videos recorded headless with WebCodecs, without ffmpeg. Read →
  • Built for the TV: a lite mode, compositor-only animation, and a BACK button that stays inside the app. Read →
The experience centre, path-traced for Present: evening, party, theatre and cleaning.

Results

The pitch runs about 5½ minutes when a presenter clicks through, down from 15. On a Chrome stand-in for the TV, memory fell 35% and the heaviest animation went from 20 to 57 fps.

Written up from this project.

All posts

A path-traced showroom in a TV browser

22 renders, path-traced offline in about 2 hours

A sales pitch that plays itself

15 → 5½ min walkthrough, with a presenter clicking

Product films recorded from the app, with no ffmpeg

87 s lock film, no feature left out

The BACK button that kept walking out of the app

1 per press history steps banked

From sleep loop to portable screensaver

22 slides a pass on the TV, about 4½ minutes

Building for a 2 GB TV and a remote with no pointer

−35% browser memory

More work.

All case studies

AI agent · Data · BISep – Oct 2026

AI growth agent

Live CRM and ad data, checked twice, turned into a daily call list.

For AHALead and spend numbers AHA can trust, refreshed every 15 minutes.

Layers

GIS · MapsJul – Oct 2026

Deals map

Every AHA building on one map, with plans, billboards and the calendar.

For AHAEvery building with AHA homes on one map, and billboards planned around the leads.