Skip to main content

Documentation Index

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

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

Layout is the top-level shell of the Retro Webpage application. It wires together every persistent UI layer — the animated sparkle cursor trail, the tiled grid background, a pixel-font navigation bar, and a webring footer — then delegates page rendering to React Router’s <HashRouter>. Every route in the SPA lives inside Layout, so global chrome (cursor, background, nav, webring) is always present regardless of which page the visitor is on.

How It Works

Layout composes four building blocks:
PieceRole
SparkleCursorFixed-position sparkle particle trail that follows the mouse (z-50)
TiledBackgroundFull-page retro grid pattern wrapper (see TiledBackground)
<nav>Top navigation bar linking all nine pages
WebringNavFooter webring strip reminiscent of 1990s site rings
Inside TiledBackground, a <HashRouter> mounts a <Routes> tree that maps each URL path to its corresponding page component. The nav bar (bg-[#9999cc], font-pixel, bevel-outset) renders links to every top-level route:
LabelPath
Home/
About Me/about
Projects/projects
Skills/skills
Resume/work
Long Reads/case-studies
Diary/blog
Guestbook/testimonials
Contact/contact

Usage

Layout is rendered once at the application root and requires no props — all composition happens internally.
import Layout from './components/Layout';

// In main.jsx / index.jsx
ReactDOM.createRoot(document.getElementById('root')).render(
  <React.StrictMode>
    <Layout />
  </React.StrictMode>
);
Layout uses HashRouter (URL hash-based routing) rather than BrowserRouter. This means all URLs take the form https://example.com/#/about. This is intentional for static hosting compatibility — no server-side routing configuration is required.

Adding a New Route

To add a page to the SPA, register a new <Route> inside the <Routes> block in Layout.js and add a matching <Link> to the <nav>:
// Inside Layout.js — add to the <Routes> block
import NewPage from './pages/NewPage';

<Route path="/new-page" element={<NewPage />} />

// Inside the <nav> — add a link
<Link to="/new-page" className="font-pixel text-white hover:underline">
  New Page
</Link>
All page components receive the TiledBackground grid and SparkleCursor automatically because they render inside Layout. You don’t need to add either wrapper to individual page files.

CSS Classes

ClassDescription
bg-[#9999cc]Muted periwinkle blue nav background evoking classic GeoCities palettes
font-pixelCustom pixel/bitmap font applied to nav link labels
bevel-outsetWindows 98-style raised border effect on the nav bar
fixed z-50Keeps SparkleCursor above all page content at all times

Build docs developers (and LLMs) love