Wiggle → Magic

Wiggle the cursor briskly to enter selection mode. Click any elements to pick them — pick as many as you want, click again to deselect. Then move onto the floating Magic popover to commit. Wiggle again or press Esc to cancel.

try it: wiggle your cursor  ·  this is the only gesture

About this demo

This single file is a sketch of a tiny web library that listens for a "wiggle" cursor gesture and transitions the page into a contextual selection state — the kind of magical pivot you'd want before feeding a chosen element into an AI.

The wiggle is the only gesture. Everything else — the dim, the ring burst, the glowing triangle that takes over the cursor — exists to make the transition feel inevitable.

Where you'd use this

Six slices of real-world sites. After wiggling, circle whatever you'd actually want to ask about — text, an image, a row, a snippet of code.

Shopping

Compare strollers

Vista V2

UPPAbaby Vista V2

$969.99

  • 26.3 lbs · one-hand fold
  • Holds up to 3 kids
  • ★ 4.8 (2,431)
Fox 5

Bugaboo Fox 5

$1,299.00

  • 24.1 lbs · all-terrain wheels
  • Reversible bassinet
  • ★ 4.7 (894)
Mixx Next

Nuna Mixx Next

$749.95

  • 27.0 lbs · magnetic buckle
  • Newborn to 50 lbs
  • ★ 4.6 (1,127)

Circle two or three cards → "which one for a 4-year-old plus a newborn?"

Real estate

For sale

$1,289,000

1247 Oakwood Ave · Glendale, CA 91205

3 beds 2.5 baths 2,140 sqft Built 1962 Lot 7,200 sqft HOA None

Quiet, tree-lined block in Oakwood Heights. Walking distance to Adams Elementary (8/10) and the Glendale farmers market. Newly remodeled kitchen, original hardwood floors throughout.

Circle the price + the HOA + the neighborhood blurb → "is this a good deal for a family of 4?"

Recipe

Miso-glazed salmon with brown butter

Serves 2 · 25 minutes · ~480 kcal/serving

Ingredients

  • Salmon fillets, skin on2 × 6 oz
  • White miso paste2 tbsp
  • Mirin1 tbsp
  • Soy sauce1 tbsp
  • Unsalted butter3 tbsp
  • Lemon, zested½
  • Scallions, sliced2

Method

  1. Whisk miso, mirin, soy. Brush onto salmon.
  2. Sear skin-side down 4 min, flip 2 min.
  3. Brown the butter, add zest, spoon over.
  4. Top with scallions, serve over rice.

Circle the ingredient list → "scale to 6 servings and make it dairy-free."

News · Tech

Browsers add native AI APIs faster than the spec can keep up

Three major browser vendors shipped on-device language models this quarter, each behind a different flag and a different API shape. Developers building AI-augmented sites are choosing between fragmenting their integrations or waiting for the WICG draft to settle — which may not happen until late 2027.

"We've built the same prompt API four times this year. The fifth one will probably be the standard."

Circle the headline, the chart, and the pull quote → "summarize this for me in two bullets."

Jobs
Senior Frontend Engineer, AI Surfaces Luminary · San Francisco (hybrid) · Full-time
$180k – $245k + equity
About the role

Build the human-facing surfaces of our AI assistant — gesture-driven selection, in-context chat, multi-modal pickers. You'll partner with design and ML on features that live half in the browser and half in our model layer.

What you bring
  • 5+ years building production frontend with React or similar
  • Comfort with Canvas, WebGL, or fine-grained DOM perf work
  • A track record of shipping novel interactions, not just CRUD
  • Bonus: experience streaming LLM responses into UIs
Nice to have
  • Open-source work in AI dev tooling
  • Background in accessibility for non-standard input gestures

Circle the requirements list → "tailor my resume bullets to this JD."

Code review

PR #482 · src/wiggle/detector.ts

+5 / −2 detector.ts
function detect(samples: Sample[]): boolean {
if (samples.length < 5) return false;
if (samples.length < opts.minSamples) return false;
let reversals = 0, dirPrev = 0;
for (let i = 1; i < samples.length; i++) {
const dx = samples[i].x - samples[i - 1].x;
if (Math.abs(dx) < opts.minDx) continue;
const dir = dx > 0 ? 1 : -1;
if (dir !== dirPrev) reversals++;
if (dirPrev && dir !== dirPrev) reversals++;
dirPrev = dir;
}
return reversals >= opts.minReversals;
}

Circle the function → "explain it, and is the guard on the new line correct?"

How the detection works

The detector keeps a sliding window of cursor samples and counts horizontal direction reversals within a small spatial radius. Defaults are tuned for "deliberate but easy" — see the opts block at the top of the script to make it looser or tighter.

wiggle to activate