Skip to content

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

Merged
manNomi merged 7 commits intomainfrom
fix/issues-365-364-358-303-302
Feb 14, 2026
Merged

πŸ› 이슈 #365, #364, #358, #303, #302 μˆ˜μ •#414
manNomi merged 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.

@manNomi manNomi merged commit 2f492c4 into main Feb 14, 2026
7 of 10 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

1 participant