Ritwic Singh
← All work

Prototype · squish.labs · Personal project · 2026

Soft toys you can squash through a screen

An interactive WebGL lab of eleven squishy toys. Press, pull and poke them: each one gives, recovers and sounds like its own material. Even the loading screen is made of it.

Role
Independent design and build, with AI coding tools
Focus
Soft-body feel, materials, sound
Output
Live 3D lab for desktop and phone
Status
Live; not yet tested with users

Open squish.labs ↗See the design system →

The landing specimen, drawn with the lab's own shader. Move your cursor near it.

The problem

Squishy toys are all about touch, and a screen has none. Most 3D toy demos look soft but react like hard plastic: you press, and nothing in the material answers back.

The task

Make softness readable through sight and sound alone: how far a toy gives, how slowly it recovers and what it sounds like. And make the wait for a heavy 3D scene part of the experience instead of a spinner.

The result

A live lab with eleven toys on a jelly plinth, from a powdery bao to a glossy slime you can spill. It runs in the browser on desktop and phone. It has not been tested with users yet; the next step is watching which toys and controls people actually use.

Three decisions

Decision 01 · Loading

The loading screen is the material

A pink blob grows with real progress: the first half is the 3D engine arriving, the rest is the lab's own build steps. When it is ready, a drop buds off and becomes the Start key, and on Start the blob falls into place as the plinth.

Decision 02 · Materials

One material model, eleven toys

Every toy is tuned with the same five values (softness, bounce, wobble, recovery and hold) and one of three finishes: powder, gloss or clear. A new toy is a new combination, not new code.

Decision 03 · Sound

Sound follows the surface

Each toy has a voice: puff, squeak, squelch or ooze. A press makes an impulse, and a soft noise bed follows how fast the surface is moving, so a slow squeeze sounds different from a jab. Pitch, bass and treble can be adjusted.

Design system

Specimen: two themes, one signal colour, mono labels on a measuring grid, and the phone patterns and gestures.

See the design system →

Time and effort

Counted from the project's version history, 22 October to 8 November 2026.

About 40 hours
Estimated from commit times: 18 working sessions, counting commits less than two hours apart as one session, plus 30 minutes each.
78 commits, 10 working days
Spread over 18 calendar days. 48 commits are mine; 30 were made by an AI coding agent working from my briefs.
About 20 directed rounds
An 823-line brief file sets out each round. I reviewed a before-and-after contact sheet in the browser after every round before the next one started.
3,431 lines in one page
The lab is a single HTML file on three.js. Along the way about 12,500 lines were added and 7,200 rewritten, including four early studies that were narrowed down to this one.

Try the lab ↗

Full image