Skip to content

πŸ› 이슈 #365, #364, #358, #303, #302 μˆ˜μ •#414

Open
manNomi wants to merge 7 commits intomainfrom
fix/issues-365-364-358-303-302
Open

πŸ› 이슈 #365, #364, #358, #303, #302 μˆ˜μ •#414
manNomi wants to merge 7 commits intomainfrom
fix/issues-365-364-358-303-302

Conversation

@manNomi
Copy link
Contributor

@manNomi manNomi commented Feb 3, 2026

πŸ“‹ μš”μ•½

이 PR은 λ‹€μŒ 5개 이슈λ₯Ό ν•΄κ²°ν•©λ‹ˆλ‹€:

πŸ”§ μ£Όμš” 변경사항

1. νƒ€μž… μ•ˆμ „μ„± κ°œμ„  (#358)

  • verificationFile ν•„λ“œλ₯Ό nullable둜 λ³€κ²½ν•˜μ—¬ UX κ°œμ„ 
  • as any νƒ€μž… 단언 제거
  • Biome μ„€μ •μ—μ„œ noExplicitAny κ·œμΉ™ ν™œμ„±ν™”

2. μ•„ν‚€ν…μ²˜ λ¬Έμ„œ (#303)

  • ARCHITECTURE.md 생성
  • Clean FSD와 CQRS νŒ¨ν„΄ κ°€μ΄λ“œ
  • λ ˆμ΄μ–΄λ³„ μ—­ν•  및 μ°Έμ‘° κ·œμΉ™ μ •μ˜

3. Safe Area 지원 (#365)

  • iOS Safe Area λŒ€μ‘μ„ μœ„ν•œ viewport-fit μ„€μ •
  • CSS ν™˜κ²½ λ³€μˆ˜λ₯Ό ν†΅ν•œ Safe Area inset 적용

4. μ»΄ν¬λ„ŒνŠΈ ν‘œμ€€ν™” λ¬Έμ„œ (#364)

  • apps/web/COMPONENTS.md 생성
  • μ»΄ν¬λ„ŒνŠΈ νŒ¨ν„΄ 및 μŠ€νƒ€μΌ κ°€μ΄λ“œλΌμΈ
  • AI μΉœν™”μ  κ°œλ°œμ„ μœ„ν•œ λͺ…λͺ… κ·œμΉ™ μ •μ˜

5. 인증 흐름 λ¬Έμ„œν™” (#302)

  • apps/web/AUTHENTICATION.md 생성
  • 둜그인 λ¦¬λ””λ ‰μ…˜ λ©”μ»€λ‹ˆμ¦˜ μ„€λͺ…
  • κΈ°μ‘΄ κ΅¬ν˜„ 확인 및 λ¬Έμ„œν™”

⚠️ 참고사항

  • TypeCheck: @vercel/speed-insights/next λͺ¨λ“ˆ λˆ„λ½ 였λ₯˜λŠ” κΈ°μ‘΄ 이슈이며, 이 PRκ³Ό λ¬΄κ΄€ν•©λ‹ˆλ‹€.
  • λͺ¨λ“  변경사항은 κΈ°μ‘΄ κΈ°λŠ₯에 영ν–₯을 μ£Όμ§€ μ•Šλ„λ‘ μ„€κ³„λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

πŸ“š κ΄€λ ¨ λ¬Έμ„œ

Closes #358
Closes #303
Closes #365
Closes #364
Closes #302

@vercel
Copy link

vercel bot commented Feb 3, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
solid-connect-web-admin Error Error Feb 8, 2026 3:38pm
solid-connection-web Error Error Feb 8, 2026 3:38pm

@coderabbitai
Copy link

coderabbitai bot commented Feb 3, 2026

Walkthrough

  1. μ•„ν‚€ν…μ²˜ λ¬Έμ„œκ°€ μΆ”κ°€λ˜μ—ˆμŠ΅λ‹ˆλ‹€.
  2. 인증 흐름 λ¬Έμ„œκ°€ μΆ”κ°€λ˜μ—ˆμŠ΅λ‹ˆλ‹€.
  3. μ»΄ν¬λ„ŒνŠΈ 섀계 λ¬Έμ„œκ°€ μΆ”κ°€λ˜μ—ˆμŠ΅λ‹ˆλ‹€.
  4. μ—¬λŸ¬ API ν›…κ³Ό API λ©”μ„œλ“œμ˜ optional params νƒ€μž…μ΄ Record<string, any>μ—μ„œ Record<string, unknown>둜 λ³€κ²½λ˜μ—ˆμŠ΅λ‹ˆλ‹€.
  5. λ©˜ν†  지원 폼의 zod μŠ€ν‚€λ§ˆκ°€ λ¦¬νŒ©ν† λ§λ˜μ–΄ verificationFile 검증이 별도 μŠ€ν‚€λ§ˆλ‘œ λΆ„λ¦¬λ˜κ³  폼 νƒ€μž…μ΄ λͺ…μ‹œμ μœΌλ‘œ μ •μ˜λ˜μ—ˆμŠ΅λ‹ˆλ‹€.
  6. iOS μ•ˆμ „ μ˜μ—­ 지원을 μœ„ν•΄ viewportFit: "cover"와 κΈ€λ‘œλ²Œ CSS에 safe-area 인셋 λ³€μˆ˜κ°€ μΆ”κ°€λ˜μ—ˆμŠ΅λ‹ˆλ‹€.
  7. 린트 κ·œμΉ™ suspicious.noExplicitAnyκ°€ error둜 κ°•ν™”λ˜μ—ˆμŠ΅λ‹ˆλ‹€.
  8. μ†Œμ†Œν•œ νƒ€μž… 정리 및 λ¦¬νŒ©ν„°(Refactor)κ°€ μ—¬λŸ¬ μ»΄ν¬λ„ŒνŠΈμ™€ 훅에 μ μš©λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~12 minutes

Suggested reviewers

  • wibaek
  • enunsnv
  • khwww
πŸš₯ Pre-merge checks | βœ… 5
βœ… Passed checks (5 passed)
Check name Status Explanation
Title check βœ… Passed PR 제λͺ©μ΄ λ‹€μ„― 개의 κ΄€λ ¨ 이슈(#365, #364, #358, #303, #302)λ₯Ό λͺ…ν™•νžˆ μ–ΈκΈ‰ν•˜λ©° μ£Όμš” λ³€κ²½ λ‚΄μš©μ„ κ°„κ²°ν•˜κ²Œ μš”μ•½ν•©λ‹ˆλ‹€.
Description check βœ… Passed PR μ„€λͺ…이 μ •μ˜λœ ν…œν”Œλ¦Ώ μš”κ΅¬μ‚¬ν•­μ„ μΆ©μ‘±ν•˜λ©°, κ΄€λ ¨ 이슈, μ£Όμš” 변경사항, 참고사항 등이 μƒμ„Έν•˜κ³  μ²΄κ³„μ μœΌλ‘œ μ •λ¦¬λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.
Linked Issues check βœ… Passed λͺ¨λ“  λ‹€μ„― 개의 μ—°κ²°λœ 이슈(#358, #303, #365, #364, #302)에 λŒ€ν•œ μš”κ΅¬μ‚¬ν•­μ΄ μ½”λ“œ 변경사항을 톡해 μΆ©μ‘±λ˜μ—ˆμŠ΅λ‹ˆλ‹€: νƒ€μž… μ•ˆμ „μ„± κ°œμ„ , μ•„ν‚€ν…μ²˜ λ¬Έμ„œ μž‘μ„±, Safe Area 지원, μ»΄ν¬λ„ŒνŠΈ 섀계 μ‹œμŠ€ν…œ λ¬Έμ„œν™”, 인증 흐름 λ¬Έμ„œν™”.
Out of Scope Changes check βœ… Passed λͺ¨λ“  변경사항이 λ‹€μ„― 개의 μ—°κ²°λœ 이슈 λ²”μœ„ 내에 있으며, 좔가적인 λ²”μœ„ μ™Έ 변경사항이 λ°œκ²¬λ˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€.
Docstring Coverage βœ… Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

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

✨ 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 fix/issues-365-364-358-303-302

No actionable comments were generated in the recent review. πŸŽ‰

🧹 Recent nitpick comments
apps/web/src/app/university/application/ScoreSheet.tsx (1)

42-48: 주석 처리된 μ½”λ“œ 정리λ₯Ό κ³ λ €ν•΄ λ³΄μ„Έμš”.

  1. μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” μ½”λ“œ 블둝
    • applicant.isMine κ΄€λ ¨ 둜직이 주석 처리된 μ±„λ‘œ 남아 μžˆμŠ΅λ‹ˆλ‹€.
    • 이번 PR λ²”μœ„λŠ” μ•„λ‹ˆμ§€λ§Œ, μΆ”ν›„ μ •λ¦¬ν•˜λ©΄ μ½”λ“œ 가독성에 도움이 λ©λ‹ˆλ‹€. ν•„μš”ν•˜λ‹€λ©΄ git historyμ—μ„œ 볡원할 수 μžˆμœΌλ‹ˆ μ‚­μ œν•΄λ„ λ¬΄λ°©ν•©λ‹ˆλ‹€.
apps/web/src/components/ui/FloatingUpBtn/hooks/useFloatingUpHandler.ts (1)

14-19: handleClick도 useCallback으둜 감싸면 일관성이 λ†’μ•„μ§‘λ‹ˆλ‹€.

handleClick은 μ™ΈλΆ€ μ˜μ‘΄μ„±μ΄ μ—†μ–΄ μ‹€μ§ˆμ  μ„±λŠ₯ μ°¨μ΄λŠ” λ―Έλ―Έν•˜μ§€λ§Œ, 같은 ν›… λ‚΄μ—μ„œ handleScroll만 λ©”λͺ¨μ΄μ œμ΄μ…˜ν•˜κ³  handleClick은 κ·ΈλŒ€λ‘œ 두면 μŠ€νƒ€μΌ λΆˆμΌμΉ˜κ°€ 생길 수 μžˆμŠ΅λ‹ˆλ‹€.

♻️ μ œμ•ˆ diff
-  const handleClick = () => {
+  const handleClick = useCallback(() => {
     window.scrollTo({
       top: 0,
       behavior: "smooth",
     });
-  };
+  }, []);
apps/web/src/app/university/application/ScorePageContent.tsx (1)

139-142: 2. as unknown as React.FormEvent β€” νƒ€μž… μ•ˆμ „μ„± PR 취지에 맞게 κ°œμ„  μ—¬μ§€κ°€ μžˆμŠ΅λ‹ˆλ‹€

이 PR의 λͺ©μ μ΄ as any μ œκ±°μ™€ νƒ€μž… μ•ˆμ „μ„± 강화인 만큼, μ—¬κΈ°μ„œ μ‚¬μš©λ˜λŠ” as unknown as React.FormEvent 이쀑 단언도 같은 λ§₯락의 νƒ€μž… μš°νšŒμž…λ‹ˆλ‹€. new Event("submit")λŠ” μ‹€μ œ React.FormEventκ°€ μ•„λ‹ˆλ―€λ‘œ preventDefault() μ™Έμ˜ 속성에 μ ‘κ·Όν•˜λ©΄ λŸ°νƒ€μž„ 였λ₯˜κ°€ λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€.

검색 ν‚€μ›Œλ“œλ₯Ό 직접 인자둜 λ°›λŠ” λ°©μ‹μœΌλ‘œ λ¦¬νŒ©ν„°ν•˜λ©΄ κ°€μ§œ 이벀트 생성 μžμ²΄κ°€ λΆˆν•„μš”ν•΄μ§‘λ‹ˆλ‹€.

♻️ μ œμ•ˆ: 이벀트 생성 없이 ν‚€μ›Œλ“œλ₯Ό 직접 전달
- const handleSearch = (event: React.FormEvent) => {
-   event.preventDefault();
-   const keyword = searchRef.current?.value || "";
-   setRegionFilter("");
-   setSearchValue(keyword);
-   setSearchActive(false);
- };
+ const handleSearch = (eventOrKeyword?: React.FormEvent | string) => {
+   if (typeof eventOrKeyword === "object") {
+     eventOrKeyword.preventDefault();
+   }
+   const keyword =
+     typeof eventOrKeyword === "string" ? eventOrKeyword : (searchRef.current?.value || "");
+   setRegionFilter("");
+   setSearchValue(keyword);
+   setSearchActive(false);
+ };

그러면 λ²„νŠΌ 클릭 ν•Έλ“€λŸ¬λ„ κ°„κ²°ν•΄μ§‘λ‹ˆλ‹€:

  onClick={() => {
    handleSearchField(word);
-   handleSearch(new Event("submit") as unknown as React.FormEvent);
+   handleSearch(word);
  }}
apps/web/src/app/my/apply-mentor/_components/UniversityScreen/index.tsx (1)

80-85: null as File | null νƒ€μž… 단언이 λΆˆν•„μš”ν•˜κ±°λ‚˜, λ‹€λ₯Έ κ³³κ³Ό 일관성이 λ§žμ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

  1. Line 62, 72μ—μ„œλŠ” setValue("verificationFile", null)둜 단언 없이 μ‚¬μš©ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.
  2. Line 81μ—μ„œλ§Œ null as File | null둜 νƒ€μž… 단언을 ν•˜κ³  μžˆμ–΄ 일관성이 κΉ¨μ§‘λ‹ˆλ‹€.

μŠ€ν‚€λ§ˆμ—μ„œ verificationFile이 nullable이라면 μ„Έ κ³³ λͺ¨λ‘ null만으둜 μΆ©λΆ„ν•©λ‹ˆλ‹€. as any μ œκ±°λΌλŠ” PR λͺ©ν‘œμ— 맞게, λΆˆν•„μš”ν•œ 단언도 ν•¨κ»˜ μ •λ¦¬ν•˜λ©΄ 더 κΉ”λ”ν•΄μ§ˆ 것 κ°™μŠ΅λ‹ˆλ‹€.

♻️ μˆ˜μ • μ œμ•ˆ
 const handleRemoveFile = () => {
-    setValue("verificationFile", null as File | null);
+    setValue("verificationFile", null);
     if (fileInputRef.current) {
apps/web/src/apis/community/getBoard.ts (1)

9-9: boardCode as string μΊμŠ€νŒ…μ΄ λ‚¨μ•„μžˆλ„€μš”.

이번 PR λ²”μœ„λŠ” μ•„λ‹ˆμ§€λ§Œ, boardCodeκ°€ string | numberλ₯Ό λ°›μœΌλ©΄μ„œ Line 9μ—μ„œ as string으둜 μΊμŠ€νŒ…ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. ν–₯ν›„ API μ‹œκ·Έλ‹ˆμ²˜λ₯Ό string으둜 ν†΅μΌν•˜κ±°λ‚˜, String(boardCode)둜 λͺ…μ‹œμ  λ³€ν™˜ν•˜λŠ” 것이 더 μ•ˆμ „ν•  수 μžˆμŠ΅λ‹ˆλ‹€.


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

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
apps/web/src/app/my/apply-mentor/_components/UniversityScreen/index.tsx (1)

80-85: ⚠️ Potential issue | 🟑 Minor

as any μΊμŠ€νŒ…μ΄ λ‚¨μ•„μžˆμŠ΅λ‹ˆλ‹€.

  1. 문제점

    • Line 81: setValue("verificationFile", null as any)에 μ—¬μ „νžˆ as anyκ°€ λ‚¨μ•„μžˆμŠ΅λ‹ˆλ‹€.
    • biome.jsonμ—μ„œ noExplicitAny: "error"둜 μ„€μ •λ˜μ–΄ 린트 였λ₯˜κ°€ λ°œμƒν•©λ‹ˆλ‹€.
  2. ν•΄κ²° 방법

    • Lines 62, 72와 λ™μΌν•˜κ²Œ as anyλ₯Ό μ œκ±°ν•˜λ©΄ λ©λ‹ˆλ‹€.
πŸ”§ μˆ˜μ • μ œμ•ˆ
 const handleRemoveFile = () => {
-  setValue("verificationFile", null as any);
+  setValue("verificationFile", null);
   if (fileInputRef.current) {
     fileInputRef.current.value = "";
   }
 };
πŸ€– Fix all issues with AI agents
In `@apps/web/src/styles/globals.css`:
- Around line 22-30: Body-level safe-area padding won't affect fixed-position
elements because they use the viewport, so update each bottom-fixed component
(BottomNavigation, UniversityStep, UniversityScreen) to include bottom safe-area
padding; add a padding-bottom using env(safe-area-inset-bottom) or the CSS
variable (e.g., className including pb-[env(safe-area-inset-bottom)] or inline
style paddingBottom: 'env(safe-area-inset-bottom)') so the fixed bottom-0 /
bottom-14 elements account for the iOS home indicator and safe area.
🧹 Nitpick comments (2)
apps/web/COMPONENTS.md (1)

256-272: μ½”λ“œ 블둝에 μ–Έμ–΄ μ§€μ •μžκ°€ λˆ„λ½λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

  1. λ§ˆν¬λ‹€μš΄ 린트 κ²½κ³ 
    • 정적 뢄석 도ꡬ(markdownlint)κ°€ Line 256의 νŽœμŠ€λ“œ μ½”λ“œ 블둝에 μ–Έμ–΄κ°€ μ§€μ •λ˜μ§€ μ•Šμ•˜λ‹€κ³  κ²½κ³ ν•©λ‹ˆλ‹€.
    • 디렉토리 κ΅¬μ‘°μ΄λ―€λ‘œ text λ˜λŠ” plaintextλ₯Ό μΆ”κ°€ν•˜λ©΄ κ²½κ³ κ°€ ν•΄κ²°λ©λ‹ˆλ‹€.
πŸ”§ μ–Έμ–΄ μ§€μ •μž μΆ”κ°€ μ œμ•ˆ
-```
+```text
 components/
 β”œβ”€β”€ ui/                    # Generic UI components
ARCHITECTURE.md (1)

17-17: Markdown μ½”λ“œ 블둝에 μ–Έμ–΄ μ§€μ • μΆ”κ°€ ꢌμž₯

정적 뢄석 λ„κ΅¬μ—μ„œ μ½”λ“œ 블둝에 μ–Έμ–΄ μ§€μ •μžκ°€ μ—†λ‹€κ³  ν‘œμ‹œν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. κ΅¬μ‘°λ„λ‚˜ 디렉토리 트리의 경우 text μ§€μ •μžλ₯Ό μΆ”κ°€ν•˜λ©΄ 일관성이 ν–₯μƒλ©λ‹ˆλ‹€:

πŸ“ μ œμ•ˆν•˜λŠ” μˆ˜μ • 사항

Line 17의 경우:

-```
+```text
 src/
 β”œβ”€β”€ app/                  # [Framework Layer] λΌμš°νŒ…, 메타데이터, λ ˆμ΄μ•„μ›ƒ (Shell)

Line 115의 경우:

-```
+```text
 App β†’ Pages β†’ Widgets β†’ Features β†’ Entities β†’ Shared

Line 215의 경우:

-```
+```text
 entities/post/

Also applies to: 115-115, 215-215

Comment on lines 22 to 30
body {
@apply m-0 bg-white;
font-family: system-ui, -apple-system, sans-serif;
/* Apply safe area padding for iOS devices */
padding-top: var(--safe-area-inset-top);
padding-right: var(--safe-area-inset-right);
padding-bottom: var(--safe-area-inset-bottom);
padding-left: var(--safe-area-inset-left);
}
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

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# κ³ μ • μœ„μΉ˜ μ§€μ • μš”μ†Œ 검색
echo "=== Fixed positioned elements ==="
rg -n "fixed" --type=tsx --type=ts apps/web/src | head -30

echo ""
echo "=== UniversityScreen component search ==="
find apps/web/src -type f \( -name "*University*" -o -name "*university*" \)

echo ""
echo "=== Search for bottom-0 or similar bottom positioning ==="
rg -n "bottom-0|bottom-\|safe-area" --type=tsx --type=ts apps/web/src | head -40

Repository: solid-connection/solid-connect-web

Length of output: 972


🏁 Script executed:

#!/bin/bash
# κ³ μ • μœ„μΉ˜ μ§€μ • μš”μ†Œ 검색 (μˆ˜μ •λœ 버전)
echo "=== Fixed positioning search ==="
rg "fixed|position.*fixed" apps/web/src --glob="*.tsx" --glob="*.ts" -n

echo ""
echo "=== UniversityStep component ==="
cat -n apps/web/src/app/university/application/apply/UniversityStep.tsx

echo ""
echo "=== UniversityBtns component ==="
cat -n apps/web/src/app/university/[id]/_ui/UniversityDetail/_ui/UniversityBtns.tsx

echo ""
echo "=== Safe-area CSS variables usage ==="
rg "safe-area|inset-top|inset-bottom" apps/web/src --glob="*.tsx" --glob="*.ts" --glob="*.css" -n

Repository: solid-connection/solid-connect-web

Length of output: 17137


🏁 Script executed:

#!/bin/bash
# BottomNavigation 전체 λ‚΄μš© 확인
cat -n apps/web/src/components/layout/GlobalLayout/ui/BottomNavigation/index.tsx

echo ""
echo "=== Check for safe-area usage in BottomNavigation ==="
rg "safe-area|pb-|padding-bottom" apps/web/src/components/layout/GlobalLayout/ui/BottomNavigation/ -A 2

Repository: solid-connection/solid-connect-web

Length of output: 2721


κ³ μ • μœ„μΉ˜ μ§€μ • μš”μ†Œλ“€μ΄ μ•ˆμ „ μ˜μ—­μ„ 적절히 μ²˜λ¦¬ν•˜μ§€ λͺ»ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

ν˜„μž¬ κ΅¬ν˜„μ—μ„œ body μš”μ†ŒλŠ” safe-area-inset-* λ³€μˆ˜λ₯Ό 톡해 μ•ˆμ „ μ˜μ—­μ„ μ²˜λ¦¬ν•˜κ³  μžˆμœΌλ‚˜, λ‹€μŒκ³Ό 같은 λ¬Έμ œκ°€ μžˆμŠ΅λ‹ˆλ‹€:

  1. κ³ μ • μœ„μΉ˜ μš”μ†ŒλŠ” body νŒ¨λ”©μ„ 상속받지 μ•ŠμŠ΅λ‹ˆλ‹€

    • fixed 포지셔닝은 뷰포트 κΈ°μ€€μœΌλ‘œ λ™μž‘ν•˜λ―€λ‘œ body의 νŒ¨λ”©μ΄ μ μš©λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€
  2. ν™•μΈλœ 영ν–₯을 λ°›λŠ” μš”μ†Œλ“€

    • BottomNavigation (라인 30): fixed bottom-0 - iOS ν™ˆ 인디케이터에 κ°€λ €μ§‘λ‹ˆλ‹€
    • UniversityStep (라인 108): fixed bottom-14 - μ•ˆμ „ μ˜μ—­ κ³ λ € ν•„μš”
    • UniversityScreen (라인 215): fixed bottom-0 pb-14 - μ•ˆμ „ μ˜μ—­ 미적용
  3. ꢌμž₯ 쑰치

    • ν•˜λ‹¨ κ³ μ • μš”μ†Œλ“€μ— pb-[env(safe-area-inset-bottom)] λ˜λŠ” var(--safe-area-inset-bottom) νŒ¨λ”©μ„ μΆ”κ°€ν•˜μ„Έμš”
    • 예: <div className="fixed bottom-0 pb-[env(safe-area-inset-bottom)]">
πŸ€– Prompt for AI Agents
In `@apps/web/src/styles/globals.css` around lines 22 - 30, Body-level safe-area
padding won't affect fixed-position elements because they use the viewport, so
update each bottom-fixed component (BottomNavigation, UniversityStep,
UniversityScreen) to include bottom safe-area padding; add a padding-bottom
using env(safe-area-inset-bottom) or the CSS variable (e.g., className including
pb-[env(safe-area-inset-bottom)] or inline style paddingBottom:
'env(safe-area-inset-bottom)') so the fixed bottom-0 / bottom-14 elements
account for the iOS home indicator and safe area.

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

Labels

Projects

None yet

1 participant