← All work
Build Intently05 / 05

IntentlyWIP

Visual interaction editor for web apps

Role
Founder
Period
Sep 2026 – Ongoing

Click any element in a running React or Next.js app and shape how it moves on hover, click, focus or scroll, with real controls and a live preview on the page. Intently saves each interaction as a spec, then hands it to the coding agent you already use (Claude Code, Codex or Cursor) to write it into your code, in your project's own style.

Every change can be undone byte for byte, and versions you tried but didn't pick are kept for later.

Built with

  • React
  • Next.js
  • TypeScript
  • MCP
  • Claude Code
  • Codex
  • Cursor

01The gap

AI coding agents can build a whole interface in minutes, but motion is the part they can't feel. Is a hover 1.03 or 1.05? 180ms or 320ms? Eased, or a little springy? You only know when you see it, and describing it in a chat is slow and lossy.

Intently puts the controls on the page. You pick an element in your running app, shape how it moves, and watch it play on the real thing. When it feels right, Intently writes it down as a spec and hands it to your coding agent to put in your code.

02Controls made for feel

The panel opens on top of your own app, so it's built to stay out of the way: it can't inherit your styles or leak its own. Every control edits plain CSS underneath. Scale snaps to common steps on a dot slider, a handle in the preview sets where the element moves to, and the easing is a curve you drag.

Two of the best ideas came from DialKit, Josh Puckett's library for tuning interfaces: springs set by time and bounce instead of physics, and versions you can flip between to compare. In Intently, the versions you don't pick are kept with the spec, so "the bouncier one" can be reopened next week, under the same letter it had.

Before — the first panel (Sep 2026): a property and a value, typed by hand
Before — the first panel (Sep 2026): a property and a value, typed by hand
After — the same hover today: scale snapped to 1.05, the easing curve, and a live preview beside it
After — the same hover today: scale snapped to 1.05, the easing curve, and a live preview beside it

03Anything on the page, even Server Components

Testing on a fresh Next.js app exposed the biggest gap: every element on the default page is a Server Component, and Intently couldn't select any of them. Before changing anything, I measured what the browser actually receives. React already sends the name of the server component that made each element; Intently had been throwing it away.

Now those elements are editable by name, and the agent gets the rules that matter. A Server Component can't hold state or handle events, so a hover is written in CSS, and anything that needs JavaScript is moved into a small client component.

Before — a link on a fresh Next.js page, tagged “a (server)” and skipped as not editable
Before — a link on a fresh Next.js page, tagged “a (server)” and skipped as not editable
After — the same link, named by its server component (Home) and ready to edit
After — the same link, named by its server component (Home) and ready to edit

04The agent you already pay for

The first version ran its own AI on an API key, so every Apply cost money, enough that it had never run for real. The fix was to stop being an AI product: Intently hands the work to the coding agent you already use, signed in as you.

  • One click on Apply runs your own Codex or Cursor in the project
  • Or type /intently:apply inside Claude Code
  • Or copy the prompt and paste it anywhere

Intently never touches your login. Before the first edit it also reads your project once, so the agent writes motion the way your codebase already does: Tailwind classes in a Tailwind project, CSS rules in a CSS one.

05What only real runs found

Every Apply can be undone byte for byte, from snapshots taken before the agent edits. Getting there meant testing on real apps, and each real run found something the tests hadn't:

  • The panel forgot its Undo when the agent edited the file the panel lives in. The bridge now remembers for it.
  • The install broke a fresh Next.js app, because its bundler refuses files outside the project. Intently now installs a copy inside it.
  • “ease-out” turned out to mean two different curves: CSS's, and Tailwind's class of the same name. The agent picked the wrong one. Intently now spells out the exact curve.
Before — what the agent wrote: Tailwind's ease-out, 58% of the way after a quarter of the time
Before — what the agent wrote: Tailwind's ease-out, 58% of the way after a quarter of the time
After — what the spec meant: CSS ease-out, 38% at the same moment
After — what the spec meant: CSS ease-out, 38% at the same moment

06Proven three times

The same hover went through Claude Code, Cursor and Codex, each on its owner's own plan. All three wrote it correctly and in the project's own style, and all three were undone to the original bytes. Claude Code's run is the one that exposed the easing mix-up; Cursor and Codex, after the fix, both wrote the exact curve. The spec is the record; any agent can derive the code from it.

Intently is now a public beta on npm: npx @intently-dev/cli@beta init sets it up in a Next.js app. One-click Apply through Claude Code is held back until Anthropic confirms a tool may launch it on a user's behalf; until then, Claude Code users run /intently:apply in their own session.

Next buildIsoform→