Skip to content

Commit 4c8e9d5

Browse files
EunbinJungahk0413mtm-git1018
authored
Dev (#149)
* [fix] 챗봇 추천 페이지 수정 및 기능추가 (#130) * [fix] 논알콜일 시 payload 값 수정 * [fix] options 기본으로 수정 * [feat] 다시 시작하기 추가 * [feat] 채팅 캡처기능 추가 * [fix] currentStep 제거 * [fix] 파비콘 추가 및 헤더 메뉴 네이밍 수정 * [style] layout 모바일 대응 추가 * Design/main#11 (#131) * [style] 배경 * [design] 랜딩페이지 3d모델 * 3d 렌더링 * Style/main page 2#122 (#132) * [style]마이페이지 슬라이드 퍼블리싱 * [style] 메인페이지 슬라이드 * [docs]provider문서 정리 * [style] 메인페이지 스타일 간격조정 * [feat]알림 설정처리 * [stype]메인페이지 반응형 * [feat] 나만의 바 삭제 동기화 * [feat] 마이페이지 전체삭제 * [style] 메인페이지 반응형 * [feat] 마이페이지 푸시 오류 수정 * [docs]미 사용 파일 삭제 * [style] 메인3d이미지 스크롤 실험div제거 * Style/메인페이지 슬라이드영역 (#135) * [style]마이페이지 슬라이드 퍼블리싱 * [style] 메인페이지 슬라이드 * [docs]provider문서 정리 * [style] 메인페이지 스타일 간격조정 * [feat]알림 설정처리 * [stype]메인페이지 반응형 * [feat] 나만의 바 삭제 동기화 * [feat] 마이페이지 전체삭제 * [style] 메인페이지 반응형 * [feat] 마이페이지 푸시 오류 수정 * [docs]미 사용 파일 삭제 * [style] 메인3d이미지 스크롤 실험div제거 * [style] 메인페이지 슬라이드 반응형 * [style]메인페이지 이미지교체 * [style] 시맨틱구조 * [style] 모바일 메인배경 위치조정 * [fix] 화면 리사이징시 슬라이드 고정 버그 해결 * [fix] 브라우저 리사이징 버그 수정 * [chore]포매팅 * [fix] 로그아웃 시 auth/me api 자동호출로 401 에러 (#136) * [fix] 로그아웃 시 auth/me 자동호출로 401 에러 해결 * [fix] 로그인 새로고침 시 오류 로직 수정 * [fix] 리다이렉트 setTimeout 추가 * Design/main#11 (#138) * [style] 배경 * [design] 랜딩페이지 3d모델 * 3d 렌더링 * 로고,텍스트 추가 * 패키지제이슨 * 메인작업 * 카메라액션 취소 * 별 애니메이션 취소 * 대문자 * [fix] 레이아웃 분리 (#139) * Refactor/recipe fetch (#140) * [refactor] 무한스크롤 tanstack * [refactor] 레시피페이지 리팩토링 * [refactor] 아코디언박스 * [feat]필터링 뒤로가기 스크롤 저장 * [chore] 머지 전 커밋 * [chore]머지 전 커밋 누락 내용 커밋 * [refactor]리팩토링 커밋 * [fix] 경로 오류 수정 * 경로 수정 * [fix] 경로수정 * Feat/write#19 (#142) * [feat] 글쓰기 기능 * [feat] 포스트 작성 기능 * Feat/communityscroll#23 (#114) * [feat] 스크롤링구현 * [feat] 주소, api설정 * [feat] 커뮤니티 탭, 필터 패치로직 * [feat] lastLikeCount, lastCommentCount, 추가 * [fix] 코멘트 삭제수정 마이페이지에선 뗄수있게 myPage props 추가 * 옵셔널로 수정 * 오류 수정 * [feat] 글쓰기 기능 * 카테고리필수 * [feat] 포스트 무한스크롤 + 글쓰기기능 이미지추가 * [feat] 이미지 스와이퍼 * [feat] 프로필 쑤리 이미지 * [feat] 댓글 누르면 댓글 섹션으로 가기 * [feat] 좋아요기능(아직 좋아요받아오는건 못함 api필요) * [feat] 게시물 수정 * [feat] 글 수정 * [refactor] 코드 조금정리 * [feat] 작성자본인만 글수정삭제 * [feat]글 삭제기능 * [feat] 칵테일태그 * [fix]칵테일, 쉐어 기능 * 수 라우터, 비로그인처리 * 타입 수정 * 타입 수정 * 타입수정 * 타입수정 * 타입수정 * 오류수정 * 오류수정 * 오류수정 * 오류수정 * 오류수정 * 충돌해결 * 오류 수정 * 오류 수정 * 오류 수정 * [fix] 이미지 카운트, 10개 제한 * [fix] 글쓰기 placeholder * [fix] 공유 url 수정 * [fix] 프로필배경 지우기 * [fix] 플로팅탭 미디어쿼리 수정 * [fix] 수정 모달 * 댓글실시간반영 시도 * 수정 * [fix] 수정모달 로직 수정 * 수정로직 수정 * [feat] edit수정 * 타입오류 * [feat] 좋아요로직 수정 * [fix] 칵테일태그 너비 수정 * 글쓰기 로그인검사 * 버그들 수정 * 반응형 * 파일명 대문자수정 * [fix] MainSlide 수정 (#143) * [fix] MainSlide 수정 * [style] MainSlide 사진 추가 * Refactor/칵테일 정렬 기능 수정 (#144) * [refactor] 무한스크롤 tanstack * [refactor] 레시피페이지 리팩토링 * [refactor] 아코디언박스 * [feat]필터링 뒤로가기 스크롤 저장 * [chore] 머지 전 커밋 * [chore]머지 전 커밋 누락 내용 커밋 * [refactor]리팩토링 커밋 * [refactor] 정렬 중복아이템문제 * [feat] 칵테일 정렬기능 * [fix]댓글 알림 수정 * [chore] 충돌사항 수정 * [fix]충돌에러수정 * [style] 폰트 추가 * [fix]파일 내 코드중복 수정 * [chore]포매팅 * [fix]타입중복 수정 * [chore]포매팅 * docs/ 폰트 추가 및 삭제 (#146) * [refactor] 무한스크롤 tanstack * [refactor] 레시피페이지 리팩토링 * [refactor] 아코디언박스 * [feat]필터링 뒤로가기 스크롤 저장 * [chore] 머지 전 커밋 * [chore]머지 전 커밋 누락 내용 커밋 * [refactor]리팩토링 커밋 * [refactor] 정렬 중복아이템문제 * [feat] 칵테일 정렬기능 * [fix]댓글 알림 수정 * [chore] 충돌사항 수정 * [docs] 필요없는 폰트파일 정리 * [fix] scroll 위치이동 * Feat/write#19 (#147) * [feat] 글쓰기 기능 * [feat] 포스트 작성 기능 * Feat/communityscroll#23 (#114) * [feat] 스크롤링구현 * [feat] 주소, api설정 * [feat] 커뮤니티 탭, 필터 패치로직 * [feat] lastLikeCount, lastCommentCount, 추가 * [fix] 코멘트 삭제수정 마이페이지에선 뗄수있게 myPage props 추가 * 옵셔널로 수정 * 오류 수정 * [feat] 글쓰기 기능 * 카테고리필수 * [feat] 포스트 무한스크롤 + 글쓰기기능 이미지추가 * [feat] 이미지 스와이퍼 * [feat] 프로필 쑤리 이미지 * [feat] 댓글 누르면 댓글 섹션으로 가기 * [feat] 좋아요기능(아직 좋아요받아오는건 못함 api필요) * [feat] 게시물 수정 * [feat] 글 수정 * [refactor] 코드 조금정리 * [feat] 작성자본인만 글수정삭제 * [feat]글 삭제기능 * [feat] 칵테일태그 * [fix]칵테일, 쉐어 기능 * 수 라우터, 비로그인처리 * 타입 수정 * 타입 수정 * 타입수정 * 타입수정 * 타입수정 * 오류수정 * 오류수정 * 오류수정 * 오류수정 * 오류수정 * 충돌해결 * 오류 수정 * 오류 수정 * 오류 수정 * [fix] 이미지 카운트, 10개 제한 * [fix] 글쓰기 placeholder * [fix] 공유 url 수정 * [fix] 프로필배경 지우기 * [fix] 플로팅탭 미디어쿼리 수정 * [fix] 수정 모달 * 댓글실시간반영 시도 * 수정 * [fix] 수정모달 로직 수정 * 수정로직 수정 * [feat] edit수정 * 타입오류 * [feat] 좋아요로직 수정 * [fix] 칵테일태그 너비 수정 * 글쓰기 로그인검사 * 버그들 수정 * 반응형 * 파일명 대문자수정 * 모바일 이미지 * 메인 수정 * 3d모델 * [style] 폰트 추가 * [feat] 스크롤 버튼 추가 * [fix] 시작 애니메이션 원복 * [docs]README * Feat/write#19 (#148) * [feat] 글쓰기 기능 * [feat] 포스트 작성 기능 * Feat/communityscroll#23 (#114) * [feat] 스크롤링구현 * [feat] 주소, api설정 * [feat] 커뮤니티 탭, 필터 패치로직 * [feat] lastLikeCount, lastCommentCount, 추가 * [fix] 코멘트 삭제수정 마이페이지에선 뗄수있게 myPage props 추가 * 옵셔널로 수정 * 오류 수정 * [feat] 글쓰기 기능 * 카테고리필수 * [feat] 포스트 무한스크롤 + 글쓰기기능 이미지추가 * [feat] 이미지 스와이퍼 * [feat] 프로필 쑤리 이미지 * [feat] 댓글 누르면 댓글 섹션으로 가기 * [feat] 좋아요기능(아직 좋아요받아오는건 못함 api필요) * [feat] 게시물 수정 * [feat] 글 수정 * [refactor] 코드 조금정리 * [feat] 작성자본인만 글수정삭제 * [feat]글 삭제기능 * [feat] 칵테일태그 * [fix]칵테일, 쉐어 기능 * 수 라우터, 비로그인처리 * 타입 수정 * 타입 수정 * 타입수정 * 타입수정 * 타입수정 * 오류수정 * 오류수정 * 오류수정 * 오류수정 * 오류수정 * 충돌해결 * 오류 수정 * 오류 수정 * 오류 수정 * [fix] 이미지 카운트, 10개 제한 * [fix] 글쓰기 placeholder * [fix] 공유 url 수정 * [fix] 프로필배경 지우기 * [fix] 플로팅탭 미디어쿼리 수정 * [fix] 수정 모달 * 댓글실시간반영 시도 * 수정 * [fix] 수정모달 로직 수정 * 수정로직 수정 * [feat] edit수정 * 타입오류 * [feat] 좋아요로직 수정 * [fix] 칵테일태그 너비 수정 * 글쓰기 로그인검사 * 버그들 수정 * 반응형 * 파일명 대문자수정 * 모바일 이미지 * 메인 수정 * 3d모델 * 메인 수정 * 아래칵테일잔수정 --------- Co-authored-by: ahk0413 <[email protected]> Co-authored-by: mtm-git1018 <[email protected]> Co-authored-by: ahk0413 <[email protected]>
1 parent 74336da commit 4c8e9d5

30 files changed

+352
-331
lines changed

README.md

Lines changed: 169 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,169 @@
1+
# SSOUL 프로젝트 인수인계 문서
2+
3+
## �� 프로젝트 개요
4+
5+
**프로젝트명**: SSOUL (칵테일을 좋아하는 사람들을 위한 서비스)
6+
**기술 스택**: Next.js 15, React 19, TypeScript, Tailwind CSS
7+
**저장소**: https://github.com/prgrms-web-devcourse-final-project/WEB5_6_HaeDokCoding_FE
8+
9+
## �� 시작하기
10+
11+
### 개발 환경 설정
12+
```bash
13+
# 의존성 설치
14+
npm install
15+
16+
# 개발 서버 실행
17+
npm run dev
18+
19+
# 빌드
20+
npm run build
21+
22+
# 코드 포맷팅
23+
npm run format
24+
25+
# 린트 검사
26+
npm run lint
27+
```
28+
29+
### 환경 변수
30+
프로젝트는 개발/운영 환경에 따라 다른 API URL을 사용합니다:
31+
- `NEXT_PUBLIC_API_URL_DEV`: 개발 환경 API URL
32+
- `NEXT_PUBLIC_API_URL_PROD`: 운영 환경 API URL
33+
34+
## �� 프로젝트 구조
35+
36+
```
37+
src/
38+
├── app/ # Next.js App Router 페이지
39+
│ ├── layout.tsx # 루트 레이아웃
40+
│ ├── page.tsx # 메인 페이지
41+
│ ├── community/ # 커뮤니티 관련 페이지
42+
│ ├── recipe/ # 칵테일 레시피 페이지
43+
│ ├── recommend/ # 취향 추천 페이지
44+
│ ├── login/ # 로그인 관련 페이지
45+
│ ├── mypage/ # 마이페이지
46+
│ └── api/ # API 설정
47+
├── domains/ # 도메인별 컴포넌트
48+
│ ├── community/ # 커뮤니티 도메인
49+
│ ├── recipe/ # 레시피 도메인
50+
│ ├── recommend/ # 추천 도메인
51+
│ ├── login/ # 로그인 도메인
52+
│ ├── mypage/ # 마이페이지 도메인
53+
│ └── shared/ # 공통 도메인 컴포넌트
54+
└── shared/ # 공통 컴포넌트 및 유틸
55+
├── components/ # 공통 UI 컴포넌트
56+
├── styles/ # 글로벌 스타일
57+
├── assets/ # 이미지, 아이콘 등
58+
├── hook/ # 공통 훅
59+
├── types/ # 타입 정의
60+
└── utills/ # 유틸리티 함수
61+
```
62+
63+
## �� 주요 기능
64+
65+
### 1. 인증 시스템
66+
- **소셜 로그인**: Google, Kakao, Naver 지원
67+
- **상태 관리**: Zustand + localStorage persist
68+
- **주요 파일**:
69+
- `src/domains/shared/store/auth.ts`: 인증 상태 관리
70+
- `src/domains/login/hook/useAuthHooks.ts`: 로그인 관련 훅
71+
- `src/app/api/config/appConfig.ts`: API 설정
72+
73+
### 2. 페이지별 기능
74+
75+
#### �� 메인 페이지 (`/`)
76+
- 현재 기본 구조만 구현됨
77+
- 추후 확장 예정
78+
79+
#### �� 칵테일 레시피 (`/recipe`)
80+
- **주요 컴포넌트**:
81+
- `CocktailList`: 칵테일 목록 표시
82+
- `Accordion`: 필터링 옵션
83+
- `SelectBox`: 정렬 옵션
84+
- **기능**: 검색, 필터링, 정렬
85+
- **상세 페이지**: `/recipe/[id]` - 개별 칵테일 상세 정보
86+
87+
#### �� 커뮤니티 (`/community`)
88+
- **주요 컴포넌트**:
89+
- `PostCard`: 게시물 카드
90+
- `CommunityTab`: 카테고리 탭
91+
- `WriteBtn`: 글쓰기 버튼
92+
- **카테고리**: 레시피, 팁, 질문, 자유
93+
- **글쓰기**: `/community/write`
94+
- **상세 페이지**: `/community/[id]`
95+
96+
#### �� 취향 추천 (`/recommend`)
97+
- **챗봇 기반 추천**: `ChatSection` 컴포넌트
98+
- **주요 컴포넌트**:
99+
- `BotMessage`, `UserMessage`: 메시지 컴포넌트
100+
- `BotOptions`: 선택 옵션
101+
- `MessageInput`: 입력창
102+
- `TypingIndicator`: 타이핑 효과
103+
104+
#### �� 마이페이지 (`/mypage`)
105+
- **기본 리다이렉트**: `/mypage``/mypage/mybar`
106+
- **주요 섹션**:
107+
- `/mypage/mybar`: 나만의 바
108+
- `/mypage/my-active`: 활동 내역 (게시물, 댓글, 좋아요)
109+
- `/mypage/my-alarm`: 알림 설정
110+
- `/mypage/my-setting`: 계정 설정
111+
112+
#### �� 로그인 (`/login`)
113+
- **소셜 로그인**: `SocialLogin` 컴포넌트
114+
- **성공 페이지**: `/login/success`
115+
- **신규 사용자**: `/login/user/first-user`
116+
117+
## �� 기술적 세부사항
118+
119+
### 상태 관리
120+
- **Zustand**: 클라이언트 상태 관리
121+
- **Persist**: localStorage를 통한 상태 영속화
122+
- **주요 스토어**:
123+
- `auth.ts`: 사용자 인증 상태
124+
- `accordionStore.ts`: 아코디언 UI 상태
125+
126+
### UI/UX
127+
- **Tailwind CSS**: 스타일링
128+
- **React Hot Toast**: 토스트 알림
129+
- **Lottie**: 로딩 애니메이션
130+
- **GSAP**: 고급 애니메이션
131+
- **Responsive**: 모바일/데스크톱 대응
132+
133+
### 개발 도구
134+
- **ESLint**: 코드 품질 관리
135+
- **Prettier**: 코드 포맷팅
136+
- **Husky**: Git hooks
137+
- **Lint-staged**: 커밋 전 검사
138+
139+
## �� 주요 설정 파일
140+
141+
- `next.config.ts`: Next.js 설정
142+
- `tailwind.config.js`: Tailwind CSS 설정
143+
- `eslint.config.mjs`: ESLint 설정
144+
- `tsconfig.json`: TypeScript 설정
145+
146+
## �� 반응형 디자인
147+
148+
프로젝트는 모바일 우선(Mobile-first) 접근 방식을 사용합니다:
149+
- **모바일**: 기본 스타일
150+
- **태블릿**: `md:` prefix
151+
- **데스크톱**: `lg:`, `xl:` prefix
152+
153+
## �� 주의사항
154+
155+
1. **환경 변수**: 개발/운영 환경에 맞는 API URL 설정 필요
156+
2. **인증 토큰**: localStorage에 저장되므로 보안 고려 필요
157+
3. **API 통신**: `credentials: 'include'` 설정으로 쿠키 기반 인증
158+
4. **Git Hooks**: Husky 설정으로 커밋 전 자동 검사
159+
160+
## �� 추가 문의
161+
162+
- **저장소 이슈**: https://github.com/prgrms-web-devcourse-final-project/WEB5_6_HaeDokCoding_FE/issues
163+
- **주요 브랜치**: `main` (메인), `dev` (개발)
164+
165+
---
166+
167+
**작성일**: 2025-10-14
168+
**작성자**: 이성헌
169+
**버전**: 1.0
2.08 MB
Binary file not shown.
2.09 MB
Binary file not shown.
2.07 MB
Binary file not shown.
2.06 MB
Binary file not shown.
2.02 MB
Binary file not shown.

src/app/(main)/layout.tsx

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
1-
import FooterWrapper from '@/shared/components/footer/FooterWrapper';
21
import Header from '@/shared/components/header/Header';
32

43
function NoLayout({ children }: { children: React.ReactNode }) {
54
return (
65
<>
7-
<Header className="bg-transparent w-full h-[44px] md:h-[60px] flex items-center justify-between px-[12px] fixed top-0 left-0 z-50 transition-transform duration-200 ease-in-ou" />
6+
<Header
7+
isMain={true}
8+
className="w-full h-[44px] md:h-[60px] flex items-center justify-between px-[12px] fixed top-0 left-0 z-50 transition-transform duration-200 ease-in-ou"
9+
/>
810
<main className="flex flex-1">{children}</main>
9-
<FooterWrapper />
1011
</>
1112
);
1213
}

src/app/layout.tsx

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
1+
import '@/shared/styles/global.css';
12
import type { Metadata } from 'next';
23
import '@/shared/styles/global.css';
34
import { Toaster } from 'react-hot-toast';
4-
import Header from '@/shared/components/header/Header';
5-
import FooterWrapper from '@/shared/components/footer/FooterWrapper';
65
import ScrollTopBtnWrapper from '@/shared/components/scroll-top/ScrollTopBtnWrapper';
76
import KaKaoScript from './api/kakao/KaKaoScript';
87
import 'swiper/css';

src/domains/main/cocktailDrop/CocktailDrop.tsx

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -44,11 +44,23 @@ function CocktailDrop({ isDesktop = false }: CocktailDropProps) {
4444
);
4545

4646
// 로고 위에서 아래로 자연스럽게 등장
47+
const screenWidth = window.innerWidth;
48+
const viewportHeight = window.innerHeight;
49+
const isTablet = screenWidth >= 640 && screenWidth < 1024;
50+
const isMobile = screenWidth < 640;
51+
52+
// 뷰포트 높이 기반으로 로고 위치 계산
53+
const logoFinalY = isMobile
54+
? `-${viewportHeight * 0.3}px`
55+
: isTablet
56+
? `-${viewportHeight * -0.8}px`
57+
: '0px';
58+
4759
gsap.fromTo(
4860
logoRef.current,
4961
{ y: -300, opacity: 0 },
5062
{
51-
y: !isDesktop ? -230 : -18, // 데스크톱이 아닐 때 더 위로
63+
y: logoFinalY, // 뷰포트 높이 기반 계산
5264
opacity: 1,
5365
duration: 3,
5466
ease: 'power3.out',
@@ -69,7 +81,7 @@ function CocktailDrop({ isDesktop = false }: CocktailDropProps) {
6981
return (
7082
<div
7183
ref={containerRef}
72-
className="relative w-full lg:min-h-[110vh] min-h-[89vh] flex flex-col md:justify-center justify-end items-center mt-10 overflow-hidden"
84+
className="relative w-full lg:min-h-[120vh] md:min-h-[95vh] min-h-[87vh] flex flex-col lg:justify-center md:justify-center justify-end items-center mt-10 overflow-hidden"
7385
id="scroll-fixed"
7486
>
7587
{/* 대각선 줄 1 */}
@@ -84,7 +96,7 @@ function CocktailDrop({ isDesktop = false }: CocktailDropProps) {
8496
/>
8597

8698
{/* 로고 */}
87-
<div ref={logoRef} className="absolute md:w-115 w-85 md:h-90 h-40">
99+
<div ref={logoRef} className="absolute z-4 md:w-115 w-65 md:h-90 h-40">
88100
<Image
89101
src="/logo.svg"
90102
alt="로고 이미지"
@@ -95,20 +107,17 @@ function CocktailDrop({ isDesktop = false }: CocktailDropProps) {
95107
/>
96108
</div>
97109

98-
<div className="w-full md:h-90 h-30"></div>
99-
100110
{/* 컵 이미지 - 모바일에서 바닥에 붙도록 */}
101-
<div className="md:relative absolute bottom-0">
111+
<div className="z-5 absolute bottom-0">
102112
<Image
103113
src={Cocktailcup}
104114
alt="칵테일 컵"
105-
width={900}
106-
height={700}
107115
priority
108-
className="md:w-auto md:h-auto w-[500px] h-[400px] object-cover"
116+
style={{ height: 'auto' }}
117+
className="md:w-[700px] w-[500px] object-contain"
109118
/>
110119
</div>
111-
<div className="absolute md:bottom-35 bottom-20 flex items-center justify-center z-3 w-full">
120+
<div className="absolute md:bottom-35 bottom-20 flex items-center justify-center z-10 w-full">
112121
<PassBtn />
113122
</div>
114123
</div>

src/domains/main/components/3d/HomeLogo.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@ import Image from 'next/image';
33
function HomeLogo({ isDesktop }: { isDesktop: boolean }) {
44
return (
55
<div
6-
className="z-5 absolute md:top-8 md:left-10 md:translate-none top-13 left-1/2 -translate-x-1/2"
7-
style={{ width: !isDesktop ? 400 : 700, height: !isDesktop ? 70 : 240 }}
6+
className="z-5 absolute md:top-22 md:left-10 md:translate-none top-30 left-1/2 -translate-x-1/2"
7+
style={{ width: !isDesktop ? 400 : 580, height: !isDesktop ? 70 : 210 }}
88
>
99
<Image src={'/logo.svg'} alt="로고 이미지" fill priority className="object-contain" />
1010
</div>

0 commit comments

Comments
 (0)