UXV Visualizer from MQTT Feeds
  • TypeScript 63.3%
  • CSS 15.3%
  • JavaScript 9.5%
  • HTML 7.3%
  • Shell 1.8%
  • Other 2.7%
Find a file
Joshua Belke a7b67ed106
Some checks failed
Holocron Frontend CI / lint-and-test (push) Has been cancelled
docs(fusion): standalone track-fusion gating demonstration
Self-contained page documenting where track fusion works and where the
prototype silently missed duplicates. Draggable contact pair over a
to-scale cell grid, live per-gate readout, and the coverage-by-latitude
comparison. Opens straight off disk, no build or server needed.
2026-08-04 19:25:49 -04:00
.beads chore(beads): sync issue exports 2026-08-04 18:41:22 -04:00
.claude bd init: initialize beads issue tracking 2026-05-22 19:08:02 -04:00
.codex chore: rename holochron -> holocron and integrate R2D2 holocron components 2026-05-28 09:31:30 -04:00
.github/workflows chore: rename holochron -> holocron and integrate R2D2 holocron components 2026-05-28 09:31:30 -04:00
.gitlab/issue_templates Issue templates 2022-04-05 23:52:00 +02:00
.settings docs(deploy): reconfigure deploy skill for holocron r2d2 target 2026-06-02 00:57:31 -04:00
cicd chore: rename holochron -> holocron and integrate R2D2 holocron components 2026-05-28 09:31:30 -04:00
deploy/holocron fix(deploy): disable ingress ssl-redirect (edge terminates TLS, ingress is HTTP-only) 2026-06-02 01:45:18 -04:00
docs docs(style): document R2/Farsight design system and align frontend neutral tokens 2026-06-02 01:03:02 -04:00
holocron-cesium chore: rename holochron -> holocron and integrate R2D2 holocron components 2026-05-28 09:31:30 -04:00
holocron-frontend docs(fusion): standalone track-fusion gating demonstration 2026-08-04 19:25:49 -04:00
holocron-keycloak chore: rename holochron -> holocron and integrate R2D2 holocron components 2026-05-28 09:31:30 -04:00
holocron-keycloak-postgresql chore: rename holochron -> holocron and integrate R2D2 holocron components 2026-05-28 09:31:30 -04:00
holocron-proxy chore: rename holochron -> holocron and integrate R2D2 holocron components 2026-05-28 09:31:30 -04:00
holocron-sim@15ace5e63f chore: rename holochron -> holocron and integrate R2D2 holocron components 2026-05-28 09:31:30 -04:00
holocron-trigger@676525279a chore: rename holochron -> holocron and integrate R2D2 holocron components 2026-05-28 09:31:30 -04:00
mosquitto/config Cesium React. 2025-12-17 14:26:16 +02:00
scripts chore: rename holochron -> holocron and integrate R2D2 holocron components 2026-05-28 09:31:30 -04:00
.env.example refactor(compose): unify into single file with local/dev/demo profiles 2026-05-28 09:57:46 -04:00
.gitignore chore(gitignore): ignore Claude Code scheduler artifacts 2026-06-02 01:01:25 -04:00
.gitlab-ci.yml Initial commit 2025-12-11 13:38:06 +01:00
.gitmodules chore: rename holochron -> holocron and integrate R2D2 holocron components 2026-05-28 09:31:30 -04:00
.pre-commit-config.yaml added pre-commit file 2022-09-28 21:02:52 -04:00
AGENTS.md docs(style): document R2/Farsight design system and align frontend neutral tokens 2026-06-02 01:03:02 -04:00
CLAUDE.md bd init: initialize beads issue tracking 2026-05-22 19:08:02 -04:00
docker-compose.yml refactor(compose): unify into single file with local/dev/demo profiles 2026-05-28 09:57:46 -04:00
LICENSE Template project commit 2022-04-05 23:44:57 +02:00
Makefile refactor(compose): unify into single file with local/dev/demo profiles 2026-05-28 09:57:46 -04:00
package.json chore: rename holochron -> holocron and integrate R2D2 holocron components 2026-05-28 09:31:30 -04:00
README.md docs(style): document R2/Farsight design system and align frontend neutral tokens 2026-06-02 01:03:02 -04:00
sonar-project.properties chore: rename holochron -> holocron and integrate R2D2 holocron components 2026-05-28 09:31:30 -04:00

holocron

Short information about the project.

Provide here all valuable links for the project (Wiki, documents, endpoints).

Quickstart

Building in local developer environment

Uses public Docker Hub images (no IronBank/VPN required):

# Ensure Docker is running, then:
make up
# or: docker compose -f docker-compose.local.yml up --build -d

Endpoints:

Keycloak admin: adminkeycloak / adminkeycloak

make down   # stop
make logs   # view logs
make clean  # stop and remove volumes

Sample data (assets on the map):
The local stack includes a test-publisher service that sends sample assets (UAVs, ships, ground units) to MQTT every 2 seconds. After make up, open http://localhost:3001 and you should see moving assets on the globe. If the map says "awaiting assets data", wait a few seconds for the publisher to connect and send, or check make logs for the test-publisher container.

To run a sample publisher manually (e.g. from host while stack is up):

cd holocron-cesium/test-publisher && npm install && MQTT_BROKER=mqtt://localhost:1883 node publisher.js

Verify build (run when Docker is up):

./scripts/verify-build.sh

Troubleshooting:

  • error during connect... EOF → Docker/OrbStack not running; start it and retry
  • Keycloak build fails on quay.io → Check network/proxy; try docker pull quay.io/keycloak/keycloak:22.0.1 manually
  • Port 7070 in use → Change PROXY_EXPOSED_PORT in docker-compose or stop the conflicting service

Configuration and API keys (MapTiler):
Copy .env.example to .env and set MAPTILER_KEY if you want satellite/terrain tiles. The repo includes a .env for local use (not committed; see below). Keys are never hardcoded in the app: the frontend loads config from the server’s /api/config at runtime.

For IL environments with IronBank access, use cicd/.env.local and run from cicd/:

cd cicd && docker compose up --build -d

Building in IH environments

How to build and run the software in the IHLC environment.

Configuration and secrets (why keys are not in the app)

Changes made to keep API keys secure:

Change Why
No key in CesiumViewer.jsx The MapTiler key was hardcoded in the frontend. Anyone with the bundle could see it. It’s removed so the client never contains secrets.
Config from server The viewer calls GET /api/config at runtime. The server reads process.env.MAPTILER_KEY and returns { maptilerKey }. The key stays on the server and is only sent over the wire to the browser when the app loads.
Keys in .env Secrets live in .env (project root). Docker Compose loads it via env_file: .env for the frontend service, so the server process gets MAPTILER_KEY without putting it in code or in the repo.
.env in .gitignore So .env is never committed. Each developer or deployment uses their own .env (or env vars).
.env.example Documents which variables exist (e.g. MAPTILER_KEY=). Safe to commit; no real values. Copy to .env and fill in.
Fallback when no key If MAPTILER_KEY is unset, the app uses OpenStreetMap tiles (no key) so the map still works without any key.

Flow: .env → Compose injects into container → server’s process.env.MAPTILER_KEY → /api/config → frontend uses it for tiles. The key is never in source code.

Production: Set CORS_ORIGIN (comma-separated origins) and WS_PUBLIC_URL (public WebSocket URL) so the same frontend build can be used behind different proxies. See .env.example for optional variables.

Technical stack

Shortly describe the technical stack of the project.

Design system

UI styling follows the R2 / Farsight aesthetic. The canonical reference (palette, fonts, Fumadocs + Scalar themes) lives in .settings/style/; see docs/STYLE.md for how the project's apps map to it and which tokens are aligned vs. intentionally divergent.

Visible endpoints

Describe all exposed endpoints of the project.