Skip to content

elite-dangerous-stellar-scan

Audience: Agent

Stellar Scan — hosted web app for a per-system table of stellar bodies and signals. Data from journal events (Scan, FSS/SAA signals, etc.) merged with SPANSH system dump via api-cache.howfe.org.

Stack

Vite + Solid + TypeScript (src/). Journal intake: src/composables/useJournalConnection.tsInterFrameMessenger on window with allowlist EliteEvent, Status, EdosFileEvent; handlers today are onEliteEvent and onEdosFileEvent only (bare elite-status not ingested yet). Journal parsing: src/logic/journalHandlers.ts.

Env var Role
VITE_REMOTE_JOURNAL_READER_URL Popup URL (default https://edjr.howfe.org)
VITE_ALLOWED_SENDER_ORIGINS Comma-separated postMessage sender origins for IFM

Run / build

cd elite-dangerous-stellar-scan
npm ci
npm run dev    # Vite
npm run build
npm test

Runtime URLs

Usage Default
Deployed UI https://edss.howfe.org
Remote journal reader popup https://edjr.howfe.org
SPANSH (proxied) https://api-cache.howfe.org?url=https://spansh.co.uk/api/dump/{systemAddress}
Desktop build API https://app.edos.howfe.org

Bootstrap

  • edos.mode=embedded or transitional edosEmbedded=1 — hides Open journal reader; use local journal reader webview or IFM parent.
  • edos.pinSystem=true|false — pin (or unpin) the table to the current or specified system on load.
  • edos.pinnedSystemAddress=<decimal> — optional explicit system to pin when embedding or deep-linking.
  • Manifest: /.well-known/edos-integration.json on the app origin.

Host postMessage (not IFM)

  • edos.stellar-scan.pin — payload { type, pinned: boolean, systemAddress?: string }.

Universe Places bookmarks (composition only)

To read commander bookmarks from Universe Places while embedded in EDAC, post edac.places.query to window.parent and handle edos.places.queryResult or edac.places.queryResult errors. Helper: src/edos/placesQueryClient.ts. Normative contract: HOSTED_APP_CONTRACT.md. The composition must include a mounted EDUP slot. Do not use a hidden EDUP iframe from standalone EDSS.

Agent notes

  • Pin system: UI checkbox beside the system name; same state can be set from URL bootstrap or host postMessage. When enabled, UI stays on pinned SystemAddress; other systems still persist in localStorage.
  • Table UX (normative reference): ecosystem bar for feature-complete data tables — TABLE_GUIDANCE.md. Canonical implementation in this repo:
Area Path
Grid src/components/BodiesTable.tsx
Toolbar + modals src/components/TableWorkspace.tsx
View model src/domain/views.ts
Filters / highlights src/domain/filterTypes.ts, filterEvaluator.ts, highlightTypes.ts, highlightEvaluator.ts
Fields src/domain/fieldRegistry.ts
Store + persist src/store/systemsStore.tsx, src/store/persistence.ts
  • Do not call SPANSH directly from the browser; use api-cache.

Visual design

First-party UI follows DESIGN_GUIDANCE.md: orange-on-black tokens (#f07b05 primary, #121212 page background), Roboto, edge-to-edge table with floating overlays (system context top-left; connection and journal reader / desktop install top-right). Normative shell buttons: OpenJournalReaderButton / InstallOnDesktopButton (.btn-top-bar-outlined) — see Global shell action buttons. Modals: EdosModal + .edos-modal-header / .edos-modal-body / .edos-modal-footer — see Modals.

Cursor canvases: mockups in Cursor canvases/*.canvas.tsx; rule at this repo .cursor/rules/edos-canvas-mockups.mdc (copy template from edos/docs/templates/cursor-rules/ for new apps). Explicit light text on dark surfaces — host theme does not inherit.