Add remaining public + admin pages (parallel build, 26 files)

Built via two parallel agent workflows reading the real Prisma schema, then
integrated + verified.

Public: /shop (categories + storefront), /community hub, /rankings (top by
credits), /staff, /photos (camera_web gallery), /help (categories + rules),
/help/tickets (auth-gated user tickets + create), /settings (auth-gated, update
motto via RCON).

Admin: /admin/catalog (+[id] items), /admin/radio (shouts/apps/schedules +
delete shout), /admin/teams (CRUD), /admin/permissions (read), /admin/wordfilter
(CRUD + RCON push), /admin/ip (whitelist/blacklist CRUD), /admin/applications
(list + dismiss), /admin/logs (chat/command/alert read), /admin/achievements
(read). Server actions all staff-gated.

Header + admin nav extended. Verified: tsc exit 0, vitest 48/48, next build
exit 0 (33 routes); curl-probed every route — public 200/<main>, auth+admin
correctly 307-redirect when unauthorized.
This commit is contained in:
Simo committed 2026-06-28 13:24:55 +02:00
1 parent 9a79acebe7
commit e96b606e1e
27 files changed
+2400

No files matched your search

+15
View File
@@ -45,6 +45,18 @@ export async function SiteHeader() {
<Link className="nav-item" href="/news">
News
</Link>
<Link className="nav-item" href="/shop">
Shop
</Link>
<Link className="nav-item" href="/community">
Community
</Link>
<Link className="nav-item" href="/photos">
Photos
</Link>
<Link className="nav-item" href="/help">
Help
</Link>
{session?.user ? (
<Link className="nav-item" href="/client">
Hotel
@@ -73,6 +85,9 @@ export async function SiteHeader() {
{diamonds}
</span>
</div>
<Link className="nav-item" href="/settings">
Settings
</Link>
<Link className="nav-item" href={`/u/${session.user.name}`}>
{session.user.name}
</Link>