bear2u

nextjs15-init

710
189
# Install this skill:
npx skills add bear2u/my-skills --skill "nextjs15-init"

Install specific skill from multi-skill repository

# Description

Use when user wants to create a new Next.js 15 project (Todo/Blog/Dashboard/E-commerce/Custom domain) with App Router, ShadCN, Zustand, Tanstack Query, and modern Next.js stack

# SKILL.md


name: nextjs15-init
description: Use when user wants to create a new Next.js 15 project (Todo/Blog/Dashboard/E-commerce/Custom domain) with App Router, ShadCN, Zustand, Tanstack Query, and modern Next.js stack


NextJS 15 Init Skill

도메인 기반 Next.js 15 ν”„λ‘œμ νŠΈλ₯Ό μƒμ„±ν•˜κ³  ν˜„λŒ€μ μΈ μŠ€νƒμœΌλ‘œ μžλ™ μ„€μ •ν•©λ‹ˆλ‹€.
Todo, Blog, Dashboard, E-commerce λ˜λŠ” Custom 도메인을 μ„ νƒν•˜μ—¬ App Router 기반의 μ™„μ „ν•œ CRUD 앱을 μ¦‰μ‹œ 생성할 수 μžˆμŠ΅λ‹ˆλ‹€.

Quick Start

μŠ€ν‚¬ μ‹€ν–‰ μ‹œ λ‹€μŒ 정보λ₯Ό μž…λ ₯λ°›μŠ΅λ‹ˆλ‹€:
- 폴더λͺ… (예: my-todo-app)
- ν”„λ‘œμ νŠΈλͺ… (예: todo-app)
- 도메인 선택 (Todo/Blog/Dashboard/E-commerce/Custom)
- μŠ€νƒ 프리셋 (Minimal/Essential/Full Stack/Custom)

κ·Έ ν›„ μžλ™μœΌλ‘œ λ‹€μŒ 단계가 μ‹€ν–‰λ©λ‹ˆλ‹€:

# 1. Next.js 15 ν”„λ‘œμ νŠΈ 생성 (App Router, TypeScript, Tailwind)
npx create-next-app@latest [폴더λͺ…] --typescript --tailwind --app --use-npm

# 2. νŒ¨ν‚€μ§€ μ„€μΉ˜
npm install

# 3. 도메인별 App Router ꡬ쑰 μžλ™ 생성
# - app/[domain]/ (νŽ˜μ΄μ§€)
# - components/[domain]/ (μ»΄ν¬λ„ŒνŠΈ)
# - lib/stores/[domain].ts (Zustand μŠ€ν† μ–΄)
# - lib/api/[domain].ts (API 둜직)
# - lib/validations/[domain].ts (Zod μŠ€ν‚€λ§ˆ)

# 4. μ½”λ“œ ν’ˆμ§ˆ 검증 (ν•„μˆ˜)
npm run lint

# 5. 개발 μ„œλ²„ μ‹€ν–‰
npm run dev

Task Instructions

IMPORTANT: 이 μŠ€ν‚¬μ€ λŒ€ν™”ν˜•μœΌλ‘œ μ§„ν–‰λ©λ‹ˆλ‹€.

Step 1: 도메인 및 ν”„λ‘œμ νŠΈ μ„€μ • 질문

λ¨Όμ € μ‚¬μš©μžμ—κ²Œ μ΄λ ‡κ²Œ λ¬Όμ–΄λ³΄μ„Έμš”:

"Next.js 15 앱을 μƒμ„±ν•©λ‹ˆλ‹€. λ‹€μŒ 정보λ₯Ό μ•Œλ €μ£Όμ„Έμš”:

1. 도메인(μ—”ν‹°ν‹°) 선택

μ–΄λ–€ λ„λ©”μΈμ˜ 앱을 λ§Œλ“œμ‹œκ² μŠ΅λ‹ˆκΉŒ?

A) Todo (ν•  일 관리)
- ν•„λ“œ: title, description, completed, createdAt, updatedAt
- κΈ°λŠ₯: CRUD, 필터링(전체/진행쀑/μ™„λ£Œ), μ²΄ν¬λ°•μŠ€ ν† κΈ€
- API: /api/todos (GET, POST, PATCH, DELETE)

B) Blog (λΈ”λ‘œκ·Έ/CMS)
- ν•„λ“œ: title, content, excerpt, slug, published, createdAt, updatedAt
- κΈ°λŠ₯: CRUD, κΈ€ μž‘μ„±/μˆ˜μ •, λͺ©λ‘/상세 νŽ˜μ΄μ§€, 검색
- API: /api/posts (GET, POST, PATCH, DELETE)

C) Dashboard (λŒ€μ‹œλ³΄λ“œ/μ–΄λ“œλ―Ό)
- ν•„λ“œ: 톡계, 차트 데이터, μ‚¬μš©μž 관리
- κΈ°λŠ₯: 데이터 μ‹œκ°ν™”, ν…Œμ΄λΈ”, 필터링, νŽ˜μ΄μ§€λ„€μ΄μ…˜
- API: /api/analytics, /api/users

D) E-commerce (μ‡Όν•‘λͺ°)
- ν•„λ“œ: name, price, description, images, stock, category
- κΈ°λŠ₯: μƒν’ˆ λͺ©λ‘/상세, μž₯λ°”κ΅¬λ‹ˆ, μ£Όλ¬Έ
- API: /api/products, /api/cart, /api/orders

E) Custom (직접 μ •μ˜)
- μ—”ν‹°ν‹°λͺ…κ³Ό ν•„λ“œλ₯Ό 직접 μž…λ ₯

2. ν”„λ‘œμ νŠΈ 정보
- 폴더λͺ…: ν”„λ‘œμ νŠΈλ₯Ό 생성할 폴더 이름 (κΈ°λ³Έκ°’: [도메인]-app, 예: todo-app)
- 이 폴더에 Next.js ν”„λ‘œμ νŠΈκ°€ μƒμ„±λ©λ‹ˆλ‹€
- ν”„λ‘œμ νŠΈλͺ…: Next.js ν”„λ‘œμ νŠΈ 이름 (κΈ°λ³Έκ°’: 폴더λͺ…κ³Ό 동일)
- package.json의 name ν•„λ“œμ— μ‚¬μš©λ©λ‹ˆλ‹€

3. μŠ€νƒ 프리셋 선택

λ‹€μŒ 쀑 ν•˜λ‚˜λ₯Ό μ„ νƒν•΄μ£Όμ„Έμš”:

A) Essential (ꢌμž₯)
- βœ… Next.js 15 (App Router)
- βœ… TypeScript
- βœ… Tailwind CSS
- βœ… ShadCN/ui (UI μ»΄ν¬λ„ŒνŠΈ)
- βœ… Zustand (ν΄λΌμ΄μ–ΈνŠΈ μƒνƒœ 관리)
- βœ… React Hook Form + Zod (폼 관리 + 검증)
- βœ… Lucide Icons
- ❌ Tanstack Query μ œμ™Έ
- ❌ Prisma μ œμ™Έ
- ❌ NextAuth μ œμ™Έ

B) Minimal (κ°€μž₯ λ‹¨μˆœ)
- βœ… Next.js 15 (App Router)
- βœ… TypeScript
- βœ… Tailwind CSS
- ❌ ShadCN μ œμ™Έ
- ❌ Zustand μ œμ™Έ
- ❌ React Hook Form μ œμ™Έ
- ❌ 기타 라이브러리 μ œμ™Έ

C) Full Stack (λͺ¨λ“  κΈ°λŠ₯)
- βœ… Next.js 15 (App Router)
- βœ… TypeScript
- βœ… Tailwind CSS
- βœ… ShadCN/ui
- βœ… Zustand (ν΄λΌμ΄μ–ΈνŠΈ μƒνƒœ)
- βœ… Tanstack Query (μ„œλ²„ μƒνƒœ)
- βœ… React Hook Form + Zod
- βœ… Drizzle ORM (TypeScript-first ORM)
- βœ… Better Auth (인증)
- βœ… Framer Motion (μ• λ‹ˆλ©”μ΄μ…˜)
- βœ… Lucide Icons

D) Custom (직접 선택)
- 각 κΈ°λŠ₯을 κ°œλ³„μ μœΌλ‘œ 선택

μ–΄λ–€ 도메인과 프리셋을 μ„ νƒν•˜μ‹œκ² μŠ΅λ‹ˆκΉŒ? (도메인: A/B/C/D/E, 프리셋: A/B/C/D)"

Step 2: Custom 선택 μ‹œ μΆ”κ°€ 질문

2-1. Custom 도메인 (E) 선택 μ‹œ:

  1. μ—”ν‹°ν‹°λͺ…: μ—”ν‹°ν‹° 이름을 μž…λ ₯ν•˜μ„Έμš” (예: Product, Post, User)
  2. ν•„λ“œ μ •μ˜: 각 ν•„λ“œλ₯Ό μž…λ ₯ν•˜μ„Έμš” (ν˜•μ‹: ν•„λ“œλͺ…:νƒ€μž…, 예: title:string, price:number, isActive:boolean)
  3. 지원 νƒ€μž…: string, number, boolean, Date
  4. createdAt, updatedAt은 μžλ™ 좔가됨
  5. μ£Όμš” κΈ°λŠ₯: 필터링/μ •λ ¬ 기쀀이 될 ν•„λ“œλ₯Ό μ„ νƒν•˜μ„Έμš”

2-2. Custom μŠ€νƒ 프리셋 (D) 선택 μ‹œ:

λ‹€μŒ μ§ˆλ¬Έλ“€μ„ 순차적으둜 ν•˜μ„Έμš”:

  1. UI μ»΄ν¬λ„ŒνŠΈ: ShadCN/uiλ₯Ό μ‚¬μš©ν•˜μ‹œκ² μŠ΅λ‹ˆκΉŒ? (예/μ•„λ‹ˆμ˜€)
  2. μƒνƒœ 관리: Zustandλ₯Ό μ‚¬μš©ν•˜μ‹œκ² μŠ΅λ‹ˆκΉŒ? (예/μ•„λ‹ˆμ˜€)
  3. μ„œλ²„ μƒνƒœ: Tanstack Queryλ₯Ό μ‚¬μš©ν•˜μ‹œκ² μŠ΅λ‹ˆκΉŒ? (예/μ•„λ‹ˆμ˜€)
  4. 폼 관리: React Hook Form + Zodλ₯Ό μ‚¬μš©ν•˜μ‹œκ² μŠ΅λ‹ˆκΉŒ? (예/μ•„λ‹ˆμ˜€)
  5. λ°μ΄ν„°λ² μ΄μŠ€: Drizzle ORM을 μ‚¬μš©ν•˜μ‹œκ² μŠ΅λ‹ˆκΉŒ? (예/μ•„λ‹ˆμ˜€)
  6. 인증: Better Authλ₯Ό μ‚¬μš©ν•˜μ‹œκ² μŠ΅λ‹ˆκΉŒ? (예/μ•„λ‹ˆμ˜€)
  7. μ• λ‹ˆλ©”μ΄μ…˜: Framer Motion을 μ‚¬μš©ν•˜μ‹œκ² μŠ΅λ‹ˆκΉŒ? (예/μ•„λ‹ˆμ˜€)

Step 3: μ„ νƒλœ 도메인과 μŠ€νƒμ— 따라 ν”„λ‘œμ νŠΈ 생성

  1. Next.js 15 ν”„λ‘œμ νŠΈ 생성:
  2. μ‚¬μš©μžκ°€ μ§€μ •ν•œ 폴더λͺ…μœΌλ‘œ ν”„λ‘œμ νŠΈ 생성
  3. λͺ…λ Ήμ–΄: npx create-next-app@latest [폴더λͺ…] --typescript --tailwind --app --use-npm
  4. 폴더λͺ…κ³Ό ν”„λ‘œμ νŠΈλͺ…이 λ‹€λ₯Έ 경우, 생성 ν›„ package.json의 name ν•„λ“œλ₯Ό μˆ˜μ •

  5. μ„ νƒλœ νŒ¨ν‚€μ§€ μ„€μΉ˜: npm install [νŒ¨ν‚€μ§€λ“€]

  6. 폴더 ꡬ쑰 생성: App Router 기반 ꡬ쑰
    app/ β”œβ”€β”€ (auth)/ β”œβ”€β”€ [domain]/ β”œβ”€β”€ api/[domain]/ β”œβ”€β”€ layout.tsx └── page.tsx components/ β”œβ”€β”€ ui/ (ShadCN) β”œβ”€β”€ [domain]/ └── layouts/ lib/ β”œβ”€β”€ db/ (Prisma) β”œβ”€β”€ stores/ (Zustand) β”œβ”€β”€ api/ β”œβ”€β”€ utils/ └── validations/ (Zod)

  7. 도메인별 λ³΄μΌλŸ¬ν”Œλ ˆμ΄νŠΈ 생성:

A) Todo: title, description, completed, createdAt, updatedAt
- API Routes: /api/todos (CRUD)
- Pages: /todos (리슀트), /todos/[id] (상세)
- Components: TodoList, TodoItem, TodoForm
- Store: useTodoStore (Zustand)
- Validation: todoSchema (Zod)

B) Blog: title, content, excerpt, slug, published, createdAt, updatedAt
- API Routes: /api/posts (CRUD)
- Pages: /blog (λͺ©λ‘), /blog/[slug] (상세), /blog/write (μž‘μ„±)
- Components: PostList, PostCard, PostEditor
- Store: usePostStore (Zustand)
- Validation: postSchema (Zod)

C) Dashboard: 톡계, 차트, μ‚¬μš©μž 관리
- API Routes: /api/analytics, /api/users
- Pages: /dashboard (메인), /dashboard/users (μ‚¬μš©μž)
- Components: Chart, StatsCard, DataTable
- Store: useDashboardStore (Zustand)
- Validation: userSchema (Zod)

D) E-commerce: name, price, description, images, stock, category
- API Routes: /api/products, /api/cart, /api/orders
- Pages: /products (λͺ©λ‘), /products/[id] (상세), /cart (μž₯λ°”κ΅¬λ‹ˆ)
- Components: ProductCard, ProductGrid, Cart
- Store: useCartStore, useProductStore (Zustand)
- Validation: productSchema, cartSchema (Zod)

E) Custom: μ‚¬μš©μž μ •μ˜ ν•„λ“œ
- API Routes: κΈ°λ³Έ CRUD
- Pages: κΈ°λ³Έ List/Detail
- Components: κΈ°λ³Έ CRUD μ»΄ν¬λ„ŒνŠΈ
- Store: κΈ°λ³Έ store
- Validation: κΈ°λ³Έ schema

  1. ShadCN μ„€μΉ˜ 및 ꡬ성 (Essential 이상):
    bash npx shadcn@latest init npx shadcn@latest add button card input form table

  2. μ½”λ“œ 검증 및 였λ₯˜ μˆ˜μ •:

a. npm run lint μ‹€ν–‰

b. 발견된 였λ₯˜ μˆ˜μ •:
- Import 경둜: @/ alias μ‚¬μš© (tsconfig.json μ„€μ •)
- TypeScript νƒ€μž…: λͺ¨λ“  νƒ€μž… λͺ…μ‹œ
- ESLint κ·œμΉ™: μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” λ³€μˆ˜, import 제거
- Next.js κ·œμΉ™: metadata, generateStaticParams λ“±
- 'use client' μ§€μ‹œμ–΄: useState, useEffect λ“± React Hooks μ‚¬μš© μ‹œ 파일 μ΅œμƒλ‹¨μ— μΆ”κ°€

c. npm run build λ˜λŠ” pnpm build μ‹€ν–‰

d. λΉŒλ“œ 였λ₯˜ μˆ˜μ •:
- TypeScript νƒ€μž… 였λ₯˜: νƒ€μž… 뢈일치, nullable 체크 λˆ„λ½ λ“±
- λͺ¨λ“ˆ import 였λ₯˜: 경둜 확인, νŒ¨ν‚€μ§€ μ„€μΉ˜ 확인
- Server/Client Component 였λ₯˜: μ μ ˆν•œ 'use client' μ§€μ‹œμ–΄ μΆ”κ°€
- Dynamic import 였λ₯˜: server-only μ½”λ“œκ°€ ν΄λΌμ΄μ–ΈνŠΈμ—μ„œ μ‚¬μš©λ˜μ§€ μ•Šλ„λ‘ 확인

e. μž¬κ²€μ¦: lint와 build λͺ¨λ‘ 성곡할 λ•ŒκΉŒμ§€ 반볡

f. λͺ©ν‘œ:
- npm run lint κ²°κ³Όκ°€ "0 errors"
- npm run build λ˜λŠ” pnpm build 성곡

βœ… CRITICAL: 이 λ‹¨κ³„λŠ” ν•„μˆ˜μž…λ‹ˆλ‹€. lint와 build λͺ¨λ‘ 성곡해야 λ‹€μŒ λ‹¨κ³„λ‘œ μ§„ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

Step 4: μ΅œμ’… 검증 및 μ•ˆλ‚΄

βœ… CRITICAL: 이 λ‹¨κ³„λŠ” ν”„λ‘œμ νŠΈ μ™„λ£Œμ˜ ν•„μˆ˜ μ‘°κ±΄μž…λ‹ˆλ‹€. lint와 build λͺ¨λ‘ 성곡해야 ν•©λ‹ˆλ‹€.

  1. ESLint 검증:
    bash npm run lint

  2. βœ… 성곡 μ˜ˆμ‹œ:
    βœ” No ESLint warnings or errors

  3. ❌ μ‹€νŒ¨ μ˜ˆμ‹œ (errorκ°€ 있으면 λ°˜λ“œμ‹œ μˆ˜μ •):
    Error: 'useState' is defined but never used Error: Missing return type on function

  4. ν”„λ‘œλ•μ…˜ λΉŒλ“œ 검증:
    bash npm run build

λ˜λŠ” pnpm μ‚¬μš© μ‹œ:
bash pnpm build

  • βœ… 성곡 μ˜ˆμ‹œ:
    βœ“ Compiled successfully βœ“ Linting and checking validity of types βœ“ Collecting page data βœ“ Generating static pages

  • ❌ μ‹€νŒ¨ μ˜ˆμ‹œ (λΉŒλ“œ μ—λŸ¬ λ°œμƒ μ‹œ λ°˜λ“œμ‹œ μˆ˜μ •):
    Type error: Property 'xyz' does not exist on type 'ABC' Error: Module not found: Can't resolve '@/...'

μ€‘μš”: λΉŒλ“œκ°€ μ‹€νŒ¨ν•˜λ©΄ TypeScript νƒ€μž… 였λ₯˜λ‚˜ import 경둜 문제λ₯Ό μˆ˜μ •ν•˜κ³  λ‹€μ‹œ λΉŒλ“œν•΄μ•Ό ν•©λ‹ˆλ‹€.

  1. 검증 κ²°κ³Ό μš”μ•½ (lint와 build λͺ¨λ‘ 성곡 μ‹œ):
    βœ… Next.js 15 ν”„λ‘œμ νŠΈ 생성 μ™„λ£Œ! βœ… νŒ¨ν‚€μ§€ μ„€μΉ˜ μ™„λ£Œ (ShadCN, Zustand, Tanstack Query λ“±) βœ… ESLint 검증 톡과 (0 errors) βœ… TypeScript λΉŒλ“œ 성곡 βœ… ν”„λ‘œλ•μ…˜ λΉŒλ“œ μ™„λ£Œ

  2. ν”„λ‘œμ νŠΈ 정보 제곡:

  3. 폴더λͺ…: [μ‚¬μš©μž μž…λ ₯κ°’] (예: my-todo-app)
  4. ν”„λ‘œμ νŠΈλͺ…: [μ‚¬μš©μž μž…λ ₯κ°’] (예: todo-app)
  5. 도메인: [μ„ νƒλœ 도메인] (Todo/Blog/Dashboard/E-commerce/Custom)
  6. μ„ νƒλœ μŠ€νƒ: [프리셋λͺ…] (ShadCN, Zustand, Tanstack Query λ“±)
  7. μ£Όμš” κΈ°λŠ₯: [도메인] CRUD, API Routes, νƒ€μž… μ•ˆμ „μ„±
  8. μƒμ„±λœ 파일: XX개 TypeScript 파일 (app, components, lib)

  9. μ‹€ν–‰ 방법 μ•ˆλ‚΄:
    bash cd [폴더λͺ…] npm run dev # http://localhost:3000 μ—μ„œ 확인

  10. λ‹€μŒ 단계 μ œμ•ˆ (선택사항, 도메인별):

  11. Todo: ν•­λͺ© μΆ”κ°€/μˆ˜μ •/μ‚­μ œ, 필터링(전체/진행쀑/μ™„λ£Œ), μ™„λ£Œ ν† κΈ€
  12. Blog: κΈ€ μž‘μ„±/μˆ˜μ •, λͺ©λ‘/상세 νŽ˜μ΄μ§€, 검색, νƒœκ·Έ
  13. Dashboard: 데이터 μ‹œκ°ν™”, 차트, μ‚¬μš©μž 관리, 필터링
  14. E-commerce: μƒν’ˆ λͺ©λ‘/상세, μž₯λ°”κ΅¬λ‹ˆ, μ£Όλ¬Έ, μΉ΄ν…Œκ³ λ¦¬
  15. 곡톡: TypeScript νƒ€μž… μ•ˆμ „μ„±, API ν…ŒμŠ€νŠΈ, 배포 (Vercel)

Core Principles

  • App Router: Next.js 15 App Router 기반 ꡬ쑰
  • νƒ€μž… μ•ˆμ „μ„±: TypeScript Strict Mode
  • μ»΄ν¬λ„ŒνŠΈ μž¬μ‚¬μš©: ShadCN/ui ν™œμš©
  • μƒνƒœ 관리: Zustand (ν΄λΌμ΄μ–ΈνŠΈ), Tanstack Query (μ„œλ²„)
  • μ½”λ“œ ν’ˆμ§ˆ: ESLint + Prettier
  • 폼 검증: React Hook Form + Zod

Reference Files

references/setup-guide.md - μ™„μ „ν•œ κ°€μ΄λ“œ
- κΈ°λ³Έ μ…‹μ—… (도메인별 CRUD, API Routes, μ»΄ν¬λ„ŒνŠΈ)
- 선택 μ˜΅μ…˜: ShadCN, Zustand, Tanstack Query, Drizzle ORM, Better Auth, Framer Motion

Notes

  • λŒ€ν™”ν˜• μŠ€ν‚¬: μ‚¬μš©μžμ—κ²Œ 도메인과 프리셋 선택을 톡해 λ§žμΆ€ν˜• μ•± ꡬ성
  • 도메인 지원: Todo, Blog, Dashboard, E-commerce, Custom (μ‚¬μš©μž μ •μ˜)
  • 프리셋 제곡: Full Stack, Essential, Minimal, Custom
  • 선택 κ°€λŠ₯ κΈ°λŠ₯: ShadCN, Zustand, Tanstack Query, Drizzle ORM, Better Auth, Framer Motion
  • κΈ°λ³Έ 포함: Next.js 15 (App Router), TypeScript, Tailwind CSS, ESLint
  • ν”Œλž«νΌ: Web (Vercel μ΅œμ ν™”)
  • ν’ˆμ§ˆ 보증:
  • λͺ¨λ“  ν”„λ‘œμ νŠΈλŠ” npm run lint 톡과 ν•„μˆ˜
  • TypeScript Strict Mode
  • νƒ€μž… μ•ˆμ „μ„± 보μž₯
  • App Router νŒ¨ν„΄ μ€€μˆ˜
  • 도메인별 μ΅œμ ν™”λœ UI/UX

# Supported AI Coding Agents

This skill is compatible with the SKILL.md standard and works with all major AI coding agents:

Learn more about the SKILL.md standard and how to use these skills with your preferred AI coding agent.