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.
47 lines
1.2 KiB
TypeScript
47 lines
1.2 KiB
TypeScript
import Link from "next/link";
|
|
|
|
export const dynamic = "force-dynamic";
|
|
|
|
const LINKS = [
|
|
{
|
|
href: "/rankings",
|
|
title: "Rankings",
|
|
text: "See the wealthiest players in the hotel, ranked by credits.",
|
|
},
|
|
{
|
|
href: "/staff",
|
|
title: "Staff",
|
|
text: "Meet the team that keeps the hotel running every day.",
|
|
},
|
|
{
|
|
href: "/news",
|
|
title: "News",
|
|
text: "The latest announcements, events and updates.",
|
|
},
|
|
];
|
|
|
|
export default function CommunityPage() {
|
|
return (
|
|
<main>
|
|
<div className="hero">
|
|
<h1 style={{ margin: "0 0 0.35rem" }}>Community</h1>
|
|
<p className="muted" style={{ margin: 0 }}>
|
|
Everything happening around the hotel in one place.
|
|
</p>
|
|
</div>
|
|
|
|
<div className="grid cols-3">
|
|
{LINKS.map((l) => (
|
|
<Link key={l.href} href={l.href} className="card hover" style={{ color: "inherit" }}>
|
|
<h3 style={{ margin: "0 0 0.35rem" }}>{l.title}</h3>
|
|
<p className="muted" style={{ margin: "0 0 0.75rem" }}>
|
|
{l.text}
|
|
</p>
|
|
<span className="btn btn-outline">Open →</span>
|
|
</Link>
|
|
))}
|
|
</div>
|
|
</main>
|
|
);
|
|
}
|