Repository navigation
feat: 책모 서비스 소개 페이지 추가 - #506
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
📝 WalkthroughWalkthroughAdds a standalone Korean service introduction deck with interactive navigation, exposes it at ChangesService introduction
Estimated code review effort: 3 (Moderate) | ~20 minutes Possibly related PRs
Suggested labels: Suggested reviewers: 🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Code Review
This pull request introduces a standalone service introduction slide deck page (/service-introduction) along with its associated SVG assets and icons. It configures Next.js rewrites to serve this HTML page, adds the new route to the sitemap, and includes a promotional banner on the support page linking to it. The review feedback highlights two performance and stability improvements in the slide deck's client-side JavaScript: checking event.cancelable before calling event.preventDefault() on wheel events to prevent runtime errors, and throttling the window resize event handler using requestAnimationFrame to avoid layout thrashing.
Important
The consumer version of Gemini Code Assist on GitHub is being sunset. Starting June 18, 2026, new organization installations will be blocked, and all code review activity will officially cease on July 17, 2026.
For more details on the timeline and next steps, please review the Help Documentation.
| deck.addEventListener('wheel', (event) => { | ||
| const delta = Math.abs(event.deltaX) > Math.abs(event.deltaY) ? event.deltaX : event.deltaY; | ||
| if (Math.abs(delta) < 12) return; | ||
| event.preventDefault(); |
| window.addEventListener('resize', fitSlides); | ||
| fitSlides(); |
There was a problem hiding this comment.
window의 resize 이벤트는 크기 조절 시 매우 빈번하게 발생합니다. fitSlides 함수 내부에서 CSS Custom Property를 변경하고 deck.scrollTo를 호출하므로, requestAnimationFrame을 활용하여 레이아웃 스래싱(Layout Thrashing)과 화면 버벅임(Jank)을 방지하는 것이 좋습니다.
let resizeFrame = 0;
const handleResize = () => {
if (resizeFrame) return;
resizeFrame = window.requestAnimationFrame(() => {
fitSlides();
resizeFrame = 0;
});
};
window.addEventListener('resize', handleResize);
fitSlides();There was a problem hiding this comment.
Actionable comments posted: 1
🧹 Nitpick comments (3)
public/service-introduction/index.html (3)
31-32: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low valueConsider importing the
Pretendardweb font.The CSS variables prioritize
Pretendard, but the font is not imported via<link>or@font-face. Consequently, it will only render if the user has the font locally installed, otherwise defaulting to the system fallbacks (Apple SD Gothic Neo, Noto Sans KR). For consistent typography across all devices, consider importing it.If you decide to import it, add this
<link>to the<head>:<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/orioncactus/pretendard/dist/web/static/pretendard.css" />🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@public/service-introduction/index.html` around lines 31 - 32, Add the provided Pretendard stylesheet link within the HTML head so the existing --pretendard and --sans font variables load the web font consistently across devices.
1695-1697: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winOpen external store links in a new tab.
Navigating directly to external store links will interrupt the user's flow and close the promotional deck. Add
target="_blank"andrel="noopener noreferrer"to keep the landing page open.
public/service-introduction/index.html#L1695-L1697: addtarget="_blank" rel="noopener noreferrer"to thestore-logo-linkandcover-domainanchor tags.public/service-introduction/index.html#L2011-L2013: addtarget="_blank" rel="noopener noreferrer"to these duplicatedstore-logo-linkandcover-domainanchor tags.public/service-introduction/index.html#L2025-L2032: addtarget="_blank" rel="noopener noreferrer"to both the iOS and Google Playclosing-qranchor tags.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@public/service-introduction/index.html` around lines 1695 - 1697, Update the external anchors in public/service-introduction/index.html at lines 1695-1697, 2011-2013, and 2025-2032: add target="_blank" and rel="noopener noreferrer" to every store-logo-link, cover-domain, and closing-qr iOS/Google Play anchor so each external store or domain link opens in a new tab without disrupting the landing page.
4-8: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winAdd Open Graph metadata for social sharing.
Since this is a standalone promotional landing page, it bypasses the Next.js application's global metadata. Adding Open Graph (OG) tags will ensure that when the link is shared on KakaoTalk or social media, a rich preview with an image, title, and description is displayed.
💡 Proposed additions
<meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta name="description" content="독서동아리 운영진을 위한 책모 서비스 소개서" /> + <meta property="og:title" content="모임은 책에 집중하고, 운영은 책모가 정리합니다" /> + <meta property="og:description" content="독서동아리 운영진을 위한 책모 서비스 소개서" /> + <meta property="og:type" content="website" /> + <meta property="og:url" content="https://checkmo.co.kr/service-introduction" /> + <meta property="og:image" content="https://checkmo.co.kr/service-introduction/assets/home.png" /> <base href="/service-introduction/" /> <title>모임은 책에 집중하고, 운영은 책모가 정리합니다</title>🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@public/service-introduction/index.html` around lines 4 - 8, Add Open Graph metadata to the head of the standalone service-introduction page, including og:title, og:description, and og:image with the landing page’s promotional content and an appropriate publicly accessible preview image URL. Keep the existing charset, viewport, description, base, and title metadata unchanged.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@src/app/sitemap.ts`:
- Around line 78-83: Update the static service-introduction sitemap entry in the
sitemap generation flow to replace the dynamic new Date() lastModified value
with the established document/deploy date, or omit lastModified when no stable
date is available. Keep the existing URL, changeFrequency, and priority
unchanged.
---
Nitpick comments:
In `@public/service-introduction/index.html`:
- Around line 31-32: Add the provided Pretendard stylesheet link within the HTML
head so the existing --pretendard and --sans font variables load the web font
consistently across devices.
- Around line 1695-1697: Update the external anchors in
public/service-introduction/index.html at lines 1695-1697, 2011-2013, and
2025-2032: add target="_blank" and rel="noopener noreferrer" to every
store-logo-link, cover-domain, and closing-qr iOS/Google Play anchor so each
external store or domain link opens in a new tab without disrupting the landing
page.
- Around line 4-8: Add Open Graph metadata to the head of the standalone
service-introduction page, including og:title, og:description, and og:image with
the landing page’s promotional content and an appropriate publicly accessible
preview image URL. Keep the existing charset, viewport, description, base, and
title metadata unchanged.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro
Run ID: 1039daeb-9a51-4d95-a771-2f77963f31b2
⛔ Files ignored due to path filters (22)
public/service-introduction/assets/book.pngis excluded by!**/*.pngpublic/service-introduction/assets/checkmo-app-icon-ios.pngis excluded by!**/*.pngpublic/service-introduction/assets/club-management.pngis excluded by!**/*.pngpublic/service-introduction/assets/google-play-qr.svgis excluded by!**/*.svgpublic/service-introduction/assets/home.pngis excluded by!**/*.pngpublic/service-introduction/assets/icons/Chat.svgis excluded by!**/*.svgpublic/service-introduction/assets/icons/admin.svgis excluded by!**/*.svgpublic/service-introduction/assets/icons/bookshelf.svgis excluded by!**/*.svgpublic/service-introduction/assets/icons/groups_3User.svgis excluded by!**/*.svgpublic/service-introduction/assets/icons/notification.svgis excluded by!**/*.svgpublic/service-introduction/assets/icons/quill_pin.svgis excluded by!**/*.svgpublic/service-introduction/assets/icons/vote.svgis excluded by!**/*.svgpublic/service-introduction/assets/ios-app-store-qr.pngis excluded by!**/*.pngpublic/service-introduction/assets/kakao.pngis excluded by!**/*.pngpublic/service-introduction/assets/member-experience.pngis excluded by!**/*.pngpublic/service-introduction/assets/notion.pngis excluded by!**/*.pngpublic/service-introduction/assets/onboarding/club-comment.pngis excluded by!**/*.pngpublic/service-introduction/assets/onboarding/club-meeting.pngis excluded by!**/*.pngpublic/service-introduction/assets/onboarding/club-notice.pngis excluded by!**/*.pngpublic/service-introduction/assets/onboarding/club-topic.pngis excluded by!**/*.pngpublic/service-introduction/assets/person.pngis excluded by!**/*.pngpublic/service-introduction/assets/regular-meeting.pngis excluded by!**/*.png
📒 Files selected for processing (4)
next.config.tspublic/service-introduction/index.htmlsrc/app/sitemap.tssrc/app/support/page.tsx
| { | ||
| url: `${baseUrl}/service-introduction`, | ||
| lastModified: new Date(), | ||
| changeFrequency: "monthly", | ||
| priority: 0.7, | ||
| }, |
There was a problem hiding this comment.
🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win
Use a stable lastModified value for this static page.
new Date() makes the sitemap report that the introduction changed every time it is generated, even when the HTML is unchanged. Use the document/deploy date or omit lastModified to avoid sending misleading freshness signals.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@src/app/sitemap.ts` around lines 78 - 83, Update the static
service-introduction sitemap entry in the sitemap generation flow to replace the
dynamic new Date() lastModified value with the established document/deploy date,
or omit lastModified when no stable date is available. Keep the existing URL,
changeFrequency, and priority unchanged.
📌 개요 (Summary)
🛠️ 변경 사항 (Changes)
📸 스크린샷 (Screenshots)
(UI 변경 사항이 있다면 첨부해주세요)
✅ 체크리스트 (Checklist)
pnpm build)pnpm lint)Summary by CodeRabbit