-
Notifications
You must be signed in to change notification settings - Fork 0
빌더 피드 QA 수정 및 댓글 기능 추가 #662
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from all commits
Commits
Show all changes
16 commits
Select commit
Hold shift + click to select a range
628a971
[qa] fix : QA 버그 12종 일괄 수정
HA-SEUNG-JEONG d6dcef8
[qa] fix : 필터 칩 inactive 색상 Figma 정확히 맞춤 (#999)
HA-SEUNG-JEONG b08ac5c
[qa] fix : 피드 필터 칩 Figma 정합 — 운영자 PICK 제거 및 radius 수정
HA-SEUNG-JEONG 37a2344
[qa] fix : 운영자 PICK 피드 존재 시에만 칩 조건부 노출
HA-SEUNG-JEONG 676bd65
[qa] fix : useAuth roleIds 타입 오류 수정
HA-SEUNG-JEONG e86f752
[qa] fix : 돌아보기 제출 이미지/링크가 빌더 피드 상세에서 표시되지 않던 버그 수정
HA-SEUNG-JEONG 01b1b34
[qa] feat : 빌더 피드 댓글 대댓글 UI 및 ⋮ 메뉴 추가
HA-SEUNG-JEONG c7d1563
[qa] fix : QnA 답변 평문 콘텐츠 줄바꿈 미적용 버그 수정
HA-SEUNG-JEONG 91b41e6
[qa] fix : 빌더 피드 코드블록 렌더링 버그 수정 — TipTap HTML을 marked 없이 직접 sanitize
HA-SEUNG-JEONG 56c4eaf
[qa] fix : 빌더 피드 상세 페이지 닉네임-뱃지 간격 적용
HA-SEUNG-JEONG 725805b
[qa] fix : 마지막 레슨 제출 CTA를 완주 축하 페이지 이동 버튼으로 변경
HA-SEUNG-JEONG 704cb53
[qa] fix : [qa] chore : lucide-react 아이콘 대체 금지 룰 및 답변완료 아이콘 에셋 추가
HA-SEUNG-JEONG 9b68472
[qa] fix : [qa] style : QnA 리스트 배지 Figma 정합 — pill border, 답변완료 그린 배지…
HA-SEUNG-JEONG 5c58fb5
[qa] fix : [qa] chore : R2 remotePatterns 와일드카드 적용 및 QnA 배지 색상 토큰 추가
HA-SEUNG-JEONG eb21dac
[qa] fix : QnA XSS sanitize 누락, 운영진 role 판별 오류, 필터 상태 불일치 수정
HA-SEUNG-JEONG db30d83
[qa] fix : [qa] style : dangerouslySetInnerHTML biome-ignore 주석 제거
HA-SEUNG-JEONG File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,40 @@ | ||
| # No lucide-react Icon Substitution for Design Assets | ||
|
|
||
| ## Rule | ||
|
|
||
| When a Figma design specifies a custom icon (non-standard shape, brand icon, or project-specific glyph), **do NOT substitute it with a lucide-react icon**. | ||
|
|
||
| ## What This Means | ||
|
|
||
| If the designer used a custom SVG icon that isn't in lucide-react: | ||
|
|
||
| ```tsx | ||
| // ❌ Wrong — lucide-react substitute when Figma has a custom icon | ||
| import { CircleCheck } from 'lucide-react'; | ||
| <CircleCheck className="h-250 w-250" /> | ||
|
|
||
| // ✅ Correct — inline SVG from Figma asset | ||
| <svg width="20" height="20" viewBox="..." fill="currentColor" aria-hidden="true"> | ||
| <path d="..." /> | ||
| </svg> | ||
| ``` | ||
|
|
||
| ## How to Get the Real Icon | ||
|
|
||
| 1. In Figma MCP, call `get_design_context` on the parent node | ||
| 2. Find the icon child node (usually named with the icon type) | ||
| 3. Call `get_screenshot` on that child node to get the asset URL | ||
| 4. Download immediately: `curl -s -o public/<route>/<name>.svg "<asset-url>"` | ||
| 5. Verify: `file public/<route>/<name>.svg` — must say SVG, not HTML | ||
| 6. Use as inline SVG with `fill="currentColor"` for color inheritance | ||
|
|
||
| ## When lucide-react IS Allowed | ||
|
|
||
| lucide-react is the standard icon library for generic UI icons (arrows, close buttons, chevrons, etc.) that have no custom Figma counterpart. Use it freely for: | ||
| - Navigation icons (ChevronLeft, ChevronRight, X, ArrowLeft, etc.) | ||
| - Form icons (Search, Eye, EyeOff, etc.) | ||
| - Generic utility icons not specified as custom assets in Figma | ||
|
|
||
| ## The Problem This Prevents | ||
|
|
||
| lucide-react substitutes silently change the visual identity of design-specific icons. The designer chose a specific icon shape intentionally — substituting it breaks brand consistency. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧩 Analysis chain
🏁 Script executed:
Repository: code-zero-to-one/study-platform-client
Length of output: 6993
🏁 Script executed:
Repository: code-zero-to-one/study-platform-client
Length of output: 21184
🏁 Script executed:
Repository: code-zero-to-one/study-platform-client
Length of output: 2106
🏁 Script executed:
Repository: code-zero-to-one/study-platform-client
Length of output: 21810
🏁 Script executed:
Repository: code-zero-to-one/study-platform-client
Length of output: 6612
아티팩트 feed.artifactUrl는 Next
<Image>에 넣기 전에 공통 허용 호스트/URL 가드를 거치게 해주세요.lesson-builder-feed-detail-modal.tsx와feed/[id]/page.tsx에서isImageUrl()은 확장자만 검사하고(.jpg/.png/...)feed.artifactUrl을 그대로<Image src={feed.artifactUrl} />에 넣고 있어요.next.config.ts의images.remotePatterns는 특정 호스트들만 허용하지만, 아티팩트 URL 호스트가 그 목록 밖이면 Next<Image>가 src를 거부해 렌더 실패가 날 수 있습니다.artifactUrl→<Image>vs<a>) 로직이 중복되어 있어 공통 유틸로 “허용 호스트 + 이미지 판별 + fallback(허용 X면<a>처리)”을 묶는 편이 안전합니다.COMMUNITY_ALLOWED_IMAGE_HOSTS)가 존재하지만, 아티팩트 경로에서는 재사용되지 않습니다.🤖 Prompt for AI Agents