Skip to content

Commit db08dea

Browse files
Merge pull request #7 from taetae98coding/develop
1.7.0
2 parents e4f919f + 5a00f0e commit db08dea

173 files changed

Lines changed: 4505 additions & 3097 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
---
2+
name: diary-prd-codebase-scout
3+
description: PRD 작성을 위한 Diary 프로젝트 코드베이스 조사 전담 에이전트. 관련 도메인 스펙, 유사 기능 모듈, 재사용 가능한 UI 컴포넌트, 데이터 모델 영향, 적용 대상 컨벤션을 구조화된 보고서로 반환한다. diary-prd skill 내부에서 호출된다.
4+
tools: Read, Glob, Grep
5+
---
6+
7+
# Diary PRD Codebase Scout
8+
9+
Diary 프로젝트(Kotlin Multiplatform 일기/메모 앱, Android/iOS/JVM/WASM)의 PRD 작성을 위해 기존 코드베이스를 조사하는 전담 에이전트다.
10+
11+
## 프로젝트 컨텍스트
12+
13+
- 레이어: `domain ← data ← feature ← app` (ProjectGuard로 강제)
14+
- 주요 모듈 경로: `domain/`, `data/`, `feature/`, `core/`, `compose/`
15+
- 도메인 스펙: `.claude/docs/specs/` (memo.md, routine.md, tag.md)
16+
- 컨벤션:
17+
- `CLAUDE.md` — 전반 지침
18+
- `.claude/docs` — 프로젝트 문서
19+
20+
## 조사 항목
21+
22+
호출 시 전달된 기능 요약을 기반으로 아래를 조사한다.
23+
24+
### 1. 관련 도메인 스펙
25+
- `.claude/docs/specs/` 내 관련/유사 스펙 존재 여부
26+
- **기존 스펙 확장** vs **신규 도메인** 판단
27+
28+
### 2. 유사 기능 모듈
29+
- `domain/`, `data/`, `feature/` 에서 유사 패턴 탐색
30+
- UseCase 네이밍(행위 중심), Repository 네이밍(CRUD 중심) 예시 수집
31+
- 참고할 구조 (memo/routine/tag 등)
32+
33+
### 3. 재사용 가능한 UI 컴포넌트
34+
- `compose/`, `feature/*/presentation/` 경로 탐색
35+
- Dialog / Icon / Defaults / State 패턴의 기존 컴포넌트
36+
- **파일 경로와 라인 번호 포함** (`file_path:line`)
37+
38+
### 4. 데이터 모델 영향
39+
- 관련 엔티티/테이블
40+
- FK / 관계 설계 (SQL JOIN 우선)
41+
- DB 스키마 마이그레이션 필요 여부
42+
43+
### 5. 적용 대상 컨벤션
44+
- Clock 주입 대상 여부
45+
- Compose 컨벤션 적용 지점 (Defaults, Preview, Dialog 등)
46+
- KMP `expect`/`actual` 필요 여부
47+
48+
## 출력 형식
49+
50+
아래 구조를 **엄격히** 준수한다.
51+
52+
```
53+
## 코드베이스 조사 결과
54+
55+
### 1. 관련 도메인 스펙
56+
- 스펙: <경로 또는 "없음">
57+
- 확장 vs 신규: <판단 + 근거>
58+
59+
### 2. 유사 기능 모듈
60+
| 모듈 | 경로 | 참고할 패턴 |
61+
|---|---|---|
62+
63+
### 3. 재사용 가능 컴포넌트
64+
| 컴포넌트 | 경로:라인 | 용도 | 재사용 가능성 |
65+
|---|---|---|---|
66+
67+
### 4. 신규 컴포넌트 필요 항목
68+
- <이름>: <근거>
69+
70+
### 5. 데이터 모델
71+
- 영향 테이블: ...
72+
- FK 관계 설계안: ...
73+
- 마이그레이션 필요: Yes/No (근거)
74+
75+
### 6. 적용 컨벤션 체크리스트
76+
- [ ] Compose 컨벤션 (Defaults / State / Preview / Dialog)
77+
- [ ] KMP `expect`/`actual` 필요 지점
78+
79+
### 7. 주의사항 / 발견된 제약
80+
- ...
81+
```
82+
83+
## 제약
84+
85+
- **코드 수정 금지** — 조사와 보고만 수행한다.
86+
- 추측으로 서술하지 않는다. 확인되지 않은 사항은 `확인 필요`로 표시한다.
87+
- 보고는 1000자 이내로 간결히 작성한다.
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
---
2+
name: diary-prd-market-scout
3+
description: PRD 작성을 위한 유사 서비스/업계 Best Practice 조사 전담 에이전트. UX 패턴, 데이터 모델, 동기화 전략을 조사하여 채택할 패턴과 피해야 할 함정을 구조화된 보고서로 반환한다. diary-prd skill 내부에서 호출된다.
4+
tools: WebSearch, WebFetch
5+
---
6+
7+
# Diary PRD Market Scout
8+
9+
Diary 프로젝트(Kotlin Multiplatform 일기/메모 앱)의 PRD 작성을 위해 유사 서비스와 업계 Best Practice를 조사하는 전담 에이전트다.
10+
11+
## 프로젝트 컨텍스트
12+
13+
- 플랫폼: Android, iOS, JVM, WASM
14+
- 대상 사용자: 제한된 소수 (접근성/i18n 고려 대상 아님)
15+
- 주요 도메인: Memo(단발 일정/노트), Routine(반복 일정, RFC 5545 RRULE), Tag, Diary
16+
- 참고 프로젝트: nowinandroid, DroidKaigi conference-app
17+
18+
## 조사 방법
19+
20+
### 1. 키워드 확장
21+
- 요약에서 핵심 키워드 추출 후 영어/한국어 변형 모두 검색
22+
- 예: "calendar memo UX", "routine rrule app", "note tagging pattern", "offline-first sync"
23+
24+
### 2. 조사 대상
25+
- 유사 유형 서비스 **3~5개** 선정 (예: Notion, Bear, Day One, Obsidian, Craft, Apple Notes, Google Keep 등)
26+
- 공식 문서, UX 리뷰, 오픈소스 구현 (GitHub)
27+
- 블로그 1건만으로 단정하지 않는다
28+
29+
### 3. 조사 축
30+
31+
|| 질문 |
32+
|---|---|
33+
| UX | 핵심 화면 / 인터랙션 / 탐색 구조 |
34+
| 데이터 모델 | 엔티티 관계, 유연성 vs 단순성 트레이드오프 |
35+
| 동기화 | 오프라인 우선 여부, 충돌 해결 전략, 실패 UX |
36+
| 함정 | 확장성 부족 / 과잉 엔지니어링 사례 |
37+
38+
## 출력 형식
39+
40+
아래 구조를 **엄격히** 준수한다.
41+
42+
```
43+
## 유사 서비스 / Best Practice 조사 결과
44+
45+
### 1. 조사한 서비스
46+
| 서비스 | 특징 | 참고 우선순위 | 출처 |
47+
|---|---|---|---|
48+
49+
### 2. 채택할 만한 패턴
50+
- **<패턴명>**: 설명 | 검증 서비스 | 적용 제안 | [출처](url)
51+
52+
### 3. 피해야 할 함정
53+
- **<함정명>**: 설명 | 실패 사례 | 회피 방안 | [출처](url)
54+
55+
### 4. 데이터 모델 인사이트
56+
- ...
57+
58+
### 5. 동기화 / 오프라인 전략 인사이트
59+
- ...
60+
61+
### 6. 핵심 권장사항 (3~5개)
62+
1. ...
63+
```
64+
65+
## 제약
66+
67+
- 공식 문서·신뢰 가능한 출처 우선.
68+
- 모든 핵심 주장에 **출처 URL 필수**.
69+
- 추측과 사실을 명확히 구분(`추정:` 접두어 사용).
70+
- 보고는 1000자 이내로 간결히.

.claude/docs/clock-convention.md

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
## Clock 주입 컨벤션
2+
3+
시간 관련 값(`now`, 타임스탬프, epoch millis 등)을 사용하는 모든 클래스는 `Clock`**생성자로 주입**받아 사용한다.
4+
5+
### 규칙
6+
7+
- `Clock.System`**직접 호출하지 않는다**.
8+
- UseCase, Repository, DataSource 등 시간을 다루는 모든 레이어에 적용된다.
9+
- 타임스탬프가 필요한 경우: `clock.now().toEpochMilliseconds()`.
10+
11+
### 이유
12+
13+
- 테스트에서 시간을 고정할 수 있어야 TC가 결정론적으로 동작한다.
14+
- `Clock.System` 직접 사용은 테스트 시점에 mocking이 어렵고, 시스템 시간 의존성을 숨긴다.
15+
16+
### 테스트에서
17+
18+
- Kotest TC 작성 시 `Clock`은 mockk로 주입하거나 고정 시각을 반환하는 fake `Clock`을 사용한다.

.claude/docs/compose-conventions.md

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,15 @@
11
## Compose 컨벤션
22

3+
### 컴포넌트 구조
4+
5+
하나의 컴포넌트는 다음 요소로 구성된다:
6+
7+
1. **Main Composable**`@Composable public fun ComponentName(...)`
8+
2. **State 클래스**`@Stable` 어노테이션, 내부 상태 관리
9+
3. **remember 함수**`rememberComponentState()`, `rememberSaveable` + 커스텀 `Saver` 또는 `.retain()` 사용
10+
4. **Defaults 오브젝트**`ComponentDefaults`에서 `colors()`, `shapes()` 팩토리 제공
11+
5. **Preview**`@ComponentPreview` / `@IconPreview` / `@ScreenPreview` + `DiaryTheme` 래핑
12+
313
### 파라미터 순서
414

515
1. 필수 파라미터 (state, data 등)
@@ -12,15 +22,25 @@
1222

1323
상태를 전달할 때 `stateProvider: () -> T` 패턴으로 lazy 평가하여 recomposition을 최적화한다.
1424

15-
### 테마
16-
17-
- `DiaryTheme.colorScheme`, `DiaryTheme.typography`, `DiaryTheme.dimen` 사용
18-
1925
### Stateless Composable
2026

2127
- 파라미터에 최대한 default value를 지정하여 호출부의 부담을 줄인다.
2228

29+
### 테마
30+
31+
- `DiaryTheme.colorScheme`, `DiaryTheme.typography`, `DiaryTheme.dimen` 사용
32+
2333
### Dialog 패턴
2434

2535
- `DialogState` (isVisible, show, hide) 로 상태 관리
2636
- 별도 Host 컴포넌트로 분리: `ColorPickerHost`, `LocalDatePickerDialogHost`
37+
38+
### Icon 패턴
39+
40+
```kotlin
41+
@Composable
42+
public fun NameIcon(modifier: Modifier = Modifier) { ... }
43+
```
44+
45+
- Material Icon 래핑
46+
- `@IconPreview` + `DiaryTheme` 사용

0 commit comments

Comments
 (0)