Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
46 commits
Select commit Hold shift + click to select a range
8f77ccf
chore/#14: assignment 관련 파일들 assignments 폴더로 이동
JiiminHa Aug 10, 2025
44700df
#14 chore: vite에서 @alias 경로 설정 추가
JiiminHa Sep 2, 2025
c4998bb
#14 feat: 문제 생성, 관리 페이지 레이아웃 구현
JiiminHa Sep 2, 2025
3c6efa1
#14 feat: chevronDown svg 추가
JiiminHa Sep 2, 2025
5437150
#14 refactor: 콜백 구조 단순화, 타입 시스템과 일치하도록 수정
JiiminHa Sep 2, 2025
654b44b
#14 feat: AssignmentCreatePage UI 구현
JiiminHa Sep 3, 2025
f040aff
#14 feat: LabeledInput UI 구현
JiiminHa Sep 3, 2025
0d46a93
#14 feat: file.svg 파일 추가
JiiminHa Sep 4, 2025
1f35460
#14 feat: 파일 업로드 컴포넌트 구현
JiiminHa Sep 5, 2025
e155790
#14 feat: 예제 입력란 동적 추가 및 라벨 간격 개선 및 파일업로드 컴포넌트 추가
JiiminHa Sep 5, 2025
418a352
#14 feat: 강의 생성 페이지 구현
JiiminHa Sep 11, 2025
36811bf
#14 feat: 과제 생성 페이지 구현
JiiminHa Sep 11, 2025
62bd4d8
#14 feat: useClickOutside 커스텀훅 구현
JiiminHa Sep 11, 2025
2f50a58
#14 feat: LabeledInput 리팩토링 및 LabeledDropdown variant 추가
JiiminHa Sep 11, 2025
2789f84
#14 style: placeholder 전역 색상 설정
JiiminHa Sep 11, 2025
d85f49e
#14 feat: 라우트 경로 추가
JiiminHa Sep 11, 2025
8a57dfa
#13 chore: 디자인 컬러 팔레트 색상 업데이트
JiiminHa Sep 17, 2025
07d7fdd
#13 chore: 프로필 이미지 추가
JiiminHa Sep 18, 2025
70d273d
#13 feat: Search 아이콘 컴포넌트 추가
JiiminHa Sep 22, 2025
45b0b97
#13 feat: StudentManagementPage 초기 레이아웃 및 UI 일부 추가
JiiminHa Sep 22, 2025
6e703f2
#13 feat: StudentManagementPage 초기 레이아웃 및 검색 UI 추가
JiiminHa Sep 22, 2025
811540e
Merge remote-tracking branch 'origin/develop' into feat/13-student-ma…
JiiminHa Sep 22, 2025
a2348fb
Merge remote-tracking branch 'origin/feat/16-course-view-page' into f…
JiiminHa Sep 22, 2025
ec6d432
#13 chore: prettier-plugin-tailwindcss 설정
JiiminHa Sep 24, 2025
0927964
#21 chore: tailwind-variants 패키지 설치
suminb99 Dec 30, 2025
77c081e
#21 refactor: Button 컴포넌트 스타일 로직을 tailwind-variants로 개선
suminb99 Dec 30, 2025
6aa8fb1
(#21) feat: Button 컴포넌트 props 추가 및 variants 확장
suminb99 Dec 30, 2025
e81750a
#21 feat: 리펙토링한 버튼 컴포넌트 전역 적용
suminb99 Dec 30, 2025
2993ec3
#21 feat: Header에 IconButton 대신 Button 컴포넌트로 교체 및 적용
suminb99 Dec 30, 2025
27fbea9
#21 feat: Button 컴포넌트 variant 속성 수정
suminb99 Dec 30, 2025
194434e
#21 refactor: 버튼 컴포넌트 color / size / content variant 구조로 확장 및 분리
suminb99 Dec 30, 2025
39a5da2
##21 feat: content 속성 설정
suminb99 Dec 30, 2025
fd763bb
#21 feat: tailwind-variants 적용 Badge 컴포넌트 추가
suminb99 Jan 1, 2026
381dc0f
#21 style: Badge 컴포넌트 leading 속성 추가
suminb99 Jan 1, 2026
9c4624d
#13 fix: 과제 관련 페이지 빌드 오류 수정
JiiminHa Jan 6, 2026
631b4ba
#13 refactor: svgr 사용하도록 SVG 핸들링 방식 변경
JiiminHa Jan 6, 2026
cf09fb8
refactor: Layout 컴포넌트 타입 추가 및 SVG import 방식 변경
JiiminHa Jan 6, 2026
573532b
#13 chore: .prettierrc 설정 변경
JiiminHa Jan 6, 2026
782a71f
refactor: 상대 경로를 @ 절대 경로로 변경
JiiminHa Jan 6, 2026
b8988ab
feat: 커밋 규칙 테스트
JiiminHa Jan 6, 2026
42af5be
#13 fix: commitlint 설정 파일 충돌 문제 해결
JiiminHa Jan 6, 2026
11263f0
Merge branch 'develop' into feat/13-student-management
JiiminHa Jan 6, 2026
4c08872
#21 feat: 배지 컴포넌트 개선 및 확장
suminb99 Jan 6, 2026
1f3d926
#21 feat: 배지 컴포넌트 적용
suminb99 Jan 6, 2026
204867d
#13 feat: coderabbit 설정 파일 추가
JiiminHa Jan 6, 2026
cfbf866
Merge branch 'feat/13-student-management' into refactor/21-common-com…
suminb99 Jan 11, 2026
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
123 changes: 123 additions & 0 deletions .coderabbit.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,123 @@
language: 'ko-KR'
early_access: true

tone_instructions: |
1. 피드백은 명확하고 구체적으로 작성하고, 문제 원인과 개선 방법을 함께 제시하세요.
2. 리뷰는 교육적인 방향을 지향하며, 관련 공식 문서 링크를 함께 추천하세요.
3. 비판보다는 개선 제안을 우선하세요.
4. 칭찬은 짧고 위트 있게 작성하세요.

reviews:
profile: educational
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🔴 Critical

Critical: Invalid profile value.

The profile value 'educational' is not valid according to the schema. Only 'chill' or 'assertive' are accepted values.

🔧 Proposed fix

Based on the tone instructions emphasizing educational feedback and improvement suggestions, 'chill' would be the appropriate choice:

   reviews:
-    profile: educational
+    profile: chill
     request_changes_workflow: true

Note: The current PR already uses "Chill" mode as mentioned in the review context, so this aligns with the existing setup.

🤖 Prompt for AI Agents
In @.coderabbit.yaml at line 11, The profile value 'educational' is invalid;
update the .coderabbit.yaml profile key to an accepted value (use 'chill' to
match the existing PR context) by replacing the current profile: educational
entry with profile: chill so the file conforms to the schema.

request_changes_workflow: true
high_level_summary: true
high_level_summary_placeholder: |
@coderabbitai summary
(졸업작품 평가 기준: 구조 / 타입 안정성 / 접근성 관점 요약)
poem: false
review_status: true
suggested_labels: true
commit_status: true
fail_commit_status: false
abort_on_close: true
high_level_summary_in_walkthrough: true
high_level_summary_placeholder: '@coderabbitai summary'
Comment on lines +14 to +24
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🔴 Critical

Critical: Duplicate key causes YAML parsing failure.

The high_level_summary_placeholder key is defined twice (lines 14 and 24), which will cause the YAML parser to fail. This prevents CodeRabbit from loading the configuration.

🔧 Proposed fix

Remove the duplicate key on line 24 and keep only the first definition:

   abort_on_close: true
   high_level_summary_in_walkthrough: true
-  high_level_summary_placeholder: '@coderabbitai summary'
   collapse_walkthrough: true

The first definition (lines 14-16) already includes the detailed placeholder with graduation project criteria, which appears more comprehensive than the duplicate.

🧰 Tools
🪛 YAMLlint (1.37.1)

[error] 24-24: duplication of key "high_level_summary_placeholder" in mapping

(key-duplicates)

🤖 Prompt for AI Agents
In @.coderabbit.yaml around lines 14 - 24, The YAML defines the key
high_level_summary_placeholder twice, causing a parsing failure; remove the
duplicate occurrence that sets high_level_summary_placeholder: '@coderabbitai
summary' and keep the first, more detailed high_level_summary_placeholder block
(the one containing "@coderabbitai summary (졸업작품 평가 기준: 구조 / 타입 안정성 / 접근성 관점
요약)"), ensuring there is only one high_level_summary_placeholder entry so the
YAML parses correctly.

collapse_walkthrough: true

path_instructions:
- path: 'src/**/components/**/*.tsx'
instructions: |
React 컴포넌트 리뷰 시:
- 파일명은 PascalCase인지 확인
- Props 타입은 컴포넌트명Props 형식인지 확인
- 단일 export는 default export 권장 (팀 규칙 우선)
- 이벤트 핸들러는 handle 접두사 사용
- 접근성 고려 (label 연결, aria-* 속성)
- 접근성 관련 지적 시, 사용자 영향 예시 포함
- 불필요한 re-render 방지를 위한 memo/useCallback 검토
- premature optimization 지양

- path: 'src/**/hooks/**/*.ts'
instructions: |
커스텀 훅 리뷰 시:
- 파일명과 함수명은 use* 접두사 사용
- 반환 타입의 일관성 유지 (object 또는 tuple)
- 에러/로딩 상태 명확히 분리
- TanStack Query 훅 네이밍 규칙 준수
(use + Action + Target + Query/Mutation)

- path: 'src/**/*.ts'
instructions: |
TypeScript 코드 리뷰 시:
- 타입/인터페이스는 PascalCase 사용
- interface는 객체 타입, type은 union/alias에 사용
- API 응답 타입은 XXXResponse 네이밍
- var 사용 금지, const 우선
- type-only import 적극 사용
- any 사용 시 사유 명확히 작성

- path: 'src/**'
instructions: |
프로젝트 전반 리뷰 기준:

# 기본 기술 스택
- React + TypeScript 사용
- 스타일링은 Tailwind CSS v4 사용
- 절대 경로 임포트(@/...) 사용
- Client / Server 컴포넌트 구분 명확

# 네이밍 컨벤션
- 컴포넌트: PascalCase
- 폴더명: kebab-case
- 일반 파일명: kebab-case
- 변수/함수: camelCase
- 상수: BIG_SNAKE_CASE
- Props 타입: 컴포넌트명Props

# 환경 변수
- 환경 변수는 process.env.NEXT_PUBLIC_* 사용
- 민감 정보 하드코딩 금지

# 성능
- 불필요한 클라이언트 컴포넌트 사용 지양
- 리스트 렌더링 시 key 안정성 확인

# Git 규칙
- 커밋 메시지: #issue type: subject
(예: #12 feat: 로그인 기능 추가)
- 브랜치 패턴: type/issuenumber-issue-short-description
(예: feat/1-auth)

auto_review:
enabled: true
drafts: false
base_branches:
- 'main'
- 'develop'
labels:
- '!wip'
- '!draft'
ignore_usernames:
- 'dependabot'
- 'renovate'

tools:
eslint:
enabled: true
markdownlint:
enabled: true
gitleaks:
enabled: true
yamllint:
enabled: true
actionlint:
enabled: true

chat:
auto_reply: true

knowledge_base:
code_guidelines:
enabled: true
filePatterns:
- 'README.md'
34 changes: 34 additions & 0 deletions .husky/commit-msg
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
echo "📝 커밋 메시지를 검증합니다..."

# 커밋 메시지 읽기
commit_msg=$(cat $1)

# 이슈 번호 뒤에 공백 없이 문자가 오는 경우 체크 (#13test, #13chore 등)
if echo "$commit_msg" | grep -qE '^#[0-9]+[a-zA-Z]'; then
echo "❌ 이슈 번호 뒤에는 공백이 필요합니다."
echo "잘못된 형식: $(echo "$commit_msg" | grep -oE '^#[0-9]+[a-zA-Z][^ ]*')"
echo "올바른 형식: #13 chore: 메시지"
exit 1
fi

# commitlint 실행
if npx --no -- commitlint --edit $1; then
echo "✅ 커밋 메시지가 규칙에 맞습니다."
exit 0
else
echo "❌ 커밋 메시지가 컨벤션에 맞지 않습니다."
echo ""
echo "올바른 커밋 메시지 형식:"
echo " <type>: <subject>"
echo " #<이슈번호> <type>: <subject> (이슈 번호는 선택사항)"
echo ""
echo "예시:"
echo " feat: 새로운 기능 추가"
echo " #13 fix: 버그 수정"
echo " docs: 문서 수정"
echo " #42 refactor: 코드 리팩토링"
echo ""
echo "사용 가능한 type:"
echo " feat, fix, docs, style, refactor, test, chore, perf, ci, build, revert"
exit 1
fi
3 changes: 2 additions & 1 deletion .prettierrc
Original file line number Diff line number Diff line change
Expand Up @@ -17,5 +17,6 @@
"requirePragma": false,
"tabWidth": 2,
"useTabs": false,
"embeddedLanguageFormatting": "auto"
"embeddedLanguageFormatting": "auto",
"tailwindStylesheet": "src/index.css"
}
3 changes: 3 additions & 0 deletions commitlint.config.cjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
module.exports = {
extends: ['@commitlint/config-conventional'],
};
Loading