Lab
Experiments & tools
Small builds I make to learn and to work faster. Each one is labelled: an experiment made for this page, client work that is live, or a tool I use every week.
WebGL product viewer
A scroll-driven 3D product page in Three.js, built with AI coding agents and reviewed by me. Scroll through it below.
- 01
Turn it
Scroll to turn the bottle. It is built from a few lathe and cylinder shapes in code, so there is no model file to download.
- 02
Open it
Keep scrolling and the dropper lifts out. Every pose comes from the scroll position, so the page draws a new frame only when you move.
- 03
Look closer
The camera moves in on the label, a texture drawn in the browser. Three.js loads only when this section is near the screen.
3D on a clinic website
The same idea on a real site. When I rebuilt dentalplus-smileroom.com in Next.js, I modelled a toothbrush and sparkles for the hero in Three.js from simple shapes. They lean towards the pointer, render only while on screen, draw at 1x on phones and hold one still frame for visitors who prefer reduced motion.
Live-site recorder
Every website preview on this portfolio is a recording of the real site, not a mockup. Three small scripts make and play them.
Record
Playwright opens the live site in Chrome, scrolls it on a fixed timeline and captures 14 seconds of real frames.
Encode
ffmpeg writes an AV1 WebM, an H.264 fallback, a smaller cut for phones and a poster. Each file carries a version number.
Play
Videos download only near the screen and play only while visible. One button pauses them all.
Local LLM
I run open models on my own GPU and use them to draft and translate copy between Thai, English and Swedish offline, so drafts can stay on my computer. I check every draft before it is used.
- llama.cpp (CUDA)
- LM Studio
- Ollama
Let’s build
the next one.
Available now for full-time, part-time or internship roles. Right to work in Sweden, no sponsorship required.
Phone
Based in
Gothenburg, Sweden
Driving licence
Swedish licence B, own car
