Files
Nexumi/landingpage/index.php
TheOnlyMace 75ac91eecc Add new features and enhancements to the WebUI and dashboard components
- Updated package.json to include new dependencies: `@radix-ui/react-dialog` and `cmdk`.
- Enhanced global styles in globals.css for improved visual depth in dark mode.
- Refactored dashboard page components to improve layout and accessibility, including new icons and responsive design adjustments.
- Implemented suspense handling in commands page for better loading states.
- Improved sidebar navigation with new icons and mobile responsiveness.
- Added FieldAnchor components across various forms for better accessibility and structure.
- Enhanced commands manager with search parameter handling for improved user experience.
- Updated multiple module forms to include FieldAnchor for consistent layout and accessibility.
2026-07-22 19:44:55 +02:00

116 lines
4.1 KiB
PHP

<?php
declare(strict_types=1);
require __DIR__ . '/includes/bootstrap.php';
require __DIR__ . '/includes/layout.php';
$locale = detect_locale();
$messages = load_messages($locale);
$inviteUrl = bot_invite_url($config);
$dashboardUrl = rtrim((string) $config['dashboard_url'], '/');
$loginUrl = $dashboardUrl . '/login';
$supportUrl = isset($config['support_url']) && $config['support_url'] !== ''
? (string) $config['support_url']
: null;
$guildCount = 0;
$userCount = 0;
$statsApi = (string) ($config['stats_api_url'] ?? '');
if ($statsApi !== '') {
$ctx = stream_context_create([
'http' => [
'timeout' => 3,
'header' => "Accept: application/json\r\n",
],
]);
$raw = @file_get_contents($statsApi, false, $ctx);
if ($raw !== false) {
$json = json_decode($raw, true);
if (is_array($json)) {
$guildCount = (int) ($json['guildCount'] ?? 0);
$userCount = (int) ($json['approximateUserCount'] ?? 0);
}
}
}
$numberLocale = $locale === 'de' ? 'de_DE' : 'en_US';
$formatNumber = static function (int $value) use ($numberLocale): string {
if (class_exists(NumberFormatter::class)) {
$formatter = new NumberFormatter($numberLocale, NumberFormatter::DECIMAL);
$formatted = $formatter->format($value);
if ($formatted !== false) {
return $formatted;
}
}
$decimal = $numberLocale === 'de_DE' ? ',' : '.';
$thousands = $numberLocale === 'de_DE' ? '.' : ',';
return number_format($value, 0, $decimal, $thousands);
};
/** @var array<string, array{label: string, modules: list<array{label: string, description: string}>}> $groups */
$groups = $messages['module_groups'];
render_header(
$config,
$messages,
$locale,
'Nexumi',
t($messages, 'meta.description')
);
?>
<section class="hero-section">
<div class="container hero">
<div class="hero-brand">
<img src="assets/nexumi-logo.svg" alt="" width="56" height="56">
<h1>Nexumi</h1>
</div>
<p class="hero-headline"><?= h(t($messages, 'landing.headline')) ?></p>
<p class="hero-subtitle"><?= h(t($messages, 'landing.subtitle')) ?></p>
<div class="actions">
<a class="btn btn-lg btn-primary" href="<?= h($inviteUrl) ?>" target="_blank" rel="noreferrer"><?= h(t($messages, 'landing.invite')) ?></a>
<a class="btn btn-lg btn-secondary" href="<?= h($loginUrl) ?>"><?= h(t($messages, 'landing.login')) ?></a>
<?php if ($supportUrl): ?>
<a class="btn btn-lg btn-outline" href="<?= h($supportUrl) ?>" target="_blank" rel="noreferrer"><?= h(t($messages, 'landing.support')) ?></a>
<?php endif; ?>
</div>
</div>
</section>
<section class="border-b">
<div class="container stats">
<div class="stat-card">
<p class="card-label"><?= h(t($messages, 'landing.stats_guilds')) ?></p>
<p class="card-value"><?= h($formatNumber($guildCount)) ?></p>
</div>
<div class="stat-card">
<p class="card-label"><?= h(t($messages, 'landing.stats_users')) ?></p>
<p class="card-value"><?= h($formatNumber($userCount)) ?></p>
</div>
</div>
</section>
<section>
<div class="container features">
<div class="intro">
<h2><?= h(t($messages, 'landing.features_title')) ?></h2>
<p><?= h(t($messages, 'landing.features_subtitle')) ?></p>
</div>
<?php foreach ($groups as $group): ?>
<div class="group">
<h3><?= h($group['label']) ?></h3>
<div class="grid">
<?php foreach ($group['modules'] as $module): ?>
<div class="module-card">
<p class="module-title"><?= h($module['label']) ?></p>
<p class="module-desc"><?= h($module['description']) ?></p>
</div>
<?php endforeach; ?>
</div>
</div>
<?php endforeach; ?>
</div>
</section>
<?php
render_footer($config, $messages);