Women in Orange BG

Divya Bhushan Singh

Interaction design

Framer

AI & code

Type

Cursor interaction experiment

Status

On my homepage hero

Output

Reusable Framer component with 16 editable properties

Role

Design direction

Interaction design

Decision making

AI direction

Tools

Pinterest (reference)

Claude Code

Framer

Hover to take control

From a Pinterest loop to my portfolio's cursor

From Pinterest Animation to Custom Cursor -Built with Claude Code

Overview

This project started with a short animation I saved on Pinterest and ended as a live cursor interaction on my Framer portfolio. The animation was a grid of dots on a black screen, with a small white node drifting around and pulling thin threads out to the dots near it.

It only played on its own, and you could not touch it. While watching it, I kept asking one question:

What if that node followed the visitor's mouse instead?

Claude Code wrote the code. My role was to make the decisions: what this component should do, how much of it goes into the user's hands, how it behaves, where it switches off, and where it belongs on my portfolio.

The box above is the result. It drifts like the original until you move your cursor over it.

The Pinterest animation

Plays on its own, nobody can touch it

My hero today

The visitor's mouse drives it

The goal

Turn something people watch into something they play with

The Pinterest clip was beautiful, but it was a loop. On my portfolio, I wanted the same feeling to respond to every visitor's hand. I set myself four rules before starting:

It should feel like the original.

Same grid, same glowing node, same threads, same way the dots grow near the node and fade away from it.

The mouse should drive it.

The node follows the cursor, and the effect appears where the visitor is looking.

It should be mine to shape.

No fixed copy. Every visual part had to be adjustable from Framer, without touching code again.

It should not get in the way.

The effect has to stay smooth, sit behind my content, and never make links harder to find.

If I could check all four, the experiment was a success.

My role

Designer as decision maker

On this project I did not write code or draw screens. Claude Code did the building, and my role moved to a strategic one: deciding what this component should be and how it should serve my portfolio. Those decisions turned one looping animation into something useful, while keeping the same feeling.

Control

What goes in the user's hands

I decided which parts the person using it in Framer can change, and how far that goes. My test: what would someone actually want to change to fit their page?

What I left fixed is the core of the feeling. Dots grow near the node and fade away from it, and the threads always start at the node.

Behaviour

How it moves

The node follows with a soft lag, so it feels alive instead of glued to the mouse.

When the mouse leaves, it can return to the centre, stay, fade out, or drift. On my hero it fades out.

On the hero the node replaces the cursor, and the arrow comes back over links.

Restraint

Where it switches off

Inside the Framer editor it shows a still, centred version.

When nobody moves the mouse, it stops drawing completely.

With reduced motion on, the soft glide is removed.

On phones it rests and only follows a finger while dragging.

In sections full of text and cards, the normal cursor stays.

Use cases

Where I can use it

As the cursor on my hero, floating over my portrait.

As a background in dark sections, tested in "What I love to do".

As a quiet texture, with the faint grid always showing.

In any colour theme, since every colour can change.

Everything a user can customise

Group

Controls

What it changes

Colour

Background, dots, threads, node

The full palette, so it can match any section or brand

Size

Node, largest dot, smallest dot

How bold or delicate the effect feels

Grid

Gap, reveal area, faint grid

How dense the pattern is and how much of it lights up

Threads

Width, opacity, reach

How thick the threads are and how far they stretch

Motion

Follow speed, idle, hide cursor

How lazily the node follows and what it does when the mouse leaves

Process

From a saved clip to a live hero

01

Studying the reference

I watched the clip again and again to understand what made it feel good. The node is the brightest point, the dots swell as it gets close, and the threads give everything a sense of connection.

02

Breaking the video down

Claude Code took the clip apart frame by frame and turned a feeling into real numbers:

Dots sit on a fixed grid, 73px apart.

The node is about 28px wide.

Dots shrink from about 15px to 3px before fading out.

Dots show within about three grid cells of the node.

Threads reach about two and a half cells.

03

Deciding how a mouse changes things

An animation decides its own path. A cursor effect has to react to a person, so I decided how the node follows, what happens when the mouse leaves, and whether it replaces the normal cursor.

04

Building the component

Claude Code wrote it as a Framer code component drawn on one canvas. Its first version used a format Framer does not accept, so I gave it a template of a cursor component already working in my project, and it rewrote the code to match.

05

Testing against the original

I placed my version next to a frame from the video. The first pass faded the outer dots and threads too early, so I tightened the edges until they matched.

06

Making it customisable

I decided which parts belong in the user's hands and how far customisation should go. Each became a control in Framer's right panel.

07

Placing it on the site

I connected Claude to my Framer project and placed the component on my homepage hero with a see-through background, so it floats over my portrait.

Constraints

Where it got stuck, and how I moved it

One constraint really blocked the work: getting the code into a format Framer accepts. The rest were small bumps, and each one taught me something.

Hiccup

Framer would not accept the code

Claude's first version was written in a format Framer does not support, so the component would not work in my project.

Decision

Teach it with a template

I gave Claude a cursor component already working in my Framer project. It followed that structure and rewrote the code in a way Framer accepts.

What I worked within

Framer has its own rules.

A code component has to look right in the editor, where there is no mouse, and its settings have to appear as clean controls.

My hero was already busy.

It had my portrait and a liquid hover effect on top of it.

Speed matters on a portfolio.

A heavy effect on the first screen would hurt the first impression.

Phones have no hover.

The effect needed a sensible fallback for touch screens.

Friction at each step

Step

Friction

What I did

Making it work in Framer

The first version used a code format Framer does not accept

Gave Claude a template of a working cursor component from my project

Building

Framer stores colours in a format the canvas cannot read

Added a small helper that pulls out the real colour

Building

No mouse inside the editor, so the effect looked empty

Made it show a still, centred version there

Connecting to Framer

The plugin needed my own Google sign in

Signed in myself, then let Claude continue

Choosing a spot

Two cursor effects in the hero would fight

Tested it in another section first, then moved it to the hero and hid the liquid hover

Hiding the cursor

Over text and cards, the cursor flickered between node and arrow

Kept the arrow on there; on the hero the arrow returns over links

Placing the layer

Framer dropped it 60px to the left and pushed cards above their heading

Fixed the order and wrapped it in a transparent full size frame

Final testing

Smooth scroll blocked automated scrolling in preview

Did the final check by hand

Output

A reusable component on my homepage

The result is a Framer component called Constellation Cursor, living on my homepage hero. Move your mouse over the hero and a glowing node follows you, the dots around it light up, and threads reach out to connect them.

How it behaves on my hero

The background is see-through, so the dots and threads float over my portrait.

The node replaces the normal cursor, and the arrow comes back over my navigation and links.

When the mouse leaves the hero, the effect fades out softly.

On phones, the node rests in place and follows your finger while you drag.

Reflection

What this project taught me

The most valuable part of this project was the question, more than the code. The Pinterest clip was finished work by someone else. Handing its node to the visitor's mouse is what made it mine.

Inspiration is a starting point.

I save a lot of references, and most of them stay on the board. Asking what this one could become gave the project its direction.

A feeling can be measured.

Grid spacing, dot sizes and thread reach turned taste into something I could rebuild, compare and tune.

My role shifted from making to deciding.

Claude Code wrote every line. My work was deciding what goes into the user's hands, how far customisation goes, how it behaves, where it switches off, and where else it can live.

Context changes the interaction.

The same effect felt playful in the hero and distracting in a section full of text. People still need the arrow over anything clickable.

Flexibility pays off.

Making every part adjustable took more thought up front. Now I can reuse it anywhere and change its mood in a few clicks.

Thank you : )

Create a free website with Framer, the website builder loved by startups, designers and agencies.