From 37465701af1e8cd5a6ec3ebc4aa5c4691efc2ea8 Mon Sep 17 00:00:00 2001 From: gahusb Date: Tue, 30 Jun 2026 14:49:10 +0900 Subject: [PATCH] =?UTF-8?q?feat(redesign):=20=EC=A0=9C=ED=92=88=20?= =?UTF-8?q?=ED=8E=98=EC=9D=B4=EC=A7=80=20craft=20=EC=A0=95=EB=A0=AC(?= =?UTF-8?q?=EA=B3=B5=ED=86=B5=20=EC=96=B8=EC=96=B4)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit max-w-5xl→6xl, 타입 스케일·여백 리듬·카드 스펙(rounded-2xl/hover)을 홈·외주와 통일. surface↔surface-alt 교차 4섹션. Co-Authored-By: Claude Opus 4.8 (1M context) Claude-Session: https://claude.ai/code/session_01A2N6SziVSPfavx1j5rAs52 --- app/products/page.tsx | 202 ++++++++++++------------------------------ 1 file changed, 59 insertions(+), 143 deletions(-) diff --git a/app/products/page.tsx b/app/products/page.tsx index 7d23b3b..57311a3 100644 --- a/app/products/page.tsx +++ b/app/products/page.tsx @@ -3,7 +3,7 @@ import type { Metadata } from 'next'; import { createAdminClient } from '@/lib/supabase/admin'; import { getListedProducts, type ProductRow } from '@/lib/supabase/product-files'; -// 완성 소프트웨어 동적 카탈로그 (서버 컴포넌트). +// 완성 소프트웨어 동적 카탈로그 (서버 컴포넌트). 라이트 고craft — 홈·외주와 동일 언어. // DB 장애·마이그레이션 미적용 시 빈 배열로 폴백해 페이지가 항상 200으로 생존한다. export const metadata: Metadata = { @@ -12,7 +12,6 @@ export const metadata: Metadata = { '쟁승메이드가 직접 운영하며 검증한 완성 소프트웨어 목록. 계좌이체 결제 후 입금 확인 즉시 마이페이지에서 다운로드할 수 있습니다.', }; -// 카탈로그는 항상 최신 상품을 보여주도록 동적 렌더링. export const dynamic = 'force-dynamic'; const KOR_TIGHT = { letterSpacing: '-0.02em' } as const; @@ -26,17 +25,7 @@ const HOW = [ function ArrowRight() { return ( - + @@ -45,18 +34,7 @@ function ArrowRight() { function CheckMark() { return ( - + ); @@ -66,7 +44,6 @@ async function loadProducts(): Promise { try { return await getListedProducts(createAdminClient()); } catch (err) { - // DB 장애·컬럼 미존재(마이그레이션 미적용) 등 — 페이지는 준비 중 폴백으로 생존 console.error('[Products] getListedProducts failed, falling back to empty:', err); return []; } @@ -79,31 +56,23 @@ export default async function ProductsPage() { return ( <> {/* ─── Hero ─── */} -
-
+
+
- - 완성 소프트웨어 + + + software

직접 운영하며 검증한 도구를
- 그대로 가져가세요. + 그대로 가져가세요 + .

-

+

입금 확인 후 마이페이지에서 바로 다운로드할 수 있습니다.

@@ -111,30 +80,24 @@ export default async function ProductsPage() {
{/* ─── 카탈로그 / 준비 중 ─── */} - {hasProducts ? ( -
-
-
+
+
+ {hasProducts ? ( +
{products.map((p) => { const features = (p.features ?? []).slice(0, 3); return ( -

+

{p.name}

{p.description && ( -

+

{p.description}

)} @@ -142,11 +105,7 @@ export default async function ProductsPage() { {features.length > 0 && (
    {features.map((f) => ( -
  • +
  • @@ -156,17 +115,11 @@ export default async function ProductsPage() {
)} -
- - ₩{p.price.toLocaleString('ko-KR')} +
+ + ₩{p.price.toLocaleString('ko-KR')} - + 자세히 보기 @@ -175,75 +128,46 @@ export default async function ProductsPage() { ); })}
-
-
- ) : ( -
-
-
-

- 출시 준비 중 + ) : ( +

+

+ coming soon

-

- 현재 상품을 정비하고 있습니다. -

-

- 로또 분석 도구, 주식 자동매매 유틸리티 등 실제로 운영 중인 도구들을 - 구매 가능한 형태로 순차 공개할 예정입니다. - 출시 소식을 먼저 받고 싶다면 아래 링크로 문의해 주세요. +

+ 현재 상품을 정비하고 있습니다 +

+

+ 로또 분석 도구, 주식 자동매매 유틸리티 등 실제로 운영 중인 도구들을 구매 가능한 + 형태로 순차 공개할 예정입니다. 출시 소식을 먼저 받고 싶다면 아래 링크로 문의해 + 주세요.

-
-
- )} + )} +
+
{/* ─── 구매 방식 안내 ─── */} -
-
-

+
+
+

+ how to buy +

+

구매 방식

-
+
{HOW.map((step) => ( -
+
{step.n} -

+

{step.t}

-

+

{step.d}

@@ -253,29 +177,21 @@ export default async function ProductsPage() {
{/* ─── CTA ─── */} -
-
-
+
+
+
{hasProducts ? '맞춤 개발 문의' : '출시 소식 받기'} + 외주 개발 알아보기