diff --git a/app/layout.tsx b/app/layout.tsx index ab88c02..2796071 100644 --- a/app/layout.tsx +++ b/app/layout.tsx @@ -1,6 +1,6 @@ import type { Metadata, Viewport } from "next"; import "./globals.css"; -import { GlobalNav } from "@/components/layout/AppChrome"; +import { GlobalNav, SiteFooter } from "@/components/layout/AppChrome"; import { auth } from "@/lib/auth"; // NEXT_PUBLIC_APP_URL 이 비어 있으면 Next 기본(요청 host)을 쓴다. @@ -42,14 +42,15 @@ export default async function RootLayout({ }) { const session = await auth(); + const approved = Boolean(session?.user.approved); + const isAdmin = session?.user.role === "ADMIN"; + return (
-- 오늘의 세션을 만들고 사진과 기록을 이어 붙입니다. -
-- 날짜, 장소, 멤버로 지난 러닝의 맥락을 다시 찾습니다. -
-- 누적 거리와 페이스 흐름을 한 화면에서 확인합니다. -
-+ {body} +
+ + {cta} › + + ); } + +function formatKm(km: number): string { + return km >= 100 ? String(Math.round(km)) : km.toFixed(1); +} diff --git a/app/pending/page.tsx b/app/pending/page.tsx index 067c1c1..bc693f0 100644 --- a/app/pending/page.tsx +++ b/app/pending/page.tsx @@ -21,6 +21,8 @@ export default async function PendingPage() { return ( <>+
{props.location}
diff --git a/app/sessions/page.tsx b/app/sessions/page.tsx
index 6376318..bdc9275 100644
--- a/app/sessions/page.tsx
+++ b/app/sessions/page.tsx
@@ -1,6 +1,7 @@
import Link from "next/link";
import { Button } from "@/components/ui/button";
+import { db } from "@/lib/db";
import { requireApproved } from "@/lib/guard";
import { listApprovedMembers, listSessions } from "@/lib/sessions";
import {
@@ -33,9 +34,10 @@ export default async function SessionsArchivePage({ searchParams }: PageProps) {
const sp = await searchParams;
const { cursorId, filters, hasActiveFilters } = parseSessionArchiveParams(sp);
- const [page, members] = await Promise.all([
+ const [page, members, totalCount] = await Promise.all([
listSessions({ cursorId, filters }),
listApprovedMembers(),
+ db.session.count(),
]);
const nextHref =
@@ -52,20 +54,18 @@ export default async function SessionsArchivePage({ searchParams }: PageProps) {
+
{eyebrow}
{eyebrow}
@@ -203,7 +221,10 @@ export function HeroBand({
) : null}
@@ -220,13 +241,50 @@ export function HeroBand({
@@ -212,7 +233,7 @@ export function HeroBand({
{description ? (
+ {items.map((item) => (
+
+ );
+}
+
export function UtilityCard({
children,
className,
@@ -253,3 +311,50 @@ export function SectionLabel({ children }: { children: ReactNode }) {
);
}
+
+export function SiteFooter({
+ approved = false,
+ isAdmin = false,
+}: {
+ approved?: boolean;
+ isAdmin?: boolean;
+}) {
+ return (
+
+ );
+}