WHAT WAS PREPARED: Monorepo structure, database migrations, documentation, and deployment checklist ready for Gemini's complete Trinity Console code delivery. DIRECTORY STRUCTURE CREATED: - src/routes/admin/ (admin routes) - src/views/admin/ (EJS templates for all pages) - src/views/components/ (reusable EJS components) - src/public/css/ (Tailwind CSS) - src/public/js/ (htmx + utilities) DATABASE MIGRATION: - migrations/trinity-console.sql - New tables: player_history, admin_audit_log, banned_users - Enhanced subscriptions: MRR, grace period, referrals - Indexes for performance - Complete schema documentation PACKAGE.JSON UPDATES: - Added EJS ^3.1.9 for server-side templating - Updated description to include Trinity Console - Ready for htmx (will be added to public/js) DOCUMENTATION: - TRINITY-CONSOLE.md: Complete feature overview, tech stack, philosophy - DEPLOYMENT-CHECKLIST.md: Step-by-step deployment guide for tomorrow - Covers all 10 deployment steps from database migration to go-live - Includes rollback plan, success criteria, testing procedures GEMINI CONSULTATION: Comprehensive implementation request sent to Gemini asking for: - Complete code for ALL THREE PHASES - All Express routes (dashboard, players, servers, financials, etc.) - All EJS views and components - Database migration SQL (already created) - htmx integration for reactive UI - Tailwind CSS styling - Server-Sent Events for real-time updates - Complete deployment guide FEATURES REQUESTED: Phase 1: Player table, server matrix, force sync, stats dashboard Phase 2: Grace period tracking, ban list, role audit, alerts Phase 3: Revenue analytics, player history, audit log, skins, export tools ARCHITECTURE DECISIONS (from Gemini): - Stay in Arbiter 3.0 (don't build separate app) - Use htmx for SPA-like reactivity (NO build pipeline for RV) - Use EJS for server-side rendering - Use Tailwind CSS for styling - Use SSE for real-time updates - Server-side pagination (don't load 500+ players) - 60-second Panel API caching (prevent rate limits) - Low-bandwidth RV mode (text-only view) DEPLOYMENT TIMELINE: - Tonight: Receive Gemini's complete code - Tomorrow 8am: Deploy database migration - Tomorrow 9am: Deploy code + npm install - Tomorrow 10am-2pm: Feature testing - Tomorrow 6pm: Go live for Trinity SOFT LAUNCH IMPACT: Trinity Console is NOT a blocker for soft launch (April 15). Arbiter 3.0 already handles subscriptions, whitelists, and Discord roles. Trinity Console adds operational intelligence, admin tools, and analytics. Deploy early to battle-test before first real subscribers. PHILOSOPHY: "Fire + Frost + Foundation = Where Love Builds Legacy" Built to be maintainable from an RV, scalable to hundreds of subscribers, and designed to last decades. FILES ADDED: - TRINITY-CONSOLE.md (complete documentation) - DEPLOYMENT-CHECKLIST.md (deployment guide) - migrations/trinity-console.sql (database schema) - src/routes/admin/index.js (placeholder for Gemini's code) - package.json (added EJS dependency) NEXT STEPS: 1. Receive complete implementation from Gemini 2. Populate src/routes/admin/* with Gemini's code 3. Populate src/views/admin/* with Gemini's EJS templates 4. Add htmx.min.js to src/public/js/ 5. Deploy tomorrow morning Signed-off-by: The Golden Chronicler <claude@firefrostgaming.com>
61 lines
2.8 KiB
SQL
61 lines
2.8 KiB
SQL
-- Trinity Console Database Migration
|
|
-- Run this AFTER Arbiter 3.0 base tables are created
|
|
-- Date: April 1, 2026
|
|
|
|
-- Track every tier change and subscription lifecycle event
|
|
CREATE TABLE IF NOT EXISTS player_history (
|
|
id SERIAL PRIMARY KEY,
|
|
discord_id VARCHAR(255) REFERENCES users(discord_id),
|
|
previous_tier INT,
|
|
new_tier INT,
|
|
change_reason VARCHAR(255), -- 'upgrade', 'downgrade', 'payment_failed', 'manual'
|
|
changed_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
|
|
-- Audit log for The Trinity's actions
|
|
CREATE TABLE IF NOT EXISTS admin_audit_log (
|
|
id SERIAL PRIMARY KEY,
|
|
admin_discord_id VARCHAR(255),
|
|
admin_username VARCHAR(255),
|
|
action_type VARCHAR(50), -- 'force_sync', 'manual_role_assign', 'bulk_update', 'tier_change'
|
|
target_identifier VARCHAR(255), -- Server ID or Player Discord ID
|
|
details JSONB,
|
|
performed_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
|
|
-- Chargeback/ban tracking
|
|
CREATE TABLE IF NOT EXISTS banned_users (
|
|
id SERIAL PRIMARY KEY,
|
|
discord_id VARCHAR(255) UNIQUE,
|
|
minecraft_username VARCHAR(255),
|
|
minecraft_uuid VARCHAR(255),
|
|
ban_reason VARCHAR(255), -- 'chargeback', 'tos_violation', 'manual'
|
|
banned_by_discord_id VARCHAR(255),
|
|
banned_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
notes TEXT
|
|
);
|
|
|
|
-- Enhance subscriptions table for MRR, grace period, and referrals
|
|
ALTER TABLE subscriptions
|
|
ADD COLUMN IF NOT EXISTS mrr_value DECIMAL(10,2) DEFAULT 0.00,
|
|
ADD COLUMN IF NOT EXISTS referrer_discord_id VARCHAR(255),
|
|
ADD COLUMN IF NOT EXISTS grace_period_started_at TIMESTAMP,
|
|
ADD COLUMN IF NOT EXISTS grace_period_ends_at TIMESTAMP,
|
|
ADD COLUMN IF NOT EXISTS payment_failure_reason TEXT,
|
|
ADD COLUMN IF NOT EXISTS last_payment_attempt TIMESTAMP;
|
|
|
|
-- Indexes for performance
|
|
CREATE INDEX IF NOT EXISTS idx_player_history_discord_id ON player_history(discord_id);
|
|
CREATE INDEX IF NOT EXISTS idx_player_history_changed_at ON player_history(changed_at DESC);
|
|
CREATE INDEX IF NOT EXISTS idx_audit_log_performed_at ON admin_audit_log(performed_at DESC);
|
|
CREATE INDEX IF NOT EXISTS idx_audit_log_admin ON admin_audit_log(admin_discord_id);
|
|
CREATE INDEX IF NOT EXISTS idx_subscriptions_grace_period ON subscriptions(grace_period_ends_at) WHERE grace_period_ends_at IS NOT NULL;
|
|
CREATE INDEX IF NOT EXISTS idx_banned_users_discord_id ON banned_users(discord_id);
|
|
|
|
-- Comments for documentation
|
|
COMMENT ON TABLE player_history IS 'Tracks all tier changes and subscription lifecycle events';
|
|
COMMENT ON TABLE admin_audit_log IS 'Logs all administrative actions by The Trinity';
|
|
COMMENT ON TABLE banned_users IS 'Permanent ban list for chargebacks and TOS violations';
|
|
COMMENT ON COLUMN subscriptions.mrr_value IS 'Monthly Recurring Revenue value for this subscription';
|
|
COMMENT ON COLUMN subscriptions.grace_period_ends_at IS 'When the 3-day grace period ends after payment failure';
|