Defensive telemetry for EVE Frontier turret operators.
- What It Covers
- Tech Stack
- Repository Layout
- EVE Hackathon Notes
- Getting Started
- Validation
- Documentation
- License
Sentinel is an EVE Frontier dashboard for live monitoring of a user's turret assemblies; their interactions, and current status.
The project combines a React dashboard, a Bun/Express support API, and a Rust indexer that follows turret activity on Sui blockchain.
- Displaying Turret Smart Assembly objects owned by the logged in wallet
- Event history and threat intelligence from indexed on-chain turret events
- Solar-system mapping for working around the location obfuscation in EVE, players can assign solar-systems to their network nodes
- Galaxy plotting by network-node; assign solar systems to network-nodes to map turrets
- Live operator view
Bunworkspaces for the monorepo, scripts, and API runtimeReact 19andVitefor the dashboardTypeScriptacross the dashboard, API, and shared contractsTailwind CSS v4for stylingExpress 5andpgfor dashboard support APIsRustwithtokio,reqwest,tokio-postgres, anddieselfor the Sui indexerPostgreSQLfor indexed events, node mappings, and derived dashboard statePodman Composefor the preferred local development stackVitest, Testing Library, Playwright, ESLint, and Prettier for validation
.
|-- apps/
| |-- dashboard/ # React dashboard UI
| |-- api/ # Bun + Express support API
| `-- indexer/ # Rust indexer for Sui turret events
|-- packages/
| `-- shared-types/ # Shared GraphQL queries and TypeScript contracts
|-- docs/ # Product, domain, design system, ADRs
|-- specs/ # Speckit specs, plans, tasks, quickstarts
|-- assets/ # Shared branding assets
`-- docker-compose-dev.yml
The 2026 EVE Hackathon was ongoing during Cycle 5 of EVE Frontier, and at this time there were momumental changes made to the game. Some of these changes, such as certain on-chain events, were not fully functional yet for the hackathon.
To work around missing on-chain events, this application created a "demo-mode" that populates the dashboard with static mocks.
Demo mode will be removed from the application after the on-chain events become available, it will not be maintained long-term.
NOTE: The data in demo mode is entirely static, it makes no attempt to simulate live data.
Access demo-mode by the /demo sub-path (e.g. http://localhost:5173/demo).
Podmanandpodman composeBun1.2+ for host-native workflowsRustandcargoif you want to run the indexer outside containers
The repo is designed to be iterated on with the development stack:
podman compose -f docker-compose-dev.yml upLocal services:
- dashboard:
http://127.0.0.1:5173 - api:
http://127.0.0.1:3002 - postgres:
127.0.0.1:5433
Useful routes:
- live dashboard:
http://127.0.0.1:5173 - demo dashboard:
http://127.0.0.1:5173/demo
Use the live dashboard when you want the real wallet-connected flow. Use /demo when you want a fixture-backed review surface without depending on live telemetry.
Notes:
This project was built and tested using
podmanandpodman compose. Usedockerat your own discretion.
- The dev stack defaults to the current
Utopiaworld assumptions- the demo route stays fixture-backed on purpose; it does not pretend to be live telemetry
- some older repo quickstarts still mention
5174, but the checked-in dashboard runtime is currently configured for5173
For a fresh container rebuild of the current local stack, use:
podman compose -f docker-compose-dev.yml up --buildIf you want to run pieces directly on your machine instead of through Podman:
bun install
bun run dev
cargo run --manifest-path apps/indexer/Cargo.tomlThe root dev script starts the dashboard and API together. The indexer runs separately.
For dashboard-focused work, start with:
bun lint
bunx vitest run --environment jsdomFor the full repo:
bun testFor indexer-only work:
cargo test --manifest-path apps/indexer/Cargo.toml- CONTRIBUTING.md for contribution rules and commit expectations
- CHANGELOG.md for notable project changes
- Design and spec documentation is located in the
./docsdirectory.
This project is licensed under the MIT License.
