Add data-driven public pages (home, news, profile)

Real App Router pages reading the converted Prisma models:
- home: latest 4 articles (websiteArticles) + hotel_name from settings
- /news + /news/[slug]: article index and detail
- /u/[username]: profile (avatar via imager helper, motto, rank, credits, online)
- shared SiteNav (reads session via auth() + hotel_name), globals.css
- src/lib/format.ts: avatarImageUrl + excerpt helpers (unit-tested)

Verified: tsc exit 0, vitest 43/43, next build exit 0 (7 routes). Pages render
against a live DB (deferred until DATABASE_URL is provided). i18n to be layered
on next.
This commit is contained in:
Simo committed 2026-06-27 16:42:59 +02:00
1 parent 8fca407f0f
commit 6e34d485d4
9 files changed
+327 -7

No files matched your search

+30
View File
@@ -0,0 +1,30 @@
import Link from "next/link";
import { auth } from "@/lib/auth";
import { siteSettings } from "@/lib/services/site-settings";
export async function SiteNav() {
const [hotelName, session] = await Promise.all([
siteSettings.get("hotel_name", "Atom"),
auth(),
]);
return (
<nav className="site-nav">
<div className="container">
<Link href="/" className="brand">
{hotelName ?? "Atom"}
</Link>
<Link href="/news">News</Link>
<span className="spacer" />
{session?.user ? (
<>
<Link href={`/u/${session.user.name}`}>{session.user.name}</Link>
<Link href="/client">Hotel</Link>
</>
) : (
<Link href="/login">Login</Link>
)}
</div>
</nav>
);
}