feat: 이용약관, 개인정보처리방침 페이지 추가 - #58
Conversation
- Button: primary / outline / disabled variants, design token 기반 - Toast: Zustand store 연동, 상단 고정, 시맨틱 컬러 토큰 적용 - Header: 뒤로가기 + title + subtitle 구조, 조건부 title centering - BottomNavigation: 4탭(홈/사건기록/일기/마이페이지), lucide-react 아이콘 - toastStore: Zustand UI 상태 (show/hide/message)
- GitHub Ruleset 브랜치 규칙 추가 (브랜치 Pattern 2, PR 제목 Pattern 1 분리) - Issues / Milestones / Project Board 미사용으로 관련 내용 제거 - GIT_WORKFLOW 작업 흐름에서 Issue 생성/자동종료 단계 제거 - PR_RULES PR 본문에서 관련 Issue 항목 제거
…ea components Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Toast: MUI Snackbar (3s auto-dismiss) - BottomNavigation, Header, Select: lucide-react → @mui/icons-material - Install @mui/icons-material - CLAUDE.md, CODING_CONVENTION.md: MUI usage policy updated Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…ature/common-component-jw
- 로그인 페이지 UI 및 카카오 signIn 버튼 연결 - @auth/prisma-adapter 설치 및 authOptions에 적용 - 최초 로그인 시 kakaoId, nickname, termsAgreedAt 자동 설정 - 닉네임 자동 생성 유틸 추가 (~하는부엉이 + 4자리 난수) - middleware 추가: 비인증 사용자 /login 리다이렉트 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- SCSS import 절대경로(@/) 수정 - 캐릭터 이미지 Next/Image fill → img 태그로 변경 - 이용약관/개인정보처리방침 링크(/terms, /privacy) 추가 및 스타일 적용 - 닉네임 유니크 제약(@unique) 추가 및 충돌 재시도 로직 구현 (최대 10회) - middleware matcher 패턴 보완 (/login-help 등 우회 경로 차단) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- .disclaimer에 @include m.text-caption mixin 적용 - 유실된 nickname.ts 복구 - fallback 닉네임 Date.now() → 랜덤 8자리 숫자로 변경 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
html, body 태그에 suppressHydrationWarning 추가하여 브라우저 확장 프로그램의 DOM 조작으로 인한 hydration 불일치 에러를 방지한다. Co-Authored-By: Claude <noreply@anthropic.com>
Add /terms and /privacy pages with 7 articles each covering AI mediation service usage, AI data processing, liability limits, and personal information handling. Both pages use text-only layout with MUI ArrowBack icon for navigation. Co-Authored-By: Claude <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
📝 WalkthroughWalkthrough개인정보 처리방침( Changes법적 고지 페이지 추가
Estimated code review effort🎯 2 (Simple) | ⏱️ ~10 minutes Possibly related PRs
Poem
🚥 Pre-merge checks | ✅ 3 | ❌ 2❌ Failed checks (2 warnings)
✅ Passed checks (3 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Comment |
Add /terms and /privacy to middleware matcher exclusion list so users can view these pages without logging in first. Co-Authored-By: Claude <noreply@anthropic.com>
There was a problem hiding this comment.
Actionable comments posted: 6
🧹 Nitpick comments (3)
src/app/(page)/privacy/privacy.module.scss (1)
1-50: ⚖️ Poor tradeoff코드 중복: terms.module.scss와 동일한 스타일
이 파일은
src/app/(page)/terms/terms.module.scss와 완전히 동일합니다. 공통 스타일을 별도 모듈로 추출하여 재사용하는 것을 고려해보세요.예시 구조:
// src/styles/components/_legal-page.module.scss `@use` '`@/styles/abstracts/variables`' as v; `@use` '`@/styles/abstracts/functions`' as fn; `@use` '`@/styles/abstracts/mixins`' as m; .page { /* 공통 스타일 */ } .header { /* 공통 스타일 */ } // ...그런 다음 각 페이지에서:
`@forward` '`@/styles/components/legal-page.module.scss`';🤖 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/`(page)/privacy/privacy.module.scss around lines 1 - 50, The privacy.module.scss file contains duplicate styles that are identical to terms.module.scss. Create a new shared SCSS module at src/styles/components/_legal-page.module.scss that contains all the common style classes (.page, .header, .backButton, .title, .content, .section, .sectionTitle, .sectionBody) and their SCSS abstracts imports. Then update privacy.module.scss to use `@forward` to reference this shared legal-page module instead of defining all these styles locally, and apply the same approach to terms.module.scss to eliminate the duplication across both files.src/app/(page)/privacy/page.tsx (2)
7-105: ⚖️ Poor tradeoff코드 중복: terms/page.tsx와 유사한 구조
이 컴포넌트는
src/app/(page)/terms/page.tsx와 구조가 거의 동일합니다. 컴포넌트 구조를 공유 컴포넌트로 추출하고 콘텐츠를 props나 별도 파일로 분리하는 것을 고려해보세요.예시 구조:
// components/LegalPage.tsx export function LegalPage({ title, sections }: { title: string; sections: Array<{title: string; body: string}> }) { const router = useRouter(); return ( <div className={styles.page}> <header className={styles.header}> <button onClick={() => router.back()}>...</button> <h1>{title}</h1> </header> <main> {sections.map(section => ...)} </main> </div> ); }🤖 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/`(page)/privacy/page.tsx around lines 7 - 105, The PrivacyPage component duplicates the structural pattern used in the terms page. Extract the common header, main content, and section rendering logic into a reusable LegalPage component that accepts title and sections data as props. Create a shared component in the components directory that takes a title string and an array of section objects (each with title and body properties), then refactor PrivacyPage to pass the privacy policy content as data to this shared component rather than hardcoding the JSX structure. Apply the same refactoring to the terms page to eliminate duplication.
13-20: 프로젝트 전반의 router.back() 엣지 케이스 처리 재검토 권장검증 결과,
router.back()은 privacy/page.tsx뿐 아니라 terms/page.tsx, disputes/[id]/statement/page.tsx 등 프로젝트 전반에서 공통적으로 사용되고 있으며, 어느 페이지에서도 히스토리 미존재 시 대체 동작(홈 리다이렉트 등)이 구현되어 있지 않습니다.사용자가 외부 링크나 직접 URL 입력으로 진입한 경우 브라우저 히스토리가 없어
router.back()이 동작하지 않는 현황입니다. Next.js에서는 이 경우 에러를 발생시키지 않고 현재 페이지에 머물지만, 사용자 경험 측면에서 일관된 폴백 전략(예: 홈으로 리다이렉트)의 도입을 검토할 가치가 있습니다.🤖 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/`(page)/privacy/page.tsx around lines 13 - 20, The router.back() call in the back button click handler lacks fallback behavior when browser history is unavailable, which occurs when users enter via direct URLs or external links. Replace the simple router.back() call with a conditional check that first attempts to go back, and if that fails (no history), implements a fallback redirect to the home page. Apply this same pattern consistently across all pages using this pattern (privacy/page.tsx, terms/page.tsx, disputes/[id]/statement/page.tsx) to provide a uniform user experience when browser history is not available.
🤖 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/`(page)/privacy/privacy.module.scss:
- Around line 42-45: The sectionTitle class in the SCSS file violates stylelint
formatting rules by missing a blank line between the `@include` directive and the
regular property declaration. Add a blank line between the `@include`
m.text-body-m statement and the font-weight property declaration to separate
at-rules from regular properties and comply with the stylelint configuration.
- Around line 17-24: The stylelint rule requires a blank line before the
background property declaration in the .backButton class. Add an empty line
between the `@include` m.flex-center statement and the background property to
satisfy the stylelint declaration-empty-line-before rule.
- Around line 47-50: The stylelint rule requires a blank line before property
declarations that follow different types of statements. In the .sectionBody
class, add a blank line between the `@include` m.text-body-s statement and the
color property declaration to comply with stylelint formatting rules.
In `@src/app/`(page)/terms/terms.module.scss:
- Around line 47-50: The Stylelint rule requires a blank line between the mixin
inclusion and property declarations in the .sectionBody style block. Add a blank
line between the `@include` m.text-body-s; statement and the color:
v.$color-black-400; property to comply with the formatting rules.
- Around line 17-24: The `.backButton` class styling violates stylelint rules by
missing a blank line between the `@include m.flex-center;` mixin declaration and
the following property declarations. Add a blank line after the `@include
m.flex-center;` statement to separate the mixin inclusion from the CSS property
block that follows (background, border, padding, etc.).
- Around line 42-45: The sectionTitle class in the terms.module.scss file
violates stylelint formatting rules by missing a blank line before the
font-weight declaration. Add a blank line between the `@include` m.text-body-m
directive and the font-weight property to comply with stylelint spacing
requirements for the sectionTitle selector.
---
Nitpick comments:
In `@src/app/`(page)/privacy/page.tsx:
- Around line 7-105: The PrivacyPage component duplicates the structural pattern
used in the terms page. Extract the common header, main content, and section
rendering logic into a reusable LegalPage component that accepts title and
sections data as props. Create a shared component in the components directory
that takes a title string and an array of section objects (each with title and
body properties), then refactor PrivacyPage to pass the privacy policy content
as data to this shared component rather than hardcoding the JSX structure. Apply
the same refactoring to the terms page to eliminate duplication.
- Around line 13-20: The router.back() call in the back button click handler
lacks fallback behavior when browser history is unavailable, which occurs when
users enter via direct URLs or external links. Replace the simple router.back()
call with a conditional check that first attempts to go back, and if that fails
(no history), implements a fallback redirect to the home page. Apply this same
pattern consistently across all pages using this pattern (privacy/page.tsx,
terms/page.tsx, disputes/[id]/statement/page.tsx) to provide a uniform user
experience when browser history is not available.
In `@src/app/`(page)/privacy/privacy.module.scss:
- Around line 1-50: The privacy.module.scss file contains duplicate styles that
are identical to terms.module.scss. Create a new shared SCSS module at
src/styles/components/_legal-page.module.scss that contains all the common style
classes (.page, .header, .backButton, .title, .content, .section, .sectionTitle,
.sectionBody) and their SCSS abstracts imports. Then update privacy.module.scss
to use `@forward` to reference this shared legal-page module instead of defining
all these styles locally, and apply the same approach to terms.module.scss to
eliminate the duplication across both files.
🪄 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: Repository UI (base), Organization UI (inherited)
Review profile: CHILL
Plan: Pro Plus
Run ID: 138568ad-a761-4c27-9cb7-f5b25ce0e63d
📒 Files selected for processing (4)
src/app/(page)/privacy/page.tsxsrc/app/(page)/privacy/privacy.module.scsssrc/app/(page)/terms/page.tsxsrc/app/(page)/terms/terms.module.scss
| .backButton { | ||
| @include m.flex-center; | ||
| background: none; | ||
| border: none; | ||
| padding: 0; | ||
| cursor: pointer; | ||
| color: v.$color-black-500; | ||
| } |
There was a problem hiding this comment.
Stylelint 규칙 위반: 선언문 앞 빈 줄 누락
Line 19의 background 선언문 앞에 빈 줄이 필요합니다.
✨ 제안된 수정
.backButton {
`@include` m.flex-center;
+
background: none;
border: none;📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| .backButton { | |
| @include m.flex-center; | |
| background: none; | |
| border: none; | |
| padding: 0; | |
| cursor: pointer; | |
| color: v.$color-black-500; | |
| } | |
| .backButton { | |
| `@include` m.flex-center; | |
| background: none; | |
| border: none; | |
| padding: 0; | |
| cursor: pointer; | |
| color: v.$color-black-500; | |
| } |
🧰 Tools
🪛 Stylelint (17.13.0)
[error] 19-19: Expected empty line before declaration (declaration-empty-line-before)
(declaration-empty-line-before)
🤖 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/`(page)/privacy/privacy.module.scss around lines 17 - 24, The
stylelint rule requires a blank line before the background property declaration
in the .backButton class. Add an empty line between the `@include` m.flex-center
statement and the background property to satisfy the stylelint
declaration-empty-line-before rule.
Source: Linters/SAST tools
| .sectionTitle { | ||
| @include m.text-body-m; | ||
| font-weight: v.$font-weight-semibold; | ||
| } |
There was a problem hiding this comment.
Stylelint 규칙 위반: 선언문 앞 빈 줄 누락
Line 44의 font-weight 선언문 앞에 빈 줄이 필요합니다.
✨ 제안된 수정
.sectionTitle {
`@include` m.text-body-m;
+
font-weight: v.$font-weight-semibold;
}📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| .sectionTitle { | |
| @include m.text-body-m; | |
| font-weight: v.$font-weight-semibold; | |
| } | |
| .sectionTitle { | |
| `@include` m.text-body-m; | |
| font-weight: v.$font-weight-semibold; | |
| } |
🧰 Tools
🪛 Stylelint (17.13.0)
[error] 44-44: Expected empty line before declaration (declaration-empty-line-before)
(declaration-empty-line-before)
🤖 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/`(page)/privacy/privacy.module.scss around lines 42 - 45, The
sectionTitle class in the SCSS file violates stylelint formatting rules by
missing a blank line between the `@include` directive and the regular property
declaration. Add a blank line between the `@include` m.text-body-m statement and
the font-weight property declaration to separate at-rules from regular
properties and comply with the stylelint configuration.
Source: Linters/SAST tools
| .sectionBody { | ||
| @include m.text-body-s; | ||
| color: v.$color-black-400; | ||
| } |
There was a problem hiding this comment.
Stylelint 규칙 위반: 선언문 앞 빈 줄 누락
Line 49의 color 선언문 앞에 빈 줄이 필요합니다.
✨ 제안된 수정
.sectionBody {
`@include` m.text-body-s;
+
color: v.$color-black-400;
}📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| .sectionBody { | |
| @include m.text-body-s; | |
| color: v.$color-black-400; | |
| } | |
| .sectionBody { | |
| `@include` m.text-body-s; | |
| color: v.$color-black-400; | |
| } |
🧰 Tools
🪛 Stylelint (17.13.0)
[error] 49-49: Expected empty line before declaration (declaration-empty-line-before)
(declaration-empty-line-before)
🤖 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/`(page)/privacy/privacy.module.scss around lines 47 - 50, The
stylelint rule requires a blank line before property declarations that follow
different types of statements. In the .sectionBody class, add a blank line
between the `@include` m.text-body-s statement and the color property declaration
to comply with stylelint formatting rules.
Source: Linters/SAST tools
| .backButton { | ||
| @include m.flex-center; | ||
| background: none; | ||
| border: none; | ||
| padding: 0; | ||
| cursor: pointer; | ||
| color: v.$color-black-500; | ||
| } |
There was a problem hiding this comment.
Stylelint 규칙 위반: 선언문 앞 빈 줄 누락
Line 19의 background 선언문 앞에 빈 줄이 필요합니다.
✨ 제안된 수정
.backButton {
`@include` m.flex-center;
+
background: none;
border: none;📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| .backButton { | |
| @include m.flex-center; | |
| background: none; | |
| border: none; | |
| padding: 0; | |
| cursor: pointer; | |
| color: v.$color-black-500; | |
| } | |
| .backButton { | |
| `@include` m.flex-center; | |
| background: none; | |
| border: none; | |
| padding: 0; | |
| cursor: pointer; | |
| color: v.$color-black-500; | |
| } |
🧰 Tools
🪛 Stylelint (17.13.0)
[error] 19-19: Expected empty line before declaration (declaration-empty-line-before)
(declaration-empty-line-before)
🤖 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/`(page)/terms/terms.module.scss around lines 17 - 24, The
`.backButton` class styling violates stylelint rules by missing a blank line
between the `@include m.flex-center;` mixin declaration and the following
property declarations. Add a blank line after the `@include m.flex-center;`
statement to separate the mixin inclusion from the CSS property block that
follows (background, border, padding, etc.).
Source: Linters/SAST tools
| .sectionTitle { | ||
| @include m.text-body-m; | ||
| font-weight: v.$font-weight-semibold; | ||
| } |
There was a problem hiding this comment.
Stylelint 규칙 위반: 선언문 앞 빈 줄 누락
Line 44의 font-weight 선언문 앞에 빈 줄이 필요합니다.
✨ 제안된 수정
.sectionTitle {
`@include` m.text-body-m;
+
font-weight: v.$font-weight-semibold;
}📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| .sectionTitle { | |
| @include m.text-body-m; | |
| font-weight: v.$font-weight-semibold; | |
| } | |
| .sectionTitle { | |
| `@include` m.text-body-m; | |
| font-weight: v.$font-weight-semibold; | |
| } |
🧰 Tools
🪛 Stylelint (17.13.0)
[error] 44-44: Expected empty line before declaration (declaration-empty-line-before)
(declaration-empty-line-before)
🤖 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/`(page)/terms/terms.module.scss around lines 42 - 45, The
sectionTitle class in the terms.module.scss file violates stylelint formatting
rules by missing a blank line before the font-weight declaration. Add a blank
line between the `@include` m.text-body-m directive and the font-weight property
to comply with stylelint spacing requirements for the sectionTitle selector.
Source: Linters/SAST tools
Expand terms of service to 15 articles and privacy policy to 13 articles with detailed service-specific content. Update header layout to center-aligned title with ArrowBackIosNew icon and bottom border matching existing Header component style. Co-Authored-By: Claude <noreply@anthropic.com>
There was a problem hiding this comment.
Actionable comments posted: 3
♻️ Duplicate comments (2)
src/app/(page)/privacy/privacy.module.scss (1)
18-27:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winStylelint 규칙 위반: 이전에 보고된 문제 지속
다음 위치에서
@include지시문 다음 빈 줄 누락 문제가 여전히 존재합니다:
- Line 20:
.backButton의width선언문 앞- Line 54:
.sectionTitle의font-weight선언문 앞- Line 65:
.sectionBody의color선언문 앞이 문제들은 이전 리뷰에서 이미 지적되었으나 아직 수정되지 않았습니다.
✨ 제안된 수정
.backButton { `@include` m.flex-center; + width: fn.r(40);.sectionTitle { `@include` m.text-body-m; + font-weight: v.$font-weight-semibold; }.sectionBody { `@include` m.text-body-s; + color: v.$color-black-400;Also applies to: 52-55, 63-70
🤖 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/`(page)/privacy/privacy.module.scss around lines 18 - 27, Add a blank line after each `@include` directive in the SCSS file to comply with stylelint rules. Specifically, in the `.backButton` rule, insert a blank line between the `@include m.flex-center;` directive and the `width` property declaration. Also apply the same fix to the `.sectionTitle` rule (between `@include` and `font-weight`) and the `.sectionBody` rule (between `@include` and `color`) as noted in the comment. This ensures consistent formatting where `@include` directives are always followed by a blank line before other property declarations.Source: Linters/SAST tools
src/app/(page)/terms/terms.module.scss (1)
18-27:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winStylelint 규칙 위반: 이전에 보고된 문제 지속
다음 위치에서
@include지시문 다음 빈 줄 누락 문제가 여전히 존재합니다:
- Line 20:
.backButton의width선언문 앞- Line 54:
.sectionTitle의font-weight선언문 앞- Line 59:
.sectionBody의color선언문 앞이 문제들은 이전 리뷰에서 이미 지적되었으나 아직 수정되지 않았습니다.
✨ 제안된 수정
.backButton { `@include` m.flex-center; + width: fn.r(40);.sectionTitle { `@include` m.text-body-m; + font-weight: v.$font-weight-semibold; }.sectionBody { `@include` m.text-body-s; + color: v.$color-black-400;Also applies to: 52-55, 57-64
🤖 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/`(page)/terms/terms.module.scss around lines 18 - 27, The SCSS file violates stylelint rules requiring a blank line after `@include` directives. In the .backButton selector, add a blank line between the `@include` m.flex-center directive and the width property. Similarly, add blank lines after `@include` directives in the .sectionTitle selector (before the font-weight property) and in the .sectionBody selector (before the color property). Ensure all property declarations that follow `@include` statements have a blank line separating them to comply with stylelint formatting requirements.Source: Linters/SAST tools
🤖 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/`(page)/privacy/page.tsx:
- Line 16: The onClick handler for the back button in the privacy page component
uses only router.back() without a fallback, which will fail or cause unexpected
behavior when users access the page directly through bookmarks or external links
with no browser history. Modify the onClick handler on the back button to
implement a fallback navigation strategy: first attempt to go back using
router.back(), and if no history exists, navigate to a default route (such as
the home page) using router.push(). This ensures the button works reliably
regardless of how users arrive at the privacy page.
In `@src/app/`(page)/privacy/privacy.module.scss:
- Around line 57-61: In the `.intro` class in the privacy.module.scss file, add
a blank line after the `@include` m.text-body-s; directive and before the color
property declaration. The blank line is required by stylelint rules to separate
`@include` directives from regular property declarations that follow them.
In `@src/app/`(page)/terms/page.tsx:
- Line 16: The onClick handler using router.back() may fail when users access
the page directly via bookmarks or external links since there is no browser
history. Modify the onClick handler to include a fallback behavior: check if
there is browser history available using the useRouter hook, and if not,
navigate to a default route (such as "/" or a parent page) instead of calling
router.back() unconditionally. This ensures the back button always provides a
functional navigation experience regardless of how the user accessed the page.
---
Duplicate comments:
In `@src/app/`(page)/privacy/privacy.module.scss:
- Around line 18-27: Add a blank line after each `@include` directive in the
SCSS file to comply with stylelint rules. Specifically, in the `.backButton`
rule, insert a blank line between the `@include m.flex-center;` directive and
the `width` property declaration. Also apply the same fix to the `.sectionTitle`
rule (between `@include` and `font-weight`) and the `.sectionBody` rule (between
`@include` and `color`) as noted in the comment. This ensures consistent
formatting where `@include` directives are always followed by a blank line
before other property declarations.
In `@src/app/`(page)/terms/terms.module.scss:
- Around line 18-27: The SCSS file violates stylelint rules requiring a blank
line after `@include` directives. In the .backButton selector, add a blank line
between the `@include` m.flex-center directive and the width property. Similarly,
add blank lines after `@include` directives in the .sectionTitle selector (before
the font-weight property) and in the .sectionBody selector (before the color
property). Ensure all property declarations that follow `@include` statements have
a blank line separating them to comply with stylelint formatting requirements.
🪄 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: Repository UI (base), Organization UI (inherited)
Review profile: CHILL
Plan: Pro Plus
Run ID: dda3c622-8595-4505-95f3-7049d4b202e9
📒 Files selected for processing (5)
src/app/(page)/privacy/page.tsxsrc/app/(page)/privacy/privacy.module.scsssrc/app/(page)/terms/page.tsxsrc/app/(page)/terms/terms.module.scsssrc/middleware.ts
🚧 Files skipped from review as they are similar to previous changes (1)
- src/middleware.ts
| <button | ||
| type="button" | ||
| className={styles.backButton} | ||
| onClick={() => router.back()} |
There was a problem hiding this comment.
뒤로 가기 버튼에 대체 동작 추가를 권장합니다.
사용자가 북마크나 외부 링크를 통해 이 페이지에 직접 접근한 경우, 브라우저 히스토리가 없어 router.back()이 작동하지 않거나 예상치 못한 동작을 할 수 있습니다.
개선된 구현 제안
- onClick={() => router.back()}
+ onClick={() => {
+ if (window.history.length > 1) {
+ router.back();
+ } else {
+ router.push('/');
+ }
+ }}또는 더 간단하게:
- onClick={() => router.back()}
+ onClick={() => router.push('/')}📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| onClick={() => router.back()} | |
| onClick={() => router.push('/')} |
🤖 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/`(page)/privacy/page.tsx at line 16, The onClick handler for the back
button in the privacy page component uses only router.back() without a fallback,
which will fail or cause unexpected behavior when users access the page directly
through bookmarks or external links with no browser history. Modify the onClick
handler on the back button to implement a fallback navigation strategy: first
attempt to go back using router.back(), and if no history exists, navigate to a
default route (such as the home page) using router.push(). This ensures the
button works reliably regardless of how users arrive at the privacy page.
| .intro { | ||
| @include m.text-body-s; | ||
| color: v.$color-black-400; | ||
| margin-bottom: fn.r(8); | ||
| } |
There was a problem hiding this comment.
Stylelint 규칙 위반: @include 후 빈 줄 누락
.intro 클래스의 line 59 color 선언문 앞에 빈 줄이 필요합니다. @include 지시문 다음에 일반 속성 선언이 올 때는 빈 줄로 구분해야 합니다.
✨ 제안된 수정
.intro {
`@include` m.text-body-s;
+
color: v.$color-black-400;
margin-bottom: fn.r(8);
}📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| .intro { | |
| @include m.text-body-s; | |
| color: v.$color-black-400; | |
| margin-bottom: fn.r(8); | |
| } | |
| .intro { | |
| `@include` m.text-body-s; | |
| color: v.$color-black-400; | |
| margin-bottom: fn.r(8); | |
| } |
🧰 Tools
🪛 Stylelint (17.13.0)
[error] 59-59: Expected empty line before declaration (declaration-empty-line-before)
(declaration-empty-line-before)
🤖 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/`(page)/privacy/privacy.module.scss around lines 57 - 61, In the
`.intro` class in the privacy.module.scss file, add a blank line after the
`@include` m.text-body-s; directive and before the color property declaration. The
blank line is required by stylelint rules to separate `@include` directives from
regular property declarations that follow them.
Source: Linters/SAST tools
| <button | ||
| type="button" | ||
| className={styles.backButton} | ||
| onClick={() => router.back()} |
There was a problem hiding this comment.
뒤로 가기 버튼에 대체 동작 추가를 권장합니다.
사용자가 북마크나 외부 링크를 통해 이 페이지에 직접 접근한 경우, 브라우저 히스토리가 없어 router.back()이 작동하지 않거나 예상치 못한 동작을 할 수 있습니다.
개선된 구현 제안
- onClick={() => router.back()}
+ onClick={() => {
+ if (window.history.length > 1) {
+ router.back();
+ } else {
+ router.push('/');
+ }
+ }}또는 더 간단하게:
- onClick={() => router.back()}
+ onClick={() => router.push('/')}📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| onClick={() => router.back()} | |
| onClick={() => { | |
| if (window.history.length > 1) { | |
| router.back(); | |
| } else { | |
| router.push('/'); | |
| } | |
| }} |
| onClick={() => router.back()} | |
| onClick={() => router.push('/')} |
🤖 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/`(page)/terms/page.tsx at line 16, The onClick handler using
router.back() may fail when users access the page directly via bookmarks or
external links since there is no browser history. Modify the onClick handler to
include a fallback behavior: check if there is browser history available using
the useRouter hook, and if not, navigate to a default route (such as "/" or a
parent page) instead of calling router.back() unconditionally. This ensures the
back button always provides a functional navigation experience regardless of how
the user accessed the page.
Summary
/terms이용약관 페이지 추가 (7개 조항)/privacy개인정보처리방침 페이지 추가 (7개 조항)/terms,/privacy인증 예외 추가 (비로그인 접근 허용)Test plan
/terms페이지 접근 및 내용 표시 확인/privacy페이지 접근 및 내용 표시 확인🤖 Generated with Claude Code
Summary by CodeRabbit
릴리스 노트
새로운 기능
개선 사항