The TelemetryRadar component (Documentation Index
Fetch the complete documentation index at: https://mintlify.com/apursley2012/dev.void/llms.txt
Use this file to discover all available pages before exploring further.
TelemetryRadar.js) renders an animated radar screen where each skill appears as a glowing dot at a position defined by an angle and a distance from the centre. A sweeping arc rotates continuously around the radar; when the sweep passes within 30° of a skill’s angle, that dot pulses bright green and scales up. Below the radar, a responsive grid displays each skill alongside an animated progress bar. All of this is driven by a single data array called d.
The Skills Data Array
Each skill is a plain object in thed array at the top of TelemetryRadar.js:
angle and distance control only visual placement on the radar. strength is the number that appears in the tooltip (React 95%) and drives the animated progress bar in the grid — it has no effect on where the dot appears on the radar.Existing Skills
The eight default entries and their current positions:| Name | Angle | Distance | Strength |
|---|---|---|---|
| React | 30° | 40 | 95% |
| TypeScript | 75° | 60 | 90% |
| Tailwind | 120° | 35 | 98% |
| Framer Motion | 160° | 70 | 85% |
| Node.js | 210° | 55 | 80% |
| Three.js | 260° | 80 | 70% |
| GraphQL | 310° | 65 | 75% |
| UI/UX Design | 345° | 45 | 88% |
Understanding Angle and Distance
The radar uses standard polar-to-Cartesian conversion to place each dot:x and y are expressed as percentages of the radar container, with (50, 50) being the exact centre.
Angle (0–360°)
0° places a dot at the rightmost point of the horizontal axis. Values increase clockwise: 90° is at the bottom, 180° is left, 270° is top. The radar grid lines sit at 0°/90°/180°/270°, so angles near those values place dots on the crosshairs.
Distance (0–100)
A distance of
0 places the dot at the dead centre. A distance of 100 places it at the very edge of the radar circle. Values between 20–40 cluster near the core; values between 70–90 push dots toward the outer ring.Angle Spacing Tips
Keeping angle values spread apart prevents dots and hover tooltips from overlapping. The default entries use roughly 40–50° of separation between adjacent skills.- Too close (< 25° apart): Tooltips overlap on hover; the sweep ping fires multiple skills at once.
- Sweet spot (35–60° apart): Each skill has its own clear sector; the sweep hits one dot at a time.
- Spread out (> 70° apart): Fine for six or fewer skills, but leaves large silent arcs on the radar.
(sweepAngle - skillAngle + 360) % 360 is between 0 and 30. This means the glow triggers for 30° of the full rotation, so skills within 30° of each other will both light up during the same sweep pass.
Distance Placement Guide
| Distance value | Visual position |
|---|---|
| 0–20 | Inner core — right at the centre |
| 25–45 | First ring — inside the innermost concentric circle |
| 50–65 | Mid-range — between the second and third rings |
| 70–85 | Outer zone — near the third ring |
| 90–100 | Edge — flush with the outermost ring |
distance to avoid all dots sitting on the same concentric circle, which makes the radar look like a ring rather than a scatter plot.
Adding a New Skill
Append a new object to thed array. Choose an angle that is at least 30° away from any existing entry to avoid ping collisions:
Replacing the Default Skill Set
To completely swap out the defaults for your own stack, replace the entire array. Here is an example for a backend-focused developer:How the Progress Bars Animate
Each progress bar in the grid uses Framer Motion’swhileInView to animate from width: 0 to width: {strength}% as the grid scrolls into view:
once: true) — refreshing the page will replay it, but scrolling back up and down will not re-trigger it. Remove viewport={{ once: true }} if you want it to replay every time the grid enters the viewport.