Panel web: servers, capes, player profiles, auth server settings

- Servers: live status, players and TPS; add a server and get its token
  with copy-paste setup for the plugin/mod and authlib-injector; detail
  page with leaderboard (sortable), online players and activity feed
- Capes: upload, preview, and choose who can wear each one
- Players: click a player for their skin (upload, arm style, reset),
  cape, playtime and per-server stats; disable with a reason
- Settings: Microsoft section replaced by the auth server (public
  address, Yggdrasil URL, start flag, signing key)
- Dashboard: players online now and connected servers
- Avatars come from the panel's own skins

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011ARcGWxLx21FwXJ3yfGriS
This commit is contained in:
Claude committed 2026-09-28 09:12:59 +00:00
1 parent a50963f9e0
commit c7efd759a8
19 files changed
+1284 -38

No files matched your search

+9
View File
@@ -8,6 +8,9 @@
import Users from './pages/Users.svelte';
import Branding from './pages/Branding.svelte';
import Settings from './pages/Settings.svelte';
import Servers from './pages/Servers.svelte';
import ServerDetail from './pages/ServerDetail.svelte';
import Capes from './pages/Capes.svelte';
import { get } from './lib/api';
import { route } from './lib/router.svelte';
import { logout, session, type Me } from './lib/session.svelte';
@@ -55,6 +58,12 @@
<InstanceEditor id={route.params[0]} />
{:else if route.name === 'instances'}
<Instances />
{:else if route.name === 'servers' && route.params[0]}
<ServerDetail id={route.params[0]} />
{:else if route.name === 'servers'}
<Servers />
{:else if route.name === 'capes'}
<Capes />
{:else if route.name === 'users'}
<Users />
{:else if route.name === 'branding'}