nextjs15-init
npx skills add https://github.com/bear2u/my-skills --skill nextjs15-init
Agent 安装分布
Skill 文档
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) ì í ì:
- ìí°í°ëª : ìí°í° ì´ë¦ì ì ë ¥íì¸ì (ì: Product, Post, User)
- íë ì ì: ê° íë를 ì
ë ¥íì¸ì (íì: íëëª
:íì
, ì: title:string, price:number, isActive:boolean)
- ì§ì íì : string, number, boolean, Date
- createdAt, updatedAtì ìë ì¶ê°ë¨
- 주ì 기ë¥: íí°ë§/ì ë ¬ 기ì¤ì´ ë íë를 ì ííì¸ì
2-2. Custom ì¤í í리ì (D) ì í ì:
ë¤ì ì§ë¬¸ë¤ì ìì°¨ì ì¼ë¡ íì¸ì:
- UI ì»´í¬ëí¸: ShadCN/ui를 ì¬ì©íìê² ìµëê¹? (ì/ìëì¤)
- ìí ê´ë¦¬: Zustand를 ì¬ì©íìê² ìµëê¹? (ì/ìëì¤)
- ìë² ìí: Tanstack Query를 ì¬ì©íìê² ìµëê¹? (ì/ìëì¤)
- í¼ ê´ë¦¬: React Hook Form + Zod를 ì¬ì©íìê² ìµëê¹? (ì/ìëì¤)
- ë°ì´í°ë² ì´ì¤: Drizzle ORMì ì¬ì©íìê² ìµëê¹? (ì/ìëì¤)
- ì¸ì¦: Better Auth를 ì¬ì©íìê² ìµëê¹? (ì/ìëì¤)
- ì ëë©ì´ì : Framer Motionì ì¬ì©íìê² ìµëê¹? (ì/ìëì¤)
Step 3: ì íë ëë©ì¸ê³¼ ì¤íì ë°ë¼ íë¡ì í¸ ìì±
-
Next.js 15 íë¡ì í¸ ìì±:
- ì¬ì©ìê° ì§ì í í´ëëª ì¼ë¡ íë¡ì í¸ ìì±
- ëª
ë ¹ì´:
npx create-next-app@latest [í´ëëª ] --typescript --tailwind --app --use-npm - í´ëëª
ê³¼ íë¡ì í¸ëª
ì´ ë¤ë¥¸ ê²½ì°, ìì± í package.jsonì
nameíë를 ìì
-
ì íë í¨í¤ì§ ì¤ì¹:
npm install [í¨í¤ì§ë¤] -
í´ë 구조 ìì±: 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) -
ëë©ì¸ë³ ë³´ì¼ë¬íë ì´í¸ ìì±:
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
-
ShadCN ì¤ì¹ ë° êµ¬ì± (Essential ì´ì):
npx shadcn@latest init npx shadcn@latest add button card input form table -
ì½ë ê²ì¦ ë° ì¤ë¥ ìì :
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 모ë ì±ê³µí´ì¼ í©ëë¤.
-
ESLint ê²ì¦:
npm run lint-
â ì±ê³µ ìì:
â No ESLint warnings or errors -
â ì¤í¨ ìì (errorê° ìì¼ë©´ ë°ëì ìì ):
Error: 'useState' is defined but never used Error: Missing return type on function
-
-
íë¡ëì ë¹ë ê²ì¦:
npm run buildëë pnpm ì¬ì© ì:
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 ê²½ë¡ ë¬¸ì 를 ìì íê³ ë¤ì ë¹ëí´ì¼ í©ëë¤.
-
-
ê²ì¦ ê²°ê³¼ ìì½ (lintì build 모ë ì±ê³µ ì):
â Next.js 15 íë¡ì í¸ ìì± ìë£! â í¨í¤ì§ ì¤ì¹ ìë£ (ShadCN, Zustand, Tanstack Query ë±) â ESLint ê²ì¦ íµê³¼ (0 errors) â TypeScript ë¹ë ì±ê³µ â íë¡ëì ë¹ë ìë£ -
íë¡ì í¸ ì ë³´ ì ê³µ:
- í´ëëª : [ì¬ì©ì ì ë ¥ê°] (ì: my-todo-app)
- íë¡ì í¸ëª : [ì¬ì©ì ì ë ¥ê°] (ì: todo-app)
- ëë©ì¸: [ì íë ëë©ì¸] (Todo/Blog/Dashboard/E-commerce/Custom)
- ì íë ì¤í: [í리ì ëª ] (ShadCN, Zustand, Tanstack Query ë±)
- 주ì 기ë¥: [ëë©ì¸] CRUD, API Routes, íì ìì ì±
- ìì±ë íì¼: XXê° TypeScript íì¼ (app, components, lib)
-
ì¤í ë°©ë² ìë´:
cd [í´ëëª ] npm run dev # http://localhost:3000 ìì íì¸ -
ë¤ì ë¨ê³ ì ì (ì íì¬í, ëë©ì¸ë³):
- Todo: í목 ì¶ê°/ìì /ìì , íí°ë§(ì ì²´/ì§íì¤/ìë£), ìë£ í ê¸
- Blog: ê¸ ìì±/ìì , 목ë¡/ìì¸ íì´ì§, ê²ì, íê·¸
- Dashboard: ë°ì´í° ìê°í, ì°¨í¸, ì¬ì©ì ê´ë¦¬, íí°ë§
- E-commerce: ìí 목ë¡/ìì¸, ì¥ë°êµ¬ë, 주문, ì¹´í ê³ ë¦¬
- ê³µíµ: 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
- 모ë íë¡ì í¸ë