RustTools

RustTools

Overview

RustTools is a personal full-stack project I built for my Rust team. A Node.js API stays paired to a master Rust+ account, while a React web UI and Discord bot share the same SQLite data. Teammates can control smart switches and alarms, watch the live map and team chat, and get raid or TC decay alerts from the browser or Discord—without everyone needing to stay in-game. Role-based Discord OAuth, encrypted companion credentials, and production boot checks keep the 24/7 bot account separate from per-user identity.

Role: Creator

Dates: June 2026 - Current

Platform: Discord, Web (self-hosted API + SPA)

TypeScriptNode.jsReactSQLiteDiscordVite

Duties

RustTools dashboard with server status, team, and world events

Dashboard — connection status, population, wipe timer, and world events

RustTools devices page with smart switch On/Off controls

Devices — paired smart switches with live ON/OFF state and explicit controls

RustTools 2D map with team positions, monuments, and layer controls

Map — live team positions, vending, monuments, and overlay layers

Process

The project started from a practical need: keep smart devices, map awareness, and raid alerts in one place my team already uses (Discord and a browser), without leaving a game client open on a dedicated machine.

Architecture. A Node.js host on a VM runs the API and Discord bot; the React UI can live on GitHub Pages or locally. One master Rust+ WebSocket owns live entity state. Teammates optionally link Steam ID and companion Rust+ credentials (encrypted on their user row) for identity and leader promotion—those links never replace the master bot.

Product surface. The web UI is an orange terminal HUD: dashboard, explicit On/Off device controls, procgen map overlays and 3D terrain when a .map file is uploaded, and an automation builder with a configurable server-base radius. Discord slash commands and embeds cover the same live data, including a channel-bound info board and team-chat mirror.

Reliability and safety. Production refuses to start on default secrets, missing guild/role config, or unprompted pairing. Rust+ reads are rate-limited and cached; FCM expiry is surfaced in Settings before the ~90-day window. SQLite migrations run on startup, and ops scripts cover health, disk, backups, and VM updates.

Artifacts: GitHub repository · MIT licensed