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.ts — InterFrameMessenger 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=embeddedor transitionaledosEmbedded=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.jsonon 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 inlocalStorage. - 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.