# 홈 재구조 P0 (외주 가시성 회복) Implementation Plan
> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.
**Goal:** 외주 사업부가 사이트에 살아있다는 신호를 헤더·메인·푸터·SEO 4곳에 즉시 복원해서 외주 인입 손실을 막는다. P1의 IA 본 변경 전 자리잡기 작업.
**Architecture:** 기존 Music 톤(영상 hero · Bagel Fat One · 트윗 마퀴)을 깨지 않고 외주/웹사이트/사주/블로그 진입점만 추가한다. URL 변경·결제 인프라 변경·페이지 신설은 P1 이후로 연기. 자체 정가 표기는 가격이 미정이므로 P0에서는 가격 없이 라인 표지만.
**Tech Stack:** Next.js 16 (App Router), TypeScript, Tailwind v4, lucide-react는 미설치(SVG 직접 사용)
**Spec:** `docs/superpowers/specs/2026-04-27-home-restructure-brainstorm.md`
---
## P0에서 다루지 않는 항목 (의도적 제외)
| 항목 | 이유 | 다음 단계 |
|---|---|---|
| 결제 = 계좌이체 단일화 | Music 팩(`/services/music`)·Blog 팩(`/services/blog`)은 `PurchaseAgreementModal` 통해 **이미 계좌이체** 단일화 상태 (케이뱅크 100-116-337157). 변경 불필요 | 사주 1,000원 PG는 별도 결정 필요(부록 A) |
| URL 마이그레이션 (`/freelance` → `/work/freelance` 등) | P1 본 작업 | P1 plan 별도 작성 |
| `/work` 우산 페이지 신설 | P1 본 작업 | P1 plan 별도 작성 |
| 자체 정가 가격표 | 가격 미정 | CEO 정가 확정 후 P1 |
| 자동화 라인 페이지 신설 | P2 | P2 plan |
---
## File Structure
P0는 4개 기존 파일 수정만. 새 파일 없음.
| 파일 | 책임 | 변경 |
|---|---|---|
| `app/components/TopNav.tsx` | 상단 네비게이션 | LINKS 배열에 외주 링크 1개 추가 |
| `app/components/PublicShell.tsx` | 푸터 포함 공용 셸 | 푸터 두 번째 컬럼명을 "Company" → "Custom Build", 항목 재정비 |
| `app/page.tsx` | 메인 홈 | Use Cases ↔ Final CTA 사이에 Custom Build 미니 섹션 1개 추가 |
| `app/layout.tsx` | 메타데이터 + JSON-LD | `OfferCatalog.itemListElement` 에 외주(Service) + 웹사이트(Service) 항목 추가 |
검증 인프라: 이 프로젝트는 jest/vitest/playwright 미설치. 각 task의 검증은 `npm run lint` + `npm run build` + 시각 확인으로 한다.
---
## Task 1: TopNav 외주 링크 추가
**Files:**
- Modify: `app/components/TopNav.tsx:7-12`
- [ ] **Step 1: 현재 LINKS 배열 확인**
`app/components/TopNav.tsx` 7-12행:
```ts
const LINKS = [
{ href: '/', label: '홈' },
{ href: '/services/music/samples', label: '샘플' },
{ href: '/services/music', label: '팩 상세' },
{ href: '/studio', label: '스튜디오' },
];
```
- [ ] **Step 2: 외주 링크 추가**
위 배열을 다음으로 변경:
```ts
const LINKS = [
{ href: '/', label: '홈' },
{ href: '/services/music/samples', label: '샘플' },
{ href: '/services/music', label: '팩 상세' },
{ href: '/studio', label: '스튜디오' },
{ href: '/freelance', label: '외주' },
];
```
**주의**: `isActive` 함수(36-40행)는 `/freelance` 같은 단순 경로에 대해 `pathname.startsWith(href)` 분기로 자동 작동함. 추가 변경 불필요.
- [ ] **Step 3: 린트 통과 확인**
```bash
npm run lint
```
Expected: 새 경고/에러 없음.
- [ ] **Step 4: dev 서버에서 시각 확인 (수동)**
```bash
npm run dev
```
브라우저 http://localhost:3000 에서:
- 데스크톱(md+): 헤더에 "홈 / 샘플 / 팩 상세 / 스튜디오 / 외주" 5개 노출
- "외주" 클릭 → `/freelance` 이동
- `/freelance` 페이지에서 "외주" 메뉴에 활성 표시(파란 언더라인) 떠야 함
- 모바일 햄버거: 5개 모두 노출 + "외주" 클릭 → `/freelance` 이동 + 메뉴 자동 닫힘
- 스크롤 시 알약형 글래스 헤더 폭(max-w-3xl)에서 5개 메뉴 깨지지 않음
- [ ] **Step 5: 커밋**
```bash
git add app/components/TopNav.tsx
git commit -m "feat(nav): TopNav에 외주(/freelance) 진입점 추가"
```
---
## Task 2: 푸터에 Custom Build 컬럼 추가
**Files:**
- Modify: `app/components/PublicShell.tsx:86-93`
- [ ] **Step 1: 현재 두 번째 컬럼(Company) 확인**
`app/components/PublicShell.tsx` 86-93행:
```tsx
```
**근거**:
- 사주·블로그는 spec(A-1)에 따라 Custom Build 산하로 묶임
- 외주(`/freelance`)·웹사이트(`/services/website`)는 푸터에서 처음 노출됨
- "문의하기" mailto는 Custom Build 라인 끝에 유지 (Company 컬럼 제거 대신)
- 자동화 별도 라인은 P2(`/work/automation`) 페이지 신설 시 추가
- [ ] **Step 3: 린트 통과 확인**
```bash
npm run lint
```
Expected: 경고/에러 없음.
- [ ] **Step 4: dev 서버에서 시각 확인 (수동)**
`/`, `/services/music`, `/freelance` 어디서든 푸터:
- 두 번째 컬럼명이 "CUSTOM BUILD"로 표시 (mono uppercase)
- 외주 개발 / 웹사이트 제작 / AI 사주 / 블로그 자동화 / 문의하기 — 5개 노출
- 모바일 (sm 이하)에서 grid가 2 columns로 떨어져도 깨지지 않음
- [ ] **Step 5: 커밋**
```bash
git add app/components/PublicShell.tsx
git commit -m "feat(footer): Company 컬럼을 Custom Build로 재정비 (외주·웹사이트 추가)"
```
---
## Task 3: 메인 페이지에 Custom Build 미니 섹션 추가
**Files:**
- Modify: `app/page.tsx` (Use Cases 섹션 직후, Final CTA 직전)
- [ ] **Step 1: 삽입 위치 확인**
`app/page.tsx`:
- Use Cases 섹션은 `{/* 4. Use Cases — Tweet Marquee */}` 주석으로 시작 (231행 부근)
- Final CTA 섹션은 `{/* 5. Final CTA — Full-width video */}` 주석으로 시작 (281행 부근)
- 두 섹션 사이에 Custom Build 미니 섹션을 삽입한다 (번호는 4.5)
- [ ] **Step 2: 새 섹션 코드 작성**
`{/* 5. Final CTA — Full-width video */}` 주석 **바로 위**에 다음 블록을 삽입:
```tsx
{/* 4.5. Custom Build — 외주 사업부 미니 섹션 (P0) */}
Custom Build
맞춤 개발이 필요하신가요?
7년차 백엔드 개발자가 직접 설계·개발·납품. 외주, 웹사이트, 자동화부터 사주·블로그 솔루션까지.