Testimonial Wall, animated React component
An endless wall of reviews in columns that drift in opposite directions at slightly different speeds. Cards swell as they pass the middle and recede toward the edges, like reading through a lens. Hover a column and it eases to a stop while the others slow down; drag the wall to scrub it and let go to fling it. Cards can highlight a phrase or turn into a big-number card, and a Pause button stops everything.
- Pro
- Testimonials
- Scroll
- Hover
Play with it
Move the controls and watch it change. Copy code gives you a snippet with only the props you changed.
Loved by teams who ship 4.9 from 2,140 reviews
We rebuilt our whole onboarding in an afternoon. The motion feels like it was designed in-house, not pulled from a kit.
The springs are tuned better than anything I would have had time to tune myself.
Design and engineering stopped arguing about motion. There is nothing left to argue about.
Accessibility was already handled: focus rings, labels, reduced motion. That alone saved us a sprint.
Clients think I hired a motion designer. I did not tell them otherwise.
Our landing page finally feels alive. People screenshot it and send it to us.
3.4xfaster from design to production
Shipped faster than our old in-house library could even build.
Our investors asked who did our product design. It was this, and two evenings.
Copied a file, changed two props, done. That is the whole review.
Every component is one file with no surprises. I read it, I understand it, I ship it.
I am one person and my product looks like a team of twenty made it.
0extra dependencies beyond React and framer-motion
Bundle stayed small because nothing pulls in a dependency you did not ask for.
+18%checkout conversion in week one
Checkout conversion went up the week we swapped in the new buttons.
I prototype in it now. What I hand over is what ships, frame for frame.
Hover a column to stop it. Drag the wall, or fling it.
Props
| Prop | Type | Default | What it does |
|---|---|---|---|
| items | WallTestimonial[] | DEFAULT_WALL_TESTIMONIALS | The reviews: { name, role, quote, hue, mark?, metric?: { value, label } }. mark is a phrase in the quote to highlight; metric turns the card into a big-number card; hue colours the avatar and highlight. |
| height | number | 560 | Height of the wall, in px. |
| speed | number | 30 | Base drift in px per second. Each column drifts at its own multiple of this. |
| autoplay | boolean | true | The wall drifts by itself. When false it starts paused and the visitor can press Play. Reduced motion always starts it paused. |
| title | string | "Loved by teams who ship" | Heading above the wall. |
| className | string | — | Extra classes for the outer wrapper. |