Customising Portfolio Projects in MissionPatchWall
A complete guide to customising the MissionPatchWall project entries — data shape, color gradients, icons, and wiring up real GitHub and live-demo links.
Use this file to discover all available pages before exploring further.
The MissionPatchWall component (MissionPatchWall.js) renders your portfolio projects as circular mission-patch badges arranged in a responsive grid. Clicking a patch opens a full-screen modal with the project description, tech tags, and link buttons. All project data lives in a single JavaScript array called E near the top of the file, making it straightforward to add, remove, or reorder entries without touching any JSX.
Each project is an object in the E array. Here is the complete shape with every field explained:
// MissionPatchWall.js — project data arrayconst E = [ { id: "p1", // Unique string — used as React key & layoutId name: "Nebula UI", // Displayed on the patch badge and modal heading type: "Component Library", // Shown below the name (patch footer + modal subheading) desc: "A React component library built for deep-space applications. Features zero-gravity physics simulations for drag-and-drop interfaces.", // Full description rendered inside the modal tech: ["React", "Framer Motion", "Tailwind"], // Rendered as pill tags under "Payload Specs" in modal color: "from-aurora-teal to-space-900",// Tailwind gradient — patch background + modal header strip icon: "🌌", // Emoji — centred on the patch and repeated in the modal }, // ... more entries];
The id value is used as a Framer Motion layoutId to animate the patch expanding into the modal. Every entry must have a uniqueid string — duplicates will cause the shared-layout animation to break.
The patch background and modal header strip both use the color field as Tailwind bg-gradient-to-br (patch) and bg-gradient-to-r (modal) classes. The to-space-900 end-stop keeps everything consistent with the dark theme.
Aurora Teal
from-aurora-teal to-space-900 — cool cyan-green, great for developer tooling projects.
Aurora Pink
from-aurora-pink to-space-900 — warm magenta, works well for design or creative projects.
from-indigo-500 to-space-900 — deep blue-purple, fitting for games or immersive experiences.
You can also use any valid Tailwind from-* colour as the start-stop (e.g. from-violet-500, from-rose-500, from-amber-500), as long as the class is included in your Tailwind config’s safelist or present elsewhere in the project so it is not purged.
The grid layout is grid-cols-1 sm:grid-cols-2 lg:grid-cols-4, so adding a fifth entry will wrap onto a second row at the lg breakpoint. There is no upper limit on entries — the grid simply continues to wrap.
The modal currently renders both link buttons pointing to href="#". To add real URLs, extend each project object with github and url fields, then update the JSX anchor tags to read from those fields.Step 1 — Add fields to your data:
// MissionPatchWall.js — extended entry with real links{ id: "p1", name: "Nebula UI", type: "Component Library", desc: "A React component library built for deep-space applications...", tech: ["React", "Framer Motion", "Tailwind"], color: "from-aurora-teal to-space-900", icon: "🌌", github: "https://github.com/your-username/nebula-ui", // ← add this url: "https://nebula-ui.dev", // ← add this},
Using e.github ?? "#" keeps the button functional even for projects where you haven’t provided a link yet — clicking it simply stays on the page instead of navigating away.
Here is a fully populated entry ready to paste in:
{ id: "p5", name: "Stellar Forms", type: "Form Builder", desc: "A drag-and-drop form builder with conditional logic, multi-step flows, and WCAG 2.1 AA accessibility compliance. Exports to React, Vue, or plain HTML.", tech: ["React", "TypeScript", "Tailwind", "Zod"], color: "from-rose-500 to-space-900", icon: "📋", github: "https://github.com/your-username/stellar-forms", url: "https://stellar-forms.app",},
Keep id values as simple strings without spaces or special characters. Framer Motion uses the id as a DOM data-motion-layout-id attribute — non-alphanumeric characters may cause unexpected layout animation behaviour.