A playground for pouring out motion ideas — physics-driven, fluid web animations by Adedamola, following a house design & motion system. Live at animations.adedamola.work.
Every experiment leans on the same foundations: Lenis
for smooth scroll and a dependency-free spring integrator (lib/use-spring.ts)
that paints straight to the DOM — so nothing re-renders React mid-animation.
| Inverted carousel | A concave coverflow of squircle portraits that overshoots and rocks back into place on every step. Infinite loop via wrapped offsets. |
| Liquid signup | A pill that morphs into a close button while the signup card inflates from it like a balloon — through a droplet stage — and login/signup toggle bounces the height. |
| Hero morph | On one swipe a full-bleed hero collapses into a tiny squircle that lands inline in the copy, as the paragraph cascades in word by word. |
Add an entry to lib/experiments.ts and it shows up on the home gallery
automatically.
- Next.js 16 (App Router, Turbopack) + React 19
- Tailwind v4 — tokens live in
@themeinsideapp/globals.css; there is notailwind.config - Lenis for smooth scroll (disabled under
prefers-reduced-motion) - Hand-rolled fixed-timestep spring — no motion library
npm install
npm run devOpen http://localhost:3000 (or the next free port).
npm run build # production build
npm run lint # eslint- Animation is driven imperatively: a spring's
onChangecalls a singlepaint()that writestransform/ geometry to refs. React state only flips discrete phases. - Some pages accept a
?p=1(ordefaultOpen) query/prop to render an end state server-side — handy for previews and to avoid a hydration flash. - Effects flatten
preserve-3d, so 3D card work avoidsoverflow,opacity,filter,mask,clip-path, andbox-shadowon rotated layers.
Hosted on Vercel. The social card (public/og.png) is a snapshot of the hero
experiment; OG/Twitter metadata and metadataBase live in app/layout.tsx.