Skip to content

release: v3.0.0 (develop → main)#78

Merged
jwchoi-kr merged 77 commits into
mainfrom
develop
Jun 29, 2026
Merged

release: v3.0.0 (develop → main)#78
jwchoi-kr merged 77 commits into
mainfrom
develop

Conversation

@jwchoi-kr

Copy link
Copy Markdown
Collaborator

릴리스 개요

develop에 누적된 변경사항을 main으로 반영하는 v3.0.0 릴리스 PR입니다. (origin/main..origin/develop 기준 약 60개 PR)

주요 변경사항

🔍 검색

🏷 동아리

🎨 화면 / 디자인 시스템

📢 공지 / 약관

🔐 인증 / API

🛠 인프라 / 빌드

테스트

  • 각 변경사항은 개별 PR에서 리뷰·검증 완료 후 develop에 머지됨
  • CI(workflows) 통과 상태에서 통합

참고

  • main과 develop이 과거 머지 커밋으로 인해 diverged 상태(merge-base가 오래된 d064ae1)라, 커밋 목록이 초기 커밋부터 길게 표시됩니다. diff 자체는 정상입니다.

cirtuare and others added 30 commits March 22, 2026 13:20
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add onClose prop and dim area touch-to-close behavior
- Add onRequestClose for Android back button support
- Change description color from FYI_GRAY_600 to FYI_BLACK
- Remove unnecessary type assertions (as ViewStyle/TextStyle)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* feat: add Button component

* refactor: centralize color definitions
* feat: add Button component

* refactor: centralize color definitions

* feat: add AlertModal component

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* refactor: improve AlertModal with dim close, style fixes

- Add onClose prop and dim area touch-to-close behavior
- Add onRequestClose for Android back button support
- Change description color from FYI_GRAY_600 to FYI_BLACK
- Remove unnecessary type assertions (as ViewStyle/TextStyle)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: kimnamheeee <nami200284@snu.ac.kr>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
* chore: update .gitignore

* feat: bind kakao app key

* chore: update github workflow to use github env

* feat: add kakao configuration for iOS
- remove disabled light variant
- darken background color when pressed (primary)
* refactor: simplify tab navigator icon and screen options setup

* fix: correct spelling of RecommendClubCard component

* refactor: remove unnecessary 'display: flex' styles from HomeScreen components

* refactor: replace inline styles with StyleSheet.create in HomeScreen

* feat: prevent whitespace-only query and improve keyboard handling

* refactor: replace React import with specific hooks in home components

* refactor: migrate useQuery calls and rename function
* refactor: move common modules to shared

* refactor: remove unused constants.ts

* refactor: move ENV.ts to config

* refactor: move localStorage.ts to constants

* refactor: flatten shared component modules

* refactor: flatten tab modules

* refactor: rearrange screens to each feature

* refactor: replace import path with @/ alias and cleanup relative paths

* fix: remove unnecessary whiteSpace style

* docs: update README.md and remove unused markdown file
cloNoey and others added 29 commits May 13, 2026 13:41
* 검색페이지 생성 - 탭2 에서 진입, 검색바 컴포넌트 구현, 검색결과페이지 연결

* add max_length indicator

* fix max_length

* fix searchBar
* docs: add AGENTS.md for project commands and structure

* docs: update AGENTS.md with editing guidelines for before and after changes
* docs: add AGENTS.md for project commands and structure

* feat: add skeleton screen to ClubList

* refactor: update cache settings for queryClient and remove staleTime from useCategoryClubs

* fix: use isLoading instead of inFetching and set staleTime to infinity
* style: refactor toast component styling and visibility time

* feat: add login bottom sheet trigger on Saved tab press for unauthenticated users

* feat: apply height scaling and handle context error to loginBottomSheetContext

* feat: apply scaling and add error handling to LoginView

* feat: add tab navigation after login

* feat: add loading state and indicator after login

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix: match params

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
* style: refactor toast component styling and visibility time

* feat: add login bottom sheet trigger on Saved tab press for unauthenticated users

* feat: apply height scaling and handle context error to loginBottomSheetContext

* feat: apply scaling and add error handling to LoginView

* feat: add tab navigation after login

* feat: add loading state and disable buttons during login process

* refactor: remove unused styles from MyPageScreen

* refactor: cache auth token in memory to avoid repeated AsyncStorage I/O

* refactor: remove unnecessary URLSearchParams from club.ts

* fix: match params
* 임시 커밋

* 검색 결과 페이지를 검색 페이지로 통합

- SearchResultClubListScreen 제거, SearchScreen 한 화면에서 검색바 고정 + 결과 영역 토글
- 탭/헤더 클릭 시 navigation.reset + 검색 상태 초기화 (animation: 'none')
- SearchInput unified (SearchResultClubList variant 제거), autoCapitalize/autoCorrect off
- SearchResultClubList 하위 컴포넌트(ClubListItem, SearchFilterBar, SearchResultList, TypoCorrectionNotice)를 features/search/components로 이동
- SCREEN_TYPE.SEARCH_RESULT_CLUB_LIST 및 search_result_screen 애널리틱스 제거

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* 최근 검색어 섹션 구현 (UI only)

- RecentSearches 컴포넌트 추가: 헤더("최근 검색어") + "검색내역 지우기" 버튼 + chip wrap / 빈 상태 메시지("최근 검색한 내역이 없어요. 새로운 동아리를 탐색해보세요!")
- SearchScreen의 미제출 상태 placeholder에 통합, recentSearches state 및 select/clear 핸들러 연결

TODO: 현재는 mock data로 채워둔 상태. 백엔드 검색 관련 PR 머지된 후 API 응답으로 교체 필요. 이 PR(검색 페이지)이 dev에 머지되기 전에 반드시 수정되어야 함.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* delete mock data

* recent-searches:  fontLineHeight and padding setting

* delete mock data

* refactor: features/search를 features/club 하위로 통합

검색 화면이 동아리 도메인에 속하고 SearchBar·SearchFilterBar가
카테고리 화면에서도 재사용될 예정이라 features/club 하위로 이동.

- SearchInput을 SearchBar로 리네임
- ClubListItem/SearchResultList 제거, ClubList/ClubCard로 일원화
- ClubCard '리뷰 없어요' 분기는 기존 리뷰 뱃지를 재사용
- ClubList에 pageSize prop 추가 (백엔드 페이지네이션 도입 전 임시방편)
- 검색 결과 카드 리뷰 뱃지 폴백 색을 보라 톤(BUTTON_SELECTED/POINTCOLOR_10)으로 변경
- SearchScreen에 스켈레톤(isFetching) 적용, 미사용 ♥ 토글 로직 제거

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* style: 검색 페이지 헤더 패딩 조정

헤더 컨테이너 paddingTop(vs(32)) 제거, 헤더 텍스트 paddingVertical(vs(10)) 설정으로 여백 일원화.

* refactor: ClubList 클라이언트 페이지네이션 로직 제거

---------

Co-authored-by: dennis0405 <dennis0405@snu.ac.kr>
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* style: remove unused style

* style: apply color, typography constats

* feat: add SearchFilterBar component

* fix: apply newline

* feat: add search filter overlay

* feat: add filtering logic to search api

* feat: match updated query schema

* feat: match updated query schema

* refactor: centralize filter states

* style: add box-shadow

* fix: enable multiple selection for searchfilterbar

* feat: only reset filters on overlay

* feat: update searchfilterbar component and add searchfilteroverlay

* fix: update api schema

* fix: update search filter overlay label

* feat: enhance SearchScreen with focus effect to manage filter overlay visibility

* style: simplify room and fee options in SearchFilterOverlay component

* fix: hide filter overlay when submitting search query in SearchScreen

* chore: remove unused screen
* feat: add sharing component

* Fixed sharing link

* Android Intent Filter Changes

* Link Structure Change

* ios settings change

* ios universal links logic added

* chore: add associated domains

* fix: url duplicate

* Refactor/home screen (#23)

* refactor: simplify tab navigator icon and screen options setup

* fix: correct spelling of RecommendClubCard component

* refactor: remove unnecessary 'display: flex' styles from HomeScreen components

* refactor: replace inline styles with StyleSheet.create in HomeScreen

* feat: prevent whitespace-only query and improve keyboard handling

* refactor: replace React import with specific hooks in home components

* refactor: migrate useQuery calls and rename function

* Refactor/overall structure (#24)

* refactor: move common modules to shared

* refactor: remove unused constants.ts

* refactor: move ENV.ts to config

* refactor: move localStorage.ts to constants

* refactor: flatten shared component modules

* refactor: flatten tab modules

* refactor: rearrange screens to each feature

* refactor: replace import path with @/ alias and cleanup relative paths

* fix: remove unnecessary whiteSpace style

* docs: update README.md and remove unused markdown file

* fix: iOS 인증 재구성

* fix: apple login error in simulators

* ios xcode settings change

* app.tsx hometab change

* Typography, layout scaling util 구현 (#34)

* feat: add scale utility for responsive sizing

* feat: add typography constants

* feat: apply typography and layout scaling for club components

* feat: add font files and add font weight mapping

* 홈 화면 리뉴얼 (#35)

* refactor: rename RecommendedClubCard to ClubPreviewCard and move to shared directory

* refactor: rename and change directory of home screen components

* feat: add new category icons and update Category type structure

* feat: implement CategoryCard and CategorySection component

* feat: refactor home screen layout and implement LatestClubsSection component

* fix: reset scroll when leave home screen

* TabBar 및 저장한 동아리 탭 디자인 반영 (#37)

* feat: add new tab icons and remove outdated image assets

* feat: remove type assertion of router params and adjust navigation prop type

* feat: add SavedTab component and apply new tab bar design

* feat: apply new design to SavedClubListScreen and move to feature directory

* feat: update background color to BACKGROUND_MAIN in Header and ClubListScreen

* fix: change snu icon directory

* 짜잘한 디자인 수정 및 리팩토링 (#38)

* design: remove white background and refactor ClubList header component

* design: replace tab bar icon to png

* design: remove LinearGradient from ClubListScreen

* design: update ClubCard styles and add new typography constant

* design: add empty placeholder text to ClubList component and change image

* chore: remove unused image assets

* refactor: separate category types to constants/ and update colors

* refactor: move screen.ts to constants/

* design: update ClubPreviewCard styles and add variant

* design: add border radius to ClubCard image

* design: adjust shadow of CategorySection styles

* design:  update HomeScreen header logo and adjust margin

* style: remove variant and add box shadow to club preview card (#39)

* 일반 공지 get api 연결 및 모달 ui 생성 (#32)

* feat: add GET announcement, term functions

* feat: integrate announcement and term services into App component

* feat: add announcement and term services to ServiceContext

* feat: add announcement modal ui and actions

* fix: update missing colors

* style: update dim background blur

* refactor: apply typography class and scaling utils

* refactor: replace announcement query options with a custom hook and remove unused utility file

* 일반 공지 dismiss api 연결 (#43)

* design: add background color for shadow of ClubPreviewCard on Android (#44)

* fix: add tabbar inset (#46)

* iOS 빌드 시 env 파일 생성되는 오류 수정 (#47)

* chore: remove blurhash library from iOS setup

* fix: remove auto-generated .env and fix Local scheme quote bug

* husky와 lint-staged를 이용한 pre-commit, pre-push 훅 추가 (#48)

* chore: add husky pre-commit and pre-push hooks with lint-staged and TypeScript checks

* style: apply prettier formatting across the codebase

* 검색페이지 생성(하단탭, 검색결과페이지 연결), 검색바 컴포넌트 구현 (#45)

* 검색페이지 생성 - 탭2 에서 진입, 검색바 컴포넌트 구현, 검색결과페이지 연결

* add max_length indicator

* fix max_length

* fix searchBar

* min duration toggle 컴포넌트 구현 (#40)

* AI agent를 위한 md 파일 생성 (#49)

* docs: add AGENTS.md for project commands and structure

* docs: update AGENTS.md with editing guidelines for before and after changes

* ClubList에 동아리 목록 로딩 시 보여주는 Skeleton screen 구현 및 캐싱 수정 (#50)

* docs: add AGENTS.md for project commands and structure

* feat: add skeleton screen to ClubList

* refactor: update cache settings for queryClient and remove staleTime from useCategoryClubs

* fix: use isLoading instead of inFetching and set staleTime to infinity

* Login Bottom Sheet 개선 및 Toast 스타일 수정 (#54)

* style: refactor toast component styling and visibility time

* feat: add login bottom sheet trigger on Saved tab press for unauthenticated users

* feat: apply height scaling and handle context error to loginBottomSheetContext

* feat: apply scaling and add error handling to LoginView

* feat: add tab navigation after login

* feat: add loading state and indicator after login

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix: match params

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>

* Auth token caching 및 axios interceptor 도입 (#55)

* style: refactor toast component styling and visibility time

* feat: add login bottom sheet trigger on Saved tab press for unauthenticated users

* feat: apply height scaling and handle context error to loginBottomSheetContext

* feat: apply scaling and add error handling to LoginView

* feat: add tab navigation after login

* feat: add loading state and disable buttons during login process

* refactor: remove unused styles from MyPageScreen

* refactor: cache auth token in memory to avoid repeated AsyncStorage I/O

* refactor: remove unnecessary URLSearchParams from club.ts

* fix: match params

* 검색페이지 - 결과페이지 통합, 최근검색어 구현(API 미연결) (#53)

* 임시 커밋

* 검색 결과 페이지를 검색 페이지로 통합

- SearchResultClubListScreen 제거, SearchScreen 한 화면에서 검색바 고정 + 결과 영역 토글
- 탭/헤더 클릭 시 navigation.reset + 검색 상태 초기화 (animation: 'none')
- SearchInput unified (SearchResultClubList variant 제거), autoCapitalize/autoCorrect off
- SearchResultClubList 하위 컴포넌트(ClubListItem, SearchFilterBar, SearchResultList, TypoCorrectionNotice)를 features/search/components로 이동
- SCREEN_TYPE.SEARCH_RESULT_CLUB_LIST 및 search_result_screen 애널리틱스 제거

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* 최근 검색어 섹션 구현 (UI only)

- RecentSearches 컴포넌트 추가: 헤더("최근 검색어") + "검색내역 지우기" 버튼 + chip wrap / 빈 상태 메시지("최근 검색한 내역이 없어요. 새로운 동아리를 탐색해보세요!")
- SearchScreen의 미제출 상태 placeholder에 통합, recentSearches state 및 select/clear 핸들러 연결

TODO: 현재는 mock data로 채워둔 상태. 백엔드 검색 관련 PR 머지된 후 API 응답으로 교체 필요. 이 PR(검색 페이지)이 dev에 머지되기 전에 반드시 수정되어야 함.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* delete mock data

* recent-searches:  fontLineHeight and padding setting

* delete mock data

* refactor: features/search를 features/club 하위로 통합

검색 화면이 동아리 도메인에 속하고 SearchBar·SearchFilterBar가
카테고리 화면에서도 재사용될 예정이라 features/club 하위로 이동.

- SearchInput을 SearchBar로 리네임
- ClubListItem/SearchResultList 제거, ClubList/ClubCard로 일원화
- ClubCard '리뷰 없어요' 분기는 기존 리뷰 뱃지를 재사용
- ClubList에 pageSize prop 추가 (백엔드 페이지네이션 도입 전 임시방편)
- 검색 결과 카드 리뷰 뱃지 폴백 색을 보라 톤(BUTTON_SELECTED/POINTCOLOR_10)으로 변경
- SearchScreen에 스켈레톤(isFetching) 적용, 미사용 ♥ 토글 로직 제거

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* style: 검색 페이지 헤더 패딩 조정

헤더 컨테이너 paddingTop(vs(32)) 제거, 헤더 텍스트 paddingVertical(vs(10)) 설정으로 여백 일원화.

* refactor: ClubList 클라이언트 페이지네이션 로직 제거

---------

Co-authored-by: dennis0405 <dennis0405@snu.ac.kr>
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* 검색 상세 필터 오버레이 생성 (#52)

* style: remove unused style

* style: apply color, typography constats

* feat: add SearchFilterBar component

* fix: apply newline

* feat: add search filter overlay

* feat: add filtering logic to search api

* feat: match updated query schema

* feat: match updated query schema

* refactor: centralize filter states

* style: add box-shadow

* fix: enable multiple selection for searchfilterbar

* feat: only reset filters on overlay

* feat: update searchfilterbar component and add searchfilteroverlay

* fix: update api schema

* fix: update search filter overlay label

* feat: enhance SearchScreen with focus effect to manage filter overlay visibility

* style: simplify room and fee options in SearchFilterOverlay component

* fix: hide filter overlay when submitting search query in SearchScreen

* chore: remove unused screen

* fix: merge conflicts and removed unneeded code

---------

Co-authored-by: Jaewoong Choi <jwchoi.tech@gmail.com>
Co-authored-by: Jeongyeon Lee <jylee05@snu.ac.kr>
Co-authored-by: cirtuare <cirtuare@gmail.com>
Co-authored-by: Nam Hee Kim <103100783+kimnamheeee@users.noreply.github.com>
Co-authored-by: SeungYeon Kwag <95578121+cloNoey@users.noreply.github.com>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-authored-by: dennis0405 <dennis0405@snu.ac.kr>
* feat: add WebView title support and register WebView screen in all tabs

- Add optional title param to SCREEN_TYPE.WEBVIEW navigation type
- Replace local WebviewScreen Header with shared ClubList/Header
- Add WebViewScreen stack to HomeTab, SaveTab, SearchTab
- Remove unused SavedClubListScreen and ClubDetailScreen from MyPageTab

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* feat: add destructive Button variant and improve AlertModal styling

- Add BUTTON_DESTRUCTIVE color (#E53935) to Colors constants
- Add destructive type variant to Button component
- Apply consistent paddingHorizontal to AlertModal buttons

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* feat: add Terms of Service and Privacy Policy links to LoginView

- Replace skip link with Terms of Service and Privacy Policy links
- Navigate to WebView screen with title on link press
- Unify Toast position to default value

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* refactor: redesign MyPageScreen layout and replace image assets

- Replace Alert with AlertModal for logout and leave confirmation dialogs
- Simplify managed clubs section to a single operator CTA card
- Remove saved clubs code (moved to SaveTab)
- Remove useManageClubs and useMyClubs hooks
- Normalize all hardcoded colors to Colors constants
- Replace snu-profile-icon.png with snu-logo.png

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* refactor: improve EditProfileScreen form validation and use shared Header

- Replace local Header with shared ClubList/Header component
- Add isFormValid, hasChanges, canSubmit states for submit button control
- Add ActivityIndicator for loading state
- Strengthen null checks for college and major filtering
- Update default admission class from 24 to 26
- Normalize colors and typography to shared constants

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix: reset MyPage stack to initial screen on tab press

- Always navigate to SCREEN_TYPE.MYPAGE when tapping the MyPage tab
- Prevents sub-screens (e.g. EditProfileScreen) from persisting across tab switches

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* refactor: extract ClubList Header into shared BackHeader component

- Move Header component from ClubList to shared/components/BackHeader
- Update ClubListScreen, SavedClubListScreen, EditProfileScreen, WebviewScreen to use BackHeader

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix: rename '서비스 약관' to '서비스 이용약관'

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix: set default Toast position to bottom

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
* feat: add api for club recommendation

* feat: implement random recommendation

* style: update radius and font color
* feat: 검색 페이지에 인기 동아리 섹션 추가
* refactor: ClubRankingScreen 및 RankingTab 제거
* style: ClubDetail 진입 시 하단 탭바 숨김
* feat: 최근 검색어 API 연동
* fix: 검색 재제출 시 최근 검색어 자동 저장 누락 해결
* fix: 최근 검색어 레이스 컨디션 수정 - 연속 검색 시 이전 검색 요청 취소
* fix: 지우기 후 재검색 시 최근 검색어가 갱신되지 않는 버그 수정
* fix: 로그인 시 최근 검색어 캐시 동기화
부팅 시 /v2/app/version/check를 호출해 최소 지원 버전을 확인하고,
미달인 경우 스토어 이동만 가능한 차단 모달을 노출한다.

- entities/repositories/usecases/hook/gate 컴포넌트 레이어 분리
- Android debug 빌드의 versionName "-DEBUG" suffix는 클라에서 strip
- 네트워크 실패 시 fail-open으로 서비스 잠금 방지
- 스플래시는 체크 완료 + 최소 1초 경과 후 hide하여 깜빡임 방지

Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
* chore: migrate club API endpoints from v1 to v2

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* feat: add club save toggle with optimistic updates

Add a heart button to each club card that saves/unsaves a club with
debounced, optimistic React Query cache updates and rollback on failure.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* fix: refresh club queries on login and clear stale login callback

Invalidate clubs, searchClubs, and savedClubs queries on login success so
saved state reflects the logged-in user, and reset the onSuccess ref when
the login sheet is dismissed to avoid firing a stale callback later.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
* refactor: remove unused imports and variables

* ci: add CI workflow and update linting scripts
Add a Metro bundle job (android/ios matrix) to PR CI so bundling
breaks are caught before merge instead of in the develop CD build.
Extract a setup-node-env composite action with node_modules caching
and reuse it in ci.yml.

Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
* chore: add PR bundle check and shared node setup with cache

Add a Metro bundle job (android/ios matrix) to PR CI so bundling
breaks are caught before merge instead of in the develop CD build.
Extract a setup-node-env composite action with node_modules caching
and reuse it in ci.yml.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* feat: update logout and login processes to manage saved clubs and recent searches cache

* refactor: use client-join approach and remove inSaved field

* refactor: remove refetchOnMount option from useCategoryClubs query

---------

Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
* chore: add PR bundle check and shared node setup with cache

Add a Metro bundle job (android/ios matrix) to PR CI so bundling
breaks are caught before merge instead of in the develop CD build.
Extract a setup-node-env composite action with node_modules caching
and reuse it in ci.yml.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* feat: update logout and login processes to manage saved clubs and recent searches cache

* refactor: use client-join approach and remove inSaved field

* refactor: remove refetchOnMount option from useCategoryClubs query

* refactor: update savedClubs cache update function to be asynchronous

---------

Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
* fix: ClubPreviewCard 텍스트 패딩 및 그림자 잘림 수정

* feat: 가로 자동 스크롤 캐러셀 공통화

- useAutoScroll 훅 추출 (LatestClubsSection에서 분리)
- HorizontalCarousel 컴포넌트 신규 추가 (FlatList + overflow:visible + 자동 스크롤)
- LatestClubsSection, RandomRecommendations → HorizontalCarousel로 교체
- RandomRecommendations에 자동 스크롤 추가 및 그림자 잘림(overflow:visible) 수정
* feat: implement useRequireLogin hook for login validation in club saving and tab navigation

* refactor: extract ReviewKeywordPill shared component

Move the inline review-keyword chip out of ClubCard into a reusable
ReviewKeywordPill component so the club detail screen can share it.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* refactor: measure content width and use style constants in HtmlView

Resolve contentWidth from an onLayout measurement when not provided, and
replace hardcoded colors with Colors/typography constants.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* chore: remove unused icon assets

* feat: add BODYTEXT_SUB_2 color and adjust headerL font weight

* feat: add new  icons for club information

* feat: add ClubDetail UI components

로고를 배경처럼 보여주는 상세 화면 구성을 위한 컴포넌트 분리
- BackgroundCard, ClubDetailTabBar, InfoTab, RecruitTab
- ReviewTab, ReviewKeywordBar, LoginBlurOverlay

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* refactor: rework ClubDetailScreen with new component layout

- 분리한 ClubDetail 컴포넌트로 화면 재구성
- 기존 Header 컴포넌트 제거

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* refactor: rework ClubReviewScreen with new layout

- BackHeader / Button / BackgroundCard 기반으로 화면 재구성
- 기존 Header 컴포넌트 제거

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
* feat: add terms agreement api call function

* chore: change api namespace for announcement GET api

* feat: add terms agree modal ui

* feat: add loading state to profile context

* feat: use profile loading state in pending terms

* feat: remove webview and open link for terms modal

---------

Co-authored-by: dennis0405 <dennis0405@snu.ac.kr>
* chore: update app version of ios local scheme

* fix: update random recommendation query strategy

* Add random recommendation skeleton

* Stabilize random recommendation layout

* Share recommendation card layout constants

* Reuse club preview skeleton in recommendations

---------

Co-authored-by: dennis0405 <dennis0405@snu.ac.kr>
Co-authored-by: dennis0405 <dennis0405@snu.ac.kr>
* fix: remove getclub api call from popularclubs component

* fix: pass popular club category to detail

---------

Co-authored-by: dennis0405 <dennis0405@snu.ac.kr>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
iOS MARKETING_VERSION 2.1.4 → 3.0.0
Android versionName 2.1.4 → 3.0.0
contentUrl이 App Link로 검증된 도메인(dev.all-clear.cc)이라 Linking.openURL 호출 시 외부 브라우저가 아니라 앱 자신으로 인텐트가 라우팅되어 아무 동작도 하지 않았음. 다른 약관 화면과 동일하게 인앱 WebView를 모달 위에 띄우도록 변경하여 App Link 라우팅을 회피.

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
@jwchoi-kr jwchoi-kr merged commit 5a3d3f0 into main Jun 29, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants