'use client'; import Link from 'next/link'; import { useState, useEffect, useRef } from 'react'; import ContactModal from '../../components/ContactModal'; const samples = [ { type: 'corporate', title: '기업 홈페이지', subtitle: '테크솔루션㈜', desc: '"홈페이지가 없어서 B2B 영업 때마다 명함만 건넸다"는 고민을 해결한 기업 브랜드 사이트', gradient: 'linear-gradient(135deg, #0a192f 0%, #112240 50%, #1a3a6c 100%)', accent: '#4fc3f7', tags: ['기업', 'B2B', '신뢰'], icon: '🏢', }, { type: 'bakery', title: '베이커리 홈페이지', subtitle: '르 쁘띠 포르', desc: '"인스타 팔로워는 많은데 실제 방문 예약이 없다"는 F&B 매장의 전환율 문제를 해결한 사이트', gradient: 'linear-gradient(135deg, #78350f 0%, #92400e 50%, #d97706 100%)', accent: '#fbbf24', tags: ['F&B', '로컬', '예약'], icon: '🥐', }, { type: 'portfolio', title: '개인 포트폴리오', subtitle: 'Kim Jisu', desc: '"링크드인에 PDF 올리면 아무도 안 보더라"는 문제를 해결한 채용·수주 전환형 포트폴리오', gradient: 'linear-gradient(135deg, #000000 0%, #0d0d0d 50%, #001a00 100%)', accent: '#00ff88', tags: ['크리에이터', '디자이너', '수주'], icon: '✦', }, { type: 'dashboard', title: '관리자 대시보드', subtitle: 'DataFlow SaaS', desc: '"엑셀로 수기 집계하다가 오류가 나서 야근"을 없애는 실시간 데이터 대시보드', gradient: 'linear-gradient(135deg, #0f172a 0%, #1e293b 50%, #0f2a3a 100%)', accent: '#38bdf8', tags: ['SaaS', '자동화', '관리'], icon: '📊', }, { type: 'game', title: '게임 매칭 시스템', subtitle: 'NEXUS ARENA', desc: '"디스코드에서 수동으로 팀 짜다가 싸움 났다"는 커뮤니티의 매칭·랭킹 자동화 플랫폼', gradient: 'linear-gradient(135deg, #000000 0%, #0a0a1a 50%, #0d0029 100%)', accent: '#a855f7', tags: ['게임', '커뮤니티', '자동화'], icon: '⚡', }, { type: 'interior', title: '인테리어 업체 소개', subtitle: 'AURUM Interior', desc: '"포트폴리오 사진을 카톡으로만 보내다가 고급 고객을 놓쳤다"는 문제를 해결한 브랜드 사이트', gradient: 'linear-gradient(135deg, #2C1810 0%, #4A3728 50%, #6B4E37 100%)', accent: '#D4A853', tags: ['인테리어', '포트폴리오', '고급'], icon: '◈', }, { type: 'reading', title: '독서 기록 노트', subtitle: '나의 독서 기록', desc: '읽은 책과 감상을 아름답게 기록하는 나만의 독서 저널 — 이런 것도 만들 수 있습니다', gradient: 'linear-gradient(135deg, #0C0B09 0%, #1A1710 50%, #2A2218 100%)', accent: '#D4A853', tags: ['라이프', '독서', '기록'], icon: '◻', }, { type: 'shopping', title: '개인 쇼핑몰', subtitle: 'MELLOW STUDIO', desc: '"카페24 기본 테마가 너무 흔해서 브랜드가 안 살아난다"는 고민을 해결한 커스텀 쇼핑몰', gradient: 'linear-gradient(135deg, #2A2018 0%, #4A3C2C 50%, #7A6A52 100%)', accent: '#C4A882', tags: ['쇼핑몰', '패션', '라이프'], icon: '◇', }, ]; const processSteps = [ { step: '01', title: '무료 상담', desc: '요구사항 파악 및 방향성 논의', icon: '💬' }, { step: '02', title: '기획', desc: '사이트맵 & 와이어프레임', icon: '📋' }, { step: '03', title: '디자인', desc: 'UI/UX 시안 제작', icon: '🎨' }, { step: '04', title: '개발', desc: '반응형 퍼블리싱 & 기능 구현', icon: '⚙️' }, { step: '05', title: '납품', desc: '검수 완료 후 도메인 배포', icon: '🚀' }, ]; const plans = [ { name: '스타터', price: '20', unit: '만원~', color: '#38bdf8', features: ['5페이지 이내', '반응형 디자인', '기본 SEO 설정', '1개월 유지보수', '3~5영업일 납품'], note: '개인 블로그, 소규모 소개 사이트', productId: 'website_starter', }, { name: '비즈니스', price: '100', unit: '만원~', color: '#818cf8', featured: true, features: ['10페이지 이내', '반응형 디자인', '관리자 페이지', 'SEO 최적화', '3개월 유지보수', '1~2주 납품'], note: '기업 사이트, 브랜드 페이지', productId: 'website_business', }, { name: '프리미엄', price: '200', unit: '만원~', color: '#f472b6', features: ['페이지 수 무제한', '맞춤 디자인', '결제/회원 시스템', 'DB 연동', '6개월 유지보수', '일정 협의'], note: '쇼핑몰, SaaS, 복합 시스템', productId: 'website_premium', }, ]; const faqs = [ { q: '제작 기간은 얼마나 걸리나요?', a: '규모에 따라 다르지만, 스타터는 3~5영업일, 비즈니스는 1~2주, 프리미엄은 협의 후 결정합니다. 빠른 납품이 필요한 경우 별도 상담해 주세요.', }, { q: '수정은 몇 번까지 가능한가요?', a: '기획 확정 후 디자인 시안 수정은 2회, 개발 완료 후 기능 수정은 유지보수 기간 내 자유롭게 가능합니다. 추가 기능 개발은 별도 견적으로 진행합니다.', }, { q: '도메인과 호스팅도 도와주시나요?', a: '네, 도메인 구매부터 서버 세팅, 배포까지 전 과정을 도와드립니다. Vercel, AWS, 카페24 등 원하시는 플랫폼에 맞춰 배포해 드립니다.', }, { q: '앱(모바일 앱)이나 쇼핑몰도 개발 가능한가요?', a: '네. iOS/Android 앱(React Native), 모바일 웹앱, 결제 연동 쇼핑몰, 회원/관리자 시스템 등 모두 개발 가능합니다. 프리미엄 플랜 이상이거나 규모에 따라 별도 견적으로 진행됩니다. 먼저 어떤 기능이 필요한지 상담해 주세요.', }, { q: '계약금은 어떻게 되나요? 중간에 취소하면 어떻게 되나요?', a: '계약서 체결 후 착수금 30%를 먼저 입금받고 개발을 시작합니다. 납품 전 취소 시 완성 비율에 따라 정산하며, 착수 전 전액 환불됩니다. 모든 조건은 계약서에 명시됩니다.', }, ]; function useReveal() { const ref = useRef(null); useEffect(() => { const el = ref.current; if (!el) return; const scroller = (document.querySelector('.main-content') as HTMLElement | null) ?? document.documentElement; const obs = new IntersectionObserver( ([entry]) => { if (entry.isIntersecting) { el.classList.add('ws-visible'); obs.disconnect(); } }, { threshold: 0.1, root: scroller === document.documentElement ? null : scroller } ); obs.observe(el); return () => obs.disconnect(); }, []); return ref; } function SampleMiniPreview({ type }: { type: string }) { const W = 700, H = 350; const inner = (content: React.ReactNode, bg: string) => (
{content}
); switch (type) { case 'corporate': return inner(
TECHSOLUTION
{['서비스','솔루션','고객사','연락처'].map(t => {t})}
상담 신청
ENTERPRISE IT SOLUTIONS
기업 IT 인프라,
처음부터 끝까지
15년 경험의 엔터프라이즈 IT 전문 기업.
클라우드·보안·DX 통합 솔루션을 제공합니다.
무료 상담 신청
서비스 소개서
{[['15+','년 업력'],['340+','완료 프로젝트'],['180+','기업 고객'],['99.9%','가동률']].map(([n,l]) => (
{n}
{l}
))}
, '#fff' ); case 'bakery': return inner(
Le Petit Fort
ARTISAN BOULANGERIE
{['메뉴','스토리','예약'].map(t => {t})}
방문 예약
Since 2018 · Paris Recipe
매일 아침
구워내는
정직한 빵
프랑스산 에슈레 버터와 천연 발효종만으로
만드는 정직한 아르티장 베이커리.
오늘의 빵 보기
매장 안내
{[{n:'버터 크루아상',p:'3,200',c:'#d97706'},{n:'소금빵',p:'2,800',c:'#b45309'},{n:'딸기 케이크',p:'7,500',c:'#be185d'},{n:'캄파뉴',p:'8,900',c:'#065f46'}].map(item => (
{item.n}
₩{item.p}
))}
, '#fffbf5' ); case 'portfolio': return inner(
KJ_
{['About','Work','Skills','Contact'].map(t => {t})}
Available
HIRE ME
FULL-STACK DEVELOPER
Kim
Jisu
React · Next.js · TypeScript · Node.js
디자인과 코드의 경계를 탐험합니다.
VIEW WORK
CONTACT
KJ
, '#000' ); case 'dashboard': return inner(
DataFlow
{['대시보드','분석','리포트','사용자','설정'].map((item, i) => (
{item}
))}
실시간 현황
이번 달
{[{l:'총 매출',v:'₩48.2M',c:'#38bdf8',u:true},{l:'신규 사용자',v:'1,247',c:'#34d399',u:true},{l:'전환율',v:'12.4%',c:'#a78bfa',u:false}].map(s => (
{s.l}
{s.v}
{s.u ? '↑ +8.3%' : '↓ -1.2%'}
))}
월간 매출 추이
{[40,55,35,65,80,60,90,75,85,95,70,100].map((h, i) => (
))}
, '#0f172a' ); case 'game': return inner(
NEXUSARENA
{['랭킹','매칭','챔피언','스토어'].map(t => {t})}
PLAY NOW
SEASON 7 · COMPETITIVE
NEXUS
ARENA
실시간 매칭 · 랭크 시스템 · 글로벌 토너먼트
지금 바로 전장에 참전하세요.
PLAY NOW
랭킹 보기
{[{name:'VIPER',role:'Assassin',c:'#06b6d4'},{name:'NOVA',role:'Mage',c:'#a855f7'},{name:'IRON',role:'Tank',c:'#94a3b8'},{name:'KIRA',role:'Support',c:'#ec4899'}].map(ch => (
{ch.name}
{ch.role}
))}
, '#000' ); case 'interior': return inner(
AURUM
INTERIOR DESIGN
{['포트폴리오','서비스','견적 문의'].map(t => {t})}
CONTACT
Premium Interior Design
공간이
이야기가
되는 순간
20년 경험의 인테리어 전문가가
당신만의 공간을 완성합니다.
포트폴리오 보기
{['linear-gradient(135deg, #c9b99a, #a8927a)','linear-gradient(135deg, #8B7355, #6B5A47)','linear-gradient(135deg, #D4C5A9, #B8A88A)','linear-gradient(135deg, #7C6555, #5C4A3A)'].map((bg, i) => (
))}
, '#faf8f4' ); case 'reading': return inner(
나의 독서 기록
{['서재','월별 기록','통계'].map(t => {t})}
My Reading Journal
읽은 책들이
별처럼
빛나는 공간
독서 기록을 아름답게.
감상과 인용구를 나만의 서재에 담아보세요.
기록 시작하기
{[['47','완독'],['1,240','페이지'],['12','이번 달']].map(([n,l]) => (
{n}
{l}
))}
{[{h:130,bg:'linear-gradient(180deg,#1e3a5f,#0a1628)',sp:'#2563eb'},{h:152,bg:'linear-gradient(180deg,#2C1810,#1a0e0a)',sp:'#D4A853'},{h:118,bg:'linear-gradient(180deg,#1a1a1a,#0d0d0d)',sp:'#6b7280'},{h:142,bg:'linear-gradient(180deg,#1e1b4b,#0f0d2e)',sp:'#7c3aed'},{h:120,bg:'linear-gradient(180deg,#064e3b,#022c22)',sp:'#10b981'}].map((b, i) => (
))}
, '#0C0B09' ); case 'shopping': return inner(
MELLOW STUDIO
{['NEW','OUTER','TOP','BOTTOM'].map(t => {t})}
🔍🛍 2
NEW ARRIVAL
SS 2025
COLLECTION
Quiet
Luxury
소음 없이 존재하는 옷.
절제된 아름다움을 입으세요.
SHOP NOW
{[['#c8b89a','₩328K'],['#8a7860','₩498K'],['#d4c5a9','₩218K']].map(([bg, p], i) => (
{p}
))}
, '#F4F2EF' ); default: return
; } } export default function WebsiteServicePage() { const [openFaq, setOpenFaq] = useState(null); const [showTop, setShowTop] = useState(false); const [modalOpen, setModalOpen] = useState(false); const [modalService, setModalService] = useState('홈페이지 제작'); const openModal = (service: string) => { setModalService(service); setModalOpen(true); }; useEffect(() => { const scroller = (document.querySelector('.main-content') as HTMLElement | null) ?? document.documentElement; const onScroll = () => setShowTop(scroller.scrollTop > 400); scroller.addEventListener('scroll', onScroll, { passive: true }); return () => scroller.removeEventListener('scroll', onScroll); }, []); const samplesRef = useReveal(); const processRef = useReveal(); const pricingRef = useReveal(); const faqRef = useReveal(); const ctaRef = useReveal(); return (
setModalOpen(false)} service={modalService} checklist={[ '원하시는 홈페이지 종류 (소개/쇼핑몰/SaaS 등)', '참고하고 싶은 사이트 URL (있으면)', '필요한 주요 페이지 및 기능', '희망 납품 일정 및 예산 범위', '디자인 선호 스타일 (모던/감성/심플 등)', ]} accentColor="text-indigo-400" headerFrom="#0a0a1a" headerTo="#1e1b4b" />