docs(product): stale app flow 문서 정리
This commit is contained in:
@@ -2,15 +2,15 @@
|
|||||||
|
|
||||||
## 프로젝트 목적
|
## 프로젝트 목적
|
||||||
|
|
||||||
VibeRoom Web은 몰입 공간 경험을 빠르게 실험하기 위한 프론트엔드 목업 프로젝트다.
|
VibeRoom Web은 ADHD와 프리랜서를 위한 premium focus service의 웹 제품을 설계하고 구현하는 프로젝트다.
|
||||||
핵심 목표는 실제 기능 완성보다 UX 흐름, 화면 구조, 상호작용 톤을 안정적으로 검증하는 것이다.
|
핵심 목표는 UX 흐름, 화면 구조, 상호작용 톤, core loop 계약을 실제 제품 품질로 안정적으로 끌어올리는 것이다.
|
||||||
|
|
||||||
## 기술 스택
|
## 기술 스택
|
||||||
|
|
||||||
- Next.js (App Router)
|
- Next.js (App Router)
|
||||||
- TypeScript
|
- TypeScript
|
||||||
- TailwindCSS
|
- TailwindCSS
|
||||||
- 상태: React state + 일부 Zustand
|
- 상태: React state + local storage + 일부 shared store
|
||||||
|
|
||||||
## 유지보수 역할 정의
|
## 유지보수 역할 정의
|
||||||
|
|
||||||
@@ -19,22 +19,22 @@ VibeRoom Web은 몰입 공간 경험을 빠르게 실험하기 위한 프론트
|
|||||||
- FSD 구조를 지키며 화면/기능을 지속적으로 리팩터링한다.
|
- FSD 구조를 지키며 화면/기능을 지속적으로 리팩터링한다.
|
||||||
- View 계층을 조합 중심으로 유지하고 로직이 새지 않게 막는다.
|
- View 계층을 조합 중심으로 유지하고 로직이 새지 않게 막는다.
|
||||||
- 감성/저자극 톤을 유지하며 과한 강조 UI를 억제한다.
|
- 감성/저자극 톤을 유지하며 과한 강조 UI를 억제한다.
|
||||||
- 실제 서비스 로직은 구현하지 않고, 더미 데이터와 토스트로 흐름만 검증한다.
|
- mock UI만 만드는 데 그치지 않고, core focus/session/review 흐름은 실제 계약과 연결한다.
|
||||||
|
|
||||||
## 범위와 비범위
|
## 범위와 비범위
|
||||||
|
|
||||||
범위:
|
범위:
|
||||||
|
|
||||||
- 라우트/위젯/피처 단위 UI 개선
|
- 라우트/위젯/피처 단위 UI 개선
|
||||||
- 더미 데이터 기반 상태 표현
|
- 더미 데이터 + 실제 계약 혼합 상태 표현
|
||||||
- 모달, 토글, 탭, 선택, 토스트
|
- 모달, 토글, 탭, 선택, 토스트
|
||||||
|
|
||||||
비범위:
|
비범위:
|
||||||
|
|
||||||
- 실시간 인원수/presence 정확도 보장
|
- 실시간 인원수/presence 정확도 보장
|
||||||
- 타이머 카운트다운 실제 동작
|
- 오디오 DSP 수준의 고급 엔진
|
||||||
- 오디오 재생 엔진
|
- 운영 observability 완성
|
||||||
- 서버/DB/API 연동 완성
|
- 모든 주변 기능의 production hardening
|
||||||
|
|
||||||
## Definition of Done
|
## Definition of Done
|
||||||
|
|
||||||
|
|||||||
@@ -14,21 +14,24 @@
|
|||||||
### `/app` (허브)
|
### `/app` (허브)
|
||||||
|
|
||||||
- Page: `src/app/(app)/app/page.tsx`
|
- Page: `src/app/(app)/app/page.tsx`
|
||||||
- Core Widget: `src/widgets/app-hub/ui/AppHubWidget.tsx`
|
- Core Widget: `src/widgets/focus-dashboard/ui/FocusDashboardWidget.tsx`
|
||||||
- 주요 구성:
|
- 주요 구성:
|
||||||
- `StartRitualWidget`
|
- `FocusDashboardWidget`
|
||||||
- `RoomsGalleryWidget`
|
- paused `Resume Gate`
|
||||||
- `CustomEntryWidget`
|
- no-session `Atmosphere Entry Shell` (기획 기준, 구현 예정)
|
||||||
- 데이터 소스:
|
- 데이터 소스:
|
||||||
- room 목록: `entities/room`
|
- current session: `features/focus-session`
|
||||||
- 목표/타이머/사운드 프리셋: `entities/session`
|
- weekly review: `features/stats`
|
||||||
|
- atmosphere 선택 데이터: entry slice 구현 예정
|
||||||
|
|
||||||
### `/space` (집중 화면)
|
### `/space` (집중 화면)
|
||||||
|
|
||||||
- Page: `src/app/(app)/space/page.tsx`
|
- Page: `src/app/(app)/space/page.tsx`
|
||||||
- Core Widget: `src/widgets/space-shell/ui/SpaceSkeletonWidget.tsx`
|
- Core Widget: `src/widgets/space-workspace/ui/SpaceWorkspaceWidget.tsx`
|
||||||
- 주요 구성:
|
- 주요 구성:
|
||||||
- `SpaceTimerHudWidget`
|
- `SpaceTimerHudWidget`
|
||||||
|
- `SpaceFocusHudWidget`
|
||||||
|
- `SpaceSetupDrawerWidget`
|
||||||
- `SpaceToolsDockWidget`
|
- `SpaceToolsDockWidget`
|
||||||
- `features/restart-30s` (HUD 내 조합)
|
- `features/restart-30s` (HUD 내 조합)
|
||||||
|
|
||||||
@@ -38,9 +41,11 @@
|
|||||||
- `sound`: 사운드 preset id
|
- `sound`: 사운드 preset id
|
||||||
- `timer`: 타이머 라벨
|
- `timer`: 타이머 라벨
|
||||||
- `goal`: 목표 한 줄 (선택)
|
- `goal`: 목표 한 줄 (선택)
|
||||||
|
- `resume`: `continue | refocus`
|
||||||
|
|
||||||
## 변경 시 체크포인트
|
## 변경 시 체크포인트
|
||||||
|
|
||||||
- 라우팅 변경 시 `/app -> /space` 진입 흐름이 깨지지 않는지 확인
|
- 라우팅 변경 시 `/app -> /space` 진입 흐름이 깨지지 않는지 확인
|
||||||
|
- `running -> /space`, `paused -> /app` 재진입 정책 유지
|
||||||
- query param 기본값 처리 유지
|
- query param 기본값 처리 유지
|
||||||
- page 파일에 로직 누수 여부 확인
|
- page 파일에 로직 누수 여부 확인
|
||||||
|
|||||||
@@ -1,132 +0,0 @@
|
|||||||
# 09. `/app` Entry Detailed Spec
|
|
||||||
|
|
||||||
Last Updated: 2026-03-14
|
|
||||||
|
|
||||||
이 문서는 `/app`을 **single-goal commitment gate**로 구현할 때의 상세 기준 문서다.
|
|
||||||
|
|
||||||
관련 상위 기준:
|
|
||||||
|
|
||||||
- `../../product_principles.md`
|
|
||||||
- `../../current_context.md`
|
|
||||||
- `08_app_reframe_strategy.md`
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 1. 한 줄 정의
|
|
||||||
|
|
||||||
`/app`은 planner나 setup wizard가 아니라,
|
|
||||||
**사용자가 지금 할 일 한 가지를 정하고 가장 낮은 마찰로 `/space`에 들어가게 만드는 입구**다.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 2. 화면 역할
|
|
||||||
|
|
||||||
### `/app`이 해야 하는 일
|
|
||||||
|
|
||||||
- 현재 세션이 있으면 `이어가기`를 제안한다
|
|
||||||
- 현재 세션이 없으면 `goal 1개 + optional microStep 1개`만 받는다
|
|
||||||
- 주 행동은 항상 `지금 시작` 하나다
|
|
||||||
- 시작 전에 많은 설정을 요구하지 않는다
|
|
||||||
|
|
||||||
### `/app`이 하면 안 되는 일
|
|
||||||
|
|
||||||
- 여러 목표를 관리하게 하기
|
|
||||||
- planner / to-do / list app처럼 보이게 하기
|
|
||||||
- scene / sound / timer 선택을 메인 결정으로 끌어올리기
|
|
||||||
- 진입 전에 `정리`, `관리`, `저장`을 강요하기
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 3. 정보 구조
|
|
||||||
|
|
||||||
### 상태 A. Current Session Exists
|
|
||||||
|
|
||||||
- eyebrow: `Resume`
|
|
||||||
- 현재 goal
|
|
||||||
- optional microStep
|
|
||||||
- primary CTA: `이어서 들어가기`
|
|
||||||
- 보조 정보: 현재 ritual 요약
|
|
||||||
- 설명:
|
|
||||||
- 새 목표는 현재 세션을 마무리한 뒤 시작할 수 있다고만 안내
|
|
||||||
|
|
||||||
### 상태 B. No Current Session
|
|
||||||
|
|
||||||
- 제목
|
|
||||||
- 설명
|
|
||||||
- goal input 1개
|
|
||||||
- optional microStep input 1개
|
|
||||||
- suggestion chips 3~4개
|
|
||||||
- primary CTA: `지금 시작`
|
|
||||||
- 하단 보조 정보:
|
|
||||||
- `기본 ritual · scene · timer · sound`
|
|
||||||
- `공간과 사운드는 들어간 뒤에도 바꿀 수 있어요.`
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 4. 상호작용 원칙
|
|
||||||
|
|
||||||
### Goal
|
|
||||||
|
|
||||||
- 필수
|
|
||||||
- 한 줄 입력
|
|
||||||
- enter로 바로 시작 가능
|
|
||||||
|
|
||||||
### MicroStep
|
|
||||||
|
|
||||||
- 선택
|
|
||||||
- checklist가 아니라 `지금 할 한 조각`
|
|
||||||
- 1개만 허용
|
|
||||||
|
|
||||||
### Suggestions
|
|
||||||
|
|
||||||
- 계획 리스트가 아니라 start friction reducer 역할
|
|
||||||
- 클릭 시 goal input을 빠르게 채움
|
|
||||||
|
|
||||||
### Start
|
|
||||||
|
|
||||||
- 현재 세션이 없을 때만 가능
|
|
||||||
- `goal + microStep + default ritual`로 세션 시작
|
|
||||||
- 성공 시 `/space` 이동
|
|
||||||
|
|
||||||
### Resume
|
|
||||||
|
|
||||||
- 현재 세션이 있으면 start UI 대신 resume UI를 우선 노출
|
|
||||||
- 클릭 시 `/space`로 이동
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 5. UX 원칙
|
|
||||||
|
|
||||||
- `/app`은 start surface여야지 setup surface가 아니어야 한다
|
|
||||||
- 한 화면 안에서 결정할 것은 최대 2개(goal, optional microStep)
|
|
||||||
- visual hierarchy는 `goal > CTA > microStep > suggestions > ritual helper` 순서
|
|
||||||
- paywall은 메인 CTA가 아니라 Plan Pill에서만 여는 수준으로 제한
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 6. 구현 범위
|
|
||||||
|
|
||||||
### 이번 slice에 포함
|
|
||||||
|
|
||||||
- 2-step ritual flow 제거
|
|
||||||
- manage/list UI를 메인 경로에서 제거
|
|
||||||
- current session resume path 추가
|
|
||||||
- single-goal + optional microStep direct start
|
|
||||||
- default ritual만 사용
|
|
||||||
|
|
||||||
### 이번 slice에 포함하지 않음
|
|
||||||
|
|
||||||
- multi-goal manage 복구
|
|
||||||
- entry 단계 scene/sound/timer 직접 선택
|
|
||||||
- planner/dashboard 요소 복구
|
|
||||||
- goal 저장과 session start의 backend atomic endpoint 신규 도입
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 7. 검증 기준
|
|
||||||
|
|
||||||
- 사용자가 10초 안에 goal을 입력하고 `/space`로 들어갈 수 있다
|
|
||||||
- `/app` 첫 인상이 planner나 setup wizard처럼 보이지 않는다
|
|
||||||
- current session이 있으면 `resume`이 주 행동으로 읽힌다
|
|
||||||
- 현재 세션이 없을 때는 `지금 시작`이 유일한 dominant CTA다
|
|
||||||
- scene / sound / timer는 entry의 주 의사결정으로 느껴지지 않는다
|
|
||||||
@@ -8,7 +8,7 @@ Last Updated: 2026-03-15
|
|||||||
|
|
||||||
- `../../product_principles.md`
|
- `../../product_principles.md`
|
||||||
- `../../current_context.md`
|
- `../../current_context.md`
|
||||||
- `09_app_entry_detailed_spec.md`
|
- `19_app_atmosphere_entry_spec.md`
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
@@ -13,7 +13,6 @@ Last Updated: 2026-03-15
|
|||||||
|
|
||||||
- `../../product_principles.md`
|
- `../../product_principles.md`
|
||||||
- `../../current_context.md`
|
- `../../current_context.md`
|
||||||
- `09_app_entry_detailed_spec.md`
|
|
||||||
- `19_app_atmosphere_entry_spec.md`
|
- `19_app_atmosphere_entry_spec.md`
|
||||||
- `10_refocus_system_spec.md`
|
- `10_refocus_system_spec.md`
|
||||||
- `11_away_return_recovery_spec.md`
|
- `11_away_return_recovery_spec.md`
|
||||||
@@ -48,11 +47,11 @@ VibeRoom은 아래 방식으로 진행한다.
|
|||||||
- 루트 문서 `../../product_principles.md`
|
- 루트 문서 `../../product_principles.md`
|
||||||
- single-goal, premium focus, anti-to-do 방향 고정
|
- single-goal, premium focus, anti-to-do 방향 고정
|
||||||
|
|
||||||
### 완료 2. `/app` Entry Reframe
|
### 완료 2. `/app` Entry Reframe (Legacy)
|
||||||
|
|
||||||
- 문서: `09_app_entry_detailed_spec.md`
|
- 문서: historical, superseded by `19_app_atmosphere_entry_spec.md`
|
||||||
- 구현 상태:
|
- 구현 상태:
|
||||||
- `/app`은 single-goal commitment gate
|
- `/app`은 한때 single-goal commitment gate로 정리됐음
|
||||||
- planner/list-first 구조 제거
|
- planner/list-first 구조 제거
|
||||||
- current session이 있으면 resume 우선
|
- current session이 있으면 resume 우선
|
||||||
|
|
||||||
@@ -369,7 +368,7 @@ Away / Return이 끼어들기 전, 다음으로 예정된 축은 아래 두 가
|
|||||||
### 방금 완료
|
### 방금 완료
|
||||||
|
|
||||||
- `Weekly Review Entry Flow` Slice 1
|
- `Weekly Review Entry Flow` Slice 1
|
||||||
- `/app` hero 아래 low-emphasis weekly review teaser 추가
|
- `/app`에 low-emphasis weekly review entry를 추가
|
||||||
- 충분한 최근 7일 데이터가 있을 때만 `/stats` primary entry를 노출
|
- 충분한 최근 7일 데이터가 있을 때만 `/stats` primary entry를 노출
|
||||||
- `Weekly Review Entry Flow` Slice 2
|
- `Weekly Review Entry Flow` Slice 2
|
||||||
- `/stats` 마지막 CTA가 `/app?review=weekly&carryHint=...` handoff로 연결
|
- `/stats` 마지막 CTA가 `/app?review=weekly&carryHint=...` handoff로 연결
|
||||||
@@ -378,7 +377,7 @@ Away / Return이 끼어들기 전, 다음으로 예정된 축은 아래 두 가
|
|||||||
- Pro에서는 `/stats` carry-forward에 추천 ritual을 함께 보여준다
|
- Pro에서는 `/stats` carry-forward에 추천 ritual을 함께 보여준다
|
||||||
- `/stats` 마지막 CTA와 `/app` return hint가 더 구체적인 next-session handoff로 바뀐다
|
- `/stats` 마지막 CTA와 `/app` return hint가 더 구체적인 next-session handoff로 바뀐다
|
||||||
- `Weekly Review Entry Flow` Slice 4
|
- `Weekly Review Entry Flow` Slice 4
|
||||||
- `/space`에서 goal complete로 setup 상태로 돌아온 직후에만 secondary review teaser가 보인다
|
- `/space`에서 goal complete로 setup 상태로 돌아온 직후에만 secondary review entry가 보인다
|
||||||
- full review 강제 이동 없이 작은 후행 경로로 `/stats`를 연다
|
- full review 강제 이동 없이 작은 후행 경로로 `/stats`를 연다
|
||||||
- 다음 구현은 weekly review의 ritual fit highlight 또는 deeper recovery schema다
|
- 다음 구현은 weekly review의 ritual fit highlight 또는 deeper recovery schema다
|
||||||
- `Paused Session Re-entry` spec
|
- `Paused Session Re-entry` spec
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ Last Updated: 2026-03-14
|
|||||||
|
|
||||||
관련 문서:
|
관련 문서:
|
||||||
|
|
||||||
- `09_app_entry_detailed_spec.md`
|
- `19_app_atmosphere_entry_spec.md`
|
||||||
- `10_refocus_system_spec.md`
|
- `10_refocus_system_spec.md`
|
||||||
- `11_away_return_recovery_spec.md`
|
- `11_away_return_recovery_spec.md`
|
||||||
- `12_core_loop_execution_roadmap.md`
|
- `12_core_loop_execution_roadmap.md`
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ Last Updated: 2026-03-15
|
|||||||
|
|
||||||
관련 문서:
|
관련 문서:
|
||||||
|
|
||||||
- `09_app_entry_detailed_spec.md`
|
- `19_app_atmosphere_entry_spec.md`
|
||||||
- `12_core_loop_execution_roadmap.md`
|
- `12_core_loop_execution_roadmap.md`
|
||||||
- `14_weekly_review_reframe_spec.md`
|
- `14_weekly_review_reframe_spec.md`
|
||||||
- `../../product_principles.md`
|
- `../../product_principles.md`
|
||||||
@@ -107,7 +107,7 @@ review가 가장 유의미한 순간도 바로 여기다.
|
|||||||
`/app -> /stats -> /app`
|
`/app -> /stats -> /app`
|
||||||
|
|
||||||
1. 사용자가 `/app`에 들어온다
|
1. 사용자가 `/app`에 들어온다
|
||||||
2. hero 아래 또는 하단에 `weekly review teaser`가 보인다
|
2. entry stage 바깥의 quiet review dock에 `weekly review entry`가 보인다
|
||||||
3. 사용자가 teaser를 누른다
|
3. 사용자가 teaser를 누른다
|
||||||
4. `/stats`로 이동한다
|
4. `/stats`로 이동한다
|
||||||
5. review를 본다
|
5. review를 본다
|
||||||
@@ -174,24 +174,24 @@ review가 가장 유의미한 순간도 바로 여기다.
|
|||||||
|
|
||||||
이 경우:
|
이 경우:
|
||||||
|
|
||||||
- `/app` 메인 hero는 single-goal commitment에 집중
|
- `/app` no-session 상태에서는 goal/duration/atmosphere entry stage에 집중
|
||||||
- resume 상태에서는 hero 아래 큰 teaser 대신, resume card 안의 조용한 secondary entry로 review를 연다
|
- resume 상태에서는 entry shell 대신 resume card 안의 조용한 secondary entry로 review를 연다
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 7. `/app` teaser 설계
|
## 7. `/app` review dock 설계
|
||||||
|
|
||||||
### 위치
|
### 위치
|
||||||
|
|
||||||
추천 위치:
|
추천 위치:
|
||||||
|
|
||||||
- hero 바로 아래
|
- desktop에서는 entry stage 우측 또는 우상단 quiet dock
|
||||||
- 또는 hero 하단과 footer 사이
|
- mobile에서는 entry stage 아래의 얇은 secondary panel
|
||||||
|
|
||||||
금지:
|
금지:
|
||||||
|
|
||||||
- hero CTA보다 위
|
- entry stage보다 위
|
||||||
- hero CTA와 같은 무게
|
- entry CTA와 같은 무게
|
||||||
- card 3개 중 하나처럼 보이게 배치
|
- card 3개 중 하나처럼 보이게 배치
|
||||||
|
|
||||||
### 형태
|
### 형태
|
||||||
@@ -215,7 +215,7 @@ review가 가장 유의미한 순간도 바로 여기다.
|
|||||||
### UX 원칙
|
### UX 원칙
|
||||||
|
|
||||||
- teaser는 insight를 다 말하지 않는다
|
- teaser는 insight를 다 말하지 않는다
|
||||||
- review를 보고 싶게 만들되, hero를 가리지 않는다
|
- review를 보고 싶게 만들되, entry stage를 가리지 않는다
|
||||||
- start CTA보다 절대 커 보이면 안 된다
|
- start CTA보다 절대 커 보이면 안 된다
|
||||||
|
|
||||||
---
|
---
|
||||||
@@ -263,7 +263,7 @@ review-aware state가 된다.
|
|||||||
|
|
||||||
- “방금 본 review 기준 추천” 한 줄
|
- “방금 본 review 기준 추천” 한 줄
|
||||||
- review carry-forward hint
|
- review carry-forward hint
|
||||||
- optional ritual prefill
|
- optional atmosphere / ritual hint
|
||||||
|
|
||||||
예시:
|
예시:
|
||||||
|
|
||||||
@@ -273,7 +273,7 @@ review-aware state가 된다.
|
|||||||
### 유지할 것
|
### 유지할 것
|
||||||
|
|
||||||
- goal은 여전히 사용자가 직접 입력
|
- goal은 여전히 사용자가 직접 입력
|
||||||
- microStep도 직접 입력 가능
|
- goal과 duration은 여전히 사용자가 직접 입력
|
||||||
|
|
||||||
자동으로 하지 말 것:
|
자동으로 하지 말 것:
|
||||||
|
|
||||||
@@ -314,9 +314,9 @@ review-aware state가 된다.
|
|||||||
|
|
||||||
## 11. UI/UX 원칙
|
## 11. UI/UX 원칙
|
||||||
|
|
||||||
### `/app` teaser
|
### `/app` review dock
|
||||||
|
|
||||||
- hero보다 작음
|
- entry stage보다 작음
|
||||||
- 한 줄 summary
|
- 한 줄 summary
|
||||||
- secondary CTA
|
- secondary CTA
|
||||||
- glass/card를 크게 쓰지 않음
|
- glass/card를 크게 쓰지 않음
|
||||||
@@ -335,7 +335,7 @@ review-aware state가 된다.
|
|||||||
|
|
||||||
## 12. 구현 순서
|
## 12. 구현 순서
|
||||||
|
|
||||||
### Slice 1. `/app` weekly review teaser 추가
|
### Slice 1. `/app` weekly review dock 추가
|
||||||
|
|
||||||
범위:
|
범위:
|
||||||
|
|
||||||
|
|||||||
@@ -69,7 +69,7 @@ Audit 중 충돌이 생기면 아래 순서로 판단한다.
|
|||||||
1. `product_principles.md`
|
1. `product_principles.md`
|
||||||
2. `/Users/ijeongmin/Desktop/corpi/viberoom/current_context.md`
|
2. `/Users/ijeongmin/Desktop/corpi/viberoom/current_context.md`
|
||||||
3. route/flow 관련 상세 spec
|
3. route/flow 관련 상세 spec
|
||||||
- `09_app_entry_detailed_spec.md`
|
- `19_app_atmosphere_entry_spec.md`
|
||||||
- `10_refocus_system_spec.md`
|
- `10_refocus_system_spec.md`
|
||||||
- `11_away_return_recovery_spec.md`
|
- `11_away_return_recovery_spec.md`
|
||||||
- `13_space_intent_card_collapsed_expanded_spec.md`
|
- `13_space_intent_card_collapsed_expanded_spec.md`
|
||||||
@@ -345,7 +345,7 @@ Free / Pro를 아래 기준으로 본다.
|
|||||||
8. `/space` goal complete choice
|
8. `/space` goal complete choice
|
||||||
9. `/space` goal complete next
|
9. `/space` goal complete next
|
||||||
10. `/space` complete -> setup -> review teaser
|
10. `/space` complete -> setup -> review teaser
|
||||||
11. `/app` weekly review teaser -> `/stats` -> `/app`
|
11. `/app` weekly review entry -> `/stats` -> `/app`
|
||||||
12. Pro 상태 handoff
|
12. Pro 상태 handoff
|
||||||
|
|
||||||
각 시나리오마다 본다.
|
각 시나리오마다 본다.
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ Last Updated: 2026-03-15
|
|||||||
|
|
||||||
관련 문서:
|
관련 문서:
|
||||||
|
|
||||||
- `09_app_entry_detailed_spec.md`
|
- `19_app_atmosphere_entry_spec.md`
|
||||||
- `10_refocus_system_spec.md`
|
- `10_refocus_system_spec.md`
|
||||||
- `11_away_return_recovery_spec.md`
|
- `11_away_return_recovery_spec.md`
|
||||||
- `15_app_stats_entry_flow_spec.md`
|
- `15_app_stats_entry_flow_spec.md`
|
||||||
@@ -205,7 +205,7 @@ paused session이 있는데 새 목표를 바로 시작하게 하면
|
|||||||
처리:
|
처리:
|
||||||
|
|
||||||
- `/app` 진입
|
- `/app` 진입
|
||||||
- single-goal start hero 노출
|
- no-session entry shell 노출
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
@@ -2,13 +2,12 @@
|
|||||||
|
|
||||||
Last Updated: 2026-03-16
|
Last Updated: 2026-03-16
|
||||||
|
|
||||||
이 문서는 `/app`을 **goal + duration + atmosphere` 중심의 premium focus entry surface**로 재설계하기 위한 기준 문서다.
|
이 문서는 `/app`을 **`goal + duration + atmosphere` 중심의 premium focus entry surface**로 재설계하기 위한 기준 문서다.
|
||||||
|
|
||||||
관련 문서:
|
관련 문서:
|
||||||
|
|
||||||
- `../../product_principles.md`
|
- `../../product_principles.md`
|
||||||
- `../../current_context.md`
|
- `../../current_context.md`
|
||||||
- `09_app_entry_detailed_spec.md`
|
|
||||||
- `14_weekly_review_reframe_spec.md`
|
- `14_weekly_review_reframe_spec.md`
|
||||||
- `15_app_stats_entry_flow_spec.md`
|
- `15_app_stats_entry_flow_spec.md`
|
||||||
- `18_paused_session_reentry_spec.md`
|
- `18_paused_session_reentry_spec.md`
|
||||||
@@ -27,7 +26,7 @@ Last Updated: 2026-03-16
|
|||||||
- 첫 진입에서 VibeRoom만의 premium 감각이 충분히 전달되지 않는다
|
- 첫 진입에서 VibeRoom만의 premium 감각이 충분히 전달되지 않는다
|
||||||
|
|
||||||
따라서 `/app`은 다시 planning home으로 돌아가면 안 되지만,
|
따라서 `/app`은 다시 planning home으로 돌아가면 안 되지만,
|
||||||
**goal + duration + atmosphere`를 한 화면에서 직관적으로 결정하는 premium entry stage**로 진화할 필요가 있다.
|
**`goal + duration + atmosphere`를 한 화면에서 직관적으로 결정하는 premium entry stage**로 진화할 필요가 있다.
|
||||||
|
|
||||||
핵심은 이것이다.
|
핵심은 이것이다.
|
||||||
|
|
||||||
@@ -444,4 +443,3 @@ Last Updated: 2026-03-16
|
|||||||
- `/app`이 planner/dashboard처럼 보이지 않는다
|
- `/app`이 planner/dashboard처럼 보이지 않는다
|
||||||
- paused session에서는 resume gate가 새 entry shell보다 우선한다
|
- paused session에서는 resume gate가 새 entry shell보다 우선한다
|
||||||
- `70분` 같은 custom duration이 실제 세션 길이로 반영된다
|
- `70분` 같은 custom duration이 실제 세션 길이로 반영된다
|
||||||
|
|
||||||
|
|||||||
@@ -9,14 +9,9 @@ Last Updated: 2026-03-15
|
|||||||
- takeover confirm sheet에서만 current paused session을 정리하고 single-goal start 상태로 넘어간다
|
- takeover confirm sheet에서만 current paused session을 정리하고 single-goal start 상태로 넘어간다
|
||||||
- silent abandon을 막기 위해 server `startSession()`도 current session 존재 시 direct start를 거절하도록 정리했다
|
- silent abandon을 막기 위해 server `startSession()`도 current session 존재 시 direct start를 거절하도록 정리했다
|
||||||
- explicit confirm 이후에만 `abandon -> 새 목표 입력` 흐름이 가능하다
|
- explicit confirm 이후에만 `abandon -> 새 목표 입력` 흐름이 가능하다
|
||||||
- `/app` single-goal commitment gate 재구성:
|
- `/app` 기존 single-goal commitment gate는 legacy로 내려갔다:
|
||||||
- 2-step `goal -> ritual` flow 제거
|
- 2-step `goal -> ritual` flow를 제거하고, current session이 있으면 `Resume` UI를 우선 노출하도록 정리했다
|
||||||
- current session이 있으면 `Resume` UI를 우선 노출하고, `/space`로 바로 이어가기만 제안하되 review entry는 조용한 secondary link로 유지
|
- 현재 source-of-truth는 `goal + duration + atmosphere` 중심의 새 entry shell spec이다
|
||||||
- current session이 없으면 `goal 1개 + optional microStep 1개 + primary CTA`만 남긴 direct start 구조로 단순화
|
|
||||||
- `환경 세팅`, `블록 정리`, scene/sound/timer 선택을 메인 진입 경로에서 제거
|
|
||||||
- suggestion chip은 planner가 아니라 입력 마찰을 줄이는 용도로만 유지
|
|
||||||
- 시작 시에는 기본 ritual(`forest · 50/10 · forest-birds`)로 세션을 열고, 세부 조정은 `/space`에서 하도록 역할을 분리
|
|
||||||
- `/app`이 planner home이 아니라 commitment gate라는 역할을 문서와 구현 모두에서 다시 고정
|
|
||||||
- `/space` Refocus System slice 1 구현:
|
- `/space` Refocus System slice 1 구현:
|
||||||
- HUD recovery layer를 `paused / refocus / next-beat / complete` 단일 overlay 상태로 정리
|
- HUD recovery layer를 `paused / refocus / next-beat / complete` 단일 overlay 상태로 정리
|
||||||
- pause 직후 바로 편집 시트를 열지 않고, 작은 recovery prompt를 먼저 노출
|
- pause 직후 바로 편집 시트를 열지 않고, 작은 recovery prompt를 먼저 노출
|
||||||
@@ -100,11 +95,10 @@ Last Updated: 2026-03-15
|
|||||||
- Calm Session OS 유료화 축 구현:
|
- Calm Session OS 유료화 축 구현:
|
||||||
- Free는 기본 시작, Pro는 더 잘 이어가기를 파는 구조로 재정의
|
- Free는 기본 시작, Pro는 더 잘 이어가기를 파는 구조로 재정의
|
||||||
- old `Scene Packs / Sound Packs / Profiles` 중심 copy를 `Daily Focus Plan / Rituals / Weekly Review` 중심으로 교체
|
- old `Scene Packs / Sound Packs / Profiles` 중심 copy를 `Daily Focus Plan / Rituals / Weekly Review` 중심으로 교체
|
||||||
- `/app` route를 Session OS focus entry surface로 복구:
|
- `/app` route를 focus entry surface로 복구:
|
||||||
- `/app` route가 `/space` redirect 대신 `FocusDashboardWidget`을 렌더링
|
- `/app` route가 `/space` redirect 대신 `FocusDashboardWidget`을 렌더링
|
||||||
- current/next summary card와 list-first 구조를 제거하고, entry hero가 above-the-fold를 차지한다
|
- current/next summary card와 list-first 구조를 제거했다
|
||||||
- 현재는 current session이 있으면 resume, 없으면 `goal + microStep + start`만 제안하는 single-goal entry로 정리됐다
|
- 현재는 `Resume` gate가 구현되어 있고, no-session entry shell은 다음 slice에서 `goal + duration + atmosphere` 구조로 교체될 예정이다
|
||||||
- scene/sound/timer는 기본 ritual로 시작하고, 세부 조정은 `/space`에서 담당한다
|
|
||||||
- 플랜 tier 공유 store 추가:
|
- 플랜 tier 공유 store 추가:
|
||||||
- `entities/plan/model/usePlanTier.ts` 추가
|
- `entities/plan/model/usePlanTier.ts` 추가
|
||||||
- localStorage 기반 Free/Pro 상태를 `/app`, `/space`, `/stats`, dock paywall에서 공통 사용
|
- localStorage 기반 Free/Pro 상태를 `/app`, `/space`, `/stats`, dock paywall에서 공통 사용
|
||||||
@@ -124,12 +118,12 @@ Last Updated: 2026-03-15
|
|||||||
- 기존 `focus-summary` 응답을 주간 review view model로 변환해서 사용
|
- 기존 `focus-summary` 응답을 주간 review view model로 변환해서 사용
|
||||||
- recovery는 서버의 `pause 뒤 복귀` 집계를 사용하고, `자리 비움 뒤 복귀`만 limited note로 남긴다
|
- recovery는 서버의 `pause 뒤 복귀` 집계를 사용하고, `자리 비움 뒤 복귀`만 limited note로 남긴다
|
||||||
- `/app -> /stats` primary entry의 1차 연결:
|
- `/app -> /stats` primary entry의 1차 연결:
|
||||||
- current session이 없고 최근 7일 데이터가 충분할 때 `/app` hero 아래에 low-emphasis `Weekly Review` teaser를 노출한다
|
- current session이 없고 최근 7일 데이터가 충분할 때 `/app`의 quiet secondary review dock에서 `Weekly Review` entry를 노출한다
|
||||||
- teaser는 `/stats`로 연결되며, hero CTA보다 한 단계 아래 시각 우선순위를 유지한다
|
- resume 상태에서는 paused gate 안의 조용한 secondary entry로 review를 연다
|
||||||
- `/stats -> /app` handoff의 2차 연결:
|
- `/stats -> /app` handoff의 2차 연결:
|
||||||
- `/stats` 마지막 CTA는 `/app?review=weekly&carryHint=...&entryPreset=forest-50-10`으로 연결된다
|
- `/stats` 마지막 CTA는 `/app?review=weekly&carryHint=...&entryPreset=forest-50-10`으로 연결된다
|
||||||
- `/app`은 이 query를 받아 hero 위에 review-aware return hint를 노출한다
|
- `/app`은 이 query를 받아 entry stage 위의 review-aware return hint를 노출한다
|
||||||
- goal과 microStep은 자동 입력하지 않고, 방향만 가볍게 제안한다
|
- goal과 duration은 자동 입력하지 않고, 방향만 가볍게 제안한다
|
||||||
- Pro personalized handoff 3차 연결:
|
- Pro personalized handoff 3차 연결:
|
||||||
- Pro에서는 `/stats` carry-forward 섹션에 추천 ritual을 함께 보여준다
|
- Pro에서는 `/stats` carry-forward 섹션에 추천 ritual을 함께 보여준다
|
||||||
- `/stats` 마지막 CTA 카피가 generic start가 아니라 `가장 잘 맞은 ritual로 /app 돌아가기`로 바뀐다
|
- `/stats` 마지막 CTA 카피가 generic start가 아니라 `가장 잘 맞은 ritual로 /app 돌아가기`로 바뀐다
|
||||||
@@ -314,9 +308,9 @@ Last Updated: 2026-03-15
|
|||||||
|
|
||||||
## NEXT
|
## NEXT
|
||||||
|
|
||||||
1. `/app` single-goal commitment gate 브라우저 스모크
|
1. `/app` atmosphere entry shell 구현
|
||||||
2. `/space` intent HUD / refocus / goal-complete hierarchy QA
|
2. custom duration contract 정리
|
||||||
3. `/stats` factual summary / trend / refresh 브라우저 QA
|
3. weekly review dock 위치 재설계
|
||||||
|
|
||||||
## RISKS
|
## RISKS
|
||||||
|
|
||||||
|
|||||||
@@ -82,12 +82,12 @@ Last Updated: 2026-03-15
|
|||||||
- recovery tray가 열리면 base card는 자동으로 collapsed 상태를 유지한다.
|
- recovery tray가 열리면 base card는 자동으로 collapsed 상태를 유지한다.
|
||||||
- expanded rail은 outside click으로 접히지만, decision tray는 outside click으로 닫히지 않는다.
|
- expanded rail은 outside click으로 접히지만, decision tray는 outside click으로 닫히지 않는다.
|
||||||
- rail 클릭은 펼침/접힘만 담당하고, 수정은 expanded 상태의 `수정` 액션으로만 진입한다.
|
- rail 클릭은 펼침/접힘만 담당하고, 수정은 expanded 상태의 `수정` 액션으로만 진입한다.
|
||||||
- `/app`을 single-goal commitment gate로 다시 줄였다.
|
- `/app`은 legacy single-goal gate에서 `goal + duration + atmosphere` 중심의 새 entry shell로 전환 중이다.
|
||||||
- 2-step ritual setup을 제거했다.
|
- current session이 있으면 `Resume` gate가 우선 노출된다.
|
||||||
- current session이 있으면 `Resume` UI만 보여주고, `/space`로 이어가기만 제안한다.
|
- no-session 상태는 `goal 1개 + 예상 시간 + 선택된 atmosphere + 시작 CTA` 구조로 재설계 중이다.
|
||||||
- current session이 없으면 `goal 1개 + optional microStep 1개 + 바로 시작`만 남긴다.
|
- `microStep`은 `/app`에서 제거하고 `/space` recovery/refocus에서만 다시 잡는다.
|
||||||
- scene/sound/timer는 기본 ritual로 시작하고 `/space`에서 바꾸게 둔다.
|
- weekly review는 hero 아래 카드가 아니라 quiet secondary dock/entry로 유지한다.
|
||||||
- manage/list 성격의 affordance는 메인 진입 경로에서 제거했다.
|
- manage/list 성격의 affordance는 메인 진입 경로에서 계속 배제한다.
|
||||||
- `/space`는 execution-only surface로 정리됐다.
|
- `/space`는 execution-only surface로 정리됐다.
|
||||||
- setup drawer에서 Daily Plan / Ritual Library 섹션을 제거했다.
|
- setup drawer에서 Daily Plan / Ritual Library 섹션을 제거했다.
|
||||||
- goal, scene, sound, timer만 확인하고 focus HUD로 진입한다.
|
- goal, scene, sound, timer만 확인하고 focus HUD로 진입한다.
|
||||||
@@ -100,8 +100,9 @@ Last Updated: 2026-03-15
|
|||||||
- 기존 `focus-summary` 응답은 review view model로 변환해서 쓴다.
|
- 기존 `focus-summary` 응답은 review view model로 변환해서 쓴다.
|
||||||
- recovery는 서버의 `pause 뒤 복귀` 집계를 사용하고, `away recovery`만 limited state로 남긴다.
|
- recovery는 서버의 `pause 뒤 복귀` 집계를 사용하고, `away recovery`만 limited state로 남긴다.
|
||||||
- `/app`에서 `/stats`로 들어가는 primary path 1차가 생겼다.
|
- `/app`에서 `/stats`로 들어가는 primary path 1차가 생겼다.
|
||||||
- current session이 없고 최근 7일 데이터가 충분하면 hero 아래에 weekly review teaser가 보인다.
|
- current session이 없을 때는 quiet review dock에서 `/stats`로 진입할 수 있다.
|
||||||
- teaser는 `/stats`로 이동시키되, main start CTA보다 낮은 강조로 유지한다.
|
- paused session 상태에서도 resume gate 안에 조용한 secondary review entry가 남는다.
|
||||||
|
- review entry는 main start/resume CTA보다 항상 낮은 강조를 유지한다.
|
||||||
- `/app` Resume 상태에서도 weekly review entry가 보이게 정리했다.
|
- `/app` Resume 상태에서도 weekly review entry가 보이게 정리했다.
|
||||||
- review primary entry가 active session 상태에서 사라지지 않도록, resume card 안에 조용한 secondary review link를 추가했다.
|
- review primary entry가 active session 상태에서 사라지지 않도록, resume card 안에 조용한 secondary review link를 추가했다.
|
||||||
- `/stats` 마지막 CTA의 `/app` return handoff가 연결됐다.
|
- `/stats` 마지막 CTA의 `/app` return handoff가 연결됐다.
|
||||||
|
|||||||
@@ -99,7 +99,7 @@
|
|||||||
- `/app` paused resume
|
- `/app` paused resume
|
||||||
- `/app -> /stats -> /app`
|
- `/app -> /stats -> /app`
|
||||||
- `/space` pause / return / next beat / complete
|
- `/space` pause / return / next beat / complete
|
||||||
- `/space` complete -> setup -> weekly review teaser
|
- `/space` complete -> setup -> weekly review entry
|
||||||
- 제외 범위:
|
- 제외 범위:
|
||||||
- new feature 추가 금지
|
- new feature 추가 금지
|
||||||
- 완료 조건:
|
- 완료 조건:
|
||||||
|
|||||||
Reference in New Issue
Block a user