The Projects page (Documentation Index
Fetch the complete documentation index at: https://mintlify.com/apursley2012/magical/llms.txt
Use this file to discover all available pages before exploring further.
/projects) is titled The Grimoire and subtitled “The Coven of Completed Projects.” It renders four 3D flip cards in a responsive CSS grid, each representing a completed project. Hovering a card rotates it 180° on the Y axis to reveal the project’s description, tech stack, and action links on the reverse face.
Visual & UX Overview
Responsive CSS Grid
Cards are laid out in a
grid that responds to viewport width: 1 column on mobile, 2 columns on medium and large screens (md:grid-cols-2 lg:grid-cols-2), and 3 columns on extra-large screens (xl:grid-cols-3).3D Flip Interaction
Each card is
h-[450px] tall and uses CSS transform-style: preserve-3d with perspective. On hover, the card’s rotateY value transitions from 0 to 180 via a Framer Motion spring animation. The front face has backface-visibility: hidden and the back face starts at rotateY: 180deg so it appears correctly when revealed.Front Face Anatomy
The front face shows: an Unsplash project image (grayscale → color on hover), a
<Sigil> badge, a mock-data disclosure note (mockNote), the project category, and the project title.Back Face Anatomy
The back face shows: the heading “The Incantation”, a project description paragraph, a row of tech stack badges (labelled “Components:”), and three action buttons — Cast Demo, Reveal Source, and Read Tome.
Projects Data
The four projects are defined in a static array. Each object contains all data needed to render both the front and back faces:Sigil-to-Project Mapping
| Project | Sigil Type | Rationale |
|---|---|---|
| Apothecary Inventory | alchemy | Mixing ingredients → database records and React state |
| Lunar Phase Tracker | moon | Direct thematic match |
| Grimoire CMS | star | Star as symbol of structured, celestial knowledge |
| The Scrying Pool | eye | Scrying = gazing / observing data |
3D Flip Card Implementation
The
flipped state is per-card (each card has its own local useState), not shared at the grid level. This means multiple cards can be flipped simultaneously if the user moves their cursor quickly between them.Card Entrance Animation
Cards stagger in on page load:Back Face Action Buttons
Each project card’s back face presents three actions:| Button Label | Action |
|---|---|
| Cast Demo | Opens demoUrl |
| Reveal Source | Opens sourceUrl (GitHub) |
| Read Tome | Opens readmeUrl |
Customization
Adding a new project
Adding a new project
Append a new object to the
projects array with all required fields: id (number), title, category, sigilType (one of star | moon | alchemy | eye), image, mockNote, description, tech (string array), demoUrl, sourceUrl, and readmeUrl. The grid will automatically accommodate the new card.Changing card height
Changing card height
Card height is set as a fixed
h-[450px] Tailwind class on the card wrapper. Increase this value for projects with longer descriptions on the back face, or standardise at a larger value to give all cards more breathing room.Replacing Unsplash images
Replacing Unsplash images
Each project’s
image field is a URL string. Replace Unsplash URLs with hosted images, local /public assets, or a CDN path. Recommended aspect ratio is 16:9 or 4:3 for best coverage on the front face. Images are displayed as object-cover CSS.Updating tech stack badges
Updating tech stack badges
The
tech array on each project is an arbitrary string array. Each element becomes a badge chip on the back face (under the “Components:” label). There is no maximum length enforced, but more than six items may overflow the back face at smaller viewport widths.Component Dependencies
| Component | Source | Role |
|---|---|---|
Sigil | components/Sigil.js | Animated SVG sigil rendered on each card’s front face |
BackgroundEffects | components/BackgroundEffects.js | Global ambient particle and blur layer |
Navigation | components/Navigation.js | Fixed top navigation bar |
motion (Framer Motion) | assets/proxy.js | rotateY spring flip animation, staggered grid entrance |