The Spell Affinities page (Documentation Index
Fetch the complete documentation index at: https://mintlify.com/apursley2012/witch-dev/llms.txt
Use this file to discover all available pages before exploring further.
ye component) is the portfolio’s interactive skills showcase. It renders a fully SVG-based radar chart with 8 spokes — one per skill — and places a hoverable hexagonal tile at the tip of each spoke. Hovering a tile expands it outward, contracts its neighbors, and reveals the skill name alongside its proficiency level label ("Lvl [N]").
The page title reads “Spell Affinities” (styled with text-glow-purple) and the subtitle instructs visitors: “Hover over the sigils to reveal proficiency levels.”
Skills Data
The full skills array is defined as a constantp at the top of the component module:
| Field | Type | Description |
|---|---|---|
name | string | Display name shown on hover |
level | number | Proficiency percentage (0–100); controls spoke reach |
category | string | Grouping label (Frontend, Backend, Database, etc.) |
Radar Chart Geometry
The radar chart is rendered as a single<svg> element. Key geometry constants:
- Viewport:
600 × 600viewBox units - Center:
{ x: 300, y: 300 } - Max radius:
250units - Spoke count:
8(one per skill) - Angular spacing:
360 / 8 = 45°per spoke
Concentric Grid Rings
Four concentric rings are drawn at 25%, 50%, 75%, and 100% of the max radius to provide visual reference:| Ring | Radius | Stroke color | strokeDasharray |
|---|---|---|---|
| 100% | 250 px | #2d1b4e | none (solid) |
| 75% | 187.5 px | #1a0b2e | 4 4 (dashed) |
| 50% | 125 px | #1a0b2e | 4 4 (dashed) |
| 25% | 62.5 px | #1a0b2e | 4 4 (dashed) |
4 4). The outermost ring also uses a slightly lighter purple (#2d1b4e) while the inner rings use a deeper near-black purple (#1a0b2e), keeping visual emphasis on the boundary and the skill polygon within it.
Skill Polygon
The filled polygon overlaid on the grid traces the actual proficiency of each skill. Its vertex on spokei is placed at:
Hexagonal Skill Tiles
At the tip of each spoke — positioned at the fullmaxRadius distance from the center regardless of proficiency — sits a hexagonal tile. Each tile is rendered as an SVG <polygon> with a hexagon point arrangement forming a small hex icon.
Hover Animation
Tiles use Framer Motion for their interaction. Theanimate prop drives three states:
| State | Transform |
|---|---|
| Default (rest) | translateR(0px) |
| Hovered tile | translateR(+20px) (outward along spoke) |
| Adjacent tiles | translateR(-10px) (inward, pulled back) |
- The skill
name(e.g.,"React.js") - The proficiency tag:
"Lvl 90"
Adding or Updating a Skill
Each skill entry follows this shape:level value. The polygon vertex for that spoke will automatically move closer to or farther from the center.
To add a new skill, push a new object into the p array:
The
category field is currently cosmetic — it appears in the tile hover label but does not affect chart grouping or coloring. All skills share the same acid-green polygon style regardless of category.