Skip to content

Commit 3be30b0

Browse files
feat(ui): 히어로 랜딩 페이지 스타일 및 전체 디자인 리뉴얼
- 홈/About 페이지 풀스크린 히어로 배경 이미지 + 오버레이 적용 - 포스트 히어로 이미지 지원 (page.image front matter) - 컨테이너 너비 체계 정리 (1000px 글로벌, 748px 포스트 푸터) - 포스트 네비게이션을 5개 목록 세로 배치로 변경 - 이미지/Mermaid 모달 줌/팬 기능 복원 - i18n 데이터 정리 및 다국어 페이지 컨테이너 통일 - 블로그 작성 커맨드에 프로젝트 분석 기능 추가
1 parent 40cc544 commit 3be30b0

30 files changed

Lines changed: 1749 additions & 6046 deletions

.claude/commands/blog-write.md

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,21 @@
1212

1313
사용자의 입력(`$ARGUMENTS`)을 분석하여 포스트 구조를 제안한다.
1414

15+
**프로젝트 링크가 제공된 경우:**
16+
17+
- GitHub 등 프로젝트 저장소를 `gh` CLI 또는 웹으로 분석
18+
- 코드를 그대로 노출하지 않고, 아키텍처/기술 선택/문제 해결 과정 등 블로그 독자에게 유익한 정보를 추출
19+
- 분석 관점: 기술 스택, 설계 결정 이유, 삽질 경험, 배운 점, 다른 개발자에게 도움될 팁
20+
21+
**이전 포스트 확인:**
22+
23+
- `_posts/` 폴더에서 관련 주제의 기존 포스트를 검색
24+
- 연관 포스트가 있으면 본문에서 자연스럽게 링크 연결
25+
- 시리즈물이 될 수 있으면 연속성 유지
26+
- 글쓰기 어투와 구조를 기존 포스트와 일관되게 맞춤
27+
1528
**확인 사항:**
29+
1630
- 주제/경험의 핵심 내용
1731
- 카테고리: Development, AI, DevDiary 등 기존 카테고리에서 선택
1832
- 기술 블로그 vs 일상 블로그 구분

_config.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,10 @@ comments:
2727
issue_term: pathname
2828
theme: github-light
2929

30+
# Hero Images (교체 시 이 경로만 변경)
31+
hero_image: "/assets/images/hero-code.jpg"
32+
about_hero_image: "/assets/images/hero-about.jpg"
33+
3034
# Build settings
3135
markdown: kramdown
3236
highlighter: rouge

_data/en.yml

Lines changed: 6 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -2,55 +2,23 @@ nav:
22
home: "Home"
33
about: "About"
44
archive: "Archive"
5-
categories: "Categories"
6-
tags: "Tags"
75

86
site:
97
title: "RealCoding Tech Blog"
108
description: "Sharing practical development insights and technical know-how from real-world experience"
11-
greeting: "Welcome to RealCoding! Here we share practical development insights and technical solutions learned from real-world projects."
129

1310
posts:
1411
recent: "Recent Posts"
1512
view_all: "View All Posts"
1613
date_format: "%B %d, %Y"
17-
read_more: "Read More"
1814

19-
sidebar:
20-
about_title: "About"
21-
about_description: "I record development stories focused on practical work. I share problem-solving processes and lessons learned to help other developers."
22-
learn_more: "Learn More"
23-
categories_title: "Categories"
24-
tags_title: "Popular Tags"
25-
view_all_categories: "View All Categories"
15+
ui:
16+
previous_post: "← Previous"
17+
next_post: "Next →"
18+
other_posts: "Other Posts"
19+
copy_link: "Copy Link"
20+
copied: "Copied!"
2621

2722
language:
2823
name: "English"
2924
code: "en"
30-
31-
ui:
32-
language_selector: "Language Selector"
33-
menu_toggle: "Menu Toggle"
34-
korean: "Korean"
35-
english: "English"
36-
japanese: "Japanese"
37-
search_placeholder: "Search posts..."
38-
read_more: "Read more"
39-
share_post: "Share this post"
40-
previous_post: "Previous Post"
41-
next_post: "Next Post"
42-
toggle_dark_mode: "Toggle Dark Mode"
43-
rss_feed: "RSS Feed"
44-
translation_not_available: "Translation not available, redirecting to homepage"
45-
46-
footer:
47-
categories_title: "Categories"
48-
recent_posts_title: "Recent Posts"
49-
information_title: "Information"
50-
about_link: "About"
51-
archive_link: "Archive"
52-
privacy_link: "Privacy Policy"
53-
sitemap_link: "Sitemap"
54-
rss_link: "RSS Feed"
55-
copyright: "All rights reserved."
56-
powered_by: "Built with Jekyll and GitHub Pages"

_data/ja.yml

Lines changed: 8 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,56 +1,24 @@
11
nav:
22
home: "ホーム"
3-
about: "概要"
4-
archive: "記事"
5-
categories: "分類"
6-
tags: "タグ"
3+
about: "紹介"
4+
archive: "アーカイブ"
75

86
site:
97
title: "RealCoding技術ブログ"
108
description: "実務で学んだ開発ノウハウと技術的な洞察を共有します"
11-
greeting: "RealCodingへようこそ!実際のプロジェクトで学んだ実践的な開発の洞察と技術的な解決策を共有しています。"
129

1310
posts:
1411
recent: "最新記事"
1512
view_all: "すべての記事を見る"
1613
date_format: "%Y年%m月%d日"
17-
read_more: "続きを読む"
1814

19-
sidebar:
20-
about_title: "About"
21-
about_description: "実務を中心とした開発の話を記録しています。問題解決のプロセスと学んだことを共有し、他の開発者の助けになれればと思います。"
22-
learn_more: "詳しく見る"
23-
categories_title: "カテゴリー"
24-
tags_title: "人気タグ"
25-
view_all_categories: "すべてのカテゴリーを見る"
15+
ui:
16+
previous_post: "← 前の記事"
17+
next_post: "次の記事 →"
18+
other_posts: "他の記事"
19+
copy_link: "リンクコピー"
20+
copied: "コピー完了!"
2621

2722
language:
2823
name: "日本語"
2924
code: "ja"
30-
31-
ui:
32-
language_selector: "言語選択"
33-
menu_toggle: "メニュー切り替え"
34-
korean: "韓国語"
35-
english: "英語"
36-
japanese: "日本語"
37-
search_placeholder: "投稿を検索..."
38-
read_more: "続きを読む"
39-
share_post: "この投稿を共有"
40-
previous_post: "前の投稿"
41-
next_post: "次の投稿"
42-
toggle_dark_mode: "ダークモード切り替え"
43-
rss_feed: "RSSフィード"
44-
translation_not_available: "翻訳がありません。ホームページに移動します"
45-
46-
footer:
47-
categories_title: "カテゴリー"
48-
recent_posts_title: "最新記事"
49-
information_title: "情報"
50-
about_link: "概要"
51-
archive_link: "記事"
52-
privacy_link: "プライバシーポリシー"
53-
sitemap_link: "サイトマップ"
54-
rss_link: "RSSフィード"
55-
copyright: "全ての権利を保有します。"
56-
powered_by: "JekyllとGitHub Pagesで制作"

_data/ko.yml

Lines changed: 6 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -2,55 +2,23 @@ nav:
22
home: ""
33
about: "소개"
44
archive: "아카이브"
5-
categories: "카테고리"
6-
tags: "태그"
75

86
site:
97
title: "실전코딩 기술 블로그"
108
description: "실무에서 배운 개발 노하우와 기술적 인사이트를 공유합니다"
11-
greeting: "안녕하세요! 실무에서 배운 개발 노하우와 기술적 인사이트를 공유하는 공간입니다. 🚀"
129

1310
posts:
1411
recent: "최근 포스트"
1512
view_all: "모든 포스트 보기"
1613
date_format: "%Y년 %m월 %d일"
17-
read_more: "더 읽기"
18-
19-
sidebar:
20-
about_title: "About"
21-
about_description: "실무 중심의 개발 이야기를 기록합니다. 문제 해결 과정과 배운 점들을 공유하며, 다른 개발자들에게 도움이 되고자 합니다."
22-
learn_more: "더 알아보기"
23-
categories_title: "카테고리"
24-
tags_title: "인기 태그"
25-
view_all_categories: "모든 카테고리 보기"
2614

2715
ui:
28-
language_selector: "언어 선택"
29-
menu_toggle: "메뉴 전환"
30-
korean: "한국어"
31-
english: "영어"
32-
japanese: "일본어"
33-
search_placeholder: "포스트 검색..."
34-
read_more: "더 읽기"
35-
share_post: "이 포스트 공유"
36-
previous_post: "이전 포스트"
37-
next_post: "다음 포스트"
38-
toggle_dark_mode: "다크모드 전환"
39-
rss_feed: "RSS 피드"
40-
translation_not_available: "번역이 없어 홈페이지로 이동합니다"
41-
42-
footer:
43-
categories_title: "카테고리"
44-
recent_posts_title: "최근 포스트"
45-
information_title: "정보"
46-
about_link: "소개"
47-
archive_link: "아카이브"
48-
privacy_link: "개인정보 처리방침"
49-
sitemap_link: "사이트맵"
50-
rss_link: "RSS 피드"
51-
copyright: "모든 권리 보유."
52-
powered_by: "Jekyll과 GitHub Pages로 제작"
16+
previous_post: "← 이전 포스트"
17+
next_post: "다음 포스트 →"
18+
other_posts: "다른 포스트"
19+
copy_link: "링크 복사"
20+
copied: "복사됨!"
5321

5422
language:
5523
name: "한국어"
56-
code: "ko"
24+
code: "ko"

_includes/footer.html

Lines changed: 18 additions & 96 deletions
Original file line numberDiff line numberDiff line change
@@ -2,105 +2,27 @@
22
<div class="container">
33
{% assign current_lang = page.lang | default: site.default_lang %}
44
{% assign lang_data = site.data[current_lang] %}
5-
5+
66
<div class="footer-content">
7-
<div class="footer-section">
8-
<h3>{{ lang_data.site.title }}</h3>
9-
<p>{{ lang_data.site.description }}</p>
10-
<div class="social-links">
11-
{% if site.github_username %}
12-
<a href="https://github.com/{{ site.github_username }}" class="social-link" target="_blank" rel="noopener">
13-
<i class="fab fa-github"></i>
14-
</a>
15-
{% endif %}
16-
{% if site.linkedin_username %}
17-
<a href="https://linkedin.com/in/{{ site.linkedin_username }}" class="social-link" target="_blank" rel="noopener">
18-
<i class="fab fa-linkedin"></i>
19-
</a>
20-
{% endif %}
21-
{% if site.author.email %}
22-
<a href="mailto:{{ site.author.email }}" class="social-link">
23-
<i class="fas fa-envelope"></i>
24-
</a>
25-
{% endif %}
26-
<a href="{{ '/feed.xml' | relative_url }}" class="social-link" title="RSS Feed">
27-
<i class="fas fa-rss"></i>
7+
<div class="social-links">
8+
{% if site.github_username %}
9+
<a href="https://github.com/{{ site.github_username }}" class="social-link" target="_blank" rel="noopener" title="GitHub">
10+
<svg viewBox="0 0 16 16"><path d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0016 8c0-4.42-3.58-8-8-8z"/></svg>
2811
</a>
29-
</div>
30-
</div>
31-
32-
<div class="footer-section">
33-
<h4>{{ lang_data.footer.categories_title }}</h4>
34-
<ul class="footer-links">
35-
{% assign lang_categories = '' | split: '' %}
36-
{% for post in site.posts %}
37-
{% assign post_lang = post.lang | default: site.default_lang %}
38-
{% if post_lang == current_lang %}
39-
{% for category in post.categories %}
40-
{% unless lang_categories contains category %}
41-
{% assign lang_categories = lang_categories | push: category %}
42-
{% endunless %}
43-
{% endfor %}
44-
{% endif %}
45-
{% endfor %}
46-
{% assign sorted_categories = lang_categories | sort %}
47-
{% for category in sorted_categories limit:5 %}
48-
<li>
49-
{% assign cat_count = 0 %}
50-
{% for post in site.posts %}
51-
{% assign post_lang = post.lang | default: site.default_lang %}
52-
{% if post_lang == current_lang and post.categories contains category %}
53-
{% assign cat_count = cat_count | plus: 1 %}
54-
{% endif %}
55-
{% endfor %}
56-
<a href="{% if current_lang != site.default_lang %}/{{ current_lang }}{% endif %}/categories#{{ category | slugify }}">
57-
{{ category }} ({{ cat_count }})
58-
</a>
59-
</li>
60-
{% endfor %}
61-
</ul>
62-
</div>
63-
64-
<div class="footer-section">
65-
<h4>{{ lang_data.footer.recent_posts_title }}</h4>
66-
<ul class="footer-links">
67-
{% assign lang_posts = '' | split: '' %}
68-
{% for post in site.posts %}
69-
{% assign post_lang = post.lang | default: site.default_lang %}
70-
{% if post_lang == current_lang %}
71-
{% assign lang_posts = lang_posts | push: post %}
72-
{% endif %}
73-
{% endfor %}
74-
{% for post in lang_posts limit:5 %}
75-
<li>
76-
<a href="{{ post.url | relative_url }}">
77-
{{ post.title | truncate: 30 }}
78-
</a>
79-
</li>
80-
{% endfor %}
81-
</ul>
82-
</div>
83-
84-
<div class="footer-section">
85-
<h4>{{ lang_data.footer.information_title }}</h4>
86-
<ul class="footer-links">
87-
<li><a href="{% if current_lang != site.default_lang %}/{{ current_lang }}{% endif %}/about">{{ lang_data.footer.about_link }}</a></li>
88-
<li><a href="{% if current_lang != site.default_lang %}/{{ current_lang }}{% endif %}/archive">{{ lang_data.footer.archive_link }}</a></li>
89-
<li><a href="{{ '/privacy' | relative_url }}">{{ lang_data.footer.privacy_link }}</a></li>
90-
<li><a href="{{ '/sitemap.xml' | relative_url }}">{{ lang_data.footer.sitemap_link }}</a></li>
91-
<li><a href="{{ '/feed.xml' | relative_url }}">{{ lang_data.footer.rss_link }}</a></li>
92-
</ul>
93-
</div>
94-
</div>
95-
96-
<div class="footer-bottom">
97-
<div class="footer-bottom-content">
98-
<p>&copy; {{ 'now' | date: "%Y" }} {{ lang_data.site.title }}. {{ lang_data.footer.copyright }}</p>
99-
<p>
100-
<a href="https://jekyllrb.com/" target="_blank" rel="noopener">Jekyll</a>
101-
<a href="https://pages.github.com/" target="_blank" rel="noopener">GitHub Pages</a>로 {{ lang_data.footer.powered_by }}
102-
</p>
12+
{% endif %}
13+
{% if site.linkedin_username %}
14+
<a href="https://linkedin.com/in/{{ site.linkedin_username }}" class="social-link" target="_blank" rel="noopener" title="LinkedIn">
15+
<svg viewBox="0 0 16 16"><path d="M13.632 13.635h-2.37V9.922c0-.886-.018-2.025-1.234-2.025-1.235 0-1.424.964-1.424 1.96v3.778h-2.37V6H8.51v1.04h.03c.318-.6 1.092-1.233 2.247-1.233 2.4 0 2.845 1.58 2.845 3.637v4.188zM3.558 4.955c-.762 0-1.376-.617-1.376-1.377 0-.758.614-1.375 1.376-1.375.76 0 1.376.617 1.376 1.375 0 .76-.617 1.377-1.376 1.377zm1.188 8.68H2.37V6h2.376v7.635zM14.816 0H1.18C.528 0 0 .516 0 1.153v13.694C0 15.484.528 16 1.18 16h13.635c.652 0 1.185-.516 1.185-1.153V1.153C16 .516 15.467 0 14.815 0z"/></svg>
16+
</a>
17+
{% endif %}
18+
{% if site.author.email %}
19+
<a href="mailto:{{ site.author.email }}" class="social-link" title="Email">
20+
<svg viewBox="0 0 16 16"><path d="M1.75 2h12.5c.966 0 1.75.784 1.75 1.75v8.5A1.75 1.75 0 0114.25 14H1.75A1.75 1.75 0 010 12.25v-8.5C0 2.784.784 2 1.75 2zM1.5 3.75v.736l6.5 3.248 6.5-3.248V3.75a.25.25 0 00-.25-.25H1.75a.25.25 0 00-.25.25zm13 2.014l-6.5 3.248L1.5 5.764v6.486c0 .138.112.25.25.25h12.5a.25.25 0 00.25-.25V5.764z"/></svg>
21+
</a>
22+
{% endif %}
23+
<!-- RSS feed available at /feed.xml -->
10324
</div>
25+
<p class="footer-copyright">&copy; {{ 'now' | date: "%Y" }} {{ lang_data.site.title }}</p>
10426
</div>
10527
</div>
10628
</footer>

0 commit comments

Comments
 (0)