- Migration: added subdomain, server_ip, server_port columns
- Seed: rewritten with hardcoded identifiers + full subdomain/IP/port data
from Chronicler #87 audit (no more Pterodactyl API dependency)
- Route: POST /:id/provision-subdomain creates A + SRV records via
Cloudflare API, saves subdomain to server_config
- Card: subdomain section shows FQDN if provisioned, provision button
with inline input if not
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
New files:
- 139_server_config.sql — DB migration for short_name system
- 139_seed_server_config.js — auto-populates 17 servers from Pterodactyl
- src/services/uptimeKuma.js — Socket.IO direct (no npm wrapper)
- src/services/pterodactyl.js — power actions + console commands
Modified files:
- servers.js — 6 new POST routes (short-name, lock, createserver,
delserver, power, console) + short_name-based channel detection
- _server_card.ejs — full rebuild with command center UI
- _matrix_body.ejs — refactored from 144 lines to 20 (uses partial)
- package.json — added socket.io-client
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>