Log Portfolio handles navigation without React Router. Instead, the app reads fromDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/apursley2012/log-portfolio/llms.txt
Use this file to discover all available pages before exploring further.
window.location.hash and a special global variable — window.__STATIC_PAGE_ROUTE__ — to determine which window should open automatically when the page loads. This bespoke approach keeps the routing surface minimal and works seamlessly with GitHub Pages static hosting, where server-side URL rewriting is not available.
How Hash-Based Routing Works
The app’s router inspectswindow.location.hash on mount. A URL like https://example.com/#/about-page will cause the router to match the /about-page route and call openWindow() for the About Me app. Because the hash fragment is handled entirely client-side, no server configuration is required and the same index.html entry point serves all routes.
window.__STATIC_PAGE_ROUTE__ is an additional signal used by the static pages in pages/. When a visitor navigates directly to a static page file (e.g. pages/AboutPage.html), that file sets this variable before the React app boots. The router reads it on startup and treats it as the intended route, even if the hash is not yet set.
Static Page Files
Each app in the desktop registry has a corresponding HTML file inpages/. These files load the same compiled Vite bundle as index.html, but they inject two extra lines into a <script> block in the <head>:
- Sets
window.__STATIC_PAGE_ROUTE__— tells the React router which route this page represents, regardless of the current hash. - Sets
window.location.hash— forces the hash to the correct route if it isn’t already set (e.g. on a fresh load). If the visitor already has a hash (such as from a previously visited URL), it is left untouched to avoid overriding their navigation state.
pages/AboutPage.html renders the full desktop with the AboutMe.txt window already open — the same experience as reaching index.html#/about-page.
All Static Page Routes
AboutPage.html
Route:
Opens the AboutMe.txt Notepad-style window with the developer’s bio and skills summary.
/about-pageOpens the AboutMe.txt Notepad-style window with the developer’s bio and skills summary.
BlogPage.html
Route:
Opens the Internet Explorer window with the retro Geocities-style blog.
/blog-pageOpens the Internet Explorer window with the retro Geocities-style blog.
ContactPage.html
Route:
Opens the Outlook Express window with the email compose form.
/contact-pageOpens the Outlook Express window with the email compose form.
ProjectsPage.html
Route:
Opens the My Computer file explorer window listing portfolio projects.
/projects-pageOpens the My Computer file explorer window listing portfolio projects.
SkillsPage.html
Route:
Opens the Control Panel window with animated skill installation progress bars.
/skills-pageOpens the Control Panel window with animated skill installation progress bars.
TestimonialsPage.html
Route:
Opens the MSN Messenger window with scrolling client testimonials as chat messages.
/testimonials-pageOpens the MSN Messenger window with scrolling client testimonials as chat messages.
Adding a New Static Page
Copy an existing page file
Duplicate any existing file in
pages/ as a starting point. For example, to add a resume page:Update the route value and title
Open the new file and change the
<title> and the two routing values in the inline <script>:Add the app to the Desktop registry
Add a new entry to the
apps array in components/Desktop.js with a matching id and your new app component:The .nojekyll File
The repository root contains a
.nojekyll file. GitHub Pages runs a Jekyll build step by default that ignores any file or directory whose name begins with an underscore (_). The .nojekyll file disables this behavior, ensuring that Vite’s assets/ output directory and any other files that Jekyll might otherwise suppress are served correctly. Without it, the compiled JavaScript and CSS could return 404 errors on GitHub Pages.Further Reading
Architecture Overview
The full three-layer shell model, data flow diagram, and the desktop app registry format.
Window Management System
How
WindowContext tracks open windows, manages z-index focus ordering, and drives window animations.