The Testimonials page gives social proof the same visual treatment as every other page in the portfolio — it refuses to be a plain wall of grey quote boxes. ThreeDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/apursley2012/windows-xp-developer/llms.txt
Use this file to discover all available pages before exploring further.
AquaPanel cards float in a responsive grid row, each carrying a DiceBear-generated avatar, a quoted testimonial, and the reviewer’s name and role. Each card bobs gently on an infinite vertical oscillation, as if suspended in the liquid Aero background, turning a static section into something alive and distinctive.
Visual overview
The three cards are evenly spaced in a centred grid. Each card is tall enough to contain a circular avatar at the top (overlapping the card edge), three to four lines of quoted text in the middle, and the reviewer’s name and role at the bottom. The cards share the sameAquaPanel glass surface, but each starts its bob animation at a different phase offset so they do not all rise and fall in unison — instead they produce a gentle wave effect across the trio.
Sarah Jenkins
Product Manager. Phase offset of 0 s — the baseline cycle. Avatar seeded with
"Sarah Jenkins".David Chen
Lead Designer. Phase offset of 0.2 s, placing him slightly behind Sarah in the wave.
Emily Rodriguez
Startup Founder. Phase offset of 0.4 s, completing the three-card wave pattern.
Component structure
Each card is anAquaPanel wrapped in a motion.div running an infinite y keyframe animation. The avatar is generated by the DiceBear Avataaars API, seeded with the reviewer’s name.
The testimonials data array
Testimonial content is stored in thetestimonials array in the Testimonials route component inside assets/main.js. Locate it by searching for "Sarah Jenkins":
DiceBear avatars are fetched at runtime from
api.dicebear.com. If you are deploying to an environment with a strict Content Security Policy, add api.dicebear.com to your img-src directive, or pre-download the SVGs and bundle them as local assets.Key interactions
| Interaction | Behaviour |
|---|---|
| Page mount | All three cards begin bobbing immediately on mount — no scroll trigger needed |
| Bob animation | y keyframe: [0, -15, 0] over 4 seconds, easeInOut, repeat: Infinity |
| Phase offsets | delay: 0 / 0.2 / 0.4 staggers the three bobs into a rolling wave, not a synchronised bounce |
Tuning the bob animation
To make the cards bob more vigorously, increase they keyframe range. To slow the rhythm, increase the duration. To widen the stagger, increase the gap between each card’s delay value: