The Testimonials page — labelledDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/apursley2012/space-mission/llms.txt
Use this file to discover all available pages before exploring further.
SIGNALS in the HUD — presents peer and client commendations as if they were incoming transmissions drifting through deep space. Rather than a conventional scrollable list, each testimonial card floats freely on a full-viewport dark canvas, positioned at absolute percentage coordinates so the layout feels organic and non-linear. Hovering over a card triggers a subtle scale-up and a signal-wave animation, reinforcing the idea of a live signal locking on.
Page Layout
The page uses aposition: relative full-viewport container (100vw × 100vh) with the Starfield component rendering behind it. A header block anchored to the top-left corner displays the section title and a brief descriptor. Each testimonial card is then placed with position: absolute, using the x and y fields as left and top percentage values respectively:
On small viewports some cards may overlap or clip near the edges. The
x and y values are percentages of the viewport, so repositioning a card for a narrower breakpoint is as simple as updating its coordinates in the data array.Card Anatomy
Each floating card displays the following elements in order:| Element | Description |
|---|---|
| RCVD FROM | Small all-caps label acting as the card’s header — signals the card is an inbound transmission |
| Sender name | Testimonial author’s name in larger weight text |
| Role | Job title and organisation (formatted as Role @ Organisation) |
| Quote text | Full commendation text in italic prose |
| SIG_VERIFIED | Small monospace footer label indicating the signal has been authenticated |
| Signal bars | Animated bar meter that appears on hover, visually identical to the blog signal bars |
Animation
Card animations are driven by Framer Motion and operate in two modes:Floating (ambient)
Every card continuously oscillates on the Y axis to simulate weightlessness in orbit. Theanimate prop runs an infinite looping sequence:
delay field in each testimonial object staggers the start of the float cycle, so the four cards drift independently rather than rising and falling together.
Hover
When the pointer enters a card, Framer Motion’swhileHover prop applies two changes simultaneously:
scale: 1.05— enlarges the card slightly to bring it “forward” from the canvaszIndex: 50— lifts the hovered card above any overlapping neighbours
opacity transition (0 → 1).
Current Testimonials
The four commendations defined in the data array, with their canvas coordinates and animation delays:| ID | Name | Role | x (left %) | y (top %) | Delay (s) |
|---|---|---|---|---|---|
| 1 | Sarah Connor | Lead Architect @ Skynet | 10 | 20 | 0 |
| 2 | Ellen Ripley | Product Manager @ Weyland | 50 | 10 | 2 |
| 3 | David Bowman | Mission Commander @ Discovery | 20 | 60 | 1 |
| 4 | Cooper | Pilot @ Endurance | 60 | 50 | 3 |
Quote Texts
- Sarah Connor — “An exceptional navigator of code. Saved our project from total structural collapse during the final phase.”
- Ellen Ripley — “Communicates clearly across the void. Delivered the UI components ahead of schedule despite hostile API conditions.”
- David Bowman — “I am completely operational, and all my circuits are functioning perfectly, thanks to their robust error handling.”
- Cooper — “They understand that time is a resource. Optimized our render cycles to save us years of loading screens.”
Data Shape
Each testimonial conforms to the following TypeScript interface:Adding or Repositioning Testimonials
Adding a new testimonial
Append a new object to thetestimonials array with a unique id, the author’s details, and a canvas position that avoids heavy overlap with existing cards:
Repositioning an existing card
Change thex and y values of the target entry. Use the browser’s DevTools to preview the result at your target viewport width, as percentage positions are viewport-relative.
Adjusting float amplitude
The Y-oscillation distance ([0, -20, 0]) is hardcoded in the animate prop. To make cards drift more or less dramatically, change −20 to a larger or smaller negative pixel value (e.g., −8 for subtle drift, −40 for exaggerated float).