Commit Graph

6 Commits

Author SHA1 Message Date
Claude
e30ff4d694 Fix: Add Discord channel status to matrix body template (inline cards, not partial) 2026-04-09 19:59:36 +00:00
Claude
081bad1279 Add Discord channel status check to server cards
- Checks for 4 channels per server: chat, in-game, forum, voice
- Shows 'All 4 channels configured' or lists missing channels
- Caches Discord channel data for 5 minutes to reduce API calls
2026-04-09 19:55:41 +00:00
Claude (Chronicler #60)
2f67708fcf Add Sync All buttons functionality for server matrix
WHAT WAS DONE:
- Added POST /admin/servers/sync-all/:node endpoint
  - Accepts 'tx1' or 'nc1' as node parameter
  - Syncs whitelist to all servers on that node
  - Returns count of synced/errors

- Wired up buttons in index.ejs with htmx
  - hx-post to the new endpoint
  - Results display in #sync-result span

Files changed:
- services/arbiter-3.0/src/routes/admin/servers.js (+45 lines)
- services/arbiter-3.0/src/views/admin/servers/index.ejs

Signed-off-by: Claude (Chronicler #60) <claude@firefrostgaming.com>
2026-04-05 08:34:50 +00:00
root
a9b39f3459 feat: Trinity Console v3.5 - Complete Admin Panel with Stripe Integration
MAJOR MILESTONE: Admin panel fully operational for soft launch

 COMPLETED TODAY:
- Stripe direct integration (10 products, checkout, webhooks)
- Database schema migration (users, admin_audit_log, server_sync_log tables)
- Fixed express-ejs-layouts + HTMX compatibility issues
- Restored modular admin route structure
- Fixed EJS include() bug by inlining server card partial
- Added layout: false to all HTMX endpoints
- Updated TIER_INFO constants to match Stripe products (tier 10 = Sovereign)
- Fixed Players query to show all subscriptions (not just users with Discord IDs)

🎯 WORKING ADMIN MODULES (7/7):
1. Dashboard - Overview
2. Servers - Server matrix with Pterodactyl data
3. Players - All subscribers with tier/status/Discord/Minecraft data
4. Financials - Revenue analytics with Fire/Frost breakdown
5. Grace Period - At-risk subscriber monitoring
6. Audit Log - Webhook event history
7. Role Audit - Subscription summary by tier

📊 DATABASE TABLES:
- subscriptions (tier_level, status, discord_id)
- stripe_products (10 tiers matching Stripe)
- users (discord_id, minecraft_username, minecraft_uuid, is_staff)
- admin_audit_log (Trinity action tracking)
- server_sync_log (Pterodactyl sync tracking)
- webhook_events_processed (Stripe webhook deduplication)

🔧 KEY FIXES:
- express-ejs-layouts breaking include() → inlined partials
- HTMX middleware not working → explicit layout: false on endpoints
- Tier mismatch (Fire Knight vs Sovereign) → updated constants.js
- Players showing only users table → flipped to subscriptions LEFT JOIN users

🚨 KNOWN LIMITATION:
Subscriptions not linked to Discord users yet (separate Gemini consultation)

🎉 SOFT LAUNCH READY:
- Payment system functional end-to-end
- Admin monitoring operational
- All 7 modules displaying real data

Files modified: 7 route files, 1 template, 1 constants file
Credit: 3 Gemini consultations for architectural guidance

Signed-off-by: Claude (Chronicler #57) <claude@firefrostgaming.com>
2026-04-03 14:29:01 -05:00
Claude (Chronicler #57)
127b7677fc fix: remove include() wrapper from all admin module templates
ISSUE:
All module templates still had old EJS v2 include() wrapper
Caused 'include is not a function' errors

FIX:
Removed first and last line (include wrapper) from:
- servers/index.ejs
- players/index.ejs
- roles/index.ejs
- grace/index.ejs
- audit/index.ejs
- financials/index.ejs

Same fix as dashboard.ejs - express-ejs-layouts handles layout injection

Signed-off-by: Claude (Chronicler #57) <claude@firefrostgaming.com>
2026-04-03 17:46:16 +00:00
Claude (The Golden Chronicler #50)
a459432b62 feat: Trinity Console Server Matrix - Real-time monitoring from Gemini
GEMINI DELIVERED THE SERVER MATRIX! 🎉

Complete real-time server monitoring with htmx polling, 60-second caching,
Fire/Frost node grouping, and instant sync controls.

GEMINI'S ARCHITECTURAL DECISIONS:
1. 60-second cache - Prevents Panel API rate limits (13+ servers = 13 API calls)
2. htmx polling every 15s - Simulates real-time without complex SSE
3. Sequential sync only - Prevents HTTP 429 (Too Many Requests)
4. Warn-only whitelist toggle - No auto-restart (dangerous during boss fights!)

SERVER MATRIX FEATURES:
- Dynamic server discovery from Panel API
- Grouped by node: TX1 (Dallas) and NC1 (Charlotte)
- Real-time status with glowing borders (green=healthy, red=error, gray=offline)
- Per-server controls: Force Sync, Toggle Whitelist
- Bulk actions: Sync All Dallas, Sync All Charlotte
- 60-second intelligent caching for RV low-bandwidth
- htmx auto-refresh every 15 seconds

SERVER CARD DETAILS:
- Server name + identifier
- Online/offline status with pulsing dot
- Whitelist enabled/disabled
- Last successful sync timestamp
- Error messages if sync failed
- Sync Now button (disabled when offline)
- Toggle Whitelist with restart warning

FILES ADDED:
- src/panel/files.js - Added readServerProperties() function
- src/routes/admin/servers.js - Complete server matrix router
- src/views/admin/servers/index.ejs - Server matrix shell with htmx
- src/views/admin/servers/_matrix_body.ejs - Two-column node grouping
- src/views/admin/servers/_server_card.ejs - Individual server cards

SERVER DISCOVERY:
- Uses existing getMinecraftServers() from panel/discovery.js
- Filters by MINECRAFT_NEST_IDS (nests 1, 6, 7)
- Enriches with server.properties whitelist status
- Joins with server_sync_log table for sync history

WHITELIST TOGGLE:
- Reads current server.properties
- Toggles white-list=true <-> white-list=false
- Writes back to Panel via File API
- Shows ⚠️ Requires Restart warning (hx-confirm modal)
- Clears cache for immediate UI update on next poll

FORCE SYNC:
- Fetches active/grace/lifetime players from database
- Writes whitelist.json to server
- Executes 'whitelist reload' command
- Updates server_sync_log with success/failure
- Shows  Synced or  Error inline via htmx

CACHING LOGIC:
In-memory cache refreshes every 60 seconds:
- Cache hit: Returns cached server data instantly
- Cache miss: Fetches fresh from Panel + reads server.properties
- Database sync logs: ALWAYS fetch fresh (never cached)

NODE GROUPING:
TX1 (Dallas): Filters by node === 'Node 3' OR name includes 'TX'
NC1 (Charlotte): Filters by node === 'Node 2' OR name includes 'NC'

HTMX MAGIC:
- hx-get="/admin/servers/matrix" hx-trigger="load, every 15s"
- Auto-loads matrix on page load
- Auto-refreshes every 15 seconds
- hx-post for sync actions (updates inline, no page reload)
- hx-confirm for whitelist toggle (browser confirmation modal)

VISUAL DESIGN:
- Green glow border: Server online + recent sync success
- Red glow border: Sync error detected
- Gray border: Server offline
- Pulsing green dot: Server is online
- Fire emoji 🔥 for Dallas node
- Frost emoji ❄️ for Charlotte node

INTEGRATION:
- Mounted in src/routes/admin/index.js
- Uses existing database.js for PostgreSQL
- Uses existing panel/discovery.js for server list
- Uses existing panel/files.js for whitelist writes
- Uses existing panel/commands.js for reload commands

NEXT FROM GEMINI:
- Financials/MRR tracker
- Grace Period dashboard
- Additional modules as needed

GEMINI'S WISDOM:
"The Server Matrix is the true bridge of the ship, giving you complete
visibility and control without having to log into the game panel."

Signed-off-by: The Golden Chronicler <claude@firefrostgaming.com>
Co-authored-by: Gemini AI <gemini@anthropic-partnership.ai>
2026-04-01 04:38:55 +00:00