Five card components handle the bulk of portfolio content display — from the About page’s tarot personality cards to the project circular badges, article parchment cards, and testimonial ghost quotes. Each component is documented below with its full prop set, types, and a usage example.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/apursley2012/spell-index/llms.txt
Use this file to discover all available pages before exploring further.
TarotCard
TarotCard renders a classic flip card. The back face shows a decorative spinning star rune with the text “Reveal”. Clicking the card flips it 180° on the Y axis to show the front face: a Roman numeral, a Lucide React icon inside a circular frame, a title, and a description paragraph.
Props
Roman numeral displayed at the top of the card face, e.g.
"I", "II", "III". Used to number the card in the major arcana style.Card title displayed in Cinzel font below the icon, e.g.
"The Architect".A Lucide React icon element rendered inside a circular amber-bordered frame on the card face. Pass the JSX directly:
icon={<Code className="w-8 h-8 text-amber" />}.Body text displayed below the title. Rendered in
font-inter at 14 px. Long descriptions scroll within the card using the custom scrollbar.Framer Motion entrance animation delay in seconds. Staggers cards when rendering a row. The entrance itself animates
y: 50 → 0 and opacity: 0 → 1 over 0.8 s.Usage
SpellCircleCard
SpellCircleCard renders a circular project card. Two concentric rings rotate in opposite directions (one clockwise, one counter-clockwise) around a central disc that houses the project title, description, tech tags, and optional link icons. On hover the inner disc scales up slightly and the border brightens to full teal.
Props
Project name displayed in amber Cinzel font at the center of the circle.
Short project description shown below the title. Limited to three visible lines via
line-clamp-3.Array of technology tag strings rendered as small teal pill badges inside the circle, e.g.
["Next.js", "Shopify", "Three.js"].Optional GitHub repository URL. When provided, a GitHub icon button appears at the bottom of the card. Opens in a new tab.
Optional live project URL. When provided, an external link icon button appears alongside the GitHub icon. Opens in a new tab.
Framer Motion entrance animation delay in seconds. The card enters via
scale: 0.8 → 1 and opacity: 0 → 1 over 0.8 s.Usage
WaxSeal
WaxSeal renders a small circular embossed badge that mimics a pressed wax seal using layered CSS box-shadow values for the inset highlight and shadow. It is used by ParchmentCard as a tag badge but can be placed anywhere a decorative stamp is needed.
Props
Text displayed inside the seal. Typically 2 characters (
"JS", "01") but accepts any short string.Color variant of the wax. Each variant uses a matching set of base, highlight, and shadow tones:
"teal"— teal/cyan palette"amber"— gold palette"red"— deep crimson palette (default)
Controls the overall dimensions and font size of the seal:
"sm"—w-8 h-8,text-xs"md"—w-12 h-12,text-sm"lg"—w-16 h-16,text-xl
Usage
ParchmentCard
ParchmentCard renders an article preview as a piece of aged parchment paper (bg-[#e8dcc7]). A torn-paper SVG strip decorates the top edge, and a WaxSeal badge (using color="red") peeks from the top-right corner at a 45° angle. The entire card is wrapped in a React Router <Link> to /articles/${slug}. On hover the card lifts 8 px.
Props
Article headline rendered in Cinzel font (
text-xl font-bold) on the parchment surface.Article preview text shown below the title. Truncated to three lines via
line-clamp-3.Publication date string displayed above the title in small uppercase tracking, e.g.
"Oct 31, 2023".Topic tag string. The first two characters (uppercased) are passed to the
WaxSeal component as initials. For example tag="React" produces a seal reading "RE".URL slug used to build the article detail link:
/articles/${slug}. For example slug="state-management" links to /articles/state-management.Framer Motion entrance animation delay in seconds. Card enters via
y: 20 → 0 and opacity: 0 → 1 over 0.6 s.Usage
GhostQuote
GhostQuote renders a testimonial card with a semi-transparent gradient background. After its entrance animation completes, the card enters an infinite float loop — drifting 0 → -15px → 0 vertically. Multiple GhostQuote instances with different floatOffset values (which set the delay on the float loop) create an asynchronous bobbing effect across a row of testimonials.
Props
The testimonial text. Rendered in italic
font-inter at text-lg inside smart quote characters.Full name of the person being quoted, e.g.
"Sarah Jenkins". Displayed in amber Cinzel below the quote. The first character is also used as an avatar initial.Job title and company of the author, e.g.
"Product Manager @ MysticTech". Displayed in small teal text below the author name.Framer Motion entrance animation delay in seconds. Card enters via
y: 50 → 0 and opacity: 0 → 1 over 1 s.Delay in seconds applied to the infinite float loop animation. Set different values per card (e.g.
0, 1, 2) so quotes bob out of phase with each other.