## Next.js: Route Handler 우선 사용
- **모든 API 엔드포인트는 Route Handler를 사용하여 구현하세요.**
- **데이터베이스 작업, 외부 API 호출, 인증 등 복잡한 서버 작업은 반드시 Route Handler를 사용하세요.**
- **Server Action은 단순 폼 제출 또는 간단한 데이터 처리에만 사용하세요.**
---
## Next.js 라우팅: App Router 사용
- **프로젝트 내 라우팅은 Pages Router 대신 App Router를 사용하세요.**
---
## 프로젝트 구조: 주요 폴더 구조 예시
- **프로젝트 구조는 다음과 같이 설정하세요. `src` 폴더는 사용하지 않습니다.**
```
your-nextjs-project/
│
├── app/ # App Router 라우트 폴더
│ ├── api/ # API 엔드포인트 관련 폴더
│ ├── dashboard/ # 개별 페이지 폴더 예시 (재사용되지 않는 컴포넌트 포함)
│ └─├── page.tsx # dashboard 페이지
│ └── DashboardStats.tsx # 페이지 전용 컴포넌트
├── components/ # 공통 컴포넌트 모음
│ ├── ui # ShadCN 공통 UI 컴포넌트
│ │ ├── button.tsx
│ │ ├── input.tsx
│ │ ├── select.tsx
│ │ ├── toast.tsx
│ │ ├── toaster.tsx
│ ├── layout/ # 레이아웃 관련 공통 컴포넌트
│ │ ├── header.tsx
│ │ ├── footer.tsx
│ │ ├── sidebar.tsx
│ ├── OptionsDropdown.tsx
│ ├── PromptInput.tsx
│ └── GeneratedImagePreview.tsx
│
├── store/ # 상태 관리 관련 폴더
│ ├── gallery.ts # 갤러리 관련 상태 관리
│ ├── auth.ts # 인증 관련 상태 관리
│ ├── community.ts # 커뮤니티 관련 상태 관리
│ └── index.ts # 상태 관리 유틸리티 및 타입 정의
│
├── hooks/ # 커스텀 훅 폴더
│ ├── use-toast.ts # 토스트 관련 훅
│ ├── use-auth.ts # 인증 관련 훅
│ └── use-media.ts # 미디어 쿼리 등 UI 관련 훅
│
├── db/ # 데이터베이스 관련 폴더
│ ├── schema.ts # DrizzleORM 스키마 정의 파일
│ └── index.ts # 데이터베이스 연결 초기화 파일
│
│
├── public/ # 정적 파일 (이미지, 폰트 등)
│ └── favicon.ico
│
├── styles/ # 글로벌 스타일 (CSS, SCSS, Tailwind 등)
│ └── globals.css
│
├── types/ # 공통 인터페이스 및 타입 정의
│ └── index.ts # 여러 파일에서 사용할 공통 타입 및 인터페이스 정의 파일
│
├── utils/ # 유틸리티 함수 모음
│ ├── fetcher.ts # API 호출 등 유틸리티 함수
│ └── mockData.ts # 목업 데이터 관리
│
├── middleware.ts # 미들웨어 설정 파일
├── .env # 환경 변수 설정 파일
├── drizzle.config.ts # DrizzleORM 설정 파일
├── next.config.mjs # Next.js 설정 파일
├── package.json # 프로젝트 패키지 정보
└── tsconfig.json # TypeScript 설정 파일
```
---
## TypeScript 사용: TS 사용 권장
- **프로젝트 반드시 TypeScript를 사용하세요.**
- **타입 안정성을 위해 모든 컴포넌트와 서버 로직에 TypeScript를 적용하세요.**
---
## TypeScript 인터페이스 정의 규칙: 'I' 접두사 사용
- **인터페이스 정의 시 이름 앞에 'I'를 접두사로 추가하세요.**
- 예시:
```typescript
export interface IComment {
id: string
text: string
author: string
}
```
- 인터페이스 생성은 types/index.ts 파일에 작성하세요.
---
## 컴포넌트 생성: ShadCN 우선 사용
- **모든 UI 컴포넌트는 ShadCN을 우선으로 생성하세요.**
- ShadCN 컴포넌트 생성 CLI 명령어는 `npx shadcn@latest add`입니다.
- **Toast 관련 컴포넌트는 다음 위치에 있습니다:**
```
components/ui/toast.tsx # Toast 기본 컴포넌트
components/ui/toaster.tsx # Toast 컨테이너 컴포넌트
hooks/use-toast.ts # Toast 커스텀 훅
```
---
## css등 스타일링은 기본적으로 tailwind를 사용하여 구현합니다.
- **최대한 스타일링은 기본적으로 tailwind를 사용하여 구현하고 불가시에만 커스터 css를 사용하세요.**
---
## 코드 배포는 향후 vercel을 사용하여 배포합니다.
- **코드 배포는 향후 vercel을 사용하여 배포합니다.**
- **배포는 정적 파일로 빌드외어 clinet side 기준으로 배포될 예정입니다.**
---
## 코드 포멧과 Lint 규칙을 반드시 지키세요.
- **코드 포멧과 Lint 규칙을 반드시 지켜서 코드가 일관성 있게 작성되게 해주세요.**
---
css
drizzle-orm
javascript
next.js
shadcn/ui
svelte
tailwindcss
typescript
+1 more
First Time Repository
This side project aims to create an engaging and dynamic web user interface using SvelteKit, leveraging the Pokémon API.
TypeScript
Languages:
CSS: 1.9KB
JavaScript: 0.5KB
TypeScript: 80.9KB
Created: 9/19/2024
Updated: 1/5/2025
All Repositories (1)
This side project aims to create an engaging and dynamic web user interface using SvelteKit, leveraging the Pokémon API.