Web Surfer uses React Router v6 with hash-based history. Every URL change happens via the fragment identifier (theDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/apursley2012/web-surfer/llms.txt
Use this file to discover all available pages before exploring further.
# portion of the URL), which means the browser never actually requests a new path from the server. This design choice makes the app trivially deployable on any static file host — no server-side routing rules, redirects, or _redirects files are required.
How hash routing works
React Router is initialised with a hash history instance (the@remix-run/router createHashHistory factory, exported as part of the bundled Layout.js). All navigation therefore produces URLs of the form:
index.html — regardless of what follows the #. The React app reads the hash on startup, matches it against the registered routes, and renders the correct page component. Because the hash is a client-side concern, there is no 404 risk from direct visits or refreshes.
Available routes
| Route | Description |
|---|---|
/ | Home page — hero section and animated visitor counter |
/about | Personal biography and introduction |
/skills | Tech skills showcase |
/projects | Featured projects |
/work | Work history and experience timeline |
/blog | Blog posts and writing |
/testimonials | Testimonials from colleagues and clients |
/contact | Contact form |
Static page per route
Each HTML file in thepages/ directory acts as a direct-access entry point for its corresponding route. When a visitor opens pages/About.html directly (e.g. from a file server or GitHub Pages subdirectory), the inline script fires before any JavaScript bundle runs:
#/about so that when main.js loads and React Router initialises, the hash history already points at the correct route. The window.__STATIC_PAGE_ROUTE__ sentinel can additionally be read by the app for any pre-render logic before the router takes over.
Linking between pages
Inside the React app, navigation uses React Router’s<Link> component imported from react-router-dom:
href directly: