TheDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/apursley2012/cosmic-developer/llms.txt
Use this file to discover all available pages before exploring further.
Footer component closes out the visual shell of the Cosmic Developer portfolio with a layer of ambient, low-key branding. Rather than a conventional link-heavy footer, it renders two tongue-in-cheek system-status messages in monospaced type at the bottom-left — a nod to the space-mission aesthetic — alongside a tiny animated rocket icon that drifts continuously across the viewport from left to right. The whole element sits in the fixed bottom layer, is invisible to pointer events, and blends into the starfield using mix-blend-screen so it never competes with page content.
Usage
Footer is a zero-prop component. Include it once inside the app shell, below your <main> content region:
Footer is a standalone file at components/cosmos/Footer.js. It exports the component as the named export Footer (minified export alias F). Import it directly from Footer.js, not from Navigation.js.Placement
Footer uses fixed bottom-0 w-full positioning, so it occupies the very bottom of the viewport on every page without pushing any content. It sits at z-40 — one layer below the Navigation bar’s z-50 and well below the overlay’s z-[100] — so neither the top nav nor a full-screen overlay will be obscured by it.
The recommended placement inside the app shell is:
pointer-events-none is set on the root footer element, it will never intercept clicks intended for content beneath it, which is important given its fixed layering over the page.
What It Renders
Status Messages
The left side of the footer renders a<div> with two <p> tags in font-mono text-xs text-star-dim/50. The messages are intentionally absurdist mission-control flavour text:
mix-blend-screen blend mode means this text will appear to glow when overlaid on dark backgrounds and remain subtle on lighter areas, staying readable across the dynamic starfield without requiring a hard background colour.
Animated Rocket
A Framer Motion<motion.div> containing a rotated Lucide Rocket icon (rotate-45) traverses the full viewport width on a looping animation:
-10vw to 110vw over 40 seconds, bobs gently on the y axis every 10 seconds, and rocks on its axis every 15 seconds. The colour is text-aurora-teal/40 — partially transparent teal — so it registers as a delightful ambient detail rather than a visual distraction.
Customization
Changing the Status Messages
Opencomponents/cosmos/Footer.js and update the two <p> children inside the font-mono div:
Adjusting the Rocket Speed
Modify thex.duration value in the transition prop. Lower values make the rocket cross faster; higher values slow it to a drift:
Removing the Rocket
Delete the<motion.div> block entirely. The footer will then render only the status-text div, which is still a coherent standalone element.
Adding Social Links or Copyright
To add a right-aligned social link cluster or copyright notice, extend the root<footer> flex container with a second child. Because pointer-events-none is set on the root, any interactive children (links, buttons) must explicitly override it with pointer-events-auto:
Adjusting Padding
The root element usesp-4 (16 px on all sides). Change this to px-6 pb-6 or any Tailwind spacing utility to shift the text away from the viewport edge.
Styling
Footer integrates seamlessly with the rest of the Cosmic Developer design language:
| Token | Value | Usage |
|---|---|---|
text-star-dim/50 | Muted off-white, 50% opacity | Status message text colour |
mix-blend-screen | CSS blend mode | Keeps text visible over starfield |
text-aurora-teal/40 | Teal, 40% opacity | Rocket icon colour |
font-mono | Monospace typeface | Status message font family |
z-40 | Stack order 40 | Below nav bar, above background layers |
Module Note
Footer lives in its own dedicated source file at components/cosmos/Footer.js and is imported separately from Navigation.js. Despite both components forming the outer shell of the app, they are not co-located in the same module. Always import Footer from Footer.js to avoid pulling in the entire Navigation bundle unnecessarily.