Documentation Index
Fetch the complete documentation index at: https://mintlify.com/apursley2012/neon-retro-sys-admin/llms.txt
Use this file to discover all available pages before exploring further.
The Skills page reframes a standard “tech stack” list as a character stats dashboard — the same language used for RPG character sheets, deliberately chosen to match the portfolio’s overall aesthetic and the About page’s VITAL_STATS.dat framing. Proficiency levels are shown as filled progress bars rather than star ratings or badge lists, making relative strengths immediately readable at a glance.
Route
Declared in the router as:
<Route path="skills" element={<SkillsPage />} />
The page opens with a centered title block:
<div className="text-center">
<h1 className="text-4xl font-display text-white mb-2">CHARACTER_STATS.dat</h1>
<p className="font-mono text-gray-500">Current Level: Mid-Weight Developer</p>
</div>
Four-Panel Grid
The four skill panels sit in a two-column grid (grid grid-cols-1 md:grid-cols-2 gap-8). Each panel is a RetroWindow component with a distinct color.
Languages (Cyan)
<RetroWindow title="Languages" color="cyan">
<SkillBar name="JavaScript (ES6+)" level={90} color="cyan" />
<SkillBar name="TypeScript" level={85} color="cyan" />
<SkillBar name="HTML/CSS" level={95} color="cyan" />
<SkillBar name="Python" level={60} color="cyan" />
</RetroWindow>
| Skill | Level |
|---|
| JavaScript (ES6+) | 90% |
| TypeScript | 85% |
| HTML/CSS | 95% |
| Python | 60% |
Front-End (Magenta)
<RetroWindow title="Front-End" color="magenta">
<SkillBar name="React" level={90} color="magenta" />
<SkillBar name="Tailwind CSS" level={85} color="magenta" />
<SkillBar name="Framer Motion" level={75} color="magenta" />
<SkillBar name="Next.js" level={80} color="magenta" />
</RetroWindow>
| Skill | Level |
|---|
| React | 90% |
| Tailwind CSS | 85% |
| Framer Motion | 75% |
| Next.js | 80% |
Back-End & Data (Lime)
<RetroWindow title="Back-End & Data" color="lime">
<SkillBar name="Node.js" level={70} color="lime" />
<SkillBar name="PostgreSQL" level={65} color="lime" />
<SkillBar name="REST APIs" level={85} color="lime" />
</RetroWindow>
| Skill | Level |
|---|
| Node.js | 70% |
| PostgreSQL | 65% |
| REST APIs | 85% |
Specialties (Purple)
The Specialties panel does not use progress bars. Instead, it renders each specialty as a <Sticker> component inside a flex-wrap container:
<RetroWindow title="Specialties" color="purple">
<div className="flex flex-wrap gap-4 p-2">
{skills.specialties.map((specialty, index) => (
<Sticker
key={specialty}
color={['white', 'magenta', 'cyan', 'lime'][index % 4]}
rotation={Math.random() * 10 - 5}
>
{specialty}
</Sticker>
))}
</div>
</RetroWindow>
The four specialties cycle through colors in order: white → magenta → cyan → lime. Each sticker receives a random rotation between -5° and +5° on render.
| Specialty |
|---|
| Debugging Spaghetti Code |
| Translating Medical Jargon |
| Pixel Pushing |
| Writing Docs People Actually Read |
SkillBar Component
The SkillBar is a local component defined inside the Skills page file. It renders a label row above a filled progress track:
function SkillBar({ name, level, color }) {
return (
<div className="mb-4">
<div className="flex justify-between font-mono text-xs mb-1">
<span className="text-gray-300">{name}</span>
<span className={`text-y2k-${color}`}>{level}%</span>
</div>
<div className="h-4 w-full bg-y2k-black border border-y2k-gray p-0.5">
<div
className={`h-full bg-y2k-${color} shadow-[inset_0_1px_0_rgba(255,255,255,0.5),inset_0_-1px_0_rgba(0,0,0,0.3)]`}
style={{ width: `${level}%` }}
/>
</div>
</div>
);
}
Key style details:
- The outer track is
h-4 (16px) with a dark background and a p-0.5 inset padding.
- The fill bar uses
bg-y2k-{color} set to the same color as the parent panel.
- An inline style sets
width to the percentage value, making the fill proportional.
- A
box-shadow inset adds a subtle highlight at the top edge and a shadow at the bottom edge, giving the bar a slightly raised appearance.
Data Structure
Skills data lives in data/mockData.js under the skills export:
const skills = {
languages: [
{ name: 'JavaScript (ES6+)', level: 90 },
{ name: 'TypeScript', level: 85 },
{ name: 'HTML/CSS', level: 95 },
{ name: 'Python', level: 60 },
],
frontend: [
{ name: 'React', level: 90 },
{ name: 'Tailwind CSS', level: 85 },
{ name: 'Framer Motion', level: 75 },
{ name: 'Next.js', level: 80 },
],
backend: [
{ name: 'Node.js', level: 70 },
{ name: 'PostgreSQL', level: 65 },
{ name: 'REST APIs', level: 85 },
],
specialties: [
'Debugging Spaghetti Code',
'Translating Medical Jargon',
'Pixel Pushing',
'Writing Docs People Actually Read',
],
};
Updating Skills
Changing a proficiency level
Find the skill by name in the relevant array and update its level value (0–100):
{ name: 'TypeScript', level: 85 }, // before
{ name: 'TypeScript', level: 92 }, // after
The progress bar width updates automatically since it is driven by style={{ width: \$%` }}`.
Adding a skill to an existing panel
Append a new object to the appropriate array:
frontend: [
{ name: 'React', level: 90 },
{ name: 'Tailwind CSS', level: 85 },
{ name: 'Framer Motion', level: 75 },
{ name: 'Next.js', level: 80 },
{ name: 'Astro', level: 55 }, // new entry
],
Adding a specialty
Append a string to the specialties array. The color cycling uses index % 4, so the next specialty after the existing four will automatically be assigned "white" (index 4 % 4 = 0).
specialties: [
'Debugging Spaghetti Code',
'Translating Medical Jargon',
'Pixel Pushing',
'Writing Docs People Actually Read',
'Surviving Code Reviews', // new entry
],