Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
14 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .agents/skills/git/timo-commit/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@
→ `docs/conventions/commit.md` 참조 (타입 목록·스코프 기준·형식·규칙)

핵심 요약:

- 형식: `타입(스코프): 한국어 제목 (#이슈번호)`
- 본문: 반드시 `~했습니다` 체로 종결
- 대괄호 스코프 금지: `feat: [web] …` ❌
Expand Down
2 changes: 2 additions & 0 deletions .agents/skills/git/timo-pr/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -184,6 +184,7 @@ close #5
```

항목별 작성 기준:

- **변경 요약**: 동사로 시작하는 단문. "~를 추가했습니다", "~를 분리했습니다"
- **이유**: "기존에는 ~였기 때문에", "~가 발생해서" 형식으로 원인을 명확히
- **구현 방식**: "무엇을 했다"가 아니라 "어떻게 동작하는가"를 중심으로 쓴다. 핵심 설정값·데이터 흐름·동작 순서를 구체적으로 서술하고, 인터페이스나 설정이 비자명하면 짧은 코드 블록으로 보여준다. 대안을 검토했다면 선택하지 않은 이유도 함께 적는다. 긴 구현 전체는 붙이지 않는다.
Expand Down Expand Up @@ -223,6 +224,7 @@ close #5
reviewer가 중점적으로 봐야 할 지점을 좁혀 준다. 별도 항목 구조 없이 본문 안에 자연스럽게 녹여 쓴다.

적을 내용:

- 판단이 필요한 구조 선택
- 서버/클라이언트 import boundary가 올바른지
- 현재 구현이 기대는 정책 또는 전제
Expand Down
13 changes: 9 additions & 4 deletions .agents/skills/meta/timo-manage/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
## 언제 스킬로 만들 것인가

아래 중 2개 이상이면 스킬화 가치가 있다:

- 같은 흐름으로 3번 이상 반복 요청이 왔다
- 특정 순서를 지켜야 실수가 줄어드는 작업이다
- 참조해야 할 문서·파일 경로가 명확히 존재한다
Expand Down Expand Up @@ -72,33 +73,37 @@
## Phase 2 — SKILL.md 작업

**추가**

1. 카테고리 결정: `git/`, `ui/`, `quality/`, `meta/`
2. `.agents/skills/{category}/timo-{name}/SKILL.md` 생성
3. 위 기본 형식으로 작성, 트리거·참조·Phase 순서 준수

**수정**

1. 해당 SKILL.md 를 읽고 변경 내용 반영
2. 참조 경로가 존재하는지 확인 (`docs/` 경로 변경 여부)

**폐기**

1. SKILL.md 상단에 `> ⚠️ DEPRECATED — {대체 스킬명} 사용` 표시
2. AGENTS.md 트리거 행 제거

---

## Phase 3 — AGENTS.md 갱신

| 작업 | AGENTS.md 변경 |
|------|---------------|
| 작업 | AGENTS.md 변경 |
| ---- | ------------------------------------------- |
| 추가 | 트리거 표에 새 행 추가 (트리거 → 스킬 경로) |
| 수정 | 라우팅 변경 있으면 해당 행 갱신 |
| 폐기 | 트리거 행 제거 |
| 수정 | 라우팅 변경 있으면 해당 행 갱신 |
| 폐기 | 트리거 행 제거 |

---

## Phase 4 — 스킬 품질 체크

완성 후 아래를 확인한다:

- [ ] 트리거가 자연어로 쓰여 있고 실제 요청과 일치하는가
- [ ] Phase가 2개 이상이고 각 단계가 구체적인가
- [ ] 참조 파일 경로가 실제로 존재하는가 (`docs/conventions/`, `docs/architecture/` 등)
Expand Down
14 changes: 7 additions & 7 deletions .agents/skills/meta/timo-orchestrate/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,13 +24,13 @@

## 자주 쓰는 스킬 체인

| 상황 | 실행 순서 |
|------|----------|
| 새 기능 처음부터 끝까지 | `timo-issue` → 구현 스킬 → `timo-review` → `timo-verify` → `timo-commit` → `timo-pr` |
| 피그마 디자인 → 컴포넌트 + 스토리 | `timo-figma` → `timo-component` → `timo-storybook` → `timo-commit` |
| 코드 구조 개선 후 PR | `timo-refactor` → `timo-review` → `timo-verify` → `timo-commit` → `timo-pr` |
| 이슈 없이 빠른 버그 픽스 | `timo-component` 또는 `timo-page` → `timo-verify` → `timo-commit` |
| 페이지 + 데이터 연동 | `timo-issue` → `timo-page` → `timo-review` → `timo-commit` |
| 상황 | 실행 순서 |
| --------------------------------- | ------------------------------------------------------------------------------------ |
| 새 기능 처음부터 끝까지 | `timo-issue` → 구현 스킬 → `timo-review` → `timo-verify` → `timo-commit` → `timo-pr` |
| 피그마 디자인 → 컴포넌트 + 스토리 | `timo-figma` → `timo-component` → `timo-storybook` → `timo-commit` |
| 코드 구조 개선 후 PR | `timo-refactor` → `timo-review` → `timo-verify` → `timo-commit` → `timo-pr` |
| 이슈 없이 빠른 버그 픽스 | `timo-component` 또는 `timo-page` → `timo-verify` → `timo-commit` |
| 페이지 + 데이터 연동 | `timo-issue` → `timo-page` → `timo-review` → `timo-commit` |

구현 스킬은 작업 유형에 따라 `timo-component` / `timo-page` / `timo-figma` 중 하나를 선택한다.

Expand Down
16 changes: 9 additions & 7 deletions .agents/skills/quality/timo-refactor/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,19 +18,20 @@

아래 중 하나라도 해당하면 리팩터링을 권고한다:

| 기준 | 판단 방법 |
|------|----------|
| 함수 50줄 초과 | 파일 직접 확인 |
| 파일 800줄 초과 | `wc -l` 또는 에디터 라인 수 확인 |
| 동일 로직 3곳 이상 중복 | `git grep` 으로 패턴 검색 |
| `_components`에 클라이언트 로직 혼재 | `'use client'`, useQuery, zustand 임포트 여부 |
| 컴포넌트 계층 위반 | `packages/timo-design-system` → `apps` 참조 여부 |
| 기준 | 판단 방법 |
| ------------------------------------ | ------------------------------------------------ |
| 함수 50줄 초과 | 파일 직접 확인 |
| 파일 800줄 초과 | `wc -l` 또는 에디터 라인 수 확인 |
| 동일 로직 3곳 이상 중복 | `git grep` 으로 패턴 검색 |
| `_components`에 클라이언트 로직 혼재 | `'use client'`, useQuery, zustand 임포트 여부 |
| 컴포넌트 계층 위반 | `packages/timo-design-system` → `apps` 참조 여부 |

---

## Phase 2 — 범위 정의

리팩터링 전, 아래를 명확히 한다:

- 기능 동작은 변경하지 않는다
- 테스트가 있다면 리팩터링 후에도 통과해야 한다
- 커밋 단위: 리팩터링 커밋에 기능 변경을 섞지 않는다
Expand Down Expand Up @@ -103,6 +104,7 @@ After: lib/format.ts 로 추출 후 임포트
## Phase 5 — 안전 체크

실행 후:

- [ ] 화면 동작이 리팩터링 전과 동일한가
- [ ] `pnpm check-types` 통과
- [ ] `pnpm lint` 통과
Expand Down
4 changes: 4 additions & 0 deletions .agents/skills/quality/timo-review/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ git diff develop...HEAD --stat
```

파일 분류 후 각 카테고리별로 집중 체크한다:

- `app/` 하위 → 라우트·컴포넌트 계층
- `stores/`, `queries/` → 상태 관리 패턴
- `packages/timo-design-system/` → 모듈 경계
Expand Down Expand Up @@ -86,12 +87,15 @@ git diff develop...HEAD --stat
## 리뷰 결과

### BLOCK (머지 전 수정 필수)

- ...

### SUGGEST (권장 개선)

- ...

### NOTE (참고)

- ...
```

Expand Down
17 changes: 12 additions & 5 deletions .agents/skills/ui/timo-component/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,39 +13,46 @@
## 워크플로우

### Phase 1 — 범위 파악

- 여러 앱에서 공유할지, 앱 전역에서 공유할지, 특정 도메인에만 쓰일지 판단
- 순수 UI(props만 받음)인지, 클라이언트 로직(상태·쿼리) 포함인지 구분
- 파일 위치 결정:

| 유형 | 위치 |
|------|------|
| 패키지 공유 범용 UI | `packages/timo-design-system/src/` |
| 앱 전역 공유 UI | `apps/timo-web/components/` |
| 도메인 종속 순수 UI | `apps/timo-web/app/(domain)/_components/` |
| 유형 | 위치 |
| ------------------------------- | ----------------------------------------- |
| 패키지 공유 범용 UI | `packages/timo-design-system/src/` |
| 앱 전역 공유 UI | `apps/timo-web/components/` |
| 도메인 종속 순수 UI | `apps/timo-web/app/(domain)/_components/` |
| 도메인 종속 클라이언트 컨테이너 | `apps/timo-web/app/(domain)/_containers/` |

**`_components` vs `_containers` 구분 기준:**

- `_components/` — `'use client'` 없이도 동작 가능한 순수 표현 컴포넌트. props만 받고 외부 상태·사이드이펙트 없음
- `_containers/` — `'use client'` 필수. useQuery, zustand store, useState 등 외부 상태와 결합된 컨테이너

### Phase 2 — Props 설계

- `interface XxxProps` 로 props 타입 정의
- 필수/선택 props 구분, `any` 금지
- 콜백 props는 반환 타입까지 명시 (`onSelect: (id: string) => void`)

### Phase 3 — 마크업 구조 설계

- 시맨틱 태그 우선, 의미 없는 div 래퍼 지양
- 인터랙티브 요소는 올바른 태그 사용 (버튼 → `<button>`)
- 텍스트 없는 버튼·아이콘에 `aria-label` 부여
- Fragment `<>` 를 최상단 래퍼로 사용

### Phase 4 — 구현 및 스타일링

- Arrow function + Named export
- Tailwind 클래스로만 스타일링
- 이벤트 핸들러는 `handle` 접두사

### Phase 5 — 자가 검토

생성 후 아래를 확인한다:

- [ ] `any` 미사용
- [ ] 절대 경로 import
- [ ] 접근성 속성 누락 없음
Expand Down
5 changes: 5 additions & 0 deletions .agents/skills/ui/timo-figma/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,16 +16,21 @@
## 워크플로우

### Phase 1 — 피그마 노드 읽기

피그마 MCP를 통해 대상 프레임/컴포넌트 스펙을 읽는다.

- 크기, 패딩, 색상, 타이포그래피, 간격

### Phase 2 — 디자인 토큰 매핑

읽어온 값을 `docs/design/tokens.md` 의 토큰에 매핑한다.
토큰에 없는 값이 있으면 사용자에게 토큰 추가 여부 확인한다.

### Phase 3 — 컴포넌트 생성

`timo-component` 워크플로우를 따라 컴포넌트 생성.
피그마 스펙을 Tailwind 클래스로 변환한다.

### Phase 4 — Story 생성

`timo-storybook` 워크플로우를 따라 Story 파일을 함께 생성한다.
14 changes: 9 additions & 5 deletions .agents/skills/ui/timo-page/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,29 +15,33 @@
## 워크플로우

### Phase 1 — 라우트 설계

- `app/` 디렉토리 구조 결정 (`app/[route]/page.tsx`)
- 레이아웃 공유 범위 파악 (`layout.tsx` 위치)
- 동적 라우트 여부 확인 (`[id]`, `[...slug]`)

### Phase 2 — 데이터 페칭 전략 결정

| 상황 | 전략 |
|------|------|
| SEO 필요 / 초기 데이터 필수 | Server Component + fetch |
| 실시간 갱신 / 사용자 인터랙션 | Client Component + React Query |
| URL 기반 필터·검색 | searchParams → React Query queryKey |
| 상황 | 전략 |
| ----------------------------- | ----------------------------------- |
| SEO 필요 / 초기 데이터 필수 | Server Component + fetch |
| 실시간 갱신 / 사용자 인터랙션 | Client Component + React Query |
| URL 기반 필터·검색 | searchParams → React Query queryKey |

### Phase 3 — 상태 관리 결정

- URL로 공유 가능한 상태(필터, 탭, 페이지) → searchParams 우선
- 사용자 세션·전역 UI 상태 → Zustand
- 서버 데이터는 Zustand에 복사하지 않음

### Phase 4 — 컴포넌트 조합

- `page.tsx`는 데이터 페칭 + 레이아웃 조합만 담당
- 도메인 로직은 feature 컴포넌트로 분리
- 재사용 가능한 UI는 ui 컴포넌트 또는 `@repo/timo-design-system` 활용

### Phase 5 — 자가 검토

- [ ] `page.tsx` 50줄 이하 (비대해지면 컴포넌트 분리)
- [ ] 서버/클라이언트 컴포넌트 경계 명확
- [ ] 로딩·에러 상태 처리 (`loading.tsx`, `error.tsx`)
4 changes: 4 additions & 0 deletions .agents/skills/ui/timo-storybook/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,19 +13,23 @@
## 워크플로우

### Phase 1 — 컴포넌트 분석

대상 컴포넌트를 읽어 props 인터페이스와 사용 패턴 파악한다.

### Phase 2 — Story 구성 계획

- `Default`: 기본 상태
- 주요 props 변형마다 Story 추가 (`Primary`, `Disabled`, `WithIcon` 등)
- 인터랙티브 요소가 있으면 `play` 함수로 동작 시나리오 추가

### Phase 3 — Story 파일 생성

- 위치: 컴포넌트와 동일 폴더 (`Xxx.stories.tsx`)
- `argTypes` 로 Controls 패널 연동
- a11y addon 설정 포함

### Phase 4 — 자가 검토

- [ ] 필수 props가 Controls에 노출됨
- [ ] 빈 상태·에러 상태 등 엣지케이스 Story 포함
- [ ] 컴포넌트 description 작성
1 change: 1 addition & 0 deletions .husky/pre-commit
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
pnpm exec lint-staged
1 change: 1 addition & 0 deletions .prettierignore
Original file line number Diff line number Diff line change
Expand Up @@ -14,5 +14,6 @@ yarn.lock
# misc
public
.github
.turbo

turbo/generators/templates/**
9 changes: 9 additions & 0 deletions .prettierrc.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{
"semi": true,
"singleQuote": false,
"tabWidth": 2,
"trailingComma": "all",
"printWidth": 80,
"arrowParens": "always",
"endOfLine": "lf"
}
42 changes: 21 additions & 21 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,42 +29,42 @@ Claude Code / Codex 공통 진입점입니다.

### Git

| 트리거 | Read 할 파일 |
|--------|-------------|
| 트리거 | Read 할 파일 |
| ------------------------------------- | ----------------------------------------- |
| 커밋, commit, 커밋해줘, 커밋 만들어줘 | `.agents/skills/git/timo-commit/SKILL.md` |
| PR, 풀리퀘, PR 만들어줘 | `.agents/skills/git/timo-pr/SKILL.md` |
| 이슈, issue, 이슈 만들어줘 | `.agents/skills/git/timo-issue/SKILL.md` |
| PR, 풀리퀘, PR 만들어줘 | `.agents/skills/git/timo-pr/SKILL.md` |
| 이슈, issue, 이슈 만들어줘 | `.agents/skills/git/timo-issue/SKILL.md` |

### UI

| 트리거 | Read 할 파일 |
|--------|-------------|
| 트리거 | Read 할 파일 |
| -------------------------------- | ------------------------------------------- |
| 컴포넌트 만들어줘, 컴포넌트 생성 | `.agents/skills/ui/timo-component/SKILL.md` |
| 페이지 만들어줘, 페이지 개발 | `.agents/skills/ui/timo-page/SKILL.md` |
| 스토리북, storybook | `.agents/skills/ui/timo-storybook/SKILL.md` |
| 피그마, figma | `.agents/skills/ui/timo-figma/SKILL.md` |
| 페이지 만들어줘, 페이지 개발 | `.agents/skills/ui/timo-page/SKILL.md` |
| 스토리북, storybook | `.agents/skills/ui/timo-storybook/SKILL.md` |
| 피그마, figma | `.agents/skills/ui/timo-figma/SKILL.md` |

### Quality

| 트리거 | Read 할 파일 |
|--------|-------------|
| 코드 리뷰, 리뷰해줘 | `.agents/skills/quality/timo-review/SKILL.md` |
| 리팩터링, 리팩토링 | `.agents/skills/quality/timo-refactor/SKILL.md` |
| PR 전 검증, 검증해줘 | `.agents/skills/quality/timo-verify/SKILL.md` |
| 트리거 | Read 할 파일 |
| -------------------- | ----------------------------------------------- |
| 코드 리뷰, 리뷰해줘 | `.agents/skills/quality/timo-review/SKILL.md` |
| 리팩터링, 리팩토링 | `.agents/skills/quality/timo-refactor/SKILL.md` |
| PR 전 검증, 검증해줘 | `.agents/skills/quality/timo-verify/SKILL.md` |

### Meta

| 트리거 | Read 할 파일 |
|--------|-------------|
| 트리거 | Read 할 파일 |
| --------------------------- | ----------------------------------------------- |
| 피처 전체 실행, orchestrate | `.agents/skills/meta/timo-orchestrate/SKILL.md` |
| 스킬 추가, 스킬 수정 | `.agents/skills/meta/timo-manage/SKILL.md` |
| 스킬 추가, 스킬 수정 | `.agents/skills/meta/timo-manage/SKILL.md` |

---

## 문서 위치

| 내용 | 경로 |
|---|---|
| 커밋·브랜치·이슈·코드 스타일·네이밍 컨벤션 | `docs/conventions/` |
| 내용 | 경로 |
| ------------------------------------------ | -------------------- |
| 커밋·브랜치·이슈·코드 스타일·네이밍 컨벤션 | `docs/conventions/` |
| 기술 스택·컴포넌트 계층·상태 전략·스캐폴딩 | `docs/architecture/` |
| 디자인 토큰·피그마 MCP 연동 | `docs/design/` |
| 디자인 토큰·피그마 MCP 연동 | `docs/design/` |
8 changes: 4 additions & 4 deletions apps/timo-web/app/layout.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,11 @@ export const metadata: Metadata = {
description: "Timo web",
};

export default function RootLayout({
children,
}: Readonly<{
interface RootLayoutProps {
children: React.ReactNode;
}>) {
}

export default function RootLayout({ children }: Readonly<RootLayoutProps>) {
return (
<html lang="en">
<body>{children}</body>
Expand Down
Loading
Loading