Neon Retro Web is a single-page portfolio template that channels the visual energy of the late-1990s and early-2000s web — neon glows, CRT scanline overlays, retro OS window chrome, and blinking marquee banners — rebuilt with a fully modern React 18 stack. It exists because personal portfolio sites deserve personality: the same pixel-grid opulence of the Y2K era lives side-by-side with production-grade tooling, giving you a starting point that stands out from every minimalist card layout without sacrificing maintainability.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.
Architecture
Neon Retro Web is a Vite-bundled SPA that ships a singleindex.html entry point. Routing is handled by React Router v6’s HashRouter, meaning all navigation happens on the client via the URL hash (e.g. https://yoursite.com/#/about). At build time, Vite also emits a flat collection of per-page HTML files inside the /pages/ directory — one file per route — so the project works on any static host (GitHub Pages, Netlify, Cloudflare Pages) without requiring server-side redirect rules.
Directory Structure
Tech Stack
React 18
Concurrent rendering,
useId, and the latest hooks. All components are function-based; no class components.Vite
Sub-second HMR in development and an optimised production bundle with code-splitting via Rollup.
React Router v6
HashRouter + Routes / Route for fully client-side navigation. Hash-based URLs require zero server configuration.Framer Motion
AnimatePresence wraps every route change; each page fades and scales in via motion.div with spring transitions.Tailwind CSS
Extended with a full Y2K token set — custom colors, font families (
VT323, JetBrains Mono, Space Grotesk), and bespoke utility classes.Lucide React
Lightweight, tree-shakeable SVG icon library. Used in the
Window chrome (minimize, maximize, close) and throughout the UI.Design Philosophy
The aesthetic is unapologetically Y2K. Every design decision is rooted in the visual language of the late-1990s to early-2000s web:- Deep-space backgrounds — the base canvas (
#05050d) mimics a powered-off CRT, dark enough to make neon colors vibrate. - Neon palette — a curated set of electric tones (teal, turquoise, magenta, lime, violet, orange) applied through Tailwind tokens so every component speaks the same visual language.
- CRT scanline overlay — the
.crt-overlayutility adds a pseudo-element with an alternating horizontal scanline gradient and a subtle RGB fringe, recreating the phosphor-dot texture of period monitors. - Retro OS window chrome — the
Windowcomponent wraps page content in a panel with a teal title bar, bevelled minimize/maximize/close buttons, and ascrollbar-retrotrack that matches the neon palette. - Motion as decoration — Framer Motion page transitions use a spring (
stiffness: 300, damping: 25) that feels snappy rather than cinematic, matching the immediacy of the era. - Pixel typography —
VT323(a pixel/bitmap display face) is used for all headings;JetBrains Monofor code and data;Space Groteskfor body copy.
Routes
| Path | Page | Build Output |
|---|---|---|
/ | Home | pages/Home.html |
/about | About | pages/About.html |
/projects | Projects | pages/Projects.html |
/skills | Skills | pages/Skills.html |
/writing | Writing | pages/Writing.html |
/case-studies | Case Studies | pages/CaseStudies.html |
/contact | Contact | pages/Contact.html |
https://yoursite.com/#/projects, not /projects. This is intentional: the hash fragment is handled entirely by the browser, so the server always serves the same index.html regardless of which route is requested.
Custom Tailwind Color Tokens
The entire neon palette is registered as named Tailwind tokens so you can use them in any utility class (bg-y2k-teal, border-y2k-magenta, text-y2k-lime, etc.).
CSS Utility Reference
| Class | Effect |
|---|---|
.text-glow-teal | Dual-layer teal text-shadow glow (#06b6d4) |
.text-glow-magenta | Dual-layer magenta text-shadow glow (#ec4899) |
.crt-overlay | Scanline + RGB-fringe pseudo-element overlay |
.scrollbar-retro | Teal 16 px scrollbar with arrow buttons |
.bg-dots-pattern | Radial-gradient dot grid (turquoise, 20 px pitch) |
.animate-marquee | Infinite right-to-left translate on a 20 s loop |
.animate-blink | Step-end opacity blink at 1.5 s — used by BadgeNew |
.animate-spin-slow | Full 360° rotation on a 4 s linear loop |