diff --git a/docs/PRICING.md b/docs/PRICING.md index 40f4f69..3282f33 100644 --- a/docs/PRICING.md +++ b/docs/PRICING.md @@ -1,27 +1,95 @@ # Pricing +> This document mirrors the live pricing page at corrosionmgmt.com/pricing. + --- -## Base License — $50 (Launch Price) +## Hobby — $9.99/month -One server. Lifetime access. +1–5 game server instances · non-commercial use only. Includes: -* Full control plane -* Auto-Wiper -* Plugin management -* Public site -* RBAC - -## Webstore Add-On — $10/month - -Integrated monetization platform. - -## Modules — $9.99+ - -Optional feature expansions. +- Up to 5 game server instances +- Non-commercial servers only +- Auto-wiper with rollback +- Plugin management (Rust uMod/Oxide) +- File manager + real-time console +- Scheduled tasks +- Public server page +- Community support --- -Simple. Transparent. No hidden tiers. +## Community — $19.99/month + +6–10 game server instances · non-commercial use only. + +Includes: + +- Up to 10 game server instances +- Non-commercial servers only +- Auto-wiper with rollback +- Plugin management (Rust uMod/Oxide) +- File manager + real-time console +- Scheduled tasks +- Public server page +- Community support + +--- + +## Operator — $99.99/month _(Most popular)_ + +Commercial use permitted, or up to 50 servers. + +Includes: + +- Up to 50 game server instances +- Commercial use permitted +- All games: Rust, Dune: Awakening, Soulmask, Conan Exiles +- Auto-wiper with rollback +- Plugin + mod management +- File manager + real-time console +- Scheduled tasks + maintenance windows +- Player management + RBAC team access +- Public server page + storefront +- Community support + priority bug triage + +--- + +## Network — Custom pricing + +50+ servers · hosting partners and fleets. Contact support@corrosionmgmt.com for pricing. + +Includes: + +- 50 servers base included +- Fleet Blocks: +$49.99/mo per additional 50 servers +- Commercial use permitted +- All games + multi-game hosts +- Full Operator feature set +- Fleet-level management +- Priority bug triage for platform issues +- Community support + +--- + +## Fleet Block Add-On — +$49.99/month per 50 servers + +Stack as many Fleet Blocks as your Network plan operation requires. + +--- + +## Direct 1:1 Support — $125/hour (prepaid 1-hour blocks) + +Available to any customer. Billed time with a human — not a support tier. Community support (docs, forum, diagnostics, structured bug reports) is included with every plan at no extra charge. + +--- + +## Commercial Use Definition + +Commercial use includes monetized communities, paid access, VIP slots, donations, sponsorship-supported servers, hosting providers, or managing servers for others. Hobby and Community plans are non-commercial only. Operator and Network plans permit commercial use. + +--- + +Simple. Transparent. No per-seat charges. No hidden tiers. diff --git a/frontend/src/components/layout/DashboardLayout.vue b/frontend/src/components/layout/DashboardLayout.vue index eb59b59..2adb005 100644 --- a/frontend/src/components/layout/DashboardLayout.vue +++ b/frontend/src/components/layout/DashboardLayout.vue @@ -277,17 +277,6 @@ const themeIcon = computed(() => theme.value === 'dark' ? 'sun' : 'moon') {{ serverName }} - - -
theme.value === 'dark' ? 'sun' : 'moon') @click="toggleTheme" /> - +
diff --git a/frontend/src/composables/useWebSocket.ts b/frontend/src/composables/useWebSocket.ts index 1c03ff8..7f77a52 100644 --- a/frontend/src/composables/useWebSocket.ts +++ b/frontend/src/composables/useWebSocket.ts @@ -51,12 +51,12 @@ export function useWebSocket() { function connect() { if (!authStore.isAuthenticated) { - console.log('[WebSocket] Not authenticated, skipping connection') + if (import.meta.env.DEV) console.log('[WebSocket] Not authenticated, skipping connection') return } if (isConnecting.value || isConnected.value) { - console.log('[WebSocket] Already connecting or connected') + if (import.meta.env.DEV) console.log('[WebSocket] Already connecting or connected') return } @@ -65,12 +65,12 @@ export function useWebSocket() { error.value = null const url = getWebSocketUrl() - console.log('[WebSocket] Connecting to', url.replace(/token=[^&]+/, 'token=***')) + if (import.meta.env.DEV) console.log('[WebSocket] Connecting to', url.replace(/token=[^&]+/, 'token=***')) ws.value = new WebSocket(url) ws.value.onopen = () => { - console.log('[WebSocket] Connected') + if (import.meta.env.DEV) console.log('[WebSocket] Connected') isConnected.value = true isConnecting.value = false reconnectAttempts.value = 0 @@ -80,7 +80,7 @@ export function useWebSocket() { ws.value.onmessage = (event) => { try { const message: WebSocketMessage = JSON.parse(event.data) - console.log('[WebSocket] Message received:', message) + if (import.meta.env.DEV) console.log('[WebSocket] Message received:', message) // Broadcast to all handlers messageHandlers.forEach(handler => { @@ -102,7 +102,7 @@ export function useWebSocket() { } ws.value.onclose = (event) => { - console.log('[WebSocket] Closed:', event.code, event.reason) + if (import.meta.env.DEV) console.log('[WebSocket] Closed:', event.code, event.reason) isConnected.value = false isConnecting.value = false @@ -132,7 +132,7 @@ export function useWebSocket() { 30000 // Max 30 seconds ) - console.log( + if (import.meta.env.DEV) console.log( `[WebSocket] Reconnecting in ${delay}ms (attempt ${reconnectAttempts.value}/${maxReconnectAttempts})` ) @@ -148,7 +148,7 @@ export function useWebSocket() { } if (ws.value) { - console.log('[WebSocket] Disconnecting') + if (import.meta.env.DEV) console.log('[WebSocket] Disconnecting') ws.value.close(1000, 'Client disconnect') ws.value = null } diff --git a/frontend/src/views/admin/AlertsView.vue b/frontend/src/views/admin/AlertsView.vue index 54b1669..34eead9 100644 --- a/frontend/src/views/admin/AlertsView.vue +++ b/frontend/src/views/admin/AlertsView.vue @@ -1,6 +1,7 @@