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 +

+

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

+

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

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