Documentation Index
Fetch the complete documentation index at: https://mintlify.com/apursley2012/sys-core/llms.txt
Use this file to discover all available pages before exploring further.
FrequencyGauge displays a single skill’s proficiency as an animated SVG circular progress arc paired with a radio-frequency label. The arc fills from empty to its target percentage over 1.5 seconds using a Framer Motion strokeDashoffset animation, and the frequency string beneath the skill name (for example, 144.2 MHz for React/Next.js) ties the display into the site’s radio-communications metaphor. Each gauge is self-contained and driven by three props: a numeric level, a human-readable label, and a frequency string read from data/skills.js.
Visual Role
The frequency metaphor maps each skill to a place on the radio spectrum:- UHF range (~144–145 MHz) — Front-end and interface skills (
NAVIGATIONgroup): React/Next.js at144.2 MHz, TypeScript at144.5 MHz, Tailwind CSS at145.1 MHz, Framer Motion at145.8 MHz. - VHF range (~432–433 MHz) — Back-end and data-processing skills (
PROPULSIONgroup): Node.js at432.1 MHz, PostgreSQL at432.5 MHz, Redis at433.0 MHz, GraphQL at433.8 MHz. - GHz range (~1.2–1.5 GHz) — Tooling and infrastructure skills (
LIFE SUPPORTgroup): Git/CI-CD at1.2 GHz, Docker at1.3 GHz, AWS/Vercel at1.4 GHz, Jest/Vitest at1.5 GHz. - High-GHz range (~5 GHz) — Soft skills and design (
COMMSgroup): UI/UX Design at5.0 GHz, Tech Writing at5.2 GHz, Mentorship at5.4 GHz, Agile/Scrum at5.8 GHz.
#06b6d4 (cyan-signal) with a drop-shadow-[0_0_8px_rgba(6,182,212,0.5)] glow, against a faint rgba(6, 182, 212, 0.1) track ring. The percentage integer is displayed in bold at the centre of the arc.
Usage
Render aFrequencyGauge for each skill entry in a skill group. The level, label, and frequency values come directly from data/skills.js.
Props
Skill proficiency as an integer from
0 to 100. This value drives both the SVG arc fill (as a percentage of the full circumference) and the numeric display at the arc’s centre. A level of 95 fills 95 % of the arc.The skill name displayed below the arc, for example
"React / Next.js" or "PostgreSQL". Rendered in text-sm font-bold text-off-white tracking-wide.The radio-frequency string associated with this skill, for example
"144.2 MHz" or "1.2 GHz". Sourced from the frequency field on each skill entry in data/skills.js. Displayed below the label in text-xs font-mono text-cyan-signal/70.Skills Data Shape
Thedata/skills.js file exports an array of skill-group objects. Each group maps to a spacecraft subsystem and contains an array of individual skill entries:
Implementation Notes
SVG arc geometry
The arc is a 96 × 96 px SVG circle (radiusr = 40) centred at (48, 48). The full circumference is 2π × 40 ≈ 251.3 px. Two overlapping <circle> elements are drawn:
- A static track ring in
rgba(6, 182, 212, 0.1)atstrokeWidth: 4. - A Framer Motion
<motion.circle>in#06b6d4atstrokeWidth: 4whosestrokeDasharrayis set to the full circumference and whosestrokeDashoffsetanimates from the full circumference (empty) down tocircumference × (1 - level/100)(partially filled).
-90° so the arc starts at 12 o’clock rather than 3 o’clock.
Framer Motion entrance animation
AuseState flag (animated) starts as false and is set to true after a 100 ms setTimeout in a useEffect. The Framer Motion animate prop then transitions strokeDashoffset from the full circumference to the target value over 1.5 s with an easeOut curve and a 0.2 s delay. This ensures the animation only plays once on mount and not on every re-render.
FrequencyGauge depends on Framer Motion (framer-motion) via the ../../assets/proxy.js import alias. Ensure Framer Motion is installed in the project before rendering this component outside the standard build.