The Skills page replaces the conventional progress-bar or percentage list with a full pentagram visualisation. Each of the five points of the star represents a core skill — the vertex position and the size of a pulsing halo around each node reflect the developer’s self-assessed proficiency level. Two overlapping SVG pentagrams (styled as a wand star and a chalice star) animate their path lengths on mount, drawing themselves into view before the skill labels appear.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/apursley2012/web-weaver/llms.txt
Use this file to discover all available pages before exploring further.
Route
#/skills or click the Skills link in the site navigation.
Visual Layout
Dual Pentagram SVG
Two five-pointed star paths drawn one on top of the other. The wand star uses a warmer stroke colour; the chalice star uses a cooler tone. Both animate their
pathLength from 0 to 1 on mount via Framer Motion.Skill Nodes
A circular node sits at each pentagram vertex. The node’s outer glow (halo) pulses in a looping animation — the halo radius is proportional to the skill’s
level value, giving a visual weight to higher-rated skills.Skill Labels
Each node is accompanied by a text label showing the skill name. Labels are positioned outward from the vertex so they never overlap the pentagram lines.
Mastery Centre Text
The word “Mastery” is rendered at the geometric centre of the pentagram, anchoring the composition and reinforcing the section’s theme.
Pentagram Geometry
Skills are placed at pentagram vertices calculated from a central origin. Theangle field in each skill object specifies the vertex offset in degrees, starting from the top (12 o’clock position) and moving clockwise in 72° increments.
| Vertex | Degrees from top | Skill |
|---|---|---|
| 1 | 0° | React |
| 2 | 72° | TypeScript |
| 3 | 144° | Node.js |
| 4 | 216° | CSS / Tailwind |
| 5 | 288° | GraphQL |
Data & Configuration
Skills are stored in theT array inside assets/main.js:
Field reference
| Field | Type | Purpose |
|---|---|---|
name | string | Skill label displayed next to the node |
level | number (0–100) | Proficiency score; drives the pulsing halo size |
angle | number (degrees) | Vertex position on the pentagram (0 = top, clockwise) |
Customisation
Update skill names and levels
Edit the
name and level fields in the T array. level should be an integer between 0 and 100. Changing a level value automatically resizes that node’s pulsing halo — no other changes are needed.Add a sixth skill (advanced)
The pentagram is a five-point figure, so adding a sixth item requires changing the visualisation from a pentagram to a hexagram (or another polygon). Update the SVG path data in the
PentagramSVG component and add corresponding vertex angles at 60° increments for a hexagram, then append the new skill object to T.Change the star stroke colours
The wand-star and chalice-star stroke colours are defined as CSS custom properties (or Tailwind classes) inside the
PentagramSVG component. Update those values to match your preferred palette.Adjust animation speed
The
pathLength animation duration is configured in the Framer Motion transition object on each motion.path. Increase duration for a slower, more dramatic draw; decrease it for a snappier reveal.Key Components
| Component | Description | Docs |
|---|---|---|
PentagramSVG | Draws the two overlapping star paths and manages the pathLength animation | Internal |
SkillNode | Renders the pulsing halo circle and skill label at a given vertex | Internal |
Interactive Behaviour
Path-draw animation on mount
Path-draw animation on mount
Both pentagram paths use a Framer Motion
motion.path with initial={{ pathLength: 0 }} and animate={{ pathLength: 1 }}. The two paths animate with a slight stagger so the wand star finishes first, then the chalice star draws over it. This creates a layered, ritual-like reveal.Pulsing halo on skill nodes
Pulsing halo on skill nodes
Each
SkillNode renders a motion.circle that loops between two r (radius) values using Framer Motion’s animate with repeat: Infinity and repeatType: 'mirror'. The base radius and pulse delta are derived from the skill’s level — a level of 95 produces a noticeably larger and more active pulse than a level of 75.The
angle field is measured in degrees clockwise from the top of the circle. The component converts it to SVG coordinates internally using Math.sin and Math.cos. You do not need to calculate SVG x/y positions manually — just set the angle and the component does the rest.