Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion frontend/src/App.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ function App() {
<Route path="/login" element={<Login />} />
<Route path="/signup" element={<SignUp />} />
<Route element={<Layout />}>
<Route path="/" element={<Login />} />
<Route path="/" element={<Home />} />
Copy link

@coderabbitai coderabbitai bot Oct 15, 2025

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🔴 Critical

🧩 Analysis chain

빈 Home 컴포넌트로의 라우팅 변경을 확인하세요.

루트 경로가 Login에서 Home으로 변경되었습니다. 제공된 코드 스니펫에 따르면 Home 컴포넌트는 현재 빈 div만 반환합니다. 다음 사항을 확인해주세요:

  • 이 변경이 의도된 것인지 (예: 개발 중이거나 다른 PR에서 구현 예정)
  • 인증되지 않은 사용자가 루트 경로에 접근할 때 로그인 페이지로 리디렉션되는 로직이 있는지
  • 빈 Home 페이지가 사용자에게 표시되지 않도록 보호 장치가 마련되어 있는지

다음 스크립트를 실행하여 Home 컴포넌트의 현재 구현을 확인하세요:


🏁 Script executed:

#!/bin/bash
# Description: Home 컴포넌트의 구현 확인

# Home 컴포넌트 파일 내용 확인
cat frontend/src/pages/Home.jsx

# 인증 관련 리디렉션 로직이 있는지 확인
rg -n "useNavigate|Navigate.*login|redirect" frontend/src/pages/Home.jsx frontend/src/components/Layout.jsx

Length of output: 67


루트 경로를 빈 Home 컴포넌트로 변경하며 인증 제어 로직이 없습니다

  • Home 컴포넌트가 <div></div>만 반환합니다.
  • 인증되지 않은 사용자의 루트 접근 시 로그인 페이지로 리디렉션하지 않습니다.

변경 의도를 확인하고, 루트 접근에 대한 인증 리디렉션을 구현하세요.

🤖 Prompt for AI Agents
In frontend/src/App.jsx around line 22, the Route for "/" currently renders an
empty Home component and lacks authentication control; implement an auth gate so
unauthenticated users are redirected to "/login". Either replace the Route
element with a ProtectedRoute wrapper that reads auth state (from your auth
context/store) and navigates to "/login" when unauthenticated, or add an auth
check inside Home that reads the same auth state and uses navigation (or
<Navigate />) to send unauthenticated users to "/login"; if authenticated,
render the actual Home UI instead of an empty <div />.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

추후 수정하겠습니다

Copy link

Choose a reason for hiding this comment

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

@NaturalSoda4552, 알겠습니다! 나중에 수정하시는 것으로 확인했습니다.

이 작업을 추적하기 위해 별도의 이슈를 생성하시겠습니까? 원하신다면 인증 제어 로직 추가에 대한 후속 이슈를 만들어 드릴 수 있습니다.

<Route path="/attendance" element={<Attendance />} />
<Route path="/attendance-manage" element={<AttendanceManage />} />
<Route path="/board" element={<Board />} />
Expand Down
Binary file added frontend/src/assets/github.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added frontend/src/assets/google.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added frontend/src/assets/kakao.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
89 changes: 59 additions & 30 deletions frontend/src/components/LoginAndSignUpForm.module.css
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@
align-items: center;
justify-content: center;
background: white;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
padding: 40px;
/* box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1); */
padding: 42px;
width: 473px;
box-sizing: border-box;
}
Expand All @@ -22,27 +22,45 @@
text-align: center;
}

.logo {
width: 60px;
}

.loginForm h1 {
margin-bottom: 72px;
.header h1 {
margin-bottom: 16px;
margin-top: 9px;
color: #142d56;
font-family: 'DIN Condensed';
font-size: 24px;
font-weight: 600;
font-style: normal;
font-weight: 700;
line-height: 146%;
}

.header {
border-bottom: 1px solid #d6d6d6;
margin-bottom: 36px;
width: 333px;
}
.logo {
width: 60px;
height: 60px;
flex-shrink: 0;
aspect-ratio: 1/1;
}

.inputGroup {
margin-bottom: 10px;
margin-bottom: 12px;
text-align: left;
}

.inputGroup label {
display: block;
margin-bottom: 8px;
margin-bottom: 12px;
font-weight: 500;
color: #555;
color: #000;
font-family: Pretendard;
Copy link
Contributor

Choose a reason for hiding this comment

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

index.css 파일에서 전역으로 font-family: 'Pretendard'를 설정해뒀기 때문에 해당 속성은 중복 선언으로 지우셔도 됩니다.

font-size: 14px;
font-style: normal;
font-weight: 400;
line-height: normal;
}
Comment on lines 57 to 64
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

중복된 color 속성을 제거하세요.

Line 58에 color: #555;가 있고 Line 58에 color: #000;이 다시 선언되어 있습니다. 중복된 속성은 혼란을 야기하고 의도하지 않은 동작을 유발할 수 있습니다.

다음 diff를 적용하세요:

 .inputGroup label {
   display: block;
   margin-bottom: 12px;
   font-weight: 500;
-  color: #555;
   color: #000;
   font-family: Pretendard;
   font-size: 14px;
   font-style: normal;
   font-weight: 400;
   line-height: normal;
 }
📝 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.

Suggested change
color: #555;
color: #000;
font-family: Pretendard;
font-size: 14px;
font-style: normal;
font-weight: 400;
line-height: normal;
}
.inputGroup label {
display: block;
margin-bottom: 12px;
font-weight: 500;
color: #000;
font-family: Pretendard;
font-size: 14px;
font-style: normal;
font-weight: 400;
line-height: normal;
}
🧰 Tools
🪛 Biome (2.1.2)

[error] 61-61: Duplicate properties can lead to unexpected behavior and may override previous declarations unintentionally.

color is already defined here.

Remove or rename the duplicate property to ensure consistent styling.

(lint/suspicious/noDuplicateProperties)

🤖 Prompt for AI Agents
frontend/src/components/LoginAndSignUpForm.module.css around lines 57 to 64:
there are duplicate color declarations (color: #555; and color: #000;); remove
the redundant one so only the intended color remains (e.g., delete color: #555;
and keep color: #000;) to avoid conflicting styles.


.inputGroup input {
Expand All @@ -63,7 +81,7 @@
.loginButton {
width: 100%;
padding: 12px;
margin-top: 30px;
margin-bottom: 18px;
background-color: #0e1a2c;
color: white;
border: none;
Expand All @@ -80,20 +98,20 @@
}

.text {
color: #9ca3af;
font-size: 14px;
text-decoration: none;
line-height: 1.5;
padding: 2px 4px;
border-radius: 6px;
outline: none;

color: #aaa;
font-family: Pretendard;
Copy link
Contributor

Choose a reason for hiding this comment

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

👀

font-size: 12px;
font-style: normal;
font-weight: 400;
line-height: 146%; /* 17.52px */
}
.textContainer {
display: flex;
width: 90%;
width: 330px;
justify-content: space-between;
align-items: center;
padding-top: 10px;
}
.textContainer .text {
cursor: pointer;
Expand All @@ -102,13 +120,14 @@
.divider {
color: #9ca3af;
font-size: 14px;
margin: 0 4px;
margin: 0 8px;
}

/* ------------------------ 회원가입 페이지 ------------------------ */
.emailContainer {
.phoneVerificationContainer {
display: flex;
align-items: center;
gap: 4px;
}

.emailInput {
Expand All @@ -117,16 +136,26 @@
}

.verifyButton {
padding: 12px 15px;
width: 60px;
background-color: #4caf50;
color: white;
display: flex;
height: 44px;
padding: 16px 24px;
justify-content: center;
align-items: center;
border-radius: 8px;
background: #1d80f4;
border: none;
border-radius: 4px;
cursor: pointer;
font-size: 14px;

color: #fff;
text-align: center;
font-family: Pretendard;
Copy link
Contributor

Choose a reason for hiding this comment

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

👀

font-size: 16px;
font-style: normal;
font-weight: 500;
line-height: 100%; /* 16px */
letter-spacing: -0.48px;
white-space: nowrap;
}
.verifyButton:disabled {
background-color: #d5d5d5;
background-color: #bce5ff;
cursor: not-allowed;
}
13 changes: 10 additions & 3 deletions frontend/src/components/login/LoginForm.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -49,11 +49,18 @@ const LoginForm = () => {
<>
<div className={styles.formContainer}>
<form className={styles.loginForm} onSubmit={handleLogin}>
<div className={styles.logoBox}>
<img src={sejong_logo} alt="sejong_logo" className={styles.logo} />
<div className={styles.header}>
<div className={styles.logoBox}>
<img
src={sejong_logo}
alt="sejong_logo"
className={styles.logo}
/>
</div>

<h1>Sejong Investment Scholars Club</h1>
</div>

<h1>Sejong Investment Scholars Club</h1>
<div className={styles.inputGroup}>
<label htmlFor="email">Email</label>
<input
Expand Down
35 changes: 22 additions & 13 deletions frontend/src/components/login/SocialLoginButtons.jsx
Original file line number Diff line number Diff line change
@@ -1,35 +1,44 @@
import styles from './SocialLoginButtons.module.css';

const SocialLoginButtons = ({ onGoogle, onNaver, onKakao }) => {
import googleIcon from './../../assets/google.png';
import kakaoIcon from './../../assets/kakao.png';
import githubIcon from './../../assets/github.png';

const SocialLoginButtons = ({ onGoogle, onGithub, onKakao }) => {
return (
<div className={styles.socialContainer} aria-label="소셜 로그인">
<div className={styles.divider}>
<span>또는 간편 로그인</span>
</div>

<div className={styles.buttonGroup}>
<button
type="button"
className={`${styles.btn} ${styles.google}`}
onClick={onGoogle}
alt="구글로 로그인"
Copy link

@coderabbitai coderabbitai bot Oct 15, 2025

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major

button 요소에서 잘못된 alt 속성을 제거하세요.

alt 속성은 <img> 요소에만 유효합니다. <button> 요소에는 적용할 수 없으며, HTML 유효성 검사에 실패합니다. 대신 aria-label 속성을 사용하여 접근성을 개선하세요.

다음 diff를 적용하여 수정하세요:

       <button
         type="button"
         className={`${styles.btn} ${styles.google}`}
         onClick={onGoogle}
-        alt="구글로 로그인"
+        aria-label="구글로 로그인"
       >

       <button
         type="button"
         className={`${styles.btn} ${styles.github}`}
         onClick={onGithub}
-        alt="깃허브로 로그인"
+        aria-label="깃허브로 로그인"
       >

       <button
         type="button"
         className={`${styles.btn} ${styles.kakao}`}
         onClick={onKakao}
-        alt="카카오로 로그인"
+        aria-label="카카오로 로그인"
       >

Also applies to: 25-25, 37-37

🤖 Prompt for AI Agents
In frontend/src/components/login/SocialLoginButtons.jsx around lines 15, 25 and
37, the button elements incorrectly use an alt attribute (valid only on img);
remove the alt attributes from those <button> tags and add appropriate
aria-label attributes (e.g., aria-label="Sign in with Google" or matching
provider) to preserve accessibility and HTML validity; ensure no alt remains on
buttons and run a quick lint/validator to confirm.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

수정하갰습니다

Copy link

Choose a reason for hiding this comment

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

@NaturalSoda4552, 감사합니다! 수정해 주셔서 감사합니다. button 요소에 aria-label 속성을 사용하면 접근성과 HTML 표준 준수가 개선됩니다. 👍

>
<img
src="https://upload.wikimedia.org/wikipedia/commons/c/c1/Google_%22G%22_logo.svg"
alt="구글로 로그인"
/>
<img src={googleIcon} />
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major

이미지에 대체 텍스트를 추가하세요.

모든 <img> 요소에는 접근성을 위해 alt 속성이 필요합니다. 스크린 리더 사용자가 이미지의 목적을 이해할 수 있도록 의미 있는 대체 텍스트를 제공해야 합니다.

다음 diff를 적용하세요:

-          <img src={googleIcon} />
+          <img src={googleIcon} alt="Google 아이콘" />

-          <img src={githubIcon} />
+          <img src={githubIcon} alt="GitHub 아이콘" />

-          <img src={kakaoIcon} />
+          <img src={kakaoIcon} alt="Kakao 아이콘" />

Also applies to: 27-27, 39-39

🤖 Prompt for AI Agents
In frontend/src/components/login/SocialLoginButtons.jsx around lines 17, 27 and
39, the <img> tags are missing alt attributes; add meaningful alt text for each
image (e.g., "Sign in with Google" for the Google icon, equivalent descriptive
text for the other icons) so screen readers convey the button purpose, or use an
empty alt="" only if the image is strictly decorative and its purpose is already
conveyed by adjacent text/button labels.

<div className={styles.btnText}>Google로 로그인하기</div>
</button>

<button
type="button"
className={`${styles.btn} ${styles.naver}`}
onClick={onNaver}
></button>
className={`${styles.btn} ${styles.github}`}
onClick={onGithub}
alt="깃허브로 로그인"
>
<img src={githubIcon} />
<div className={`${styles.btnText} ${styles.githubBtnText}`}>
Github로 로그인하기
</div>
</button>

<button
type="button"
className={`${styles.btn} ${styles.kakao}`}
onClick={onKakao}
></button>
alt="카카오로 로그인"
>
<img src={kakaoIcon} />
<div className={styles.btnText}>kakao로 로그인하기</div>
</button>
</div>
</div>
);
Expand Down
71 changes: 35 additions & 36 deletions frontend/src/components/login/SocialLoginButtons.module.css
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
.socialContainer {
margin-top: 16px;
margin-top: 30px;
}

.divider {
Expand All @@ -12,58 +12,57 @@
}

.buttonGroup {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 10px;
display: flex;
flex-direction: column;
gap: 12px;
}

.btn {
display: inline-flex;
width: 330px;
height: 44px;
flex-shrink: 0;
border-radius: 8px;
border: none;

display: flex;
align-items: center;
justify-content: center;
gap: 10px;
width: 50px;
height: 50px;
border-radius: 50px;
font-weight: 600;

outline: none;
border: 1px solid transparent;
gap: 4px;
}
.btn:hover {
filter: brightness(0.95);
transition: 0.1s;
}

.btn img {
width: 50%;
height: auto;
width: 24px;
height: 24px;
flex-shrink: 0;
aspect-ratio: 1/1;
}

.icon {
flex: 0 0 40px;
.btn .btnText {
/* color: #000; */
font-family: Pretendard;
Copy link
Contributor

Choose a reason for hiding this comment

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

👀

font-size: 14px;
font-style: normal;
font-weight: 400;
line-height: normal;
}

.google {
background: #ffffff;
border-color: #e5e7eb;
color: #111827;
}
.google:hover {
background: #f9fafb;
border: 1px solid #acacac;
background: #fff;
}

.naver {
background: #03c75a;
color: #ffffff;
.github {
background: #1a1e24;
color: #fff;
}
.naver:hover {
filter: brightness(0.95);
.btnText .githubBtnText {
color: #fff;
}
Comment on lines +60 to 62
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major

CSS 선택자를 수정하세요.

현재 선택자 .btnText .githubBtnText.btnText 내부의 자식 요소인 .githubBtnText를 찾습니다. 하지만 JSX 코드(Line 28-30)를 보면 .githubBtnText.btnText와 함께 동일한 요소에 적용되는 클래스입니다.

다음 diff를 적용하세요:

-.btnText .githubBtnText {
+.btnText.githubBtnText {
   color: #fff;
 }
📝 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.

Suggested change
.btnText .githubBtnText {
color: #fff;
}
.btnText.githubBtnText {
color: #fff;
}
🤖 Prompt for AI Agents
frontend/src/components/login/SocialLoginButtons.module.css around lines 60 to
62: the selector ".btnText .githubBtnText" targets a child element but in JSX
the classes are applied to the same element; replace the descendant selector
with a combined class selector ".btnText.githubBtnText" (no space) and keep the
rule body the same so the style applies when both classes are present on the
same element.


.kakao {
background: #fee500;
color: #191600;
border-color: #e5e7eb;
}
.kakao:hover {
filter: brightness(0.95);
background: #fae000;
}

.label {
Expand Down
Loading