TheDocumentation 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.
OrbitSystem component is the centrepiece hero of the Space Mission home page. It renders a miniature solar-system diagram: a glowing central star (labelled DEV / SYS_CORE) surrounded by five planets — one for each major section of the portfolio — orbiting along elliptical paths. The entire diagram is built from CSS div elements styled with Tailwind and animated with Framer Motion; no SVG is used. Clicking any planet navigates directly to its corresponding route, making the diagram an animated, spatial navigation aid as well as a visual showpiece.
Layout
The component is rendered inside a fixed-height600 px flex container centred on the page:
The component is entirely self-contained — it accepts no props. All orbit data, colours, and sizes are defined internally in the
r (planets) array.Central Star
The star is amotion.div with a radial gradient from yellow-white to deep red, a 60 px orange box-shadow glow, and a continuous breathing animation that pulses the glow between 60 px and 80 px spread:
Planet Orbits
Each planet in ther array has the following shape:
| ID | Label | Path | RadiusX | RadiusY | Colour | Period |
|---|---|---|---|---|---|---|
about | ORIGIN | /about | 120 | 60 | bg-orange-400 | 20 s |
projects | MAP | /projects | 180 | 90 | bg-space-turquoise | 35 s |
skills | SKILLS | /skills | 240 | 120 | bg-space-teal | 45 s |
work | LOGS | /work | 320 | 160 | bg-indigo-400 | 60 s |
contact | COMMS | /contact | 400 | 200 | bg-rose-400 | 80 s |
div sized to radiusX * 2 by radiusY * 2 with border border-space-white/10 rounded-full, giving it an elliptical ring appearance. A Framer Motion rotating wrapper carries the planet dot around that ring.
Animation Technique
The continuous orbit is achieved by nesting twomotion.div elements: the outer one rotates from 0 → 360° over duration seconds; the inner one counter-rotates by the same amount so the planet div itself stays upright:
delay: -planet.delay (a negative value) starts the animation part-way through its cycle, so the planets are staggered across the orbit rather than all beginning at the three-o’clock position.
Interaction
Hovering a planet scales it to1.5× via whileHover={{ scale: 1.5 }}. A HUD-style tooltip with class="hud-border" appears via CSS opacity-0 group-hover:opacity-100 transition-opacity — no JavaScript state is involved. Clicking a planet calls useNavigate()(planet.path), navigating to the route associated with that orbital body.
Customization
Adding a planet. Append a new entry to ther array in OrbitSystem.js. Choose a radiusX / radiusY larger than the outermost existing orbit (400 / 200) to avoid overlap, and pick a duration longer than 80 s:
duration for a slower orbit, decrease it for a faster one. Very short durations (< 5 s) can feel disorienting.
Changing colours. Replace the Tailwind color class with any bg-* token defined in your Tailwind config. The box-shadow uses currentColor, so the glow automatically matches the planet’s background.