diff --git a/.agent/skills/git-manager/cheatsheet.md b/.agent/skills/git-manager/cheatsheet.md index de59287..21dadbc 100644 --- a/.agent/skills/git-manager/cheatsheet.md +++ b/.agent/skills/git-manager/cheatsheet.md @@ -15,8 +15,8 @@ root 폴더에 .bare 폴더를 생성하고 그 안에 워크트리 폴더를 ```bash git -C .bare worktree list # 현재 생성된 모든 워크트리(작업 폴더) 목록 확인 -git -C .bare worktree add ../<폴더명> <브랜치명> # 새 브랜치를 따면서 새 폴더 생성 -git -C .bare worktree add ../<폴더명> # 기존 브랜치를 새 폴더로 체크아웃 +git -C .bare worktree add ../<폴더명> <브랜치명> # 기존 브랜치를 새 폴더로 체크아웃 +git -C .bare worktree add -b <브랜치명> ../<폴더명> # 새 브랜치를 따면서 새 폴더 생성 git -C .bare worktree remove <폴더명> # 작업 폴더 삭제 (Git 연결 해제) git -C .bare worktree prune # 폴더를 강제 삭제(rm -rf)했을 때 찌꺼기 정리 git -C .bare worktree move <구폴더> ../<신폴더> # 워크트리 폴더 경로/이름 변경 diff --git a/messages/en.json b/messages/en.json index 3e8aa0e..ad7c8de 100644 --- a/messages/en.json +++ b/messages/en.json @@ -23,6 +23,7 @@ "privacy": "Privacy Policy", "about": "About", "terms": "Terms of Use", + "contact": "Contact", "copyright": "© {year} VXD Blog. Built with Next.js & Notion." }, "Privacy": { @@ -48,7 +49,8 @@ "aboutAuthorTitle": "About the Author", "aboutAuthorContent": "Hello! I'm an engineer who loves development. I enjoy exploring new technologies and sharing what I've learned.", "contactTitle": "Contact", - "contactContent": "If you have any inquiries, please reach out through GitHub." + "contactContent": "If you have any inquiries, please reach out through GitHub or email.", + "emailLabel": "Send Email" }, "Terms": { "back": "Home", diff --git a/messages/ko.json b/messages/ko.json index 4b6a4dd..e20fb1a 100644 --- a/messages/ko.json +++ b/messages/ko.json @@ -23,6 +23,7 @@ "privacy": "개인정보처리방침", "about": "소개", "terms": "이용약관", + "contact": "문의하기", "copyright": "© {year} VXD Blog. Built with Next.js & Notion." }, "Privacy": { @@ -48,7 +49,8 @@ "aboutAuthorTitle": "운영자 소개", "aboutAuthorContent": "안녕하세요! 개발을 좋아하는 엔지니어입니다. 새로운 기술을 탐구하고 배운 것을 정리하여 공유하는 것을 즐깁니다.", "contactTitle": "연락처", - "contactContent": "문의사항이 있으시면 GitHub를 통해 연락해 주세요." + "contactContent": "문의사항이 있으시면 GitHub 또는 이메일을 통해 연락해 주세요.", + "emailLabel": "이메일 보내기" }, "Terms": { "back": "홈으로", diff --git a/src/app/[locale]/about/page.tsx b/src/app/[locale]/about/page.tsx index 40ea022..78f15b5 100644 --- a/src/app/[locale]/about/page.tsx +++ b/src/app/[locale]/about/page.tsx @@ -1,7 +1,7 @@ import { getTranslations } from 'next-intl/server'; import { Link } from '@/i18n/routing'; import { Metadata } from 'next'; -import { ExternalLink } from 'lucide-react'; +import { ExternalLink, Mail } from 'lucide-react'; type Props = { params: Promise<{ locale: string }>; @@ -70,6 +70,13 @@ export default async function AboutPage() { VXD's GitHub + + {t('emailLabel')} + + diff --git a/src/components/utils/Footer.tsx b/src/components/utils/Footer.tsx index d6a76a7..1c79e17 100644 --- a/src/components/utils/Footer.tsx +++ b/src/components/utils/Footer.tsx @@ -27,6 +27,12 @@ export async function Footer() { > {t('terms')} + + {t('contact')} +

{t('copyright', { year })} diff --git a/src/lib/notion.ts b/src/lib/notion.ts index d4c51be..03bb535 100644 --- a/src/lib/notion.ts +++ b/src/lib/notion.ts @@ -2,4 +2,5 @@ import { Client } from "@notionhq/client"; export const notion = new Client({ auth: process.env.NOTION_API_KEY, + timeoutMs: 180000, }); diff --git a/src/lib/services/posts.service.ts b/src/lib/services/posts.service.ts index 9adab50..a57f666 100644 --- a/src/lib/services/posts.service.ts +++ b/src/lib/services/posts.service.ts @@ -44,6 +44,19 @@ const getCachedAllPosts = unstable_cache(async (): Promise => .filter((page): page is PageObjectResponse => 'properties' in page) .map(extractBlogPostFromPage); + // Sync cover images between translations + // If a post has no cover but has a translationId, try to use the translation's cover + const postsMap = new Map(posts.map(p => [p.id, p])); + + posts.forEach(post => { + if (!post.cover && post.translationId) { + const translatedPost = postsMap.get(post.translationId); + if (translatedPost?.cover) { + post.cover = translatedPost.cover; + } + } + }); + return posts; }, ['all-posts'], { revalidate });