Skip to main content

Documentation Index

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

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

This guide walks you through cloning the Full Moon repository, serving its pre-built static files locally, and navigating every route in the browser. Because the repo contains only Vite build output — no src/ directory — there is no compile step and no npm install required before you can run the site. By the end you will have the portfolio running locally and understand how the hash-based routing connects each URL to its corresponding HTML shell.
1

Clone the repository

Clone Full Moon from GitHub to your local machine:
git clone https://github.com/apursley2012/full-moon.git
cd full-moon
The repository contains only static build output: index.html, the pages/ directory, the components/ directory, and the compiled assets/. No node_modules or package manifest is present, so there is nothing to install before serving.
2

Start a local static server

Serve the repository root with any static file server. The quickest option requires only Node.js to already be installed:
npx serve .
Alternatively, use Python’s built-in server if you prefer:
# Python 3
python3 -m http.server 3000
Both commands serve the current directory over HTTP on a local port. npx serve defaults to port 3000; Python defaults to port 8000 unless you specify one.
3

Open the site in your browser

Once the server is running, open the URL it reports — for example:
http://localhost:3000
The browser loads index.html, which immediately bootstraps React and renders the landing page. You will see the starfield background, the fog overlay, the animated full-moon SVG, and the tagline “I cast useEffect() under the full moon.” Click Cross the Threshold to navigate to the About page.
4

Navigate to individual pages

Each page in the pages/ directory is a standalone HTML shell. You can navigate to them directly by URL:
http://localhost:3000/pages/About.html
http://localhost:3000/pages/Skills.html
http://localhost:3000/pages/Contact.html
When a shell loads, its inline <script> sets window.__STATIC_PAGE_ROUTE__ and updates window.location.hash, which tells the React app which route to render. The navigation bar rendered by Navigation.js also updates the hash on every link click, so you can browse between pages without ever reloading the server.

Exploring Routes

Each route in the application maps to a dedicated static HTML shell file. The table below lists every route alongside its corresponding file:
RouteStatic Shell
/index.html
/aboutpages/About.html
/skillspages/Skills.html
/workpages/Work.html
/projectspages/Projects.html
/case-studiespages/CaseStudies.html
/blogpages/Blog.html
/testimonialspages/Testimonials.html
/contactpages/Contact.html

How Routing Works

Full Moon does not use a server-side router or a conventional client-side router package for initial page resolution. Instead, each static HTML shell carries a small inline script in its <head> that runs before React mounts:
<script>
  window.__STATIC_PAGE_ROUTE__ = "/about";
  if (!window.location.hash || window.location.hash === "#/" || window.location.hash === "#") {
    window.location.hash = "/about";
  }
</script>
The global window.__STATIC_PAGE_ROUTE__ value tells the React app which page component to render. The window.location.hash assignment ensures the URL bar reflects the current route immediately, even on a hard reload. When users click navigation links, Navigation.js updates window.location.hash directly, and the React app re-renders the matching page component — no server round-trip required. The landing page (index.html) does not set window.__STATIC_PAGE_ROUTE__; the app defaults to the / (home) route in that case.
npx serve . and Python’s python3 -m http.server are the two easiest zero-install options for local development. Both serve the directory over HTTP with correct MIME types for JavaScript ES modules. If you already have a preferred local server (VS Code Live Server, Caddy, nginx) it will work equally well — just make sure it serves from the repository root so that relative asset paths (./assets/main.js, ../assets/main.css) resolve correctly.
Do not open index.html directly by double-clicking it in your file manager or using a file:// URL in the browser. The HTML files load main.js and proxy.js as ES modules via <script type="module">, and browsers block cross-origin module imports on the file:// protocol with a CORS error. Always use a local HTTP server as described in the steps above.

Build docs developers (and LLMs) love