From a3933c108164b9fbf1c9a7dc7922de9c3a1c93a1 Mon Sep 17 00:00:00 2001 From: gahusb Date: Fri, 12 Jun 2026 00:26:03 +0900 Subject: [PATCH] =?UTF-8?q?feat(home):=20=EC=86=8C=ED=94=84=ED=8A=B8?= =?UTF-8?q?=EC=9B=A8=EC=96=B4=20=EC=A7=84=EC=97=B4=20=EC=84=B9=EC=85=98=20?= =?UTF-8?q?products=20=EB=8F=99=EC=A0=81=20=EC=97=B0=EB=8F=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit getListedProducts(createAdminClient()) try/catch로 상위 3개 카드 렌더, 0개이면 기존 출시 준비 중 폴백 유지. force-dynamic으로 항상 최신 목록 노출. --- app/page.tsx | 177 +++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 138 insertions(+), 39 deletions(-) diff --git a/app/page.tsx b/app/page.tsx index af9aac2..1a40a2f 100644 --- a/app/page.tsx +++ b/app/page.tsx @@ -1,8 +1,13 @@ import Link from 'next/link'; +import { createAdminClient } from '@/lib/supabase/admin'; +import { getListedProducts, type ProductRow } from '@/lib/supabase/product-files'; // 쟁승메이드 메인 — 외주 개발 + 완성 소프트웨어 2축 랜딩 (서버 컴포넌트) // PublicShell이 TopNav(h-16)·푸터·main 배경을 제공하므로 여기서는 콘텐츠 섹션만 렌더한다. +// 소프트웨어 진열 섹션이 DB 조회를 포함하므로 항상 최신 목록을 보여준다. +export const dynamic = 'force-dynamic'; + const KOR_TIGHT = { letterSpacing: '-0.02em' } as const; const KOR_BODY = { letterSpacing: '-0.01em' } as const; @@ -58,7 +63,20 @@ function ArrowRight() { ); } -export default function Home() { +async function loadFeaturedProducts(): Promise { + try { + const all = await getListedProducts(createAdminClient()); + return all.slice(0, 3); + } catch (err) { + console.error('[Home] getListedProducts failed, falling back to empty:', err); + return []; + } +} + +export default async function Home() { + const featuredProducts = await loadFeaturedProducts(); + const hasProducts = featuredProducts.length > 0; + return ( <> {/* ─── 1. Hero ─── */} @@ -357,47 +375,128 @@ export default function Home() { - {/* ─── 6. 소프트웨어 진열(예고) ─── */} - {/* Phase 2: 이 섹션은 products 테이블 기반 동적 진열로 교체 예정. - 현재는 출시 전 정적 안내만 노출한다. */} + {/* ─── 6. 소프트웨어 진열 ─── */} + {/* Phase 2: products 테이블 기반 동적 진열. 0개이면 출시 준비 중 폴백. */}
-
-

+

+
+

+ Software +

+

+ 완성 소프트웨어 +

+
+ + 전체 보기 + + +
+
+ {featuredProducts.map((p) => ( + +

+ {p.name} +

+ {p.description && ( +

+ {p.description} +

+ )} +
+ + ₩{p.price.toLocaleString('ko-KR')} + + + 자세히 + + +
+ + ))} +
+
+ + 전체 보기 + + +
+ + ) : ( +
- Coming soon -

-

- 검증된 완성 소프트웨어를 준비하고 있습니다 -

-

- 직접 운영하며 다듬은 도구를 하나씩 다운로드 상품으로 공개할 예정입니다. - 출시 소식을 가장 먼저 받아보세요. -

- - 출시 소식 받기 - - -
+

+ Coming soon +

+

+ 검증된 완성 소프트웨어를 준비하고 있습니다 +

+

+ 직접 운영하며 다듬은 도구를 하나씩 다운로드 상품으로 공개할 예정입니다. + 출시 소식을 가장 먼저 받아보세요. +

+ + 출시 소식 받기 + + +
+ )}