The Projects page (Documentation 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.
/projects) replaces a traditional card grid with an interactive star map — a 200vw × 200vh canvas that the visitor can drag freely in any direction. Each project appears as a glowing circle planet at a fixed percentage coordinate on the map. Clicking a planet slides open a detail panel from the right edge of the screen. The entire experience is contained inside a calc(100vh - 8rem) tall overflow-hidden container so the page never scrolls.
Star Map Canvas
The draggable area is a Framer Motiondiv with drag={true} and dragConstraints bound to the parent overflow-hidden container via a useRef. Its natural size is w-[200vw] h-[200vh], giving two full viewport-widths and viewport-heights of navigable space. A CSS scale transform is applied directly via the zoom state variable, shrinking or expanding the canvas while keeping it centered (top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2). The cursor changes to cursor-grab normally and active:cursor-grabbing while dragging.
Grid Background
The grid is rendered as a CSSbackgroundImage applied to an absolutely-positioned inset-0 child div:
Zoom Controls
A fixed panel in the top-left corner (absolute top-4 left-4 z-20) holds the zoom controls inside a hud-border container:
| Button | Action |
|---|---|
+ | Increase zoom by 0.25 |
− | Decrease zoom by 0.25 |
| Reset | Set zoom back to 1.0 |
Math.min(Math.max(newZoom, 0.5), 2). A live readout (ZOOM: XX%) is displayed below the buttons in font-mono text-[10px] text-space-turquoise.
Project Nodes
Each project is rendered as an absolutely-positioned Framer Motiondiv at left: x%, top: y% within the map canvas. On hover the entire group scales to 1.1× (whileHover={{ scale: 1.1 }}). The visual consists of three layers:
- Ping ring — An
absolute inset-0 rounded-full animate-ping-slow opacity-20div styled in the project’scolor, scaled to2×. Theanimate-ping-slowkeyframe runs the standardpinganimation at a 3-second interval for a gentle pulse. - Solid circle — A
relative rounded-fulldiv sized atsize × sizepx withbackgroundColor: colorandboxShadow: 0 0 ${size}px ${color}80for a soft glow halo. - Name label — A
font-mono text-xslabel in abg-space-navy/80 border border-space-white/10pill, and afont-mono text-[10px] text-space-turquoisetype label, both rendered below the circle and ignoring pointer events.
Detail Panel
Clicking any project node sets it as theselectedProject state. An AnimatePresence-wrapped Framer Motion div slides in from the right:
w-full md:w-96, absolutely positioned at top-0 right-0 bottom-0, with bg-space-navy/95 backdrop-blur-xl and a left border in border-space-turquoise/30. Its header shows a TARGET ACQUIRED label and a close (×) button.
The panel body contains:
- A
w-16 h-16 rounded-fullcolor swatch with a0 0 20px ${color}40glow - Project
nameinfont-serif text-3xl - Project
typeinfont-mono text-sm text-space-turquoise - A DESCRIPTION section label followed by
descintext-space-white/80 - A TECH STACK section label followed by pill chips:
px-3 py-1 rounded-full border border-space-white/20 text-xs font-mono bg-space-white/5 - Two CTA buttons: LAUNCH (cyan hover) and SOURCE (white hover), both using the
hud-borderstyle
Projects Data
| Name | Type | Color | Stack |
|---|---|---|---|
| Nebula UI | Design System | #22d3ee | React, Tailwind, Storybook |
| Quasar Analytics | Dashboard | #14b8a6 | TypeScript, D3.js, WebSockets |
| Pulsar API | Backend Service | #7c3aed | Node.js, Redis, GraphQL |
| Void Explorer | Web3 App | #f43f5e | Next.js, Solidity, Ethers.js |
| Comms Relay | Chat App | #eab308 | React Native, WebRTC, Firebase |
Adding or Editing Projects
Locate the data array
Find the
Zt array in assets/main.js (search for "Nebula UI" to jump directly to it). Each object in the array represents one star on the map.Add a new project
Append a new object following the
Project interface above. Choose x and y values (0–100) that don’t overlap with existing nodes — check the existing coordinates in the table above. Use a size between 25 and 65 px for visual variety, and pick a hex color that contrasts with the #020617 navy background.Nodes placed near the edges of the canvas (x or y close to
0 or 100) may be partially off-screen at the default centered view. Consider placing key projects in the 20–80 range so they’re immediately discoverable without dragging.