{e.name}
{e.description && ( @@ -46,7 +47,7 @@ export default function Events() { )} ))} diff --git a/frontend/src/pages/Galerie.jsx b/frontend/src/pages/Galerie.jsx index 3f89126..068f6c4 100644 --- a/frontend/src/pages/Galerie.jsx +++ b/frontend/src/pages/Galerie.jsx @@ -1,5 +1,6 @@ import { useEffect, useState } from 'react'; import { apiGet } from '../api.js'; +import { IconChevronLeft, IconChevronRight } from '../icons.jsx'; import Lightbox from '../components/Lightbox.jsx'; import { SkeletonGrid } from '../components/Skeleton.jsx'; @@ -68,13 +69,13 @@ export default function Galerie() { {pages > 1 && (// Dienste
- ⚠️ Die Impressums-Angaben sind noch nicht vollständig hinterlegt + ✗ Die Impressums-Angaben sind noch nicht vollständig hinterlegt (Setup → System → Impressum).
)} diff --git a/frontend/src/pages/Level.jsx b/frontend/src/pages/Level.jsx index c41d541..0f77911 100644 --- a/frontend/src/pages/Level.jsx +++ b/frontend/src/pages/Level.jsx @@ -1,6 +1,7 @@ import { useEffect, useState } from 'react'; import { apiGet } from '../api.js'; import { SkeletonRows } from '../components/Skeleton.jsx'; +import { IconTrophy } from '../icons.jsx'; /** Muss der Formel in src/bot/levels.js entsprechen */ function xpForLevel(level) { @@ -9,7 +10,8 @@ function xpForLevel(level) { return total; } -const MEDALS = ['🥇', '🥈', '🥉']; +// Platz 1–3 bekommen einen Pokal in Gold/Silber/Bronze, danach schlicht die Nummer +const MEDAL_COLORS = ['#f5c518', '#c0c4cc', '#c07a3e']; /** Nachrichten/Tag der letzten 30 Tage als Balken */ function ActivityChart({ stats }) { @@ -66,7 +68,7 @@ export default function Level() {Bestenliste konnte nicht geladen werden.
} {!error && !rows &&Noch keine XP vergeben — schreibt was im Discord! ✍️
} + {rows?.length === 0 &&Noch keine XP vergeben — schreibt was im Discord!
} {rows?.length > 0 && (⚠️ {error}
} + {error &&✗ {error}
} {!profile && !error &&Lade …
} {profile && ( @@ -108,7 +109,9 @@ export default function Profil({ me }) {{profile.user.displayName}
Dabei seit {fmtDate(profile.user.joinedAt)}
- {profile.playtester && 🧪 Playtester}
+ {profile.playtester && (
+
// Dein Alpha-Key
{profile.alphaKey}
-
+
// Rollen-Menüs
- Selbstbedienungs-Rollen wie bei Carl-bot — nur ohne Paywall. 😄 Der Bot postet + Selbstbedienungs-Rollen wie bei Carl-bot — nur ohne Paywall. Der Bot postet ein Embed mit Buttons; Klick = Rolle nehmen, nochmal = abgeben. Menüs sind jederzeit editierbar, der Discord-Post zieht automatisch mit.
@@ -1712,7 +1717,7 @@ export default function Settings({ me }) { className={`settings-nav-item ${tab === t.id ? 'active' : ''}`} onClick={() => setTab(t.id)} > - {t.icon} +