diff --git a/.claude-plugin/marketplace.json b/.claude-plugin/marketplace.json
deleted file mode 100644
index 9fbf0c9..0000000
--- a/.claude-plugin/marketplace.json
+++ /dev/null
@@ -1,28 +0,0 @@
-{
- "name": "star-map",
- "owner": {
- "name": "avalon-vanguard",
- "url": "https://github.com/avalon-vanguard"
- },
- "description": "Personal marketplace of cs:* Claude Code commands, agents, and skills.",
- "plugins": [
- {
- "name": "caveman",
- "source": "./",
- "description": "Ultra-compressed communication mode. Cuts token usage ~75% by dropping filler, articles, and pleasantries while keeping full technical accuracy. Adds a cs-caveman-mode persona agent, /cs:caveman slash command, and stdlib Python tooling (compressor, token-savings estimator, lint) on top of Matt Pocock's MIT-licensed caveman skill.",
- "version": "1.0.0",
- "author": {
- "name": "avalon-vanguard",
- "url": "https://github.com/avalon-vanguard"
- },
- "license": "MIT",
- "keywords": [
- "caveman",
- "communication",
- "tokens",
- "productivity"
- ],
- "category": "productivity"
- }
- ]
-}
diff --git a/.claude/skills/run-star-map/SKILL.md b/.claude/skills/run-star-map/SKILL.md
index 7419616..dd00110 100644
--- a/.claude/skills/run-star-map/SKILL.md
+++ b/.claude/skills/run-star-map/SKILL.md
@@ -130,15 +130,38 @@ already-running server and leaves it alone on exit).
## Test
```bash
-PATH=/opt/node/bin:$PATH npm test # 496 tests, 28 files, ~5s
-PATH=/opt/node/bin:$PATH npm run build # ~9s
+PATH=/opt/node/bin:$PATH npm test # 527 tests, 31 files, ~6s
+PATH=/opt/node/bin:$PATH npm run build # ~12s
PATH=/opt/node/bin:$PATH npm run etl:typecheck
PATH=/opt/node/bin:$PATH npm run e2e:typecheck
-PATH=/opt/node/bin:$PATH npm run e2e -- --workers=1 # 6 tests, ~2.3m
+PATH=/opt/node/bin:$PATH npm run e2e -- --workers=1 # 6 tests, 3 files, ~2.3m
```
`--workers=1` on the e2e suite is **not optional here** — see Gotchas.
+## Build for GitHub Pages
+
+`.github/workflows/pages.yml` publishes the app on a push to `main`. To reproduce what it builds:
+
+```bash
+export PATH=/opt/node/bin:$PATH
+npm run build -- --base-href "/star-map/"
+cp dist/star-map/browser/index.html dist/star-map/browser/404.html
+```
+
+Two things differ from a plain `npm run build`, and both exist because a project site is served
+from a subdirectory rather than a domain root:
+
+- **`--base-href`.** `DataLoaderService` fetches its catalogues with relative URLs
+ (`assets/data/stars.bin`), which resolve against `` rather than the current path. Get it
+ wrong and a deep link asks for `/body/assets/data/stars.bin`. The workflow derives it from the
+ repository name so a rename cannot strand it.
+- **`404.html`.** Pages has no rewrite rules, so `/body/mars` has no file behind it. Serving the
+ app as the 404 body lets the router render the route. The response stays HTTP 404.
+
+The uploaded artifact is `dist/star-map/browser`, **not** `dist/star-map` — the parent also holds
+`3rdpartylicenses.txt` and `prerendered-routes.json`, which are not part of the site.
+
## Gotchas
- **The wrong Node is first on `PATH`.** `/opt/node22` is v22.22.2; `/opt/node` is v22.23.2.
@@ -172,6 +195,10 @@ PATH=/opt/node/bin:$PATH npm run e2e -- --workers=1 # 6 tests, ~2.3m
view) to see Mercury/Venus/Earth/Mars labelled.
- **Port 4300, not Angular's usual 4200** — the project's own convention, set in
`playwright.config.ts` so it never collides with an unrelated `ng serve`.
+- **A Pages build looks broken if you serve it at the root.** `` makes
+ every asset resolve under that prefix, so opening `dist/star-map/browser` at `/` gets you a
+ blank page and a wall of 404s. Serve it under the same prefix as Pages does, with unknown paths
+ falling back to `404.html`, or the check tells you nothing.
- **Don't write driver scripts in `.ts` outside the repo.** `tsx` compiles a bare `.ts` as CJS
("Top-level await is currently not supported with the cjs output format"), and a script outside
the repo can't resolve `@playwright/test` at all. The driver is `.mjs` inside the repo for both
diff --git a/README.md b/README.md
index b3f9167..775a6ff 100644
--- a/README.md
+++ b/README.md
@@ -5,7 +5,7 @@ real astronomical data instead of fictional systems. Browse the solar neighbourh
star's system to see its planets on their real orbits, and drill into a single body for the
NASA figures behind it.
-This repo also hosts a small Claude Code plugin marketplace — see [Plugins](#plugins) below.
+The source of a small Claude Code plugin also lives here — see [Plugins](#plugins) below.

@@ -290,27 +290,10 @@ The design document behind all of this is `.junie/plans/nasa-star-map.md`.
## Plugins
-This repo doubles as a Claude Code plugin marketplace. Adding it and installing a plugin
-defaults to **user scope**, meaning the plugin becomes available in *every* project on your
-machine, not just the one you happen to be in:
-
-```bash
-/plugin marketplace add avalon-vanguard/star-map
-/plugin install caveman@star-map
-```
-
-Scope can be overridden at install time if you want it tied to a single repo instead:
-
-```bash
-# Shared with collaborators via that repo's .claude/settings.json
-/plugin install caveman@star-map --scope project
-
-# Just for you, in that one repo only (gitignored)
-/plugin install caveman@star-map --scope local
-```
-
-See [Claude Code plugin installation scopes](https://code.claude.com/docs/en/plugins-reference)
-for details on `user` / `project` / `local` scope.
+This repo carries the source of one Claude Code plugin, but no longer publishes itself as a
+marketplace — `.claude-plugin/marketplace.json` was removed, which is the file `/plugin
+marketplace add` reads. So there is currently no install path from here; the manifest and the
+plugin's own files are kept so it can be listed from a marketplace of its own later.
- **caveman** — `/cs:caveman` ultra-compressed communication mode.
- Command: [`commands/cs/caveman.md`](commands/cs/caveman.md)
diff --git a/agents/cs-caveman-mode.md b/agents/cs-caveman-mode.md
index 093a535..15b4aff 100644
--- a/agents/cs-caveman-mode.md
+++ b/agents/cs-caveman-mode.md
@@ -18,10 +18,9 @@ turns until explicit deactivation.
## Scope
-Ships as part of this repo's plugin marketplace. Installing it via
-`/plugin install caveman@star-map` defaults to **user scope**, so this
-agent is available in every project, not scoped to a single repo. See the
-[README](../README.md) for `--scope project` / `--scope local` overrides.
+Part of the caveman plugin, whose source lives here. This repo no longer
+publishes itself as a plugin marketplace, so the agent is not installable
+from it as things stand. See the [README](../README.md).
## Activation Triggers
diff --git a/commands/cs/caveman.md b/commands/cs/caveman.md
index 08cef87..db2d711 100644
--- a/commands/cs/caveman.md
+++ b/commands/cs/caveman.md
@@ -11,12 +11,9 @@ Activate caveman mode. Stays active until explicit deactivation.
## Scope
-Installed via this repo's plugin marketplace, this command defaults to
-**user scope** — available in every project, not just the one it was
-installed from. Override with `--scope project` (shared with collaborators
-via `.claude/settings.json`) or `--scope local` (gitignored, this repo
-only) if you want it scoped down. See the [README](../../README.md) for
-install commands.
+Part of the caveman plugin, whose source lives here. This repo no longer
+publishes itself as a plugin marketplace, so the command is not installable
+from it as things stand. See the [README](../../README.md).
## Activation
diff --git a/skills/caveman/SKILL.md b/skills/caveman/SKILL.md
index ba7ad87..a3c7e3e 100644
--- a/skills/caveman/SKILL.md
+++ b/skills/caveman/SKILL.md
@@ -15,12 +15,10 @@ exactly as-is.
## Scope
-This skill ships via this repo's plugin marketplace
-(`.claude-plugin/marketplace.json`). Installing with
-`/plugin install caveman@star-map` defaults to **user scope** — global,
-available in every project — instead of being tied to just one repo. Use
-`--scope project` or `--scope local` to narrow it; see the
-[README](../../README.md).
+This repo no longer publishes itself as a plugin marketplace, so there is
+currently no install path for this skill from here. Listing it from a
+marketplace elsewhere is what would make `/plugin install` work again; see
+the [README](../../README.md).
## Persistence