Skip to content

feat/#15: 마무리 뷰 구현#16

Merged
yungu0010 merged 6 commits intodevelopfrom
feat/#12
Apr 21, 2026
Merged

feat/#15: 마무리 뷰 구현#16
yungu0010 merged 6 commits intodevelopfrom
feat/#12

Conversation

@yungu0010
Copy link
Copy Markdown
Member

@yungu0010 yungu0010 commented Apr 12, 2026

Related Issue 🚀

Work Description ✏️

  • ClosingPage 신규 구현 (/closing 라우트)
  • 배너 영역: 기존 header_img.png 이미지 재사용 (height: 150)
  • 프로그레스바: ProgressBar 컴포넌트 재사용, full 상태 (7/7)
  • 이미지 영역: ending.svg 삽입 (프로그레스 영역 top 기준 100px 위치, height: 276)
  • 텍스트 영역: heading/20_B, 정중앙 정렬 (height: 100)
  • 종료하기 버튼: grayscale/50 배경, borderRadius: 12, MDS Button 컴포넌트 사용
  • CLAUDE.md 프로젝트 문서 보강 (프로젝트 개요, 구조, 기술 스택, 작업 가이드라인 추가)

PR Point 📸

  • ProgressBar 컴포넌트를 수정 없이 wrapper + globalStyle로 패딩 오버라이드한 방식이 적절한지 확인 필요

@yungu0010 yungu0010 requested a review from sung-silver April 12, 2026 09:53
@yungu0010 yungu0010 self-assigned this Apr 12, 2026
@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Apr 12, 2026

Warning

Rate limit exceeded

@yungu0010 has exceeded the limit for the number of commits that can be reviewed per hour. Please wait 26 minutes and 48 seconds before requesting another review.

Your organization is not enrolled in usage-based pricing. Contact your admin to enable usage-based pricing to continue reviews beyond the rate limit, or try again in 26 minutes and 48 seconds.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 614ce417-7dfb-4288-854e-65d7ae83a41a

📥 Commits

Reviewing files that changed from the base of the PR and between 264cc44 and 7b769f9.

⛔ Files ignored due to path filters (3)
  • src/assets/ending.svg is excluded by !**/*.svg
  • src/assets/stop_comment_example.png is excluded by !**/*.png
  • src/assets/stop_comment_explanation.png is excluded by !**/*.png
📒 Files selected for processing (5)
  • CLAUDE.md
  • src/App.tsx
  • src/components/common/layout/StepLayout.tsx
  • src/pages/ClosingPage.css.ts
  • src/pages/ClosingPage.tsx

Walkthrough

사용자 정보 입력 완료 후 최종 페이지인 ClosingPage를 새로 추가하였습니다. 라우팅 설정, 스타일 정의, 페이지 컴포넌트 구현 및 CLAUDE.md 문서 구조를 개선했습니다. 최종 페이지는 진행률 표시기, 이미지, 텍스트 및 "종료하기" 버튼을 포함합니다.

Changes

Cohort / File(s) Summary
Documentation
CLAUDE.md
프로젝트 전체 문서로 재구성하여 페이지 플로우, 디렉터리 구조, 기술 스택, 설계 규칙 등을 추가하고 기존 "금지 사항/디자인 시스템/UI 규칙/Supabase/일반" 섹션을 더 상세한 하위 섹션으로 대체했습니다.
Routing Configuration
src/App.tsx
ClosingPage 컴포넌트를 import하고 /closing 경로에 대한 새 라우트를 등록했습니다.
Closing Page
src/pages/ClosingPage.css.ts, src/pages/ClosingPage.tsx
새로운 ClosingPage 컴포넌트를 추가했습니다. 레이아웃을 위한 Vanilla Extract 스타일 정의(container, banner, content, textArea, buttonSection 등)와 PageLayout, ProgressBar를 활용한 최종 확인 페이지를 구현했습니다. 버튼 클릭 시 홈 경로로 네비게이션합니다.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~12 minutes

Possibly related PRs

  • feat/#2: notice 화면 구현 #3: 새로운 페이지 컴포넌트 추가 및 src/App.tsx에서 라우트 등록(/notice with NoticeScreen)하는 패턴이 동일합니다.

Suggested labels

💛 feat

Poem

🐰 마지막 페이지가 솟아나니,
진행률 일곱 중 일곱 완성!
버튼 하나로 집으로 돌아가는 길,
ClosingPage라는 이름의 마침표 ✨
사용자의 여정은 마무리되고,
새로운 시작이 기다린다! 🎉

🚥 Pre-merge checks | ✅ 2 | ❌ 3

❌ Failed checks (3 warnings)

Check name Status Explanation Resolution
Linked Issues check ⚠️ Warning Issue #12는 사용자 정보 입력 뷰 구현을 요구하나, PR의 주요 내용은 ClosingPage(종료 페이지) 구현입니다. 제목이 '기능 내용'이고 실제 변경사항이 Issue의 요구사항과 불일치합니다. PR이 Issue #12의 요구사항(사용자 정보 입력 뷰)과 일치하는지 확인하고, 만약 ClosingPage가 별도의 작업이면 올바른 이슈 번호를 사용하세요.
Out of Scope Changes check ⚠️ Warning Issue #12는 사용자 정보 입력 뷰 구현을 요구하나, PR에는 ClosingPage(종료 페이지) 구현과 CLAUDE.md 문서 개선만 포함되어 있습니다. 이는 이슈 범위를 벗어난 변경사항으로 보입니다. PR의 실제 범위(ClosingPage 및 문서 업데이트)에 맞는 이슈 번호를 사용하거나, Issue #12의 요구사항을 충족하는 변경사항을 포함시키세요.
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check name Status Explanation
Title check ✅ Passed PR 제목이 주요 변경 사항인 마무리 뷰(ClosingPage) 구현을 명확하게 요약하고 있으며, 간결하고 구체적입니다.
Description check ✅ Passed PR 설명이 기본적인 구조와 필수 정보를 포함하고 있으나, 기술적 구현 세부사항은 명확하지만 일부 섹션이 불완전합니다.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/#12

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🧹 Nitpick comments (1)
src/pages/ClosingPage.css.ts (1)

32-34: ProgressBar 내부 DOM에 의존한 패딩 오버라이드는 유지보수 리스크가 있습니다.

질문 주신 방식은 동작하지만, > div 셀렉터는 ProgressBar 구조 변경 시 깨질 가능성이 큽니다. 가능하면 progressSection 자체에 패딩을 주는 방식으로 결합도를 낮추는 것을 권장합니다.

♻️ 제안 수정
 export const progressSection = style({
   height: 44,
   flexShrink: 0,
+  padding: '16px 20px',
+  boxSizing: 'border-box',
 });
-
-globalStyle(`${progressSection} > div`, {
-  padding: '16px 20px',
-});
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/pages/ClosingPage.css.ts` around lines 32 - 34, The current globalStyle
targets a fragile child selector (`${progressSection} > div`) which couples
styling to the internal DOM of ProgressBar; replace this by applying the padding
to the progressSection itself (or add a dedicated class/selector on the
ProgressBar wrapper) so the padding is not dependent on internal divs—update the
globalStyle to target `progressSection` (or the new wrapper/class) and remove
the `> div` child selector so future changes to ProgressBar's internal markup
won't break layout.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@CLAUDE.md`:
- Line 10: The markdown code fences in CLAUDE.md are missing language specifiers
which triggers markdownlint MD040; update each triple-backtick block (the fenced
examples showing the sprint page tree and the src/ directory tree) to include a
language tag such as "text" (e.g., change ``` to ```text) so both fenced blocks
explicitly declare the language and remove the MD040 warnings.

In `@src/pages/ClosingPage.tsx`:
- Around line 45-49: Move the inline style applied in ClosingPage.tsx to a
vanilla-extract file named ClosingPage.css.ts: create a selector (e.g.,
closeButton) in ClosingPage.css.ts that applies the font tokens and colors
currently used (fontsObject.LABEL_1_18_SB, colors.gray50, colors.gray950) and
export that class; then in ClosingPage.tsx remove the style={{...}} prop and add
the corresponding className import from ClosingPage.css.ts to the
button/component using that style so all styling lives in the CSS file rather
than inline.

---

Nitpick comments:
In `@src/pages/ClosingPage.css.ts`:
- Around line 32-34: The current globalStyle targets a fragile child selector
(`${progressSection} > div`) which couples styling to the internal DOM of
ProgressBar; replace this by applying the padding to the progressSection itself
(or add a dedicated class/selector on the ProgressBar wrapper) so the padding is
not dependent on internal divs—update the globalStyle to target
`progressSection` (or the new wrapper/class) and remove the `> div` child
selector so future changes to ProgressBar's internal markup won't break layout.
🪄 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: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: d61a4ada-9c62-4a46-badd-8485c89d68bb

📥 Commits

Reviewing files that changed from the base of the PR and between 0510b1b and 264cc44.

⛔ Files ignored due to path filters (1)
  • src/assets/ending.svg is excluded by !**/*.svg
📒 Files selected for processing (4)
  • CLAUDE.md
  • src/App.tsx
  • src/pages/ClosingPage.css.ts
  • src/pages/ClosingPage.tsx

Comment thread CLAUDE.md
Comment thread src/pages/ClosingPage.tsx Outdated
Comment on lines +45 to +49
style={{
...fontsObject.LABEL_1_18_SB,
backgroundColor: colors.gray50,
color: colors.gray950,
}}
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

버튼 인라인 스타일을 ClosingPage.css.ts로 이동해 주세요.

현재 구현은 스타일 분리 규칙에 어긋납니다. 버튼 스타일은 CSS 파일의 selector로 옮기는 편이 안전합니다.

🎯 제안 수정
--- a/src/pages/ClosingPage.tsx
+++ b/src/pages/ClosingPage.tsx
@@
-import { fontsObject } from '@sopt-makers/fonts';
-import { colors } from '@sopt-makers/colors';
@@
         <Button
           size="lg"
           theme="white"
           variant="fill"
-          style={{
-            ...fontsObject.LABEL_1_18_SB,
-            backgroundColor: colors.gray50,
-            color: colors.gray950,
-          }}
           onClick={handleClose}
         >
           종료하기
         </Button>
--- a/src/pages/ClosingPage.css.ts
+++ b/src/pages/ClosingPage.css.ts
@@
 globalStyle(`${buttonSection} button`, {
   width: '100%',
   borderRadius: '12px !important',
+  backgroundColor: colors.gray50,
+  color: colors.gray950,
+  ...fontsObject.LABEL_1_18_SB,
 });

As per coding guidelines, **/*.{ts,tsx}: All styles must be written in vanilla-extract (*.css.ts) files; do not use inline styles or CSS modules (.module.css).

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/pages/ClosingPage.tsx` around lines 45 - 49, Move the inline style
applied in ClosingPage.tsx to a vanilla-extract file named ClosingPage.css.ts:
create a selector (e.g., closeButton) in ClosingPage.css.ts that applies the
font tokens and colors currently used (fontsObject.LABEL_1_18_SB, colors.gray50,
colors.gray950) and export that class; then in ClosingPage.tsx remove the
style={{...}} prop and add the corresponding className import from
ClosingPage.css.ts to the button/component using that style so all styling lives
in the CSS file rather than inline.

Comment thread src/assets/ending.svg
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이거 혹시 svg로 하는 이유가 있나용?? 다른 페이지는 다 .png로 했어서 맞춰야한다면 제가 svg로 맞출게용

Comment thread src/pages/ClosingPage.tsx Outdated
}, [navigate]);

return (
<PageLayout className={styles.container}>
Copy link
Copy Markdown
Contributor

@sung-silver sung-silver Apr 13, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

PageLayout이 아니라 StepLayout으로 구현하면 bannerImage, progressBar, 종료하기 버튼 설정해줄 수 있어요!

@yungu0010 yungu0010 changed the title [FEAT/#12] 기능 내용 feat/#15: 마무리 뷰 구현 Apr 21, 2026
yungu0010 and others added 6 commits April 21, 2026 18:04
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* feat: StepLayout 여백 계산 css 변경

* add: stop comment 관련 에셋 추가

* refactor: 패키지 구조 개선

* feat: stop, start, continue 동료 코멘트 뷰에서 사용되는 컴포넌트 구현

* feat: PeerCommentStepTemplate 구현

* refactor: comment 관련 type을 comment.ts에 통합 후 interface, type, function명 분리

* feat: stop comment 뷰 구현

* refactor: context명을 더 적절하게 변경

* docs: 리팩토링 사항을 claude.md에 반영

* add: gitignore에 .claude 폴더 추가

* chore: 코드블럭 언어 지정

* fix: onRemove 이벤트가 넘어오지 않는데 제거 버튼이 랜더링될 수 있는 오류 수정

* refactor: hook 로직 분리 및 import 순환참조 문제 해결

* refactor: pickerRoot를 파일 상단으로 옮겨 피커 루트 안의 button:disabled만 같은 스타일이 적용되도록 변경

* refactor: overlay 색상값을 토큰값으로 변경

* feat: 모달 컴포넌트 사용하도록 변경

* fix: 스크롤바 안보이게 수정

* refactor: 최신 요청에 대한 가드 적용 및 최신 요청이 아닌 경우 handleError가 호출되지 않도록 변경

* feat: 비활성화(isNextDisabled) 우회 시 제출/네비게이션 진행되지 않도록 변경

* feat: PeerCommentStepTemplate 이미지 alt 변경 및 props에서 commentsKey를 content 내부에서 관리하도록 변경

* refactor: import 리팩토링
* refactor: PeerCommentRow를 PeerCommentBlock으로 리네이밍

네이밍 규칙 허용 목록(Block/Section)에 맞게 컴포넌트·Props·파일명 일괄 변경

* refactor: 수신자 ID 중복 추가 방어 로직 추가

동일 userId가 memberIds에 중복 저장되지 않도록 includes 검사 후 얼리 리턴 처리

* refactor: SubmissionData → CommentFormState, SubmissionPayload → CommentSubmissionPayload 리네이밍

도메인 prefix 일관성을 위해 Comment prefix 추가,
CommentsKey를 CommentFormState에서 파생하도록 변경하여 타입 드리프트 방지

* refactor: CommentsKey를 comment.ts로 이동하고 Extract 기반으로 단순화

Template 내부 인라인 타입 선언 제거, CommentFormState와 같은 위치에 정의

* refactor: import문 리팩토링

* refactor: 순수 데이터 타입 정의 후 import하여 사용하도록 변경

* docs: claude.md 파일 업데이트

* refactor: 같은 레이어에서는 상대경로 참조를 하도록 변경
* feat: start comment 뷰 구현

* feat: continue 페이지 구현

* feat: PeerCommentRepeater 추가 버튼 활성화 기준 추가

* feat: 멤버 선택 모달에서 멤버를 1명 이상 선택해야지만 확인 완료 버튼이 활성화되도록 변경

* refactor: 코드 리뷰 반영

* refactor: peer_comment 뷰에서 사용되는 데이터 상수로 분리

* feat: dialog를 botomsheet로 변경

* feat: Next 버튼 비활성화 로직 제거

* refactor: 코드리뷰 반영
@yungu0010 yungu0010 merged commit e1925cf into develop Apr 21, 2026
1 check passed
@yungu0010 yungu0010 deleted the feat/#12 branch April 21, 2026 09:14
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

feat: 마무리 뷰 구현

2 participants