Skip to content

fe-2#39

Open
Suyeon06 wants to merge 3 commits intomainfrom
fe-2
Open

fe-2#39
Suyeon06 wants to merge 3 commits intomainfrom
fe-2

Conversation

@Suyeon06
Copy link
Collaborator

@Suyeon06 Suyeon06 commented Nov 30, 2025

Summary by CodeRabbit

릴리스 노트

  • 새로운 기능

    • GIST 계정으로 로그인할 수 있는 로그인 페이지 추가
  • 개선 사항

    • 메시지 카드 UI 스타일 및 레이아웃 개선
    • 모달 컨테이너 디자인 개선으로 더 나은 사용자 경험 제공
    • 반응형 그리드 레이아웃 최적화로 메시지 표시 개선
    • 로그인 페이지에서는 사이드바 없이 깔끔한 인터페이스 제공

✏️ Tip: You can customize this high-level summary in your review settings.

@coderabbitai
Copy link

coderabbitai bot commented Nov 30, 2025

📝 Walkthrough

개요

이 변경사항은 로그인 기능을 추가하고 메시지 카드와 메시지 박스 UI를 재구성합니다. 새로운 /login 경로를 라우트 트리에 추가하고, 루트 경로에서 조건부 렌더링을 구현하여 로그인 페이지에서는 레이아웃을 제외한 콘텐츠만 표시합니다.

변경사항

코호트 / 파일 요약
로그인 라우트 구현
frontend/src/routes/login.tsx
새로운 로그인 페이지 컴포넌트 추가. GIST 계정으로 로그인하는 버튼과 로고를 포함한 중앙 정렬 레이아웃 구현
라우트 트리 생성
frontend/src/routeTree.gen.ts
LoginRoute 상수 추가 및 루트 라우트에 연결. FileRoutesByFullPath, FileRoutesByTo, FileRoutesById 등 라우트 타입 매핑 업데이트
루트 경로 조건부 렌더링
frontend/src/routes/__root.tsx
useLocation 훅 추가. 현재 경로가 "/login"일 때는 Outlet만 렌더링하고, 그 외에는 전체 레이아웃(배경, 사이드바 포함) 렌더링
메시지 카드 레이아웃
frontend/src/components/MsgCard.tsx
컨테이너 스타일링 확장(flex, 보더, 패딩, 호버 효과 추가). MsgCardProps의 content 속성을 배열 타입에서 string으로 변경
메시지 박스 UI 스타일링
frontend/src/routes/msgBox.tsx
네비게이션 텍스트 업데이트. 메시지 그리드를 고정 두 열에서 반응형 자동 맞춤 그리드로 변경. 모달 컨테이너 스타일 개선(흰색 배경, 반투명 보더, 패딩 조정)

예상 코드 리뷰 노력

🎯 3 (중간 복잡도) | ⏱️ ~20분

주의 깊게 검토해야 할 영역:

  • frontend/src/routes/__root.tsx의 조건부 렌더링 로직이 의도한 대로 작동하는지 확인 (특히 경로 비교 로직)
  • frontend/src/routeTree.gen.ts는 자동 생성 파일이므로 생성 로직의 정확성 확인 필요
  • frontend/src/components/MsgCard.tsx의 content 타입 변경이 모든 호출 사이트와 호환되는지 검증

관련 PR 목록

  • chore: sync main and update routes #35: routeTree.gen.ts의 /login 라우트 추가 및 라우트 타입 매핑 업데이트로 직접 연관
  • fe-(1) #34: MsgCard.tsx 컴포넌트 및 MsgCardProps 타입 정의 관련 직접 연관
  • Dev #11: frontend/src/routes/login.tsx 로그인 라우트 파일 수정으로 직접 연관

🐰 로그인 길을 열고,
카드들은 새 옷을 입고,
조건 나뭇가지 흔들리며,
모달은 하얀 드레스를 춤 추고,
라우트 숲엔 새 길이 나 있네! 🌲✨

Pre-merge checks and finishing touches

❌ Failed checks (1 warning, 1 inconclusive)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. You can run @coderabbitai generate docstrings to improve docstring coverage.
Title check ❓ Inconclusive PR 제목 'fe-2'는 매우 모호하고 구체적이지 않으며, 변경사항의 핵심 내용을 전혀 설명하지 못합니다. PR 제목을 로그인 기능 추가, 메시지 카드 UI 수정, 모달 레이아웃 개선 등 주요 변경사항을 반영한 명확한 제목으로 변경해주세요.
✅ Passed checks (1 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch fe-2

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

@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: 1

🧹 Nitpick comments (2)
frontend/src/routes/login.tsx (1)

1-17: 로그인 라우트 구성은 적절하지만 버튼 동작/접근성 포인트 확인 필요

  • createFileRoute('/login')와 단일 RouteComponent 구성은 TanStack Router 패턴에 잘 맞습니다.
  • 다만 로그인 버튼에 onClick이나 Link 등이 없어 현재는 아무 동작을 하지 않습니다. 의도적으로 UI 골격만 먼저 만든 것인지, 아니면 추후 GIST 인증 연동을 깜빡하신 것인지 확인 부탁드립니다.
  • <img>alt="logo"는 상당히 포괄적이라, 예를 들어 "GISTree 로고"처럼 서비스명을 포함한 텍스트로 바꾸면 스크린리더 사용자에게 조금 더 친절해집니다.
frontend/src/routes/msgBox.tsx (1)

75-76: 메시지 카드 그리드 레이아웃 변경은 반응형 측면에서 개선

grid-cols-[repeat(auto-fit,minmax(280px,1fr))]place-items-center 조합으로 카드 수에 따라 자연스럽게 줄바꿈/정렬되는 구조라, 이전의 고정 2열보다 확장성이 좋아졌습니다. 현재 스펙 기준으로는 문제 없어 보입니다.

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 2f9eff8 and 57c13e2.

⛔ Files ignored due to path filters (1)
  • frontend/src/assets/logo.svg is excluded by !**/*.svg
📒 Files selected for processing (5)
  • frontend/src/components/MsgCard.tsx (1 hunks)
  • frontend/src/routeTree.gen.ts (6 hunks)
  • frontend/src/routes/__root.tsx (1 hunks)
  • frontend/src/routes/login.tsx (1 hunks)
  • frontend/src/routes/msgBox.tsx (5 hunks)
🧰 Additional context used
🧬 Code graph analysis (1)
frontend/src/routes/login.tsx (1)
frontend/src/routes/__root.tsx (1)
  • Route (6-38)
🔇 Additional comments (4)
frontend/src/routes/msgBox.tsx (2)

70-70: 네비게이션 텍스트 변경 적절

"방으로 돌아가기"에서 "돌아가기"로 짧고 직관적으로 정리된 것 좋아 보입니다. 별도 이슈는 없습니다.


97-139: X button and close functionality will work correctly

The X button does not need additional pointer-events styling to be clickable. While the parent wrapper has pointer-events-none, this only prevents the wrapper itself from being a pointer target—it does not cascade to prevent child elements from receiving events. Child elements default to pointer-events-auto and will receive clicks normally. The pointer-events-auto on the "답장하기" link is good practice for explicitness but redundant given the default behavior. The current implementation allows proper click handling on both the X button and the link.

Likely an incorrect or invalid review comment.

frontend/src/routes/__root.tsx (1)

2-37: /login 전용 레이아웃 분리 방식 적절 — 향후 확장 시 조건만 유의

  • useLocation으로 location.pathname === '/login'일 때만 <Outlet />을 직접 반환해 로그인 페이지를 풀스크린으로 분리한 구조는 명확하고 이해하기 쉽습니다.
  • 다만 나중에 /login 하위 라우트(/login/callback 등)를 추가할 계획이 있다면, 현재 조건식으로는 이들 경로에는 기본 레이아웃이 적용됩니다. 그 경우 pathname.startsWith('/login') 같은 형태로 확장할지 한 번만 고민해 두시면 좋겠습니다.
frontend/src/routeTree.gen.ts (1)

14-153: 자동 생성된 라우트 트리에서 /login 추가 일관성 확인

이 파일은 TanStack Router가 자동 생성하는 파일이라 수동 수정은 피하는 것이 맞고, 이번 변경에서 /loginLoginRoute로 모든 매핑(FileRoutesBy*, RootRouteChildren, FileRoutesByPath 등)에 일관되게 추가된 것 확인했습니다. 생성 절차만 정상적으로 실행되었다면 별도 이슈는 없어 보입니다.

Comment on lines +9 to 20
<div className="flex flex-col bg-gray-100 shadow-md hover:shadow-md transition-shadow hover:scale-105 transition-transform duration-400
h-[210px] w-[280px] px-[20px] py-[15px] justify-between gap-[10px] rounded-[20px] border-[8px] border-[#A12925]/20 bg-white">
<div className="font-semibold text-gray-800">
To. {recipient}
</div>
<div className="text-gray-700 text-sm">
<div className="px-[8px] text-gray-700 text-sm max-h-[100px]">
{content}
</div>
<div className="font-semibold text-gray-800 mt-3">
<div className="self-end font-semibold text-gray-800">
From. {sender}
</div>
</div>
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

🧩 Analysis chain

🏁 Script executed:

find . -type f -name "tailwind.config.*" -o -name "tailwind.config.mjs" | head -20

Repository: gsainfoteam/GISTree

Length of output: 45


🏁 Script executed:

cat package.json | grep -A 5 -B 5 "tailwindcss"

Repository: gsainfoteam/GISTree

Length of output: 107


🏁 Script executed:

cat -n frontend/src/components/MsgCard.tsx | head -30

Repository: gsainfoteam/GISTree

Length of output: 1047


🏁 Script executed:

find . -type f -name "package.json" | head -20

Repository: gsainfoteam/GISTree

Length of output: 109


🏁 Script executed:

find . -type f -name "tailwind.config.*" -o -name "tailwind.config.mjs" 2>/dev/null

Repository: gsainfoteam/GISTree

Length of output: 45


🏁 Script executed:

find . -name "postcss.config.*" 2>/dev/null

Repository: gsainfoteam/GISTree

Length of output: 45


🏁 Script executed:

cat frontend/package.json | grep -E "tailwindcss|next"

Repository: gsainfoteam/GISTree

Length of output: 127


🏁 Script executed:

head -50 frontend/package.json

Repository: gsainfoteam/GISTree

Length of output: 973


🌐 Web query:

Tailwind CSS v4 default duration utilities animation timing

💡 Result:

Tailwind CSS v4 — default transition duration utilities:

  • duration-0 → 0s / 0ms
  • duration-75 → 75ms
  • duration-100 → 100ms
  • duration-150 → 150ms
  • duration-200 → 200ms
  • duration-300 → 300ms
  • duration-500 → 500ms
  • duration-700 → 700ms
  • duration-1000 → 1000ms
    (also supports arbitrary values like duration-[2000ms]). [1]

Default transition timing-function (ease) utilities:

  • ease-linear → linear
  • ease-in → cubic-bezier(0.4, 0, 1, 1)
  • ease-out → cubic-bezier(0, 0, 0.2, 1)
  • ease-in-out → cubic-bezier(0.4, 0, 0.2, 1)
    (also supports custom/variable values). [2]

Sources: Tailwind docs — Transition Duration and Transition Timing Function. [1] [2]


카드 스타일 개선은 좋지만 duration-400 및 배경 클래스 중복 해결 필요

  • 전체 카드 레이아웃/호버 효과 구성은 잘 되어 있습니다.
  • 프로젝트에서 사용 중인 Tailwind v4.1.17의 기본 프리셋에는 duration-400 유틸이 없습니다(지원되는 값: 75, 100, 150, 200, 300, 500, 700, 1000ms). 해당 클래스는 무시됩니다. 400ms가 필요하면 duration-[400ms]로 수정하거나, 지원되는 가장 가까운 값(duration-300 또는 duration-500)을 사용하세요.
  • bg-gray-100 ... bg-white처럼 배경 색상이 두 번 선언되어 마지막 bg-white만 적용됩니다. 한 가지로 통일하면 클래스 가독성이 향상됩니다.
🤖 Prompt for AI Agents
In frontend/src/components/MsgCard.tsx around lines 9 to 20, replace the
unsupported Tailwind class duration-400 with a valid utility (either
duration-[400ms] if you need exactly 400ms, or one of the supported values like
duration-300 or duration-500), and remove the duplicate background declaration
so only the intended bg class remains (e.g., drop bg-gray-100 and keep bg-white
or vice versa depending on the desired look).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

Comments