docs(home): 배너 이동 검증을 기록한다
This commit is contained in:
@@ -503,16 +503,36 @@
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
### Phase 10: 최종 검증과 문서 기록
|
### Phase 10: 배너 이동 정책 연결
|
||||||
|
|
||||||
- [ ] **Task 10.1: 단위 테스트와 빌드 검증**
|
- [x] **Task 10.1: 홈 추천 배너 클릭 라우팅 구현**
|
||||||
|
- 수정: `app/src/main/java/kr/co/vividnext/sodalive/v2/main/HomeMainFragment.kt`
|
||||||
|
- 확인: 기존 `EventDetailActivity`, `UserProfileActivity`, `SeriesDetailActivity` 라우팅 extra 계약
|
||||||
|
- 구현 내용:
|
||||||
|
- 배너 응답에서 `type` 값은 제거되었으므로 사용하지 않는다.
|
||||||
|
- `eventItem != null`이면 `EventDetailActivity`로 이동한다.
|
||||||
|
- `creatorId != null`이면 `UserProfileActivity`로 이동한다.
|
||||||
|
- `seriesId != null`이면 `SeriesDetailActivity`로 이동한다.
|
||||||
|
- `link != null && link가 웹 URL`이면 `Intent.ACTION_VIEW`를 사용해 외부 웹 URL로 이동한다.
|
||||||
|
- `link != null && link가 내부 딥링크`이면 기존 딥링크 실행 정책에 따라 앱 내부 딥링크를 실행한다.
|
||||||
|
- 여러 이동 대상 값이 함께 내려오면 위 순서대로 우선 처리한다.
|
||||||
|
- 웹 URL도 내부 딥링크도 아닌 `link`는 이동하지 않는다.
|
||||||
|
- 검증:
|
||||||
|
- `HomeMainFragmentLayoutTest` 또는 라우팅 단위 테스트에 배너 목적지별 Intent 계약 회귀 테스트를 추가한다.
|
||||||
|
- `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.home.HomeMainFragmentLayoutTest"`, `./gradlew :app:compileDebugKotlin`, `./gradlew :app:ktlintCheck`로 회귀를 확인한다.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Phase 11: 최종 검증과 문서 기록
|
||||||
|
|
||||||
|
- [ ] **Task 11.1: 단위 테스트와 빌드 검증**
|
||||||
- 실행: `./gradlew :app:testDebugUnitTest`
|
- 실행: `./gradlew :app:testDebugUnitTest`
|
||||||
- 실행: `./gradlew :app:compileDebugKotlin`
|
- 실행: `./gradlew :app:compileDebugKotlin`
|
||||||
- 실행: `./gradlew :app:mergeDebugResources`
|
- 실행: `./gradlew :app:mergeDebugResources`
|
||||||
- 실행: `./gradlew :app:ktlintCheck`
|
- 실행: `./gradlew :app:ktlintCheck`
|
||||||
- 기대 결과: 모두 성공.
|
- 기대 결과: 모두 성공.
|
||||||
|
|
||||||
- [ ] **Task 10.2: 수동 확인**
|
- [ ] **Task 11.2: 수동 확인**
|
||||||
- 확인 항목:
|
- 확인 항목:
|
||||||
- 추천 tab 선택 상태
|
- 추천 tab 선택 상태
|
||||||
- tab 전환은 글자 터치로만 동작하고 swipe 전환은 없음
|
- tab 전환은 글자 터치로만 동작하고 swipe 전환은 없음
|
||||||
@@ -523,11 +543,12 @@
|
|||||||
- 첫 오디오 태그 조건
|
- 첫 오디오 태그 조건
|
||||||
- activity type 다국어 문자열
|
- activity type 다국어 문자열
|
||||||
- 모두 팔로우 success 후 완료 상태
|
- 모두 팔로우 success 후 완료 상태
|
||||||
|
- 배너 목적지별 클릭 이동
|
||||||
- 인기 커뮤니티 유료/무료/구매 완료 이미지 상태
|
- 인기 커뮤니티 유료/무료/구매 완료 이미지 상태
|
||||||
- 사업자 정보 더보기/접기
|
- 사업자 정보 더보기/접기
|
||||||
- 기대 결과: PRD Metrics 항목 충족.
|
- 기대 결과: PRD Metrics 항목 충족.
|
||||||
|
|
||||||
- [ ] **Task 10.3: 검증 기록 누적**
|
- [ ] **Task 11.3: 검증 기록 누적**
|
||||||
- 수정: `docs/20260601_메인_홈_추천_UI와_API_연동/plan-task.md`
|
- 수정: `docs/20260601_메인_홈_추천_UI와_API_연동/plan-task.md`
|
||||||
- 수정: `docs/20260601_메인_홈_추천_UI와_API_연동/prd.md`
|
- 수정: `docs/20260601_메인_홈_추천_UI와_API_연동/prd.md`
|
||||||
- 구현 내용: 실행 명령, 결과, 실패 시 원인과 후속 조치를 문서 하단 `검증 기록`에 누적한다.
|
- 구현 내용: 실행 명령, 결과, 실패 시 원인과 후속 조치를 문서 하단 `검증 기록`에 누적한다.
|
||||||
@@ -535,15 +556,20 @@
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 구현 중 확인 필요
|
## 확인 완료 사항
|
||||||
- 배너 `type`별 이동 정책과 서버 code 목록.
|
- 배너 이동은 `type` 없이 `eventItem`, `creatorId`, `seriesId`, `link` 값 기준으로 처리하며, `link`는 웹 URL이면 외부 브라우저, 내부 딥링크이면 앱 내부 딥링크로 실행한다. 세부 구현은 Phase 10에서 진행한다.
|
||||||
- 시간 표시 포맷: `activityAt`, `createdAt`에 기존 formatter를 재사용할 수 있는지 확인.
|
- 시간 표시는 `RelativeTimeFormatter`에 재사용 가능한 함수가 있으므로 `activityAt`, `createdAt` 변환에 해당 formatter를 사용한다.
|
||||||
- 모두 팔로우 API success response의 `data` 형태. `ApiResponse.success == true`만으로 완료 처리 가능한지 백엔드 계약 확인.
|
- 모두 팔로우 API는 success response의 `data` 형태에 의존하지 않고 `ApiResponse.success == true`만으로 완료 처리한다.
|
||||||
- 사업자 정보 텍스트를 `strings.xml`로 둘지 서버/설정값으로 받을지 운영 정책 확인.
|
- 사업자 정보 텍스트는 서버/설정값이 아니라 `strings.xml`에 정의된 문자열을 사용한다.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 검증 기록
|
## 검증 기록
|
||||||
|
- 2026-06-05: Task 10.1 구현으로 홈 추천 배너 클릭 라우팅을 연결했다. `eventItem`은 `EventDetailActivity` + `Constants.EXTRA_EVENT`, `creatorId`는 `UserProfileActivity` + `Constants.EXTRA_USER_ID`, `seriesId`는 `SeriesDetailActivity` + `Constants.EXTRA_SERIES_ID`, `link`는 `Intent.ACTION_VIEW`로 실행한다. 여러 대상이 함께 내려오면 `eventItem` → `creatorId` → `seriesId` → `link` 순서로 우선 처리한다. RED 검증은 `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.home.HomeMainFragmentLayoutTest.home banner route uses event creator series link priority"`에서 `HomeRecommendationBannerRoute`, `toHomeRecommendationBannerRoute()` 미정의 컴파일 실패로 확인했다. 구현 후 동일 테스트는 최초 `:app:kspDebugKotlin`의 `java.io.EOFException`으로 중단되었고, `--rerun-tasks` 재실행에서 BUILD SUCCESSFUL을 확인했다. 이후 내부 딥링크 판별 누락 지적에 따라 `BuildConfig.APPSCHEME` custom scheme과 `https://${BuildConfig.APPSCHEME}.onelink.me` app link만 내부 딥링크로 인정하고, `mailto:` 같은 외부 custom scheme은 이동하지 않도록 보강했다. RED 검증은 `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.home.HomeMainFragmentLayoutTest.home banner route maps creator series web and internal deeplink" --tests "kr.co.vividnext.sodalive.v2.main.home.HomeMainFragmentLayoutTest.home banner route ignores blank malformed and scheme-less links"`에서 2개 테스트 실패로 확인했고, 수정 후 동일 명령은 BUILD SUCCESSFUL을 확인했다.
|
||||||
|
- 2026-06-05: Task 10.1 최종 회귀 검증으로 `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.home.HomeMainFragmentLayoutTest"`, `./gradlew :app:compileDebugKotlin`, `./gradlew :app:ktlintCheck`를 실행했고 모두 BUILD SUCCESSFUL을 확인했다. `ktlintCheck`에서는 기존 `.editorconfig`의 `disabled_rules` 속성 deprecation warning만 출력되었고 신규 실패는 없었다.
|
||||||
|
- 2026-06-05: Task 10.1 리뷰 반려 대응으로 라우팅 결정 테스트에 더해 실제 `Intent` 생성 계약 테스트를 추가했다. `HomeRecommendationBannerRoute.toHomeRecommendationBannerIntent(context)`를 추가해 `EventDetailActivity`/`UserProfileActivity`/`SeriesDetailActivity` component와 `Constants.EXTRA_EVENT`/`Constants.EXTRA_USER_ID`/`Constants.EXTRA_SERIES_ID` extra, `Intent.ACTION_VIEW` link data를 검증하도록 했다. 또한 `creatorId + seriesId + link`, `seriesId + link` 조합 우선순위 테스트를 추가했다. RED 검증은 `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.home.HomeMainFragmentLayoutTest.home banner route creates activity and link intents with expected extras"`에서 `toHomeRecommendationBannerIntent()` 미정의 컴파일 실패로 확인했고, 구현 후 `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.home.HomeMainFragmentLayoutTest.home banner route creates activity and link intents with expected extras" --tests "kr.co.vividnext.sodalive.v2.main.home.HomeMainFragmentLayoutTest.home banner route uses creator over series and series over link priority"`는 BUILD SUCCESSFUL을 확인했다. 이후 `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.home.HomeMainFragmentLayoutTest"`, `./gradlew :app:compileDebugKotlin`, `./gradlew :app:ktlintCheck`를 재실행했고 모두 BUILD SUCCESSFUL을 확인했다.
|
||||||
|
- 2026-06-05: 사용자 추가 요청에 따라 배너 `link` 값이 내부 딥링크이면 기존 딥링크 실행 정책에 따라 앱 내부 딥링크를 실행하도록 `Task 10.1`과 확인 완료 사항에 반영했다. 문서 변경만 수행했으므로 Gradle 검증은 실행하지 않고 문서 재읽기로 확인한다.
|
||||||
|
- 2026-06-05: 사용자 요청에 따라 `구현 중 확인 필요` 섹션을 `확인 완료 사항`으로 정리하고, 배너 `type` 제거 후 `eventItem`/`creatorId`/`seriesId`/웹 URL `link` 기준 이동 정책을 새 `Phase 10: 배너 이동 정책 연결`로 추가했다. 기존 `Phase 10: 최종 검증과 문서 기록`은 `Phase 11`로 변경하고 task 번호와 수동 확인 항목에 배너 목적지별 클릭 이동 확인을 반영했다. 문서 변경만 수행했으므로 Gradle 검증은 실행하지 않았고, `plan-task.md` 재읽기로 Phase 10/11 및 확인 완료 사항 반영을 확인했다.
|
||||||
- 2026-06-05: 사용자 요청에 따라 Phase 9에 `Task 9.6: 홈 추천 프로필 이미지 원형 처리와 상대 시간 표시 적용`을 추가했다. 기존 `GetCommunityPostListResponse.relativeTimeText(context)`가 `dateUtc`를 UTC로 파싱해 디바이스 타임존 기준 상대 시간 문자열을 만들고, 홈 추천 mapper가 현재 `activityAt`/`createdAt` 원문을 그대로 전달하는 것을 확인해 공통 상대 시간 함수 분리와 최근 활동/인기 커뮤니티 재사용 항목으로 기록했다. 문서 변경만 수행했으므로 Gradle 검증은 실행하지 않고 문서 재읽기로 확인한다.
|
- 2026-06-05: 사용자 요청에 따라 Phase 9에 `Task 9.6: 홈 추천 프로필 이미지 원형 처리와 상대 시간 표시 적용`을 추가했다. 기존 `GetCommunityPostListResponse.relativeTimeText(context)`가 `dateUtc`를 UTC로 파싱해 디바이스 타임존 기준 상대 시간 문자열을 만들고, 홈 추천 mapper가 현재 `activityAt`/`createdAt` 원문을 그대로 전달하는 것을 확인해 공통 상대 시간 함수 분리와 최근 활동/인기 커뮤니티 재사용 항목으로 기록했다. 문서 변경만 수행했으므로 Gradle 검증은 실행하지 않고 문서 재읽기로 확인한다.
|
||||||
- 2026-06-05: Task 9.6 구현으로 `RelativeTimeFormatter`를 추가해 UTC timestamp를 디바이스 기본 타임존 기준 상대 시간 문자열로 변환하고, 홈 추천 응답 매핑에서 `HomeActiveCreatorItem.activityAt`과 `HomePopularCommunityPostItem.createdAt`에 적용했다. 최근 활동/장르/응원 creator profile image는 `CircleCropTransformation` 기반 공통 helper로 원형 로딩하도록 변경했다. RED 검증은 `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.home.HomeMainFragmentLayoutTest"`에서 `homeCreatorProfileImageTransformations`, `toUiModel(context)` 미정의 컴파일 실패로 확인했고, 구현 후 동일 targeted test와 `./gradlew :app:compileDebugKotlin`은 BUILD SUCCESSFUL을 확인했다. `./gradlew :app:ktlintCheck`는 최종 diff에 없는 기존 `GetCommunityPostListResponse.kt`의 `creator_community` package-name 위반으로 실패해 별도 기존 이슈로 분리했다.
|
- 2026-06-05: Task 9.6 구현으로 `RelativeTimeFormatter`를 추가해 UTC timestamp를 디바이스 기본 타임존 기준 상대 시간 문자열로 변환하고, 홈 추천 응답 매핑에서 `HomeActiveCreatorItem.activityAt`과 `HomePopularCommunityPostItem.createdAt`에 적용했다. 최근 활동/장르/응원 creator profile image는 `CircleCropTransformation` 기반 공통 helper로 원형 로딩하도록 변경했다. RED 검증은 `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.home.HomeMainFragmentLayoutTest"`에서 `homeCreatorProfileImageTransformations`, `toUiModel(context)` 미정의 컴파일 실패로 확인했고, 구현 후 동일 targeted test와 `./gradlew :app:compileDebugKotlin`은 BUILD SUCCESSFUL을 확인했다. `./gradlew :app:ktlintCheck`는 최종 diff에 없는 기존 `GetCommunityPostListResponse.kt`의 `creator_community` package-name 위반으로 실패해 별도 기존 이슈로 분리했다.
|
||||||
- 2026-06-05: Task 9.6 후속 수정으로 `HomeRecommendationViewModel`에 `Context`를 주입해 보관하던 구조를 제거했다. `HomeRecommendationViewModel`은 다시 `HomeRecommendationViewModel(get())`로 Repository만 주입받고, UTC 상대 시간 문자열 변환은 `HomeMainFragment`의 UI 바인딩 경계에서 `requireContext()`로 처리하도록 이동했다. RED 검증은 `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.home.HomeMainFragmentLayoutTest.home recommendation viewmodel does not keep android context"`에서 ViewModel source에 `android.content.Context`가 남아 실패하는 것으로 확인했다. 수정 후 `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.home.HomeMainFragmentLayoutTest"`, `./gradlew :app:compileDebugKotlin`, `./gradlew :app:ktlintCheck`가 모두 BUILD SUCCESSFUL임을 확인했다.
|
- 2026-06-05: Task 9.6 후속 수정으로 `HomeRecommendationViewModel`에 `Context`를 주입해 보관하던 구조를 제거했다. `HomeRecommendationViewModel`은 다시 `HomeRecommendationViewModel(get())`로 Repository만 주입받고, UTC 상대 시간 문자열 변환은 `HomeMainFragment`의 UI 바인딩 경계에서 `requireContext()`로 처리하도록 이동했다. RED 검증은 `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.home.HomeMainFragmentLayoutTest.home recommendation viewmodel does not keep android context"`에서 ViewModel source에 `android.content.Context`가 남아 실패하는 것으로 확인했다. 수정 후 `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.home.HomeMainFragmentLayoutTest"`, `./gradlew :app:compileDebugKotlin`, `./gradlew :app:ktlintCheck`가 모두 BUILD SUCCESSFUL임을 확인했다.
|
||||||
|
|||||||
@@ -49,7 +49,7 @@ Figma `home_001` 화면(`24:5514`)을 기준으로 메인 홈 추천 영역을
|
|||||||
|
|
||||||
## 6. User Stories
|
## 6. User Stories
|
||||||
- 사용자는 홈에서 현재 라이브 중인 크리에이터와 추천 콘텐츠를 빠르게 탐색하고 싶다.
|
- 사용자는 홈에서 현재 라이브 중인 크리에이터와 추천 콘텐츠를 빠르게 탐색하고 싶다.
|
||||||
- 사용자는 배너를 스와이프하거나 터치해 관련 이벤트, 크리에이터, 시리즈, 외부 링크로 이동하고 싶다.
|
- 사용자는 배너를 스와이프하거나 터치해 관련 이벤트, 크리에이터, 시리즈, 외부 링크 또는 앱 내부 딥링크로 이동하고 싶다.
|
||||||
- 사용자는 최근 활동한 크리에이터의 활동 유형을 `라이브`, `오디오`, `커뮤니티`처럼 이해 가능한 문구로 보고 싶다.
|
- 사용자는 최근 활동한 크리에이터의 활동 유형을 `라이브`, `오디오`, `커뮤니티`처럼 이해 가능한 문구로 보고 싶다.
|
||||||
- 사용자는 인기 커뮤니티 글을 읽다가 사업자 정보가 길어도 홈 화면 탐색이 과도하게 방해받지 않기를 기대한다.
|
- 사용자는 인기 커뮤니티 글을 읽다가 사업자 정보가 길어도 홈 화면 탐색이 과도하게 방해받지 않기를 기대한다.
|
||||||
- 개발자는 기존 v2 widget을 최대한 재사용해 화면별 UI 중복과 스타일 차이를 줄이고 싶다.
|
- 개발자는 기존 v2 widget을 최대한 재사용해 화면별 UI 중복과 스타일 차이를 줄이고 싶다.
|
||||||
@@ -328,7 +328,11 @@ HomeRecommendation 화면
|
|||||||
- `HomeAiCharacterItem.profileImage`가 null이면 호출부 이미지 로딩 정책에 따라 placeholder 또는 빈 상태를 표시한다.
|
- `HomeAiCharacterItem.profileImage`가 null이면 호출부 이미지 로딩 정책에 따라 placeholder 또는 빈 상태를 표시한다.
|
||||||
- `HomePopularCommunityPostItem.imageUrl` 또는 `audioUrl`이 null이어도 커뮤니티 feed는 본문/반응 수 중심으로 표시 가능해야 한다.
|
- `HomePopularCommunityPostItem.imageUrl` 또는 `audioUrl`이 null이어도 커뮤니티 feed는 본문/반응 수 중심으로 표시 가능해야 한다.
|
||||||
- 유료 미구매 포스트의 가격 capsule은 `price` 값을 사용하고, 유료 구매 완료 또는 무료 포스트에는 가격 capsule을 표시하지 않는다.
|
- 유료 미구매 포스트의 가격 capsule은 `price` 값을 사용하고, 유료 구매 완료 또는 무료 포스트에는 가격 capsule을 표시하지 않는다.
|
||||||
- `HomeBannerItem.eventItem`, `creatorId`, `seriesId`, `link`별 이동 정책은 서버 정의와 기존 딥링크/이동 정책을 확인한 뒤 구현한다.
|
- `HomeBannerItem`은 `type` 없이 `eventItem`, `creatorId`, `seriesId`, `link` 값 기준으로 이동한다.
|
||||||
|
- 배너 이동 우선순위는 `eventItem`, `creatorId`, `seriesId`, `link` 순서로 처리한다.
|
||||||
|
- `link`가 웹 URL이면 `Intent.ACTION_VIEW`를 사용해 외부 웹 URL로 이동한다.
|
||||||
|
- `link`가 내부 딥링크이면 기존 딥링크 실행 정책에 따라 앱 내부 딥링크를 실행한다.
|
||||||
|
- 웹 URL도 내부 딥링크도 아닌 `link`는 이동하지 않는다.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -387,12 +391,13 @@ HomeRecommendation 화면
|
|||||||
- 모두 팔로우 API는 `POST /api/v2/home/recommendations/creators/follow`, request body는 `FollowRecommendedCreatorsRequest(creatorIds: List<Long>)`로 확정됐다.
|
- 모두 팔로우 API는 `POST /api/v2/home/recommendations/creators/follow`, request body는 `FollowRecommendedCreatorsRequest(creatorIds: List<Long>)`로 확정됐다.
|
||||||
- 인증 token 처리 방식은 아직 제공되지 않았다. 구현 전 기존 `HomeApi` 확장 지점과 공통 인증 interceptor 사용 여부를 확인해야 한다.
|
- 인증 token 처리 방식은 아직 제공되지 않았다. 구현 전 기존 `HomeApi` 확장 지점과 공통 인증 interceptor 사용 여부를 확인해야 한다.
|
||||||
- `genreCreators`와 `cheerCreators`의 profile grid는 기존 profile widget이 저장소에 있는지 추가 확인 후 재사용/신규를 결정한다.
|
- `genreCreators`와 `cheerCreators`의 profile grid는 기존 profile widget이 저장소에 있는지 추가 확인 후 재사용/신규를 결정한다.
|
||||||
- 배너 `type`별 이동 정책(`eventId`, `creatorId`, `seriesId`, `link`)은 기존 딥링크/화면 이동 규칙과 백엔드 code 목록 확인이 필요하다.
|
- 배너 이동 정책은 `type` 없이 `eventItem`, `creatorId`, `seriesId`, `link` 값 기준으로 처리하는 것으로 확정됐다. `link`가 내부 딥링크이면 기존 딥링크 실행 정책을 사용한다.
|
||||||
- `activityAt`, `releaseDate`, `createdAt`, `beginDateTime`의 표시 포맷은 기존 시간 formatter 재사용 여부를 구현 계획에서 확인한다.
|
- `activityAt`, `releaseDate`, `createdAt`, `beginDateTime`의 표시 포맷은 기존 시간 formatter 재사용 여부를 구현 계획에서 확인한다.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 12. 검증 기록
|
## 12. 검증 기록
|
||||||
|
- 2026-06-05: 사용자 추가 요청에 따라 배너 `link`가 내부 딥링크이면 기존 딥링크 실행 정책에 따라 앱 내부 딥링크를 실행하도록 PRD의 사용자 스토리, Edge Cases, Open Questions를 갱신했다. 문서 변경만 수행했으므로 Gradle 검증은 실행하지 않고 문서 재읽기로 확인한다.
|
||||||
- 2026-06-01: `docs/prd/sample-prd.md`와 `docs/agent-guides/work-plan-docs.md`를 확인해 신규 문서 위치와 PRD 작성 형식을 맞췄다.
|
- 2026-06-01: `docs/prd/sample-prd.md`와 `docs/agent-guides/work-plan-docs.md`를 확인해 신규 문서 위치와 PRD 작성 형식을 맞췄다.
|
||||||
- 2026-06-01: Figma `24:5514`의 최상위 구조를 확인해 `live`, `banner`, `section-title`, `contents`, `chat-thumbnail`, `profile`, `feed`, 사업자 정보 섹션의 배치와 제외 후보 섹션을 PRD에 반영했다.
|
- 2026-06-01: Figma `24:5514`의 최상위 구조를 확인해 `live`, `banner`, `section-title`, `contents`, `chat-thumbnail`, `profile`, `feed`, 사업자 정보 섹션의 배치와 제외 후보 섹션을 PRD에 반영했다.
|
||||||
- 2026-06-01: 저장소의 기존 v2 widget 패키지(`banner`, `livethumbnail`, `characterchatthumbnail`, `feed`, `AudioContentCardView`)와 관련 PRD를 확인해 재사용 후보를 문서화했다.
|
- 2026-06-01: 저장소의 기존 v2 widget 패키지(`banner`, `livethumbnail`, `characterchatthumbnail`, `feed`, `AudioContentCardView`)와 관련 PRD를 확인해 재사용 후보를 문서화했다.
|
||||||
|
|||||||
Reference in New Issue
Block a user