Say what the project is, in the two places people arrive

The README opened without mentioning that the thing is deployed, and the HTML
document carried a title and nothing else — no description, no link preview.
Both matter more now that there is a public URL to land on.

README: the live link up top; the object card and the measured/derived split
from #3, which were built but never written down; `shared/format/`, `public/`
and `.github/workflows/` in the layout.

index.html: a description, a theme colour matching --color-void so the browser
chrome does not flash white around a black sky, and Open Graph/Twitter tags so
a shared link renders as something other than a bare URL. Those URLs are
absolute and name the deployment outright — a scraper has no document to
resolve a relative path against, so they cannot follow <base> the way the rest
of the app's paths do. A custom domain later means editing these three lines.

The preview image is the galactic view, copied into `public/` so it is served
by the site itself rather than linked out to raw.githubusercontent.

Verified: the built document keeps every tag, the base href still rewrites to
/star-map/, the image answers 200 at the path the og:image names, and both the
root and a deep link still render. 527 tests pass.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WaySiNst4HhDXBHnMy8p5G
This commit is contained in:
Claude
2026-08-07 14:22:29 +00:00
parent 433bcca8a2
commit 7d07921d69
3 changed files with 38 additions and 1 deletions
+21
View File
@@ -5,6 +5,10 @@ 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.
**Live at <https://avalon-vanguard.github.io/star-map/>**, published from `main` by
[`.github/workflows/pages.yml`](.github/workflows/pages.yml). There is no backend — the whole
thing is static files and a few megabytes of baked catalogue.
The source of a small Claude Code plugin also lives here — see [Plugins](#plugins) below.
![The solar neighbourhood: 68 388 catalogued stars within 250 parsecs, on a polar grid lying in the galactic plane](docs/screenshots/galaxy-view.jpg)
@@ -74,6 +78,20 @@ around it. Mercury's, three pixels wide at that range, does not survive either w
with real photography where NASA/ESA/USGS imagery exists, and a surface derived from the body's
own measurements where it does not. See "On surfaces that were never photographed" below.
**Object card** — hovering a body in the system view raises its figures over the live scene and
clicking pins them, so two planets can be compared without flying out and back; **Full view**
opens the detail route when the close-up is wanted. The card and the detail panel are built from
one shared view model and one shared set of readouts, which is what stops the same planet reading
255 K in one and 254 K in the other.
**Measured against derived** — every figure is filed under the heading it earns. A published
radius is measured; an equilibrium temperature computed from the host star's luminosity is
derived, and says so. Orbital period is shown where it can honestly be had: for a heliocentric
orbit it follows exactly from the semi-major axis, because in these units the Sun's mass *is* the
unit of mass — Mars comes back 687.0 d against a published 686.98. It is deliberately absent for
moons, whose elements are relative to a parent planet the catalogue carries no mass for, and for
exoplanets, where assuming a solar-mass host would mis-state every planet around an M dwarf.
**Search** — name search across stars, solar-system bodies and exoplanets, navigating to the
same place an in-scene click would.
@@ -281,9 +299,12 @@ src/app/
Milky Way structure
shared/models/ record contracts shared by the app and the ETL
shared/rendering/ skybox, glow sprites, texture catalog
shared/format/ one formatter per physical quantity, precision following magnitude
shared/state/ navigation store (Angular signals)
tools/etl/ build-time data pipeline
e2e/ Playwright end-to-end tests
public/ files served at the site root (favicon, link-preview image)
.github/workflows/ CI, the Pages deploy, and an automated review pass
```
The design document behind all of this is `.junie/plans/nasa-star-map.md`.
Binary file not shown.

After

Width:  |  Height:  |  Size: 242 KiB

+17 -1
View File
@@ -2,10 +2,26 @@
<html lang="en">
<head>
<meta charset="utf-8">
<title>Star Map</title>
<title>Star Map — the real solar neighbourhood in 3D</title>
<!-- Overwritten at build time with the deploy's subpath (`ng build --base-href`). The app's
data fetches are relative, so this is what they resolve against. -->
<base href="/">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="An interactive 3D star map built from real astronomical data: 68,388 catalogued stars out to 250 parsecs, planets on their measured orbits, and the NASA figures behind every body.">
<!-- Matches --color-void, so the browser chrome does not flash white around a black sky. -->
<meta name="theme-color" content="#05070d">
<link rel="icon" type="image/x-icon" href="favicon.ico">
<!-- Link previews. These URLs must be absolute — a scraper resolves them against nothing — so
unlike everything else here they do not follow <base> and name the deployment outright. -->
<meta property="og:type" content="website">
<meta property="og:url" content="https://avalon-vanguard.github.io/star-map/">
<meta property="og:title" content="Star Map — the real solar neighbourhood in 3D">
<meta property="og:description" content="68,388 catalogued stars out to 250 parsecs, planets on their measured orbits, and the NASA figures behind every body.">
<meta property="og:image" content="https://avalon-vanguard.github.io/star-map/social-preview.jpg">
<meta property="og:image:alt" content="The Milky Way's bar, bulge and five spiral arms, with the Sun marked on the Orion Spur">
<meta name="twitter:card" content="summary_large_image">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Orbitron:wght@500;600;700&family=JetBrains+Mono:wght@400;500;600&display=swap" rel="stylesheet">