diff --git a/app/services/website/page.tsx b/app/services/website/page.tsx
index adde162..6dea74c 100644
--- a/app/services/website/page.tsx
+++ b/app/services/website/page.tsx
@@ -54,6 +54,26 @@ const samples = [
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: '◻',
+ },
];
const processSteps = [
diff --git a/app/services/website/samples/interior/page.tsx b/app/services/website/samples/interior/page.tsx
new file mode 100644
index 0000000..ebac46b
--- /dev/null
+++ b/app/services/website/samples/interior/page.tsx
@@ -0,0 +1,552 @@
+'use client';
+
+import Link from 'next/link';
+import { useState, useEffect } from 'react';
+
+/* ── DATA ── */
+const portfolio = [
+ { title: '한남동 단독주택', cat: '주거 인테리어', area: '245㎡', seed: 'architecture-house', w: 820, h: 1060 },
+ { title: '청담 파인다이닝', cat: '상업 공간', area: '190㎡', seed: 'restaurant-interior', w: 820, h: 540 },
+ { title: '성수 브랜드 오피스', cat: '업무 공간', area: '380㎡', seed: 'office-design', w: 400, h: 540 },
+ { title: '용산 아파트 리모델링', cat: '리모델링', area: '95㎡', seed: 'apartment-modern', w: 400, h: 400 },
+ { title: '강남 카페 에스프레소랩', cat: '상업 공간', area: '120㎡', seed: 'cafe-minimal', w: 820, h: 480 },
+];
+
+const services = [
+ {
+ title: '주거 인테리어',
+ sub: 'Residential',
+ desc: '생활의 리듬에 맞춘 공간을 설계합니다. 단독주택부터 아파트까지, 당신의 일상이 더 아름다워지도록 모든 디테일을 손수 고릅니다.',
+ details: ['공간 기획 및 3D 시뮬레이션', '자재 선정 동행 서비스', '시공 전 과정 PM', '준공 후 AS 1년'],
+ seed: 'living-room-bright', w: 680, h: 520,
+ },
+ {
+ title: '상업 공간 디자인',
+ sub: 'Commercial',
+ desc: '브랜드의 철학이 공간 언어로 번역됩니다. 첫 방문객이 문을 열었을 때 느끼는 그 감정까지 설계의 범위입니다.',
+ details: ['브랜드 아이덴티티 반영', '동선 및 고객 UX 설계', '조명·음향 플래닝', '설비 협력사 연계'],
+ seed: 'commercial-modern', w: 680, h: 520,
+ },
+ {
+ title: '리모델링 & 재생',
+ sub: 'Remodeling',
+ desc: '기존 공간의 가능성을 새로운 시선으로 바라봅니다. 구조적 변경부터 마감재 교체까지, 완전한 변신을 지원합니다.',
+ details: ['현장 실측 및 구조 분석', '철거~완공 원스톱', '예산 내 최적 시공', '친환경 자재 우선 적용'],
+ seed: 'renovation-before-after', w: 680, h: 520,
+ },
+];
+
+const testimonials = [
+ {
+ name: '하윤서', role: '한남동 단독주택 의뢰인', u: 'hayunseo',
+ rating: 5,
+ text: '처음엔 예산이 걱정됐는데, 아우라 팀이 범위를 명확히 정해줘서 오히려 계획보다 적게 들었습니다. 무엇보다 완공된 공간에서 매일 아침 커피 한 잔 하는 지금이 너무 행복해요.',
+ highlight: '계획보다 적은 예산',
+ },
+ {
+ name: '박도현', role: '카페 에스프레소랩 대표', u: 'parkdohyun',
+ rating: 5,
+ text: '우리 브랜드 철학을 완벽하게 공간으로 옮겨줬습니다. 오픈 첫날부터 SNS 바이럴이 터졌고, 오픈 3개월 만에 매출이 전년 대비 340% 올랐어요.',
+ highlight: '매출 340% 상승',
+ },
+ {
+ name: '이서진', role: '루미너스 COO', u: 'leeseojin',
+ rating: 5,
+ text: '직원들이 출근하고 싶은 공간을 만드는 게 목표였습니다. 리모델링 후 직원 만족도 설문에서 93점, 퇴직률이 절반으로 줄었습니다.',
+ highlight: '직원 만족도 93점',
+ },
+];
+
+const steps = [
+ { num: '01', title: '무료 상담', desc: '공간 사진, 예산, 취향을 공유해 주세요. 72시간 내 맞춤 제안서를 드립니다.' },
+ { num: '02', title: '콘셉트 기획', desc: '무드보드와 3D 시뮬레이션으로 완공 이후를 미리 경험합니다.' },
+ { num: '03', title: '시공', desc: '전담 PM이 공정마다 현장을 점검하고 일일 리포트를 공유합니다.' },
+ { num: '04', title: '준공 & AS', desc: '완공 후 1년간 무상 AS. 공간이 오래 아름답도록 함께합니다.' },
+];
+
+/* ── SVG ICONS ── */
+const StarIcon = ({ filled }: { filled: boolean }) => (
+
+);
+
+const CheckIcon = () => (
+
+);
+
+const ArrowRight = ({ color = '#8B6914' }: { color?: string }) => (
+
+);
+
+/* ── COMPONENT ── */
+export default function InteriorSample() {
+ const [scrolled, setScrolled] = useState(false);
+
+ useEffect(() => {
+ const onScroll = () => setScrolled(window.scrollY > 80);
+ window.addEventListener('scroll', onScroll, { passive: true });
+
+ const observer = new IntersectionObserver(
+ (entries) => entries.forEach((e) => { if (e.isIntersecting) e.target.classList.add('au-visible'); }),
+ { threshold: 0.08 }
+ );
+ document.querySelectorAll('.au-reveal').forEach((el) => observer.observe(el));
+
+ return () => { window.removeEventListener('scroll', onScroll); observer.disconnect(); };
+ }, []);
+
+ const NAV_H = 72;
+ const GOLD = '#8B6914';
+ const DARK = '#1C1A17';
+ const SAGE = '#4E5C3E';
+ const CREAM = '#FAF8F5';
+ const SURFACE = '#F0ECE4';
+
+ return (
+
+
+
+ {/* ── BACK BANNER ── */}
+
+
+ ← 홈페이지 제작 서비스로 돌아가기
+
+ |
+
+ SAMPLE · 인테리어 업체 홈페이지
+
+
+
+ {/* ── NAV ── */}
+
+
+ {/* ── HERO ── Split 60/40 */}
+
+ {/* Left — Text */}
+
+ {/* Grain texture */}
+
+
+
+ {/* Eyebrow */}
+
+
+
+ 공간이 당신의
+ 이야기를
+ 담습니다.
+
+
+
+ 아우라 인테리어는 12년간 247개의 공간을 완성했습니다.
+ 주거부터 상업 공간까지, 당신의 이야기가 머무는 곳을 만듭니다.
+
+
+
+
+ {/* Mini stats */}
+
+ {[['247+', '완공 프로젝트'], ['4.96', '고객 만족도'], ['12년', '디자인 경력']].map(([n, l]) => (
+
+ ))}
+
+
+
+
+ {/* Right — Image */}
+
+

+ {/* Floating badge */}
+
+
+ {[1,2,3,4,5].map(i => )}
+
+
최근 완공 · 한남동 단독주택
+
고객 만족도 5.0 / 5.0
+
+ {/* Category tag */}
+
+ Award Winner 2024
+
+
+
+
+ {/* ── PORTFOLIO BENTO ── */}
+
+
+
+
+
Portfolio
+
+ 공간이 말하는
우리의 언어
+
+
+
+ 전체 보기
+
+
+
+ {/* Asymmetric bento grid — NOT 3-column equal */}
+
+ {/* Large — spans 1 col, 2 rows */}
+
+
![{portfolio[0].title}]({`https://picsum.photos/seed/${portfolio[0].seed}/820/1060`})
+
+
{portfolio[0].cat}
+
{portfolio[0].title}
+
{portfolio[0].area}
+
+
+ {/* Top right 1 */}
+
+
![{portfolio[1].title}]({`https://picsum.photos/seed/${portfolio[1].seed}/600/400`})
+
+
{portfolio[1].cat}
+
{portfolio[1].title}
+
+
+ {/* Top right 2 */}
+
+
![{portfolio[2].title}]({`https://picsum.photos/seed/${portfolio[2].seed}/600/400`})
+
+
{portfolio[2].cat}
+
{portfolio[2].title}
+
+
+ {/* Bottom right — spans 2 cols */}
+
+
![{portfolio[4].title}]({`https://picsum.photos/seed/${portfolio[4].seed}/1200/480`})
+
+
{portfolio[4].cat}
+
{portfolio[4].title}
+
{portfolio[4].area}
+
+
+
+
+
+
+ {/* ── SERVICES ZIG-ZAG ── */}
+
+
+
+
Services
+
+ 우리가 잘하는 세 가지
+
+
+
+
+ {services.map((svc, i) => (
+
+ {/* Image side */}
+
+

+
+ {/* Text side */}
+
+
{svc.sub}
+
+ {svc.title}
+
+
{svc.desc}
+
+ {svc.details.map((d) => (
+
+
+ {d}
+
+ ))}
+
+
+ 상담 신청하기
+
+
+
+ ))}
+
+
+
+
+ {/* ── PROCESS ── */}
+
+
+
+
Process
+
+ 상담부터 준공까지
+
+
+
+
+ {steps.map((s, i) => (
+
0 ? '1px solid rgba(250,248,245,0.06)' : 'none', position: 'relative' }}>
+ {/* Connector line */}
+ {i < steps.length - 1 && (
+
+ )}
+
{s.num}
+
{s.title}
+
{s.desc}
+
+ ))}
+
+
+
+
+ {/* ── TESTIMONIALS MASONRY ── */}
+
+
+
+
Reviews
+
+ 공간이 바꾼 이야기들
+
+
+
+ {/* Masonry — 2 cols with staggered heights */}
+
+ {testimonials.map((t, i) => (
+
+
+ {/* Highlight badge */}
+
+ {t.highlight}
+
+
+ {/* Quote mark */}
+
"
+
+
{t.text}
+
+
+ {[1,2,3,4,5].map(j => )}
+
+
+
+

+
+
+
+
+ ))}
+
+
+ {/* Marquee trust strip */}
+
+
+ 함께한 브랜드들
+
+
+ {['에스프레소랩', '루미너스', '플로우캔버스', '스텔라랩스', '넥스트비전', '브릿지웍스', '에스프레소랩', '루미너스', '플로우캔버스', '스텔라랩스', '넥스트비전', '브릿지웍스'].map((b, i) => (
+ {b}
+ ))}
+
+
+
+
+
+ {/* ── CTA FULL-BLEED ── */}
+
+
+ {/* ── FOOTER ── */}
+
+
+ );
+}
diff --git a/app/services/website/samples/reading/page.tsx b/app/services/website/samples/reading/page.tsx
new file mode 100644
index 0000000..d8c70ad
--- /dev/null
+++ b/app/services/website/samples/reading/page.tsx
@@ -0,0 +1,609 @@
+'use client';
+
+import { useEffect, useRef, useState } from 'react';
+
+/* ═══════════════════════════════════════
+ SVG ICONS
+═══════════════════════════════════════ */
+const BookOpenIcon = () => (
+
+);
+const StarIcon = ({ filled = true }: { filled?: boolean }) => (
+
+);
+const QuoteIcon = () => (
+
+);
+const CheckIcon = () => (
+
+);
+const ArrowUpRight = () => (
+
+);
+const ChevronDown = () => (
+
+);
+
+/* ═══════════════════════════════════════
+ COUNTUP HOOK
+═══════════════════════════════════════ */
+function useCountUp(target: number, duration = 1600) {
+ const [count, setCount] = useState(0);
+ const ref = useRef(null);
+
+ useEffect(() => {
+ const el = ref.current;
+ if (!el) return;
+ const obs = new IntersectionObserver(
+ ([entry]) => {
+ if (!entry.isIntersecting) return;
+ obs.disconnect();
+ const start = performance.now();
+ const tick = (now: number) => {
+ const elapsed = now - start;
+ const progress = Math.min(elapsed / duration, 1);
+ const ease = 1 - Math.pow(1 - progress, 3);
+ setCount(Math.round(target * ease));
+ if (progress < 1) requestAnimationFrame(tick);
+ };
+ requestAnimationFrame(tick);
+ },
+ { threshold: 0.4 }
+ );
+ obs.observe(el);
+ return () => obs.disconnect();
+ }, [target, duration]);
+
+ return { count, ref };
+}
+
+/* ═══════════════════════════════════════
+ STAT ITEM
+═══════════════════════════════════════ */
+function StatItem({ value, suffix, label }: { value: number; suffix?: string; label: string }) {
+ const { count, ref } = useCountUp(value);
+ return (
+
+
+ {count}
+ {suffix && {suffix}}
+
+
{label}
+
+ );
+}
+
+/* ═══════════════════════════════════════
+ BOOK CARD
+═══════════════════════════════════════ */
+interface Book {
+ seed: string; title: string; author: string; rating: number; genre: string; year: number; note?: string;
+}
+
+const books: Book[] = [
+ { seed: 'book1', title: '파친코', author: '이민진', rating: 5, genre: '소설', year: 2024, note: '역사 속에 묻힌 삶의 무게를 느꼈다' },
+ { seed: 'book2', title: '어린 왕자', author: '생텍쥐페리', rating: 5, genre: '고전', year: 2023 },
+ { seed: 'book3', title: '원씽', author: '게리 켈러', rating: 4, genre: '자기계발', year: 2024 },
+ { seed: 'book4', title: '채식주의자', author: '한강', rating: 5, genre: '소설', year: 2023, note: '불편함 속의 아름다움' },
+ { seed: 'book5', title: '지능의 본질', author: '제프 호킨스', rating: 4, genre: '과학', year: 2024 },
+ { seed: 'book6', title: '82년생 김지영', author: '조남주', rating: 4, genre: '소설', year: 2022 },
+ { seed: 'book7', title: '노인과 바다', author: '헤밍웨이', rating: 5, genre: '고전', year: 2022 },
+ { seed: 'book8', title: '생각에 관한 생각', author: '다니엘 카너먼', rating: 4, genre: '심리학', year: 2023 },
+];
+
+const genreColors: Record = {
+ '소설': '#6B5B95', '고전': '#D4A853', '자기계발': '#4A7C59', '과학': '#2E6EA6', '심리학': '#8B4E62'
+};
+
+function BookCard({ book, large = false }: { book: Book; large?: boolean }) {
+ return (
+ {
+ (e.currentTarget as HTMLElement).style.transform = 'translateY(-6px)';
+ (e.currentTarget as HTMLElement).style.boxShadow = '0 20px 60px rgba(212,168,83,0.12)';
+ }}
+ onMouseLeave={e => {
+ (e.currentTarget as HTMLElement).style.transform = 'translateY(0)';
+ (e.currentTarget as HTMLElement).style.boxShadow = 'none';
+ }}
+ >
+ {/* cover */}
+
+

+
+ {/* genre badge */}
+
{book.genre}
+ {/* rating */}
+
+ {[1,2,3,4,5].map(i => )}
+
+
+ {/* info */}
+
+
{book.author} · {book.year}
+
{book.title}
+ {book.note &&
"{book.note}"
}
+
+
+ );
+}
+
+/* ═══════════════════════════════════════
+ MAIN PAGE
+═══════════════════════════════════════ */
+export default function ReadingPage() {
+ const [activeGenre, setActiveGenre] = useState('전체');
+
+ useEffect(() => {
+ const obs = new IntersectionObserver(
+ entries => entries.forEach(e => { if (e.isIntersecting) e.target.classList.add('rd-visible'); }),
+ { threshold: 0.1 }
+ );
+ document.querySelectorAll('.rd-reveal').forEach(el => obs.observe(el));
+ return () => obs.disconnect();
+ }, []);
+
+ const genres = ['전체', '소설', '고전', '자기계발', '과학', '심리학'];
+ const filteredBooks = activeGenre === '전체' ? books : books.filter(b => b.genre === activeGenre);
+
+ const quotes = [
+ { text: '당신이 무엇을 읽느냐가 당신이 누구인지를 말해준다. 책은 당신이 선택한 삶의 궤적이다.', author: '파친코 — 이민진', genre: '소설' },
+ { text: '어른들은 숫자를 좋아한다. 새 친구 이야기를 해줄 때, 중요한 것을 절대 묻지 않는다. 그의 목소리가 어떤지, 어떤 놀이를 좋아하는지.', author: '어린 왕자 — 생텍쥐페리', genre: '고전' },
+ { text: '성공한 사람들은 하나에 집중하고 나머지를 내려놓는 법을 배웠다. 한 가지를 잘하면 나머지가 따라온다.', author: '원씽 — 게리 켈러', genre: '자기계발' },
+ { text: '빠른 생각은 직관이고 느린 생각은 이성이다. 우리는 대부분 빠른 생각이 옳다고 착각하며 살아간다.', author: '생각에 관한 생각 — 다니엘 카너먼', genre: '심리학' },
+ ];
+
+ const currentlyReading = {
+ seed: 'current1', title: '도둑맞은 집중력', author: '요한 하리', genre: '자기계발',
+ progress: 67, totalPages: 380, currentPage: 255,
+ startDate: '2024.03.10', note: '현대 사회가 어떻게 우리의 집중력을 앗아가는지 설득력 있게 풀어냄'
+ };
+
+ const tbr = [
+ { seed: 'tbr1', title: '총, 균, 쇠', author: '재레드 다이아몬드', genre: '역사', priority: '높음' },
+ { seed: 'tbr2', title: '코스모스', author: '칼 세이건', genre: '과학', priority: '높음' },
+ { seed: 'tbr3', title: '사피엔스', author: '유발 하라리', genre: '역사', priority: '중간' },
+ ];
+
+ const monthlyData = [
+ { month: '10월', books: 2 }, { month: '11월', books: 3 }, { month: '12월', books: 1 },
+ { month: '1월', books: 4 }, { month: '2월', books: 3 }, { month: '3월', books: 2 },
+ ];
+ const maxBooks = Math.max(...monthlyData.map(d => d.books));
+
+ return (
+ <>
+
+
+
+
+ {/* ── NAV ── */}
+
+
+ {/* ── HERO ── */}
+
+ {/* ambient orbs */}
+
+
+
+
+ {/* eyebrow */}
+
+
+
Personal Reading Journal
+
+
+ {/* hero title */}
+
+ 책이 쌓이면
+ 삶이 된다.
+
+
+
+
+ 읽은 책마다 남긴 생각들, 좋아하는 문장들, 그리고 아직 읽지 못한 설렘들을 기록하는 공간.
+
+
+
+
+
+
+
+ {/* scroll indicator */}
+
+
+
+
+ {/* ── STATS BAR ── */}
+
+
+ {/* ── CURRENTLY READING ── */}
+
+
+
+
지금 읽는 중
+ Currently reading
+
+
+
+ {/* book cover */}
+
+

+
+ {/* reading badge */}
+
READING
+
+
+ {/* info */}
+
+
+
+
+ {currentlyReading.genre}
+ 시작 {currentlyReading.startDate}
+
+
{currentlyReading.title}
+
{currentlyReading.author}
+
+
+
"{currentlyReading.note}"
+
+
+
+ {/* progress */}
+
+
+ 읽은 진도
+
+ {currentlyReading.currentPage} / {currentlyReading.totalPages} p — {currentlyReading.progress}%
+
+
+
+
+
+
+
+
+ {/* TBR list */}
+
+
다음으로 읽을 책 (TBR)
+
+ {tbr.map((book, i) => (
+
(e.currentTarget as HTMLElement).style.background = 'rgba(212,168,83,0.04)'}
+ onMouseLeave={e => (e.currentTarget as HTMLElement).style.background = 'rgba(255,255,255,0.02)'}>
+

+
+
{book.title}
+
{book.author}
+
+
{book.priority}
+
+
+ ))}
+
+
+
+
+
+ {/* ── BOOK COLLECTION ── */}
+
+
+
+
완독 컬렉션
+
+ {genres.map(g => (
+
+ ))}
+
+
+
+ {/* bento grid */}
+
+ {filteredBooks.slice(0, 1).map((book, i) => (
+
+
+
+ ))}
+ {filteredBooks.slice(1, 3).map(book => (
+
+ ))}
+ {filteredBooks.slice(3, 5).map(book => (
+
+ ))}
+ {filteredBooks.slice(5, 7).map((book, i) => (
+
+
+
+ ))}
+
+
+ {filteredBooks.length === 0 && (
+
+ )}
+
+
+
+ {/* ── QUOTES MASONRY ── */}
+
+
+
+
Highlighted Quotes
+
마음에 남은 문장들
+
+
+
+ {quotes.map((quote, i) => (
+
+
+
+
+ {quote.text}
+
+
+
{quote.author}
+
{quote.genre}
+
+
+
+ ))}
+
+
+
+
+ {/* ── MONTHLY STATS ── */}
+
+
+
+
Reading Rhythm
+
월별 독서 페이스
+
+
+
+
+
+ {monthlyData.map((d, i) => (
+
+
{d.books}
+
+
{d.month}
+
+ ))}
+
+
+
+ {[
+ { label: '총 완독 권수', value: '15권', sub: '최근 6개월' },
+ { label: '평균', value: '2.5권', sub: '월 평균' },
+ { label: '최다 독서 달', value: '1월', sub: '4권 완독' },
+ ].map((item, i) => (
+
+
{item.value}
+
{item.label} · {item.sub}
+
+ ))}
+
+
+
+
+
+
+ {/* ── BRAND MARQUEE ── */}
+
+
+ {[...Array(2)].map((_, i) => (
+
+ {['파친코', '어린 왕자', '원씽', '채식주의자', '노인과 바다', '사피엔스', '총·균·쇠', '코스모스', '82년생 김지영'].map((title, j) => (
+
+ {title} ·
+
+ ))}
+
+ ))}
+
+
+
+ {/* ── CTA ── */}
+
+
+
+
+
당신의 독서 기록
+
+ 오늘 읽은 한 페이지가
+ 내일의 나를 만든다.
+
+
+ 읽은 책을 기록하고, 좋아하는 문장을 저장하고, 나만의 독서 여정을 쌓아가세요.
+
+
+
+
+
+
+
+
+ {/* ── FOOTER ── */}
+
+
+ >
+ );
+}