Brückner f12f92aea8 feat: CheckMK global IP-based integration with enable toggle
Replace per-device CheckMK URL field with a global, IP-based lookup.
The sync job fetches all host configs from CheckMK once per cycle,
matches each device by IP address, and updates its status accordingly.
Devices not found in CheckMK are reset to 'unknown'.

- Add checkmk_enabled / checkmk_api_user settings; toggle in Settings
  mirrors the Entra ID pattern (fields dim when disabled)
- Sync job uses self-scheduling setTimeout so interval changes apply
  without a server restart; POST /api/checkmk/sync for manual triggers
- Status changes and a per-cycle summary are written to the Logbook
- Remove checkMkUrl from Device type, form, list view, and detail panel;
  status badge and CheckMK panel only render when CheckMK is enabled
- Booking offline warning suppressed when CheckMK is disabled
- Topology status dot color driven purely by device.status
2026-06-04 14:07:54 +02:00
2026-06-03 15:20:06 +02:00
2026-06-03 15:20:06 +02:00
2026-06-03 15:20:06 +02:00
2026-06-03 15:20:06 +02:00
2026-06-03 15:20:06 +02:00
2026-06-03 15:20:06 +02:00
2026-06-03 15:20:06 +02:00
2026-06-03 15:20:06 +02:00
2026-06-03 15:20:06 +02:00
2026-06-03 15:20:06 +02:00

GhostGrid

GhostGrid is an internal network lab and device inventory tool for managing hardware lab environments.

The application uses an Express backend and a Vite/React frontend running in a single Node.js process. Data is stored locally in a SQLite database using better-sqlite3.

GhostGrid is designed to run fully offline. Fonts are bundled locally through @fontsource, and the application does not load external code, assets, or CDN resources at runtime.

Features

  • Dashboard
    Overview of active and upcoming reservations, plus a quick links widget for frequently used tools.

  • Bookings
    Reserve complete lab topologies or individual devices for a defined time period. Bookings include conflict detection and device status validation.

  • Inventory
    Manage lab devices, including emergency and rescue information. Live device status is retrieved from CheckMK.

  • Topology
    Visualize devices and connections for each lab environment.

  • Quick Links
    Shared link dashboard for internal tools such as CheckMK, Semaphore, documentation, or jump hosts.

  • Team
    Overview of all registered users.

  • Logbook
    Shared audit and maintenance journal for lab activity, operational notes, and troubleshooting history.

Device Status

Device reachability is monitored in CheckMK and imported through the CheckMK API.

Each device can be linked to CheckMK using the CheckMK Host URL field. If no CheckMK binding is configured, the device status is set to unknown.

Devices with an unknown status are not available for booking.

Local Development

Requirements

  • Node.js 20 LTS

Setup

npm install
npm run dev

The application will be available at:

http://localhost:3000

The development server runs the Express backend with Vite middleware.

Available Scripts

npm run dev

Start the local development server.

npm run build

Build the frontend into dist/ and bundle the server as dist/server.cjs.

npm start

Start the built production server. This expects NODE_ENV=production.

npm run lint

Run the TypeScript type check using tsc --noEmit.

Configuration

Configuration is loaded from environment variables or a local .env file. See .env.example for reference.

Variable Description
JWT_SECRET Secret used to sign JSON Web Tokens. This must be set explicitly in production. Without a value, the application falls back to an insecure default.
PORT HTTP port used by the application. Defaults to 3000.

Deployment

Production deployment is intended to run inside a Proxmox LXC container using systemd.

For detailed deployment instructions, see:

DEPLOY.md

The container runs both branches in parallel:

Branch Purpose Port
main Production 3000
dev Staging 3001

Each branch runs as a separate systemd service and uses its own database.

Description
A platform with a SQLite backend and REST API for scheduled booking of lab environments and hardware inventory for IT teams.
Readme 1.7 MiB
Languages
TypeScript 90.2%
CSS 6.6%
Shell 3.1%