Skip to content

Commit 711cfb0

Browse files
author
jyn
committed
Merge branch 'dev'
2 parents fae0f9c + b1bfe2d commit 711cfb0

File tree

47 files changed

+603
-542
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

47 files changed

+603
-542
lines changed

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,3 +43,5 @@ next-env.d.ts
4343

4444
# lighthouse ci
4545
.lighthouseci/
46+
47+
public/images/gif/

README.md

Lines changed: 215 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,216 @@
1-
# Nomadia
1+
<p align="center">
2+
<a href="https://nomadia-two.vercel.app/">
3+
<img width="200" height="200" alt="logo" src="./public/images/icons/logo.svg" />
4+
</a>
5+
</p>
26

3-
노마디아 readme 추가 예정
4-
웹후크
7+
<div align="center">
8+
9+
# Nomadia : Nomad + Utopia
10+
11+
### 어디서든 '나답게' 머무는 경험을 시작하세요.
12+
13+
**노마디아 (Nomadia)** 는 노마드를 위한 **액티비티 예약 플랫폼**입니다.
14+
사용자가 직접 체험을 등록하고, 다른 노마드의 체험을 예약하며 경험을 공유할 수 있습니다.
15+
16+
</div>
17+
<p align="center">
18+
배포 링크: https://nomadia-two.vercel.app/
19+
</p>
20+
21+
<div align="center">
22+
<details>
23+
<summary> 👀 Preview GIF/MP4</summary>
24+
25+
#### 회원가입/로그인
26+
![회원가입_로그인_2배속](https://github.com/user-attachments/assets/27669840-8ad0-4cfc-895b-0731aa1e2e4e)
27+
28+
#### 메인페이지 캐러셀
29+
30+
#### 메인페이지 리스트
31+
32+
#### 메인페이지 검색
33+
34+
---
35+
36+
#### 체험 등록
37+
38+
https://github.com/user-attachments/assets/e7392d86-01c6-4a3e-9dea-505839d868ca
39+
40+
#### 마이페이지 내 체험 관리 - 체험 수정
41+
42+
![체험수정_2배속](https://github.com/user-attachments/assets/8d7843fd-2522-4443-aec8-d6379d2d20a6)
43+
44+
#### 마이페이지 내 체험 관리 - 체험 삭제
45+
![내체험관리_체험삭제](https://github.com/user-attachments/assets/b8ded43c-53b0-4326-9c6c-ba835170561e)
46+
47+
#### 마이페이지 예약 내역 - 취소
48+
![예약취소_2배속](https://github.com/user-attachments/assets/00d2a0a5-814d-4444-b0ef-7dc1b91713b4)
49+
50+
#### 마이페이지 예약 내역 - 후기 작성
51+
![후기작성](https://github.com/user-attachments/assets/931a7f38-b350-4b6d-b31c-4f8784736b69)
52+
53+
#### 마이페이지 내 예약 현황
54+
55+
---
56+
57+
#### 상세페이지
58+
59+
https://github.com/user-attachments/assets/1dcba629-9388-41bc-a9a5-a5c0f5c12bc1
60+
61+
---
62+
63+
</details>
64+
<br>
65+
</div>
66+
67+
## 주요 기능
68+
69+
- 💻 **체험 등록** - 노마드가 직접 체험을 등록하고 관리
70+
- 📅 **예약 시스템** - 실시간 예약 가능 날짜 확인 및 예약
71+
- 🔍 **스마트 검색** - 카테고리, 지역별 체험 검색
72+
- 👤 **마이페이지** - 예약 내역, 예약 현황, 체험 관리, 프로필 수정
73+
74+
## 기술 스택
75+
76+
### **Core Stack**
77+
78+
| 기술 | 버전 | 설명 |
79+
| --------------- | ------------------- | ------------------------------------------- |
80+
| **Next.js** | 15.3.5 (App Router) | 파일 기반 라우팅, SSR로 SEO 최적화 |
81+
| **TypeScript** | 5.x | 정적 타입으로 개발 안정성 향상 |
82+
| **React** | 19.0.0 | 최신 기능(Server Components, Suspense) 활용 |
83+
| **TailwindCSS** | v4 + Turbopack | 빠른 빌드와 일관된 디자인 시스템 |
84+
85+
### **Data & State Management**
86+
87+
| 기술 | 설명 |
88+
| ------------------ | ---------------------------------------------- |
89+
| **TanStack Query** | 서버 상태 캐싱과 동기화로 API 요청 최적화 |
90+
| **Zustand** | 간단하고 직관적인 클라이언트 상태 관리 |
91+
| **Axios** | 안정적인 HTTP 클라이언트, 인터셉터로 토큰 관리 |
92+
93+
### **Form & Validation**
94+
95+
| 기술 | 설명 |
96+
| ------------------- | --------------------------- |
97+
| **React Hook Form** | 성능 최적화된 폼 라이브러리 |
98+
| **Zod** | TypeScript 기반 스키마 검증 |
99+
100+
### **UI/UX**
101+
102+
| 기술 | 설명 |
103+
| ----------------- | ----------------------------------- |
104+
| **shadcn/ui** | 커스터마이징 가능한 컴포넌트 시스템 |
105+
| **Framer Motion** | 부드러운 애니메이션과 인터랙션 |
106+
| **Swiper** | 반응형 캐러셀과 터치 슬라이더 |
107+
108+
### **Development & Deployment**
109+
110+
| 기술 | 설명 |
111+
| ----------------------- | -------------------------------- |
112+
| **Vercel** | Next.js 최적화된 배포 플랫폼 |
113+
| **Husky + lint-staged** | Git Hook으로 코드 품질 자동 검증 |
114+
| **Lighthouse CI** | 성능 및 접근성 지속적 모니터링 |
115+
116+
## R&R
117+
118+
<table>
119+
<tr>
120+
<td>
121+
<img src="./public/images/icons/nomadia.svg" alt="노마디아" width="200" />
122+
</td>
123+
<td>
124+
<img width="700" alt="지윤" src="https://github.com/user-attachments/assets/5dc9a246-7db3-4770-98e2-1c8ca6500c96" />
125+
</td>
126+
<td>
127+
<img width="700" alt="영현" src="https://github.com/user-attachments/assets/7a783360-154a-4bc8-be12-227523f40734" />
128+
</td>
129+
<td>
130+
<img width="700" alt="준우" src="https://github.com/user-attachments/assets/a4e25b3d-5dd7-4579-afdf-f7c7721bf352" />
131+
</td>
132+
<td>
133+
<img width="700" alt="동환" src="https://github.com/user-attachments/assets/af171698-31e7-4aec-a27f-e91394195e09" />
134+
</td>
135+
</tr>
136+
<tr>
137+
<th>팀원</th>
138+
<td><strong>전지윤</strong>(팀장)</td>
139+
<td><strong>김영현</strong></td>
140+
<td><strong>김준우</strong></td>
141+
<td><strong>유동환</strong></td>
142+
</tr>
143+
<tr>
144+
<td><strong>페이지,<br> 기능</strong></td>
145+
<td>
146+
- 체험 상세 페이지<br>
147+
- 404 페이지, 에러 페이지<br>
148+
</td>
149+
<td>
150+
- 랜딩 페이지 기획 및 구현<br>
151+
- 메인 페이지<br>
152+
- 예약 내역 페이지<br>
153+
- 체험 등록 페이지<br>
154+
</td>
155+
<td>
156+
- 예약 현황 페이지<br>
157+
- 체험 검색 기능<br>
158+
</td>
159+
<td>
160+
- 로그인/회원가입 페이지<br>
161+
- 내 정보/체험 수정 페이지<br>
162+
- 내 체험 관리 페이지<br>
163+
</td>
164+
</tr>
165+
<tr>
166+
<td><strong>(shared)<br> 공통 컴포넌트, <br> 공통 로직</strong></td>
167+
<td>
168+
- Pagination<br>
169+
- Modal<br>
170+
- Calendar<br>
171+
- Infinite Scroll
172+
</td>
173+
<td>
174+
- Loading Spinner<br>
175+
- Skeleton<br>
176+
- Carousel<br>
177+
- Error Message<br>
178+
</td>
179+
<td>
180+
- Dropdown<br>
181+
- Header<br>
182+
- Footer<br>
183+
</td>
184+
<td>- Sidebar</td>
185+
</tr>
186+
<tr>
187+
<td><strong>기타</strong></td>
188+
<td>- ESLint, Prettier, settings.json 설정<br>- 프로젝트 리디자인</td>
189+
<td>- 공통 스타일 정의<br>- husky / LightHouse CI 설정 </td>
190+
<td>- 데모 영상</td>
191+
<td>- 배포<br> - 발표</td>
192+
</tr>
193+
</table>
194+
195+
<br>
196+
197+
## 프로젝트 문서
198+
199+
### 트러블슈팅
200+
201+
| 작성자 | 설명 |
202+
| ---------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
203+
| **전지윤** | [에러 핸들링 (in 앱 라우터)](https://www.notion.so/in-237bbeae3e2b80588e00f306680edaec) |
204+
| **김영현** | - [Props Hell 탈출기: Context API로 컴포넌트 최적화](https://www.notion.so/Props-Hell-Context-API-263b2ffc607580b5923cd91b1bd088d4) <br> - [Form-data 보안 취약점 해결](https://www.notion.so/form-data-263b2ffc607580fc9f92f3a23698cdd7?source=copy_link)<br> -[Tanstack Query를 활용한 API 중복 요청 해결](https://www.notion.so/Tanstack-Query-API-263b2ffc607580df8b40d836d1afb1fc?source=copy_link) <br> - [코드 스플리팅 & lazy loading 적용을 통한 페이지 최적화](https://www.notion.so/Lazy-Loading-263b2ffc607580088b60c780d4d67af7?source=copy_link) |
205+
| **김준우** | [커스텀 클래스 사용 시 타이포그래피 우선순위 문제](https://www.notion.so/248bbeae3e2b80adb9b2c8a16d298ea0) |
206+
| **유동환** | - |
207+
208+
### 공통 컴포넌트, 로직
209+
210+
| 작성자 | 설명 |
211+
| ---------- | ------------------------ |
212+
| **전지윤** | (모달) BasicModal 사용법 |
213+
| | (모달) BasicModal 설계 |
214+
| **김영현** | |
215+
| **김준우** | |
216+
| **유동환** | |

public/images/.gitkeep

Whitespace-only changes.

public/images/icons/no-data.svg

Lines changed: 8 additions & 0 deletions
Loading
-5.84 KB
Binary file not shown.
Lines changed: 15 additions & 0 deletions
Loading

public/images/og-image.png

421 KB
Loading

src/app/(auth)/login/page.tsx

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import Image from 'next/image';
44
import Link from 'next/link';
55

66
import { LoginForm } from '@/features/auth/login/components/LoginForm';
7-
import handleKakaoLogin from '@/features/auth/utils/kakao-login-handler';
87

98
const Login = () => {
109
return (
@@ -31,13 +30,13 @@ const Login = () => {
3130
</p>
3231
</div>
3332

34-
<div className="my-6 flex w-full items-center">
33+
{/* <div className="my-6 flex w-full items-center">
3534
<hr className="border-main flex-1" />
3635
<span className="txt-16-medium text-main mx-4"> OR </span>
3736
<hr className="border-main flex-1" />
38-
</div>
37+
</div> */}
3938

40-
<div className="flex w-full justify-between">
39+
{/* <div className="flex w-full justify-between">
4140
<p className="txt-16-medium text-gray-950">간편 로그인하기</p>
4241
<button
4342
type="button"
@@ -51,7 +50,7 @@ const Login = () => {
5150
height={42}
5251
/>
5352
</button>
54-
</div>
53+
</div> */}
5554
</div>
5655
);
5756
};

src/app/activities/page-content.tsx

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -46,14 +46,10 @@ const ActivitiesPageContent = () => {
4646
) : (
4747
<>
4848
{/* 지연 로드: 인기 체험 */}
49-
<Suspense fallback={<LoadingSpinner />}>
50-
<BestActivities />
51-
</Suspense>
49+
<BestActivities />
5250

5351
{/* 지연 로드: 전체 체험 목록 */}
54-
<Suspense fallback={<LoadingSpinner />}>
55-
<AllActivities />
56-
</Suspense>
52+
<AllActivities />
5753
</>
5854
)}
5955
</div>

src/app/layout.tsx

Lines changed: 34 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,40 @@ const pretendard = localFont({
1515
});
1616

1717
export const metadata: Metadata = {
18-
title: 'Nomadia',
19-
description: 'C2C service for Global Nomads',
18+
title: 'Nomadia - 노마드를 위한 액티비티 예약 플랫폼',
19+
description:
20+
'어디서든 나답게 머무는 경험을 시작하세요. 노마드들이 직접 체험을 등록하고 예약하는 경험 공유 서비스 노마디아입니다.',
21+
metadataBase: new URL('https://nomadia-two.vercel.app'),
22+
alternates: {
23+
canonical: '/',
24+
},
25+
openGraph: {
26+
title: 'Nomadia - 노마드를 위한 액티비티 예약 플랫폼',
27+
description:
28+
'어디서든 나답게 머무는 경험을 시작하세요. 노마드들이 직접 체험을 등록하고 예약하는 경험 공유 서비스',
29+
url: 'https://nomadia-two.vercel.app',
30+
siteName: 'Nomadia',
31+
locale: 'ko_KR',
32+
type: 'website',
33+
images: [
34+
{
35+
url: '/images/og-image.png',
36+
width: 1200,
37+
height: 630,
38+
alt: 'Nomadia - 노마드를 위한 액티비티 예약 플랫폼',
39+
},
40+
],
41+
},
42+
twitter: {
43+
card: 'summary_large_image',
44+
title: 'Nomadia - 노마드를 위한 액티비티 예약 플랫폼',
45+
description: '어디서든 나답게 머무는 경험을 시작하세요',
46+
images: ['/images/og-image.png'],
47+
},
48+
robots: {
49+
index: true,
50+
follow: true,
51+
},
2052
};
2153

2254
export default function RootLayout({

0 commit comments

Comments
 (0)