NeonRetro Sys_Admin uses React Router v6 with a single nested route tree. ADocumentation 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.
HashRouter wraps everything so the app can be served from GitHub Pages and other static hosts without any server-side URL rewriting — all routes live after the # in the URL (e.g. /#/projects). Every page shares a common Layout component that provides the chrome: the scanline overlay, the cursor trail, the sticky navigation bar, the marquee ticker, and the footer.
Route tree
The full route configuration, as extracted fromassets/main.js, defines seven leaf routes all nested under a single root Layout route:
<Route index>) renders Home at the root path /#/. All other routes use path segments without a leading slash because they are children of the "/" parent route.
Route reference
| Path | Page Component | Description |
|---|---|---|
/#/ | Home | Hero section with draggable RetroWindow widgets |
/#/about | About | Bio, vital stats sidebar, and THINGS_I_NOTICE.log window |
/#/projects | Projects | Explorer-style project grid with modal detail views |
/#/skills | Skills | Skill bars categorized by Languages, Front-End, Back-End, and Specialties |
/#/writing | Writing | Blog archive with post metadata and tag filtering |
/#/case-studies | CaseStudies | Tabbed case study viewer with problem/goal/process/result layout |
/#/contact | Contact | Guestbook form with seeded entries and contact link panel |
The Layout component
components/layout/Layout.js is the component rendered by the root <Route path="/" element={<Layout />}>. It is responsible for every piece of persistent UI that appears on all pages. Its render output, in order, is:
- Scanline overlay — a
<div className="scanline">positioned absolutely over the entire screen. It runs thescanlineCSS animation that moves a translucent band from the top of the viewport to the bottom on a 10-second loop, simulating a CRT refresh. CursorTrail— a canvas-based component that renders neon particles following the mouse pointer.RetroNav— the sticky-top navigation bar. It uses React Router’sNavLinkcomponent to render links to all seven routes. When a link matches the current location, React Router applies anisActiveflag thatRetroNavuses to apply accent-color border and background styles.Marquee— a horizontally scrolling ticker rendered immediately below the nav, initialized with the text*** WELCOME TO MY CORNER OF THE INTERNET *** CURRENTLY: DEBUGGING REALITY *** MOOD: SUSPICIOUS OF CSS ***. The inner element carriesanimate-marqueeand pauses when hovered viahover:[animation-play-state:paused].<main>containing<Outlet />— the React RouterOutletis where the matched child route’s component renders. The<main>element constrains content tomax-w-6xland applies consistent horizontal padding.Footer— the bottom bar with social links and a status line.
NavLink active states
RetroNav uses React Router’s NavLink component rather than plain anchor tags. NavLink receives a render prop or className function that exposes { isActive }. The active route link receives a highlighted border and background derived from the Y2K color palette, giving users a clear visual indicator of their current location without any manual state management.
Adding a new page
Create the page component
Add a new file in your source tree, for example
pages/About.jsx. Export a default React component that contains your page content. You can import data from data/mockData.js and use RetroWindow or Sticker from components/ui/ as needed.Import the component in main.js
Open the source entry file and import your new component at the top alongside the existing page imports:
Register the route
Inside the The path should be a lowercase, hyphen-separated slug. It will be accessible at
HashRouter → Routes → root Route block, add a new <Route> sibling to the existing routes:/#/my-new-page.Add a NavLink in RetroNav
Open
components/layout/RetroNav.js and add a NavLink entry pointing to your new path. Follow the same pattern used by the existing links to ensure consistent active-state styling: