elite-dangerous-surface-map¶
Audience: Agent
Purpose¶
3D surface map for Elite Dangerous bodies using OpenGlobus, with commander state, journal-driven galaxy/body updates (via popup journal reader), and external data (SPANSH, EDSM, etc.) through the shared API cache proxy.
Tech stack¶
- UI: Quasar 2, Vue 3, TypeScript (
ui/) - Scripts:
npm run dev/npm run buildinelite-dangerous-surface-map/ui/ - Docker: repository root has
docker-compose.yaml(see DEPLOYMENT.md).
Key dependencies¶
| Package | Role |
|---|---|
@howfe/elite-dangerous-event-types |
Journal/status typing and guards |
@howfe/inter-frame-messenger |
Listen for events from journal reader popup |
@openglobus/og |
Globe / map |
axios |
HTTP (some loaders) |
Integration points¶
| Concern | Location (under ui/src/) |
|---|---|
| Open journal popup + subscribe | composables/useJournalReader.ts — https://edjr.howfe.org |
| Feed journal into map / stores | logic/readGalaxyDataFromEvents.ts — onEliteEvent |
| Commander / status | composables/useCommanderState.ts — onStatus |
| Cached third-party APIs | logic/externalDataLoaders/fetchWithCache.ts — https://api-cache.howfe.org (required pattern for community APIs — do not call SPANSH/EDSM/etc. directly; see ARCHITECTURE.md) |
| Map UI entry | pages/MapPage.vue, components/surface-map/ |
useJournalReader is a singleton (module-level ifm + callback arrays). Multiple imports share the same instance.
Extension points¶
- New journal-driven behavior: register in
readGalaxyDataFromEvents()withis*guards from event-types. - New API sources: add loaders under
logic/externalDataLoaders/; usefetchWithCachefor consistent caching. - Settings:
App.vue+useSettings— keys likefeed-elite-events,journal-path(URL params) may interact with features.
Pitfalls / checks¶
- Hardcoded URLs in
useJournalReader.tsandfetchWithCache.ts— break when self-hosting. - Popup blockers —
window.openmay be blocked; user must allow popups. - CORS / mixed content — map and APIs must load in a browser context compatible with your deployment.