Skip to content

feat: 공지 배너 + 풀투리프레시 + UX 개선#17

Merged
bbbang105 merged 14 commits intodevfrom
feat/notice-banner-ptr-ux-improvements
Mar 8, 2026
Merged

feat: 공지 배너 + 풀투리프레시 + UX 개선#17
bbbang105 merged 14 commits intodevfrom
feat/notice-banner-ptr-ux-improvements

Conversation

@bbbang105
Copy link
Copy Markdown
Owner

@bbbang105 bbbang105 commented Mar 8, 2026

Summary

  • 랜딩 페이지 인증 리다이렉트, 글로벌 공지 배너, Pull-to-refresh, 하단 탭 바/사이드바/헤더 UX 통일
  • 게시판 API 보안 강화 + Tiptap 에디터 확장 + 한글 IME 자소분리 수정

Changes

파일 변경 내용
packages/shared/src/db/schema.ts isNoticeBanner boolean 컬럼 추가
packages/web/src/app/page.tsx 인증 사용자 → /dashboard 리다이렉트
packages/web/src/app/api/notice-banner/route.ts NEW 공지 배너 조회 API (no-store 캐시)
packages/web/src/components/layout/notice-banner.tsx NEW 글로벌 공지 배너 (제목+내용 미리보기, 접기/닫기)
packages/web/src/components/layout/pull-to-refresh.tsx NEW Pull-to-refresh 래퍼 컴포넌트
packages/web/src/hooks/use-pull-to-refresh.ts NEW 터치 제스처 훅 (window.location.reload())
packages/web/src/components/layout/bottom-nav.tsx 사용자 5개 메뉴, 관리자 모드 미표시
packages/web/src/components/layout/header.tsx 관리자 모드 로고 라우팅 + 모드 전환 드롭다운
packages/web/src/components/layout/sidebar.tsx 하단 모드 전환 링크 제거 (프로필 드롭다운 전용)
packages/web/src/components/layout/main-layout.tsx NoticeBanner(관리자 미표시) + PullToRefresh 통합
packages/web/src/components/board/tiptap-editor.tsx H1-H3, 구분선, 본문 버튼 + 한글 IME 자소분리 수정
packages/web/src/app/api/board/route.ts 트랜잭션, 카테고리 검증, 배너 토글
packages/web/src/app/api/board/[id]/route.ts 트랜잭션, 카테고리 검증, 관리자 권한 강화
packages/web/src/app/(user)/board/write/page.tsx 배너 설정 UI 추가
packages/web/src/app/(user)/board/[id]/edit/page.tsx 배너 설정 UI 추가
packages/web/proxy.ts isAdminDiscordId() await 누락 수정
packages/web/src/lib/board-config.ts isValidCategory() 서버사이드 검증 함수
packages/web/src/app/(admin)/admin/page.tsx Quick Actions 링크 섹션 제거
packages/web/src/app/(admin)/admin/members/page.tsx 참가자 관리 → 멤버 관리 워딩 변경
packages/web/src/app/(admin)/admin/scores/page.tsx 점수 관리 Star 아이콘 제거
CLAUDE.md, docs/* 문서 최신화

Design Decisions

결정 이유
배너 no-store 캐시 새 공지 등록 시 즉시 반영 (max-age=60은 지연 발생)
배너 3단계 상태 (open/collapsed/closed) 접기 시 제목만 표시, 닫기 시 완전 숨김
PTR window.location.reload() router.refresh()는 클라이언트 데이터 갱신 불가
관리자 모드 하단 탭 바 미표시 사이드바로 충분, 중복 제거
사이드바 모드 전환 제거 프로필 드롭다운으로 통일
Tiptap compositionstart/end 한글 IME 조합 중 onUpdate 차단으로 자소분리 방지
배너 clear+set 트랜잭션 TOCTOU 레이스 컨디션 방지
카테고리 allowlist 서버 검증 임의 문자열 injection 방지

Test Plan

  • 비로그인 → / 랜딩 페이지 표시
  • 로그인 → / 접근 시 /dashboard로 리다이렉트
  • 관리자: 공지글 작성 시 "상단 배너에 표시" 토글 동작
  • 공지 배너 접기 → 제목만 표시, 닫기 → 완전 숨김
  • 새 공지 배너 설정 시 기존 배너 자동 해제 + 즉시 반영
  • 관리자 페이지에서 공지 배너 미표시
  • 모바일: Pull-to-refresh 제스처 → 페이지 새로고침 (location.reload)
  • 모바일: 사용자 모드 하단 탭 5개, 관리자 모드 탭 바 미표시
  • 사이드바 모드 전환 링크 없음, 프로필 드롭다운에서만 전환
  • Tiptap: H1-H3 토글, 구분선 삽입, 본문 변환 동작
  • Tiptap: 한글 입력 시 자소분리 없이 정상 조합
  • 비관리자: 공지 카테고리/배너 설정 시 403
  • 네비게이션: "포스트" 워딩, "멤버 관리" 타이틀

🤖 Generated with Claude Code

- 랜딩 페이지 인증 리다이렉트 (로그인 시 /dashboard 자동 이동)
- 글로벌 공지 배너 (관리자 설정, 접기/닫기 localStorage 유지)
- Pull-to-refresh (커스텀 터치 제스처, PWA 최적화)
- 하단 탭 바 사용자/관리자 모드 분리
- 사이드바/헤더 관리자 토글 텍스트 통일
- 게시판 API 보안 강화 (트랜잭션, 카테고리 검증, 관리자 권한 체크)
- proxy.ts 관리자 인증 await 누락 수정
- 문서 최신화 (CLAUDE.md, 스키마, 패턴, 아키텍처)

Co-Authored-By: Claude <noreply@anthropic.com>
@bbbang105 bbbang105 requested a review from choihooo as a code owner March 8, 2026 07:35
@vercel
Copy link
Copy Markdown

vercel bot commented Mar 8, 2026

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

Project Deployment Actions Updated (UTC)
study-admin-web Ready Ready Preview, Comment Mar 8, 2026 8:09am

@bbbang105 bbbang105 added the 🚀 feat 새로운 기능 추가 / 일부 코드 추가 / 일부 코드 수정 (리팩토링과 구분) / 디자인 요소 수정 label Mar 8, 2026
프로필 드롭다운에서만 전환 가능하도록 통일.
Separator, 토글 링크 제거. 접기 버튼만 유지.

Co-Authored-By: Claude <noreply@anthropic.com>
관리자 페이지에서는 모바일 하단 탭 바를 표시하지 않음.
사용자 모드 5개 메뉴만 유지.

Co-Authored-By: Claude <noreply@anthropic.com>
@bbbang105 bbbang105 added the 🚨 fix 버그 수정 / 에러 해결 label Mar 8, 2026
bbbang105 and others added 2 commits March 8, 2026 16:44
사이드바에서 동일 메뉴 접근 가능하므로 중복 제거.

Co-Authored-By: Claude <noreply@anthropic.com>
- 글 목록 → 포스트 (사이드바, 하단 탭)
- 관리자 페이지에서 공지 배너 미표시
- 참가자 관리 → 멤버 관리 (관리자 페이지 타이틀)
- 점수 관리 페이지 Star 아이콘 제거

Co-Authored-By: Claude <noreply@anthropic.com>
- API에서 contentText 추가 반환
- 배너에 제목 + 내용 80자 미리보기 표시
- 3단계 상태(open/collapsed/closed) → 2단계(open/closed)로 단순화
- X 버튼으로 닫으면 완전히 숨김 (새 공지 시 자동 리셋)

Co-Authored-By: Claude <noreply@anthropic.com>
bbbang105 and others added 3 commits March 8, 2026 16:55
- open: 제목 + 내용 미리보기
- collapsed: 제목만 (컴팩트)
- closed: 완전 숨김 (X 버튼)

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Claude <noreply@anthropic.com>
- 본문(T): 일반 텍스트로 변환
- H1, H2, H3: 제목 토글
- 구분선(―): 수평선 삽입

Co-Authored-By: Claude <noreply@anthropic.com>
compositionstart/end 이벤트로 IME 조합 중 onUpdate 호출을 차단.
조합 완료 후 rAF로 deferred update 실행.

Co-Authored-By: Claude <noreply@anthropic.com>
max-age=60 캐시가 새 공지 반영을 지연시키는 문제 수정.
no-store로 변경하여 항상 최신 데이터 반환.

Co-Authored-By: Claude <noreply@anthropic.com>
router.refresh()는 서버 컴포넌트만 리페치하므로
클라이언트 데이터 갱신이 안 되는 문제 수정.

Co-Authored-By: Claude <noreply@anthropic.com>
- bottom-nav: 관리자 모드 미표시 반영
- 사이드바: 모드 전환 프로필 드롭다운 전용
- 공지 배너: 제목+내용 미리보기, no-store 캐시, 관리자 미표시
- PTR: window.location.reload() 반영
- Tiptap: H1-H3/구분선 툴바, 한글 IME 패턴 추가

Co-Authored-By: Claude <noreply@anthropic.com>
@bbbang105 bbbang105 added the 📄 docs 문서 추가 및 수정 label Mar 8, 2026
@bbbang105 bbbang105 merged commit cb2ab18 into dev Mar 8, 2026
7 checks passed
@bbbang105 bbbang105 deleted the feat/notice-banner-ptr-ux-improvements branch March 8, 2026 08:15
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

📄 docs 문서 추가 및 수정 🚀 feat 새로운 기능 추가 / 일부 코드 추가 / 일부 코드 수정 (리팩토링과 구분) / 디자인 요소 수정 🚨 fix 버그 수정 / 에러 해결 🔄 refactor 코드 리팩토링

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant