TheDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/apursley2012/dev.void/llms.txt
Use this file to discover all available pages before exploring further.
AsteroidQuotes component renders a section of three testimonial cards whose irregular, asteroid-like silhouettes and perpetual floating animation reinforce the space theme running through dev.void. Each card drifts gently up and down while rocking back and forth, entering the viewport with a smooth fade-in on first scroll into view.
Testimonial Data Shape
Testimonials are stored in a plain array calledo inside AsteroidQuotes.js. Every entry follows this shape:
| id | author | role | delay | yOffset |
|---|---|---|---|---|
| 1 | Cmdr. Sarah Jenkins | VP of Engineering, Stellar Dynamics | 0 s | 20 px |
| 2 | Dr. Marcus Vance | Lead Designer, Nebula Corp | 2 s | −30 px |
| 3 | Elena Rostova | Product Manager, Void Tech | 4 s | 10 px |
Asteroid / Blob Border Radius
Each card’s container<div> receives an inline style property that overrides the default rectangular border radius with a CSS organic blob shape:
border-radius shorthand uses the horizontal / vertical slash syntax. The eight values (four horizontal radii, then four vertical radii at each corner) produce the asymmetric, asteroid-like silhouette. The base container also carries bg-space-900/80 backdrop-blur-sm border border-slate-700 p-8 shadow-xl for its dark, frosted-glass appearance.
The blob shape is applied to the inner content
div, not the outer Framer Motion div. This keeps the Framer Motion wrapper a plain transparent element so its whileInView and animate props are unaffected by the unusual border geometry.Continuous Float + Rotate Animation
Each card runs two independent continuous animations simultaneously via Framer Motion’sanimate prop, both looping infinitely:
Vertical Float
yOffset baseline. A six-second cycle keeps the motion perceptible but unhurried.
Subtle Rotation
Viewport Entry
On first scroll into view each card fades up from below:once: true means the entry animation fires exactly once and is not replayed on subsequent scrolls. After entry, the continuous animate float takes over.
Card Anatomy
Quote Icon
A Lucide
Quote icon (w-8 h-8 text-aurora-teal/40) sits at the top of each card, visually anchoring the testimonial before the body text.Body Text
Rendered in
font-serif italic text-lg text-slate-300 leading-relaxed. Surrounding double-quote characters are injected by JSX — do not include them in the text field.Author Name
Displayed in
font-sans font-bold text-slate-200 below a border-t border-slate-800 divider.Role / Company
Rendered in
font-mono text-[10px] text-aurora-pink uppercase tracking-widest — the tiny all-caps mono style matches the terminal aesthetic of the rest of the portfolio.Layout
The section uses a CSS grid that stacks to a single column on small screens and expands to three equal columns onmd and above:
<section> is min-h-[70vh] with overflow-hidden to contain the floating cards without causing scroll artifacts.
Adding or Editing Testimonials
Open the source file
Navigate to
components/AsteroidQuotes.js and locate the o array near the top of the file.Append a new object
Add a new entry to the array following the data shape above. Choose a
delay that keeps the stagger pattern — increment by ~2 s per new card. Pick a yOffset between −40 and 40 to vary the float baseline.Update the grid columns
If you add a fourth card, change
md:grid-cols-3 to md:grid-cols-2 lg:grid-cols-4 (or any layout that suits the new count) so cards do not stretch awkwardly.