import { headers } from "next/headers"; import Image from "next/image"; import Link from "next/link"; import { getTranslations } from "next-intl/server"; import { LoginForm } from "@/components/auth/login-form"; import { cached } from "@/lib/cache"; import { avatarImageUrl } from "@/lib/format"; import { prisma } from "@/lib/prisma"; import { captchaConfig } from "@/lib/services/captcha"; import { resolveHotelName } from "@/lib/hotel-name"; import { siteSettings } from "@/lib/services/site-settings"; import { ThemeSwitcher } from "@/components/theme-switcher"; import { LanguageSwitcher } from "@/components/language-switcher"; import { Reveal } from "@/components/motion-reveal"; import { Clock } from "@/components/clock"; export default async function LoginPage() { const t = await getTranslations("pages.login"); const th = await getTranslations("header"); const [hotelName, imagerRaw, cfg, discordUrl, logo] = await Promise.all([ resolveHotelName(), siteSettings.get( "habbo_imaging_url", "https://www.habbo.com/habbo-imaging/avatarimage", ), captchaConfig(), siteSettings.get("radio_social_discord", ""), siteSettings.get("cms_logo", ""), ]); const imager = imagerRaw ?? "https://www.habbo.com/habbo-imaging/avatarimage"; const nonce = (await headers()).get("x-nonce") ?? undefined; const [online, recentUsers, latestUsers] = await Promise.all([ cached("online_count", 10_000, () => prisma.user.count({ where: { online: "1" } }), ).catch(() => 0), prisma.user .findMany({ where: { online: "1" }, select: { username: true, look: true }, take: 8, }) .catch(() => []), prisma.user .findMany({ orderBy: { accountCreated: "desc" }, select: { username: true, look: true }, take: 8, }) .catch(() => []), ]); return (
{/* ── Top Bar ── */}
{logo ? ( {hotelName} ) : ( {hotelName} )} {hotelName}
{/* Left panel */}
Frank
{th("online", { count: online, hotel: "" }).trim()}

{t("welcomeBack")}

{t("welcomeBackSub", { hotelName })}

{recentUsers.length > 0 && (

{th("online", { count: online, hotel: "" }).trim()}

{recentUsers.map((u) => (
{u.username}
))}
)} {latestUsers.length > 0 && (

Newest citizens

{latestUsers.map((u) => (
{u.username}
))}
)}

{t("noAccount") ?? "No account?"}{" "} {t("createOne") ?? "Create one"}

{/* Right: form */}

{t("title")}

{t("subtitle")}

); }