Modern drag-and-drop in software is a marvel. Components lift with spring physics. Siblings glide apart like water parting for a stone. Everything breathes into life.
But here’s the thing—when your website is a love letter to System 7 (1991 MacOS), much like my personal portfolio (juanga.xyz) that smoothness just feels wrong. It’s like hearing a synth base in the middle of a piano concerto. Technically impressive. Out of place.
I wanted drag-and-drop on my project cards. But I didn’t want that drag-and-drop. As you can see from below, applying a modern approach looks suave on the surface but just doesn't feel coherent with the rest of the site.
When you dragged a window on a Macintosh in 1991, the window didn’t follow you. A ‘ghost’ did—a gray stippled rectangle that traced your cursor while the original window sat there, dimmed and patient. Only when you let go did the window snap to its new position. No easing. No spring. Just there.
This wasn’t a design choice. It was a constraint. The hardware back then couldn’t redraw pixels fast enough to fake smooth motion. So Apple did what great designers do: they made the limitation feel intentional. The ghost communicated intent without the computational cost.
But something else happened too. The interaction felt honest. You weren’t moving a window—you were moving the idea of a window. The moment of truth came at release: commit or cancel.
I think there’s something lost when everything animates smoothly and real time.
Copying modern drag-and-drop wholesale would betray the aesthetic. My site has dithered images and 1-pixel borders. Spring physics would feel like a time traveler who doesn’t know they’re out of place.
But replicating the exact 1991 behavior doesn’t work either. Users have expectations now. Pure instant snaps feel broken, not retro. Silence isn’t neutral anymore—it’s jarring.
The question I kept circling: How do you give a ghost a heartbeat without making it feel alive in the wrong way?
Here’s what I landed on.
The card doesn’t follow you. When you grab it, the card deflates—scales down to 97%, fades to 40% opacity. Like its soul got pulled out. The ghost emerges from it, not from thin air. Things should come from somewhere.
The ghost is dead still. No pulse. No shimmer. No marching ants. Just a dashed outline with a subtle stipple pattern, following your cursor in silence. Emil Kowalski’s principle applies here: if you’re going to add delight, put it in the behavior, not the decoration.
Siblings shuffle, they don’t glide. 150 milliseconds. A spring curve with overshoot. Fast, with weight—like actual cards being pushed across a table. The glide is what makes modern drag feel “premium.” The shuffle is what makes it feel physical.
Landing has gravity. When you release, the card doesn’t just appear. It lands with a micro-spring—scales to 101.5% then settles to 100% over 180ms. Blink and you’ll miss it. But your brain registers it. That thing just arrived.
The ghost is authentic to the original metaphor: you’re moving a representation, not the thing itself. But the physics are contemporary. Springs. Overshoot. Settling.
It’s not retro cosplay. It’s not modern with a filter. It’s something in between—old bones with new nerves.
The best interactions don’t announce themselves. They just feel right in ways you can’t immediately articulate. That’s what I was chasing here. Whether I got there... you tell me.

Comments
Nothing yet. Say the first thing.
Sign in to join the conversation.