Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/apursley2012/neon-retro-web/llms.txt

Use this file to discover all available pages before exploring further.

The Skills page (/skills) is the portfolio’s most interactive page. The entire skill display is framed as a Windows 9x-style software installer — Skill_Installer_v2.0.exe — wrapped inside the shared Window component. Users can tick individual skill-category checkboxes, then click Install All to trigger an animated progress bar that counts from 0 % to 100 %. As the bar fills, every proficiency bar in all three categories animates from zero to its actual percentage via a CSS transition: width 1s ease-in-out. The NullSoft Install System credit v2.46 appears in the footer for authenticity.

Page Structure

// Skills page component (minified identifier: lm)
const SkillsPage = () => {
  const [installing, setInstalling] = useState(false);
  const [progress, setProgress] = useState(0);
  const [installed, setInstalled] = useState([]);  // array of category IDs

  const handleInstallAll = () => {
    setInstalling(true);
    setProgress(0);
    const timer = setInterval(() => {
      setProgress((prev) => {
        if (prev >= 100) {
          clearInterval(timer);
          setInstalling(false);
          setInstalled(skillCategories.map((c) => c.id));
          return 100;
        }
        return prev + 5;
      });
    }, 100);
  };

  const toggleCategory = (id) => {
    setInstalled((prev) =>
      prev.includes(id) ? prev.filter((c) => c !== id) : [...prev, id]
    );
  };

  return (
    <motion.div
      initial={{ opacity: 0 }}
      animate={{ opacity: 1 }}
      exit={{ opacity: 0 }}
      className="max-w-3xl mx-auto"
    >
      <Window title="Skill_Installer_v2.0.exe" icon={<CpuIcon />}>
        {/* Windows 9x installer chrome */}
        <div className="bg-[#c0c0c0] text-black font-sans p-1 border-2 border-white border-r-gray-600 border-b-gray-600">
          {/* Banner area */}
          {/* Component checklist + description sidebar */}
          {/* Optional progress bar */}
          {/* NSIS footer */}
        </div>
      </Window>
    </motion.div>
  );
};

Skill Categories

The skillCategories array (Lr in the bundle) defines three top-level categories, each with four named skills and integer proficiency levels:
// assets/main.js — skill categories array (identifier: Lr)
const skillCategories = [
  {
    id: "frontend",
    name: "Front-End Development",
    skills: [
      { name: "React / Next.js",         level: 90 },
      { name: "TypeScript / JavaScript", level: 85 },
      { name: "Tailwind CSS / SCSS",     level: 95 },
      { name: "HTML5 Semantic / A11y",   level: 90 },
    ],
  },
  {
    id: "backend",
    name: "Back-End & Data",
    skills: [
      { name: "Node.js / Express",    level: 75 },
      { name: "PostgreSQL / SQL",     level: 70 },
      { name: "REST APIs / GraphQL",  level: 80 },
      { name: "Prisma / ORMs",        level: 75 },
    ],
  },
  {
    id: "tools",
    name: "Tools & Workflow",
    skills: [
      { name: "Git / GitHub",                level: 85 },
      { name: "Debugging / DevTools",        level: 95 },
      { name: "Technical Writing / Docs",    level: 90 },
      { name: "UI / UX Design",             level: 80 },
    ],
  },
];

UI Sections

Installer Banner

A white-background header panel with a from-y2k-teal to-y2k-magenta gradient icon square (holding a Cpu Lucide icon), a bold Developer Skills Setup heading, and a Select the components you want to install. subtitle. Mimics NSIS/Inno Setup’s standard first-page banner.

Component Checklist

A bg-white border-2 border-gray-600 scrollable listbox at 256 px height. Each category row is clickable and toggles a CheckSquare / Square icon. Expanding each category shows skill rows with name, Proficiency: XX% label, and a navy (#000080) filled progress bar.

Description Sidebar

A 192 px-wide right panel with two bg-[#ece9d8] inset boxes: Description (“Hover over a component…; acquired through rigorous debugging and sheer stubbornness”) and Space Required (1.4 MB required, 42.0 GB available).

NSIS Footer

A gray border-t-2 border-gray-400 footer with the NullSoft Install System v2.46 credit on the left and two Windows-chrome-style buttons (Install All / Cancel) on the right. Buttons use the classic border-2 border-white border-r-gray-600 border-b-gray-600 bevel style.

Installer State Machine

The page component manages three pieces of state that drive the visual transitions:
StateTypePurpose
installingbooleanDisables Install All and shows the progress bar while the interval runs
progressnumber (0–100)Drives the navy #000080 progress bar width and the Installing... XX% label
installedstring[]Array of category id strings; a category is “checked” when its id appears here
When progress === 100, Install All relabels to Installed and the button is permanently disabled.

Customising This Page

This is a pre-built static site. The repository contains only compiled output — there is no src/ directory or editable source files. The customisation steps below describe changes that must be made in the original source project before rebuilding.
1

Add or edit skill categories

In your source project, locate the skill categories data array (the Lr identifier in the minified bundle). Add a new object with a unique id, a human-readable name, and a skills array. Each skill needs a name string and a level integer from 1–100. The checklist and proficiency bars are both driven from this single array.
2

Change proficiency percentages

Update the level field on any skills entry in the source project. The bar width is set via style={{ width: \$%` }}with atransition: width 1s ease-in-out. Values over 100 will overflow the container — cap at 100 unless the comedy overflow is intentional (see Debugging.dll: 110%` on the Home page preview).
3

Rename the installer window

In the source project, the Window component receives title="Skill_Installer_v2.0.exe". Change this string to anything — My_Skills_v3.exe, resume.pdf, etc.
4

Update the description sidebar copy

In the source project, the two bg-[#ece9d8] sidebar boxes contain hardcoded text. Find the <p className="text-gray-700"> tags inside the Description and Space Required panels and edit them. The Space Required values (1.4 MB, 42.0 GB) are also plain text strings.
5

Adjust the progress bar speed

The setInterval callback fires every 100 ms and increments progress by 5. To make the animation slower in the source project, increase the interval delay (e.g., 150) or decrease the increment (e.g., 2). To make it instant, set the increment to 100 and delay to 1.
Skill proficiency bars animate from 0 % to their target level only when the category is checked (i.e., its id is in the installed array) or when progress === 100 (which auto-checks all categories). Categories unchecked before clicking Install All will not animate — this is intentional; the installer metaphor implies you’re “installing” only the selected skill packs.
The Cancel button currently does nothing (no onClick handler). In the source project, to add a reset behavior, attach onClick={() => { setInstalled([]); setProgress(0); setInstalling(false); }} to it. This makes the interaction feel more like a real Windows dialog.

Build docs developers (and LLMs) love