Skip to content

feat: drag and throw Nino in his sky, with a dizzy reaction - #41

Merged
ismail9k merged 9 commits into
mainfrom
claude/nino-footer-drag-physics-12edf4
Oct 15, 2026
Merged

ismail9k merged 9 commits into
mainfrom
claude/nino-footer-drag-physics-12edf4

Conversation

@ismail9k

Copy link
Copy Markdown
Member

What changes for visitors

Nino in the footer sky (I9kNinoSky) can now be picked up and thrown.

  • Drag: press Nino and move more than 4px to pick him up. He follows the pointer anywhere in the window, not just inside the sky.
  • Throw: he leaves your hand at the speed the pointer was moving. He floats with no gravity, slows down from air drag, and bounces off the window's edges without leaving the window. You can catch him again mid-air.
  • Landing inside the sky: he picks his drift back up from where he stopped and eases back to the middle over about 3 seconds, with no jump.
  • Landing above the footer: he swoops straight back into the sky (300 ms) and gets dizzy, using a new dizzy expression (square-spiral eyes, a wobbly mouth) and a new play('dizzy') action (his head and arms sway). Both are added to I9kNino.
  • Boop and accessibility: a tap, click, Enter or Space still boops him; a drag never does. The boop button keeps its name and its tab stop.
  • Motion off (animated false or reduced motion): you can still drag him, but there is no throw, and he goes straight back to the middle.

While he's out of the sky, Nino is position: fixed (z-index 300), so the sky's overflow: hidden doesn't clip him. An ancestor with a transform or filter would trap him inside it; the showcase gotcha and AGENTS.md both say so. Neither ismail9k.com nor 9k.school wraps the sky in one.

Design: docs/superpowers/specs/2026-10-15-nino-sky-drag-physics-design.md. Plan: docs/superpowers/plans/2026-10-15-nino-sky-drag-physics.md.

Verification

  • npm run check passes: 1057 tests, format, lint, typecheck, and the library, Storybook and showcase builds.
  • New tests:
    • Unit tests for the physics: release speed, bounces off each edge, a window that shrinks mid-flight, settling, and the drift home.
    • Component tests for the sky: the drag threshold, a drag never booping, keyboard boops right after a drag, dizzy above the sky, ignored right-clicks and second fingers, a lost release, catching mid-air, motion switched off mid-flight, the toggle regression, and unmounting.
    • The dizzy art follows I9kNino's rules: the two-unit grid, stepped frames, and the reduced-motion block.
  • Checked by hand in Storybook (new I9kNinoSky › Under A Page story):
    • Drag, then drop above the footer: the swoop and the dizzy face.
    • A hard throw bouncing off the right edge.
    • Easing back home after landing in the sky.
    • Dark mode.
    • Motion off.
    • Right-to-left (Arabic story).
  • A fresh-context review of the whole branch found no Critical issues. Its Important findings are fixed, each with a test that failed first.

Not yet checked: a real throw in Safari, and touch scrolling on a real phone.

Follow-ups

  • Bump @9klabs/design in ismail9k.com and 9k.school once this merges.
  • Add I9kNinoSky to the the9klabs.com footer.

🤖 Generated with Claude Code

ismail9k and others added 9 commits October 15, 2026 13:02
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…id-air, and drop him when the button is released elsewhere

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@ismail9k
ismail9k merged commit 051ae4e into main Oct 15, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant