본사이트(www.dreamitbiz.com)의 핵심 인프라(인증, 결제, 테마, 다국어)를 상속받는 하위 사이트 템플릿입니다.
# 1. 의존성 설치
npm install
# 2. 환경변수 설정
cp .env.example .env
# .env 파일에 Supabase, PortOne 등 키를 입력하세요
# 3. 개발 서버 시작
npm run dev사이트명, 메뉴, 푸터 링크, Family Site 목록 등을 수정합니다.
const site = {
name: 'DreamIT Books', // 사이트명 (영문)
nameKo: '드림아이티 출판사', // 사이트명 (한글)
description: '...', // 사이트 설명
brand: {
parts: [ // 로고 텍스트 (span 단위)
{ text: 'Dream', className: 'brand-dream' },
{ text: 'IT', className: 'brand-it' },
{ text: 'Books', className: 'brand-biz' }
]
},
menuItems: [ // 네비게이션 메뉴
{ path: '/', labelKey: 'nav.home' },
{
labelKey: 'site.nav.books',
path: '/books',
activePath: '/books',
dropdown: [
{ path: '/books/it', labelKey: 'site.nav.itBooks' },
{ path: '/books/education', labelKey: 'site.nav.eduBooks' }
]
},
{ path: '/shop', labelKey: 'shop.title', activePath: '/shop' }
],
footerLinks: [...], // 푸터 바로가기
familySites: [...] // Family Site 드롭다운
};site 키 아래에 사이트 전용 번역을 추가합니다.
// ko
site: {
nav: { books: '도서', itBooks: 'IT 도서' },
home: { title: '...', subtitle: '...' }
}src/pages/에 새 페이지 컴포넌트 생성src/layouts/PublicLayout.jsx에 Route 추가src/config/site.js의menuItems에 메뉴 항목 추가
// PublicLayout.jsx
const Books = lazy(() => import('../pages/Books'));
// ...
<Route path="/books" element={<Books />} />src/styles/site.css— 사이트 전용 스타일- CSS 변수는
src/styles/base.css에 정의되어 있음 - 다크모드는
src/styles/dark-mode.css에서 자동 처리
| 기능 | 설명 |
|---|---|
| Supabase 인증 | Google, Kakao, Email 로그인/가입 |
| PortOne 결제 | 카드결제 (아임포트) |
| 테마 시스템 | 다크/라이트/자동 + 5색 컬러 테마 |
| 다국어 | 한국어/영어 전환 |
| 장바구니 | localStorage 기반 장바구니 |
| 토스트 알림 | 전역 알림 시스템 |
| 변수 | 설명 |
|---|---|
VITE_SUPABASE_URL |
Supabase 프로젝트 URL |
VITE_SUPABASE_ANON_KEY |
Supabase 공개 키 |
VITE_PORTONE_STORE_ID |
PortOne 스토어 ID |
VITE_PORTONE_CHANNEL_KEY |
PortOne 채널 키 |
VITE_SITE_URL |
배포 도메인 URL |
# 프로덕션 빌드
npm run build
# 빌드 미리보기
npm run preview빌드 결과물은 dist/ 디렉토리에 생성됩니다.