fixed bad links

This commit is contained in:
Frank Harris 2026-06-15 20:04:55 -05:00
parent b585aec260
commit 7e9a45f014
79 changed files with 2395 additions and 0 deletions

View file

@ -0,0 +1,245 @@
<?php
declare(strict_types=1);
$discordUrl = trim((string)website_config('discord_url', ''));
?>
<section class="hero">
<div class="container hero-layout">
<div>
<div class="eyebrow">Dedicated resources. Full control. Real support.</div>
<h1>Virtual private game servers with predictable resources and full configuration access.</h1>
<p><?= website_escape(website_config('site_tagline')) ?> Gameservers.World focuses on stable capacity, older community-favorite titles, mod support, and a control panel that gives customers practical access instead of a stripped-down toy interface.</p>
<div class="hero-actions">
<a class="button button-primary" href="<?= website_escape(website_url('serverlist.php')) ?>">View Game Servers</a>
<a class="button button-secondary" href="<?= website_escape(panel_url()) ?>">Open Control Panel</a>
</div>
<div class="hero-points">
<div class="hero-point">
<strong>Never oversold</strong>
<span class="muted">Dedicated resources stay dedicated. Predictable performance is the product, not an upgrade.</span>
</div>
<div class="hero-point">
<strong>Mod and Workshop support</strong>
<span class="muted">Common modding workflows, Workshop content, and file access stay available where the game allows it.</span>
</div>
<div class="hero-point">
<strong>Control and customization</strong>
<span class="muted">Startup parameters, configs, backups, and updates are managed through the GSP panel without hiding the important controls.</span>
</div>
<div class="hero-point">
<strong>Real people</strong>
<span class="muted">Documentation exists, but you can still talk to someone when an old modpack or legacy title gets awkward.</span>
</div>
</div>
</div>
<div class="hero-visual">
<img src="<?= website_escape(website_asset('images/banner.png')) ?>" alt="Gameservers.World supported games collage">
<div class="hero-visual-card">
<strong>Built for hosted communities that want actual control</strong>
<p>Use the GSP panel for server start/stop, config editing, Workshop or mod workflows, logs, file access, and routine maintenance without depending on fragile manual shell work.</p>
</div>
</div>
</div>
</section>
<section class="section">
<div class="container">
<div class="stats-grid">
<div class="stat-card">
<strong>Dedicated</strong>
<span>No noisy-neighbor overselling.</span>
</div>
<div class="stat-card">
<strong>Full access</strong>
<span>Configs, startup parameters, files, backups, and updates.</span>
</div>
<div class="stat-card">
<strong>Legacy-friendly</strong>
<span>Older and community-favorite games stay part of the catalog.</span>
</div>
<div class="stat-card">
<strong>Operational help</strong>
<span>Human support when the docs are not enough.</span>
</div>
</div>
</div>
</section>
<section class="section">
<div class="container">
<div class="section-heading">
<h2>Why Gameservers.World</h2>
<p>The website now makes the actual sales proposition explicit: dedicated capacity, access to the knobs that matter, and hosting for both current and older multiplayer titles without burying customers behind fragile shared-hosting abstractions.</p>
</div>
<div class="feature-grid">
<article class="feature-card">
<h3>Dedicated resources</h3>
<p>Capacity is reserved for the server you pay for. CPU and memory planning are aimed at stable behavior, not squeezing one more tenant onto the node.</p>
</article>
<article class="feature-card">
<h3>Mod support</h3>
<p>Workshop and addon workflows are supported where the underlying game tooling allows it, with file access and update paths that customers can actually use.</p>
</article>
<article class="feature-card">
<h3>Panel control</h3>
<p>Customers manage their service through GSP rather than opening tickets for every config tweak, reboot, backup, or startup parameter change.</p>
</article>
<article class="feature-card">
<h3>Real support</h3>
<p>When an old title, community mod, or provisioning edge case gets weird, support is available through documentation plus direct assistance.</p>
</article>
</div>
</div>
</section>
<section class="section">
<div class="container">
<div class="section-heading">
<h2>Current locations</h2>
<p>Locations are configured data, not marketing filler. These reflect the currently documented host regions from the existing Gameservers.World site content.</p>
</div>
<div class="location-grid">
<?php foreach ($locations as $location): ?>
<article class="location-card">
<h3><?= website_escape((string)($location['name'] ?? '')) ?></h3>
<p><?= website_escape((string)($location['region'] ?? '')) ?></p>
<small><?= website_escape((string)($location['host'] ?? '')) ?></small>
</article>
<?php endforeach; ?>
</div>
</div>
</section>
<section class="section">
<div class="container">
<div class="section-heading">
<h2>Popular and supported game servers</h2>
<p>These cards are driven from the existing billing catalog when configuration is available. The site does not invent fake availability if the billing catalog is offline.</p>
</div>
<?php if (!empty($services)): ?>
<div class="service-grid">
<?php foreach ($services as $service): ?>
<?php
$serviceName = trim((string)($service['cfg_game_name'] ?? $service['service_name'] ?? 'Game Server'));
$price = (float)($service['price_monthly'] ?? 0);
$orderUrl = billing_url('order.php?service_id=' . rawurlencode((string)$service['service_id']));
?>
<article class="service-card">
<img src="<?= website_escape(website_service_image_url((string)($service['img_url'] ?? ''))) ?>" alt="<?= website_escape($serviceName) ?>">
<header>
<h3><?= website_escape($serviceName) ?></h3>
<div class="service-price"><?= $price > 0 ? '$' . number_format($price, 2) . ' / month' : 'Contact for pricing' ?></div>
</header>
<p><?= website_escape(trim((string)($service['description'] ?? 'Dedicated hosting with full configuration access.')) ?: 'Dedicated hosting with full configuration access.') ?></p>
<div class="card-actions">
<a class="button button-primary" href="<?= website_escape($orderUrl) ?>">Order</a>
<a class="button button-ghost" href="<?= website_escape(website_url('serverlist.php')) ?>">Catalog</a>
</div>
</article>
<?php endforeach; ?>
</div>
<?php else: ?>
<div class="empty-state">
<h3>Catalog visibility depends on billing data</h3>
<p><?= website_escape((string)website_config('admin_notice')) ?></p>
<div class="card-actions">
<a class="button button-secondary" href="<?= website_escape(website_url('support.php')) ?>">Contact Support</a>
<a class="button button-ghost" href="<?= website_escape(website_url('docs.php')) ?>">Read Documentation</a>
</div>
</div>
<?php endif; ?>
</div>
</section>
<section class="section">
<div class="container">
<div class="section-heading">
<h2>How it works</h2>
<p>The public site and the control plane are now separated cleanly: the website explains the service, the billing catalog handles order-specific data, and GSP runs the operational lifecycle.</p>
</div>
<div class="flow-grid">
<article class="flow-step">
<span class="flow-step-number">1</span>
<h3>Choose a server</h3>
<p>Browse the supported game catalog, confirm the available plan, and select a region that matches your community.</p>
</article>
<article class="flow-step">
<span class="flow-step-number">2</span>
<h3>Configure it</h3>
<p>Use the GSP panel to set startup parameters, edit configs, install supported content, and keep backups or updates under control.</p>
</article>
<article class="flow-step">
<span class="flow-step-number">3</span>
<h3>Manage through GSP</h3>
<p>Operate the service through the panel for lifecycle, monitoring, logs, file access, and routine administrative work.</p>
</article>
</div>
</div>
</section>
<section class="section">
<div class="container">
<div class="panel-preview">
<div class="panel-preview-shell">
<img src="<?= website_escape(website_asset('images/dark.jpg')) ?>" alt="GSP control panel preview background">
</div>
<div class="panel-preview-stats">
<div class="section-heading">
<h2>GSP control panel</h2>
<p>Customers do not get a fake storefront-only experience. They manage hosted servers through the same GSP platform that handles starts, stops, files, logs, addons, scheduling, and provisioning workflows.</p>
</div>
<div class="summary-card">
<h3>Operational access</h3>
<p>Start and stop servers, manage files, inspect logs, update Workshop content, and adjust configuration safely from the panel.</p>
</div>
<div class="stack-actions">
<a class="button button-primary" href="<?= website_escape(panel_url()) ?>">Open Control Panel</a>
<a class="button button-secondary" href="<?= website_escape(website_url('docs.php')) ?>">Read Documentation</a>
</div>
</div>
</div>
</div>
</section>
<section class="section">
<div class="container">
<div class="summary-grid">
<article class="summary-card">
<h3>Documentation and support</h3>
<p>Game-specific docs, panel guidance, and troubleshooting live in the same repo and can be served without depending on billing configuration.</p>
<div class="card-actions">
<a class="button button-secondary" href="<?= website_escape(website_url('docs.php')) ?>">Documentation</a>
<a class="button button-ghost" href="<?= website_escape(website_url('support.php')) ?>">Support</a>
</div>
</article>
<article class="summary-card">
<h3>Panel and login routing</h3>
<p>The Control Panel and Login actions are configuration-driven. The public site no longer assumes a fragile `/panel/` path under the marketing domain.</p>
<div class="card-actions">
<a class="button button-primary" href="<?= website_escape(login_url()) ?>">Login</a>
<a class="button button-secondary" href="<?= website_escape(panel_url()) ?>">Control Panel</a>
</div>
</article>
</div>
</div>
</section>
<section class="cta-band">
<div class="container">
<div class="cta-panel">
<div>
<h2>Ready to deploy a server?</h2>
<p>Browse the current game catalog, confirm the right location, and manage the result through GSP.</p>
</div>
<div class="stack-actions">
<a class="button button-primary" href="<?= website_escape(website_url('serverlist.php')) ?>">View Game Servers</a>
<a class="button button-secondary" href="<?= website_escape(panel_url()) ?>">Open Control Panel</a>
<?php if ($discordUrl !== ''): ?>
<a class="button button-ghost" href="<?= website_escape($discordUrl) ?>" target="_blank" rel="noopener noreferrer">Discord</a>
<?php endif; ?>
</div>
</div>
</div>
</section>