Digital Domain is a single-page application that uses React Router v6’sDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/apursley2012/digital-domain/llms.txt
Use this file to discover all available pages before exploring further.
BrowserRouter to manage navigation entirely on the client. All 11 routes share a single Layout shell component that renders the sticky Win98-style header, the scanlines overlay, and the AnimatePresence-wrapped <Outlet> for page transitions. Navigation never triggers a full page reload — the browser URL updates and React Router swaps the active page component in place.
Route Table
| Path | Component | Description |
|---|---|---|
/ | Home | Welcome marquee ticker, Notepad-style intro window, webring links |
/about | About | Bio inside a Win98 window, RPG-style animated stat bars, Polaroid photos |
/projects | Projects | Three draggable project windows on a free-form desktop canvas |
/skills | Skills | Full Win98 desktop simulation with icons, openable windows, and a taskbar |
/work | Work | Typewriter animation rendering CAREER.TXT inside a Notepad window |
/case-studies | CaseStudies | Windows Explorer file browser listing case study .doc files |
/case-studies/:slug | CaseStudyDetail | WordPad-style document view for an individual case study |
/blog | Blog | Filterable list of blog posts styled as Win98 table layouts |
/blog/:slug | BlogPost | Individual blog post with mood, currently-listening metadata |
/contact | Contact | Retro contact form inside a Send_Message.exe window |
/testimonials | Guestbook | Interactive guestbook with live-added entries and random emoji avatars |
Router Setup
The entire application is bootstrapped inassets/main.js. The root App component (Ee in the minified bundle) wraps everything in a BrowserRouter, then declares a single top-level Route for "/" whose element is <Layout>. Every page is a nested child route rendered into Layout’s <Outlet>.
Child routes use bare path segments (e.g.
"about", "blog/:slug") rather than absolute paths. React Router v6 concatenates them onto the parent "/" automatically, so the resolved URL for the About page is /about, not //about.Navigation Array (navLinks)
The Layout component defines a navLinks array that drives the sticky header navigation bar. Each entry maps a URL path to a display label. The active route is highlighted by comparing navLinks[i].path against useLocation().pathname.
navLinks is mapped to a row of <BeveledButton> components inside <nav>. The active button receives the active prop, which applies the shadow-win-btn-active box-shadow to give it the “pressed” Win98 look:
There are 11 routes in the router tree but only 9 entries in
navLinks. The /case-studies/:slug and /blog/:slug detail pages are accessible via their list views and are intentionally omitted from the top-level navigation.Dynamic Routes with useParams()
Two routes use a :slug URL parameter to load individual content items:
/case-studies/:slug→CaseStudyDetail/blog/:slug→BlogPost
useParams() to retrieve the slug and use it as the document heading (with hyphens replaced by spaces):
caseStudies array (rebranding-techcorp, scaling-databases, accessibility-overhaul). Blog post slugs (why-tables-are-better, css-is-a-fad, my-new-winamp-skin) are likewise statically declared — there is no external CMS or API.
Static Deployment Caveat
Digital Domain is deployed as a static site (GitHub Pages). Because
BrowserRouter uses the HTML5 History API, navigating directly to a deep link like https://example.github.io/digital-domain/about will result in a 404 from the server — the web host has no file at that path.The repository includes a .nojekyll file to prevent Jekyll processing, but you must also configure a 404 fallback. Common solutions for GitHub Pages include:- Adding a
404.htmlthat redirects toindex.htmland restores the path viasessionStorage. - Switching to
HashRouterso all routing state lives in the URL hash (e.g./#/about), which the static host never intercepts.