diff --git a/CHANGELOG.md b/CHANGELOG.md
index 8de05f4..10e9ac2 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -22,6 +22,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Adaptive quality in `BaseEngine`: an EMA of frame time nudges a dpr multiplier (down to 0.55) with cooldown hysteresis so weak GPUs get a softer image instead of dropped frames.
- Richer visuals: deeper offset-lit ocean, wider atmospheric rim with a crisp shell line, 4-layer beams, twin impact rings, 3-pass aurora, warmer city lights.
- Calmer defaults and pacing: rotation 4°/s, activity 2.4/s, meteor frequency 40%, slower/longer-lived meteors and beams.
+- Renamed the widget's own branding from "games.directory" to **Orbit** across UI titles, logos and file headers. The embed API global is now `window.__ORBIT_SCENE__` (was `__GD_SCENE__`) and the persisted panel keys are `orbit-scene` / `orbit-scene-open` (was `gd-globe-*`) — a breaking change for existing embeds and saved settings.
+- Moved the local-server / usage note off the root chooser page into [`docs/USAGE.md`](docs/USAGE.md).
### Fixed
diff --git a/canvas/cinema.js b/canvas/cinema.js
index a555933..227fbdc 100644
--- a/canvas/cinema.js
+++ b/canvas/cinema.js
@@ -1,4 +1,4 @@
-/* games.directory globe — Canvas2D cinematic layers
+/* Orbit — Canvas2D cinematic layers
*
* The wow extras: the Moon, the rare comet, constellations, the ocean sun
* glint, the HQ heartbeat and the city-surge marker. Same layer contract as
diff --git a/canvas/draw.js b/canvas/draw.js
index 34e1e68..5761774 100644
--- a/canvas/draw.js
+++ b/canvas/draw.js
@@ -1,4 +1,4 @@
-/* games.directory globe — shared Canvas2D draw helpers
+/* Orbit — shared Canvas2D draw helpers
*
* Tiny rendering utilities used by both canvas/layers.js (the core layers)
* and canvas/cinema.js (the cinematic extras). Rendering only — no geometry,
diff --git a/canvas/engine.js b/canvas/engine.js
index 0034751..29f3adf 100644
--- a/canvas/engine.js
+++ b/canvas/engine.js
@@ -1,4 +1,4 @@
-/* games.directory globe — Canvas2D engine
+/* Orbit — Canvas2D engine
*
* Thin subclass of BaseEngine (shared/engine.js): all the shared machinery lives
* there; here we only wire the canvas-specific hooks. Each frame clears the
diff --git a/canvas/index.html b/canvas/index.html
index a1ed53e..9866138 100644
--- a/canvas/index.html
+++ b/canvas/index.html
@@ -3,7 +3,7 @@
diff --git a/canvas/layers.js b/canvas/layers.js
index 364cbc7..e672952 100644
--- a/canvas/layers.js
+++ b/canvas/layers.js
@@ -1,4 +1,4 @@
-/* games.directory globe — Canvas2D render layers
+/* Orbit — Canvas2D render layers
*
* Each layer is { name, z, rebuildOn?, build?, resize?, simulate?, visible?, draw }.
* Layers draw in ascending z. To add an effect, write a factory and add it to
diff --git a/canvas/main.js b/canvas/main.js
index 6df6f3b..ebde562 100644
--- a/canvas/main.js
+++ b/canvas/main.js
@@ -1,11 +1,11 @@
-/* games.directory globe — Canvas2D entry point
+/* Orbit — Canvas2D entry point
*
* Modes:
* • clean (default) — the production hero: globe + brand + live ticker, no controls.
* • demo (?demo) — adds the FPS meter and the full control / "Scene & effects" panel.
*
* Scene source (all validated against the schema before use):
- * • window.__GD_SCENE__ inline embed from the platform (highest priority)
+ * • window.__ORBIT_SCENE__ inline embed from the platform (highest priority)
* • ?config= fetch the per-deployment config JSON
* • ?demo the demo's own localStorage
* • otherwise schema defaults
@@ -33,7 +33,7 @@ const data = { HQ, ACTIVITY_TYPES, CITIES, landFeature: null };
const scene = await resolveScene({
demo,
configUrl: params.get('config'),
- inline: window.__GD_SCENE__,
+ inline: window.__ORBIT_SCENE__,
});
const engine = new Engine({ canvas, scene, sim, data });
registerDefaultLayers(engine);
diff --git a/docs/USAGE.md b/docs/USAGE.md
index 6c6ec49..88cda01 100644
--- a/docs/USAGE.md
+++ b/docs/USAGE.md
@@ -8,6 +8,18 @@ Orbit runs in two modes, served from a static file server (see
- **Demo** — add `?demo` (`/canvas/?demo`): adds the FPS meter and the full
control + **Scene & effects** panel for tuning. The chooser links here.
+The bare `/canvas/` or `/svg/` URL is the clean hero (globe only, no controls);
+the `?demo` links add live controls + FPS.
+
+## Running locally
+
+The world map is fetched at runtime, so Orbit needs to be served over HTTP (not
+opened as a `file://` path). Any static server works, e.g.:
+
+```
+python3 -m http.server 8000 # → http://localhost:8000
+```
+
## Controls
Everything is user-tunable live via the **Scene & effects** panel (in demo mode),
@@ -25,7 +37,7 @@ cities, and activity types (label / colour / weight). Then embed the clean hero:
```html
```
@@ -52,7 +64,7 @@ contract with the games.directory platform:
At runtime the scene is resolved by `resolveScene()` in this precedence:
-1. **`window.__GD_SCENE__`** — an inline config object the platform embeds;
+1. **`window.__ORBIT_SCENE__`** — an inline config object the platform embeds;
2. **`?config=`** — fetched per-deployment config JSON (from your API);
3. **`?demo`** — the demo panel's own `localStorage`;
4. otherwise — schema defaults.
diff --git a/index.html b/index.html
index 7e00b04..6e2d4d3 100644
--- a/index.html
+++ b/index.html
@@ -3,7 +3,7 @@
- games.directory · Activity Globe — Canvas vs SVG
+ Orbit · Activity Globe — Canvas vs SVG
- Needs a static server (the world map is fetched at runtime):
- python3 -m http.server 8000 → http://localhost:8000
- The links above open demo mode (?demo) with live controls + FPS. The
- bare canvas/ or svg/ URL is the clean hero — globe only, no
- controls.
- Customise HQ / cities / activity types in shared/data.js; scene settings come
- from the platform (?config=<url> or window.__GD_SCENE__),
- bounded by shared/scene-schema.js.
-
- games.directory · side-by-side
+ Orbit · side-by-side← Back to chooser
diff --git a/legacy/data.js b/legacy/data.js
index 3d6b3be..13c9b92 100644
--- a/legacy/data.js
+++ b/legacy/data.js
@@ -1,12 +1,12 @@
-/* games.directory globe — data layer
+/* Orbit — data layer
* HQ, activity types, and real-world city coordinates ([lng, lat]).
* Coordinates are accurate; the projection places them precisely on the sphere.
*/
window.GD = window.GD || {};
-// games.directory HQ — London, UK
-GD.HQ = { name: 'games.directory HQ', city: 'London', lnglat: [-0.1276, 51.5074] };
+// Orbit HQ — London, UK
+GD.HQ = { name: 'Orbit HQ', city: 'London', lnglat: [-0.1276, 51.5074] };
// Activity types. `color` is the live, user-editable beam colour.
GD.ACTIVITY_TYPES = [
diff --git a/legacy/globe.js b/legacy/globe.js
index 4416388..b4f9883 100644
--- a/legacy/globe.js
+++ b/legacy/globe.js
@@ -1,4 +1,4 @@
-/* games.directory globe — engine
+/* Orbit — engine
* Accurate rotating orthographic globe (D3 geo) with dotted land,
* and great-circle "activity beams" that fire from real city
* coordinates and converge on HQ. Rendered in SVG.
@@ -60,14 +60,14 @@
};
var scene = Object.assign({}, SCENE_DEFAULTS);
try {
- var saved = JSON.parse(localStorage.getItem('gd-globe-scene') || '{}');
+ var saved = JSON.parse(localStorage.getItem('orbit-scene') || '{}');
Object.keys(saved).forEach(function (k) {
if (k in scene) scene[k] = saved[k];
});
} catch (e) {}
function saveScene() {
try {
- localStorage.setItem('gd-globe-scene', JSON.stringify(scene));
+ localStorage.setItem('orbit-scene', JSON.stringify(scene));
} catch (e) {}
}
var DENSITY_STEP = { sparse: 3.8, med: 3.0, dense: 2.4 };
@@ -1410,7 +1410,7 @@
else host.setAttribute('hidden', '');
gear.setAttribute('aria-pressed', open ? 'true' : 'false');
try {
- localStorage.setItem('gd-globe-scene-open', open ? '1' : '0');
+ localStorage.setItem('orbit-scene-open', open ? '1' : '0');
} catch (e) {}
}
gear.addEventListener('click', function () {
@@ -1418,7 +1418,7 @@
});
var wasOpen = false;
try {
- wasOpen = localStorage.getItem('gd-globe-scene-open') === '1';
+ wasOpen = localStorage.getItem('orbit-scene-open') === '1';
} catch (e) {}
if (wasOpen) setOpen(true);
}
diff --git a/legacy/index.html b/legacy/index.html
index 1f7a3b1..41b15b3 100644
--- a/legacy/index.html
+++ b/legacy/index.html
@@ -3,7 +3,7 @@
- games.directory · Live Activity Globe
+ Orbit · Live Activity Globe
-
-
+
@@ -98,7 +98,7 @@
g
-
games.directory
+
Orbit
Live activity · worldwide
diff --git a/svg/layers.js b/svg/layers.js
index f290a92..cdd4f3d 100644
--- a/svg/layers.js
+++ b/svg/layers.js
@@ -1,4 +1,4 @@
-/* games.directory globe — SVG render layers
+/* Orbit — SVG render layers
*
* Every visual element is a self-contained layer object:
* { name, z, rebuildOn?, build(e), resize?(e), simulate?(e), draw(e) }
diff --git a/svg/main.js b/svg/main.js
index 3230c51..11da0ce 100644
--- a/svg/main.js
+++ b/svg/main.js
@@ -1,11 +1,11 @@
-/* games.directory globe — SVG entry point
+/* Orbit — SVG entry point
*
* Modes:
* • clean (default) — the production hero: globe + brand + live ticker, no controls.
* • demo (?demo) — adds the FPS meter and the full control / "Scene & effects" panel.
*
* Scene source (all validated against the schema before use):
- * • window.__GD_SCENE__ inline embed from the platform (highest priority)
+ * • window.__ORBIT_SCENE__ inline embed from the platform (highest priority)
* • ?config= fetch the per-deployment config JSON
* • ?demo the demo's own localStorage
* • otherwise schema defaults
@@ -33,7 +33,7 @@ const data = { HQ, ACTIVITY_TYPES, CITIES, landFeature: null };
const scene = await resolveScene({
demo,
configUrl: params.get('config'),
- inline: window.__GD_SCENE__,
+ inline: window.__ORBIT_SCENE__,
});
const engine = new Engine({ svg, scene, sim, data });
registerDefaultLayers(engine);
diff --git a/svg/scene.css b/svg/scene.css
index 2b73b8a..c0ba6c2 100644
--- a/svg/scene.css
+++ b/svg/scene.css
@@ -1,4 +1,4 @@
-/* games.directory globe — SVG renderer scene styles
+/* Orbit — SVG renderer scene styles
*
* Element-specific styling for the SVG globe. Chrome (vars, body, .stars,
* .brand, .panel, .ticker, .scene, .fps-meter, #loading, media query) lives in