# Pages
## Root structure
- **index.html** — Redirects to `gw.html`.
- **Active pages** — `gw.html`, `ugh.html`, `gs.html`, `basic.html` (see table below).
- **Shared** — `main.js`, `services-loader.js`, `services-data.json`, `ddate-now`, `assets/`, and per-page CSS/JS. **Chat backend** — `chat-server.js`, `package.json` (Node + `ws`) for the real-time chat on **GS**.
## Active
| Page | File | Description |
|--------|------------|-------------|
| **GW** | `gw.html` | Main GravityWell.xYz site (standard). |
| **Ugh**| `ugh.html` | UGH.im branded, high-energy version. |
| **GS** | `gs.html` | GalaxySpin.Space experience; includes embedded real-time chat widget. |
| **Basic** | `basic.html` | Minimal HTML/CSS, no JS; good for low bandwidth and accessibility. |
## Archive
Non-active or alternate versions are under `archive/`:
- **archive/standby.html** — Maintenance / standby page.
- **archive/unavailable.html** — Unavailable notice (with home link).
- **archive/future.html** (+ **archive/future.css**) — “Future” theme; loads `../services-data.json`.
- **archive/extra/** — Alternate layouts: Retro, Shelf, Icons, Bloodlust (ugh-bloodlust); `index.html` redirects to `../../gw.html`.
- **archive/GSS/** — GalaxySpin.Space theme variants (type0–type7) and `instructions.txt`.
- **archive/20260208_234428/** — Dated snapshot of GW and Ugh.
- **archive/services.json**, **archive/gs_services.json** — Legacy data (unused by active pages).
## Chat (GS)
**gs.html** includes an embedded real-time chat widget (bottom-right). It connects to a WebSocket server that broadcasts messages to all connected clients (no persistence).
- **Run the chat server:** From the repo root, `npm install` then `node chat-server.js` (or `npm run chat`). Listens on port **8081** by default; set `CHAT_PORT` to override.
- **Docker:** When deployed via the stack at `/opt/stacks/httpsimple`, a second service `chat-server` runs the Node server; the compose file exposes the WebSocket on port **8098**.
- **WebSocket URL (frontend):** Configurable so the same page works locally and behind a reverse proxy.
- **Default:** `ws://:8098` (or `wss://` if the page is served over HTTPS). Use when the chat server is reachable on port 8098.
- **Override:** Set `window.CHAT_WS_URL` before the chat script runs, or set `data-ws-url` on `` (e.g. `data-ws-url="wss://galaxyspin.space/chat-ws"` when proxying).