From 19fb7a0892c2c0664b4f85498ba202be3fa4f5ca Mon Sep 17 00:00:00 2001 From: gahusb Date: Fri, 6 Mar 2026 02:11:25 +0900 Subject: [PATCH] Redesign full site: dashboard layout, service pages, modal contact, CookieRun font MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 전체 디자인 시스템 개편: 딥 네이비 (#04102b) + 로열 블루 (#1a56db) 팔레트 - 홈 대시보드: 가운데 정렬, 서비스별 고유 카드 디자인 (로또/주식/프롬프트/자동화) - 서비스 페이지 4종: 각 서비스 테마 색상 + 장식 요소 + 가운데 정렬 레이아웃 - 외주 개발 페이지: 라이브 카운터 (진행중/상담중/납품완료), 수직 타임라인 - ContactModal 컴포넌트: 서비스별 모달 문의폼 + 체크리스트 (페이지 이동 없이 문의) - CookieRun 폰트 적용 (Regular/Bold/Black, 상업적 이용 가능 라이선스) - 실명 '박재오' → '쟁토리' 전체 변경, 7년차 강조 홈 페이지에만 표시 Co-Authored-By: Claude Sonnet 4.6 --- app/components/ContactForm.tsx | 257 ++-- app/components/ContactModal.tsx | 309 +++++ app/components/DashboardShell.tsx | 41 + app/components/Sidebar.tsx | 176 +++ app/freelance/page.tsx | 526 ++++++++ app/globals.css | 109 +- app/layout.tsx | 37 +- app/page.tsx | 1797 +++++----------------------- app/services/automation/page.tsx | 219 ++++ app/services/lotto/page.tsx | 268 +++++ app/services/prompt/page.tsx | 261 ++++ app/services/stock/page.tsx | 264 ++++ public/fonts/CookieRun-Black.otf | Bin 0 -> 929740 bytes public/fonts/CookieRun-Bold.otf | Bin 0 -> 978824 bytes public/fonts/CookieRun-Regular.otf | Bin 0 -> 948700 bytes 15 files changed, 2618 insertions(+), 1646 deletions(-) create mode 100644 app/components/ContactModal.tsx create mode 100644 app/components/DashboardShell.tsx create mode 100644 app/components/Sidebar.tsx create mode 100644 app/freelance/page.tsx create mode 100644 app/services/automation/page.tsx create mode 100644 app/services/lotto/page.tsx create mode 100644 app/services/prompt/page.tsx create mode 100644 app/services/stock/page.tsx create mode 100644 public/fonts/CookieRun-Black.otf create mode 100644 public/fonts/CookieRun-Bold.otf create mode 100644 public/fonts/CookieRun-Regular.otf diff --git a/app/components/ContactForm.tsx b/app/components/ContactForm.tsx index fee32c2..078770e 100644 --- a/app/components/ContactForm.tsx +++ b/app/components/ContactForm.tsx @@ -1,18 +1,27 @@ 'use client'; -import { useState } from 'react'; +import { useState, useEffect, Suspense } from 'react'; +import { useSearchParams } from 'next/navigation'; -export default function ContactForm() { +function ContactFormInner() { + const searchParams = useSearchParams(); const [formData, setFormData] = useState({ name: '', phone: '', email: '', - service: 'RPA 자동화', + service: '외주 개발 문의', message: '', }); const [status, setStatus] = useState<'idle' | 'loading' | 'success' | 'error'>('idle'); const [errorMessage, setErrorMessage] = useState(''); + useEffect(() => { + const serviceParam = searchParams.get('service'); + if (serviceParam) { + setFormData((prev) => ({ ...prev, service: serviceParam })); + } + }, [searchParams]); + const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); setStatus('loading'); @@ -21,29 +30,13 @@ export default function ContactForm() { try { const response = await fetch('/api/contact', { method: 'POST', - headers: { - 'Content-Type': 'application/json', - }, + headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(formData), }); - const data = await response.json(); - - if (!response.ok) { - throw new Error(data.error || '문의 전송에 실패했습니다.'); - } - + if (!response.ok) throw new Error(data.error || '문의 전송에 실패했습니다.'); setStatus('success'); - // 폼 초기화 - setFormData({ - name: '', - phone: '', - email: '', - service: 'RPA 자동화', - message: '', - }); - - // 3초 후 성공 메시지 숨기기 + setFormData({ name: '', phone: '', email: '', service: '외주 개발 문의', message: '' }); setTimeout(() => setStatus('idle'), 5000); } catch (error) { setStatus('error'); @@ -54,133 +47,129 @@ export default function ContactForm() { const handleChange = ( e: React.ChangeEvent ) => { - setFormData((prev) => ({ - ...prev, - [e.target.name]: e.target.value, - })); + setFormData((prev) => ({ ...prev, [e.target.name]: e.target.value })); }; return ( -
-
-
-
- - -
-
- - -
-
- + +
-
-
- - - - - - - -
- -
- - -
- - {status === 'success' && ( -
- ✅ 문의가 성공적으로 전송되었습니다! 24시간 이내 답변드리겠습니다. -
- )} - - {status === 'error' && ( -
- ❌ {errorMessage} -
- )} - - - - -
-
-

또는 아래 연락처로 직접 문의주세요

- + placeholder="010-0000-0000" + className="w-full px-3.5 py-2.5 text-sm border border-[#dbe8ff] rounded-xl focus:ring-2 focus:ring-[#1a56db] focus:border-[#1a56db] outline-none bg-white disabled:bg-slate-50" + />
-
+ +
+ + +
+ +
+ + +
+ +
+ +