|
| 1 | +# CLAUDE.md |
| 2 | + |
| 3 | +This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. |
| 4 | + |
| 5 | +## 프로젝트 개요 |
| 6 | + |
| 7 | +Jekyll 3.9.5 기반 다국어 기술 블로그 (github-pages gem v231). 커스텀 도메인 `realcoding.blog`에서 운영되며 한국어(기본), 영어, 일본어 3개 언어를 지원한다. |
| 8 | + |
| 9 | +## 개발 명령어 |
| 10 | + |
| 11 | +```bash |
| 12 | +bundle install # 의존성 설치 |
| 13 | +bundle exec jekyll serve # 로컬 개발 서버 (localhost:4000, 라이브 리로드) |
| 14 | +bundle exec jekyll build # 정적 사이트 빌드 → _site/ |
| 15 | +``` |
| 16 | + |
| 17 | +배포: `git push origin master` → GitHub Pages가 자동으로 Jekyll 빌드 및 배포 (별도 CI/CD 없음) |
| 18 | + |
| 19 | +## 아키텍처 |
| 20 | + |
| 21 | +### 레이아웃 체계 |
| 22 | +``` |
| 23 | +default.html (기본 HTML 구조, SEO, 다국어 hreflang, 외부 라이브러리) |
| 24 | +├── post.html (포스트 메타데이터, 네비게이션, 공유버튼, Utterances 댓글) |
| 25 | +└── page.html (단순 페이지 제목/콘텐츠) |
| 26 | +``` |
| 27 | + |
| 28 | +### 다국어 시스템 |
| 29 | +- UI 문자열: `_data/ko.yml`, `_data/en.yml`, `_data/ja.yml` |
| 30 | +- 언어별 페이지: 루트(`/`) = 한국어, `/en/`, `/ja/` |
| 31 | +- 포스트에서 `lang` front matter로 언어 지정 |
| 32 | +- 레이아웃에서 `site.data[page.lang]`로 해당 언어 데이터 접근 |
| 33 | + |
| 34 | +### 포스트 규칙 |
| 35 | +- **파일명**: `YYYY-MM-DD-slug.md` (한국어), `YYYY-MM-DD-slug-en.md` (영어), `YYYY-MM-DD-slug-ja.md` (일본어) |
| 36 | +- **URL**: `/:year/:month/:day/:title/` |
| 37 | +- **이미지**: `/assets/images/posts/[포스트별-폴더]/` 하위에 저장 |
| 38 | + |
| 39 | +### Front Matter 구조 |
| 40 | +```yaml |
| 41 | +--- |
| 42 | +layout: post |
| 43 | +title: "제목" |
| 44 | +date: 2025-07-04 00:02:00 +0900 |
| 45 | +categories: [Development, AI] |
| 46 | +tags: [태그1, 태그2] |
| 47 | +author: "Kevin Park" |
| 48 | +lang: ko # ko | en | ja |
| 49 | +excerpt: "요약 텍스트" |
| 50 | +image: "/assets/images/posts/폴더/hero.png" # 선택 |
| 51 | +mermaid: true # Mermaid 다이어그램 사용 시 |
| 52 | +--- |
| 53 | +``` |
| 54 | + |
| 55 | +### 주요 에셋 |
| 56 | +- `assets/css/main.css` — 전체 스타일 (CSS 변수 기반 다크/라이트 테마) |
| 57 | +- `assets/js/main.js` — 모바일 메뉴, 테마 토글, 이미지 모달, 스크롤 기능 |
| 58 | +- `_includes/header.html` — 네비게이션 + 언어 전환 드롭다운 |
| 59 | +- `_includes/footer.html` — 소셜 링크, 카테고리, 최근 포스트 |
| 60 | +- `_includes/mermaid.html` — Mermaid 다이어그램 렌더링 |
| 61 | +- `_includes/analytics.html` — Google Analytics (GA4) |
| 62 | +- `_includes/adsense.html` — Google AdSense |
| 63 | + |
| 64 | +### 외부 서비스 |
| 65 | +- **댓글**: Utterances (GitHub Issues 기반, repo: `realcoding2003/realcoding2003.github.io`) |
| 66 | +- **분석**: Google Analytics GA4 (`G-MEFBMHM6FK`) |
| 67 | +- **광고**: Google AdSense (`ca-pub-9012129960393497`) |
| 68 | +- **코드 하이라이팅**: Rouge (빌드 시) + Highlight.js (런타임) |
| 69 | + |
| 70 | +## 작업 모드 |
| 71 | + |
| 72 | +이 프로젝트에서의 작업은 두 가지 모드로 구분된다: |
| 73 | + |
| 74 | +1. **블로그 디자인 모드**: CSS/JS/레이아웃 등 UI/UX 개선 작업 |
| 75 | +2. **블로깅 모드** (`/blog-write`): 새 포스트 작성 워크플로우 |
| 76 | + |
| 77 | +모드를 명시하지 않으면 대화 내용에서 자동 판별한다. |
| 78 | + |
| 79 | +## 블로깅 규칙 |
| 80 | + |
| 81 | +### 워크플로우 |
| 82 | +`/blog-write` 스킬로 실행. 주제 접수 → 구조 제안 → 이미지 처리 → 한국어 초안 → 사용자 리뷰 → **영어/일본어 자동 번역** → 발행 |
| 83 | + |
| 84 | +### 다국어 자동 번역 |
| 85 | + |
| 86 | +- 한국어 초안이 확정되면 영어(en), 일본어(ja) 버전을 **자동으로** 작성한다 |
| 87 | +- 별도 요청 없이도 항상 3개 언어 파일을 생성한다 |
| 88 | +- 단순 번역이 아닌, 해당 언어권 독자에게 자연스러운 표현으로 작성 |
| 89 | +- 영어: 전문적이고 간결한 어투 |
| 90 | +- 일본어: 정중한 경어체 (~です/~ます) |
| 91 | + |
| 92 | +### 이미지 규칙 |
| 93 | + |
| 94 | +- **필수**: 모든 포스트에 최소 1개 이미지 (일상 블로그 포함) |
| 95 | +- **경로**: `/assets/images/posts/[포스트-slug]/` |
| 96 | +- **최적화**: `scripts/optimize-image.sh` 사용 (최대 1200px, 300KB 이하) |
| 97 | +- **이미지 소스**: |
| 98 | + - PC 캡처 → MCP screenshot capture (`mcp__screenshot__capture`) |
| 99 | + - AI 생성 이미지 → 상세 영문 프롬프트 제공, 사용자가 외부 도구로 생성 |
| 100 | + - 사용자 사진 → `dropbox/` 폴더에 넣으면 스크립트로 최적화 |
| 101 | + - 웹사이트 캡처 → Playwright MCP 활용 |
| 102 | + |
| 103 | +### 프로젝트 기반 블로깅 |
| 104 | + |
| 105 | +- 사용자가 프로젝트 링크(GitHub 등)를 제공하면, 해당 프로젝트를 분석하여 블로그 소재로 활용 |
| 106 | +- **프로젝트 코드를 그대로 노출하지 않는다** — 아키텍처, 기술 선택, 문제 해결 과정 등 블로그 독자에게 유익한 정보 중심으로 재구성 |
| 107 | +- 분석 관점: 기술 스택, 설계 결정, 삽질/해결 경험, 배운 점, 다른 개발자에게 도움될 팁 |
| 108 | + |
| 109 | +### 이전 포스트 참조 |
| 110 | + |
| 111 | +- 초안 작성 전 `_posts/` 폴더의 기존 포스트를 확인하여 관련 주제가 있으면 참고 |
| 112 | +- 이전 글과 연결되는 내용이 있으면 본문에서 자연스럽게 링크 (`[이전 글 제목](/YYYY/MM/DD/slug/)`) |
| 113 | +- 시리즈물이 될 수 있는 주제는 연속성을 유지 |
| 114 | +- 글쓰기 어투와 구조를 기존 포스트와 일관되게 유지 |
| 115 | + |
| 116 | +### 글쓰기 스타일 |
| 117 | + |
| 118 | +- 구어체 + 전문 용어 혼합 ("~더라", "~했다") |
| 119 | +- 이모지 소제목 활용 (🤦♂️ 문제, 🔧 해결, 💡 인사이트, 🎯 결론) |
| 120 | +- 서사 구조: 문제 → 삽질/시도 → 해결 → 배운 점 |
| 121 | +- 기존 게시글의 어투를 지속 학습하여 메모리에 저장 후 활용 |
| 122 | +- **AI스러운 표현 금지**: "따라서", "그러므로", "또한" 남발 금지. 감정 없는 건조한 서술 금지. 모든 문제가 깔끔하게 해결되는 완벽한 스토리 금지 |
| 123 | +- 문장 길이를 의도적으로 변화시켜 자연스러운 리듬 유지 (짧은 문장과 긴 문장 혼합) |
| 124 | + |
| 125 | +## 새 포스트 작성 시 참고사항 |
| 126 | + |
| 127 | +- 하나의 포스트를 3개 언어 버전으로 작성 (ko, en, ja 파일) |
| 128 | +- `_config.yml`의 `exclude` 목록에 포함된 파일은 빌드에서 제외됨 |
| 129 | +- GitHub Pages 호환 플러그인만 사용 가능 (커스텀 플러그인 불가) |
| 130 | +- 페이지네이션: 홈페이지에서 10개씩 표시 |
0 commit comments