feat(core-loop): /app 진입과 /space 복구 흐름 구현

This commit is contained in:
2026-03-14 18:02:50 +09:00
parent bc08a049b6
commit b4ed94cf1b
19 changed files with 2638 additions and 619 deletions

View File

@@ -0,0 +1,132 @@
# 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의 주 의사결정으로 느껴지지 않는다

View File

@@ -0,0 +1,468 @@
# 10. Refocus System Spec
Last Updated: 2026-03-14
이 문서는 VibeRoom의 `Refocus System`을 제품 대표 경험으로 설계하기 위한 상세 기준 문서다.
관련 상위 문서:
- `../../product_principles.md`
- `../../current_context.md`
- `09_app_entry_detailed_spec.md`
---
## 1. 왜 Refocus가 핵심인가
VibeRoom의 차별점은 `더 오래 계획하게 만드는 것`이 아니라,
`흔들린 뒤에도 다시 집중 위에 올라타게 만드는 것`이어야 한다.
ADHD 성향 사용자와 프리랜서에게 진짜 어려운 순간은 대개 아래 셋 중 하나다.
- 시작 직전
- 잠깐 멈췄다가 다시 붙잡아야 할 때
- 한 조각을 끝냈는데 다음 동작이 흐려졌을 때
`/app`이 시작 마찰을 줄이는 화면이라면,
`Refocus System`은 **세션 도중 무너진 흐름을 다시 복구하는 핵심 시스템**이다.
---
## 2. 레퍼런스에서 가져올 것 / 버릴 것
이 문서는 2026-03-14 기준 공식 사이트를 기준으로 아래 레퍼런스를 참고했다.
- [Portal](https://portal.app/)
- [LifeAt Pricing](https://lifeat.io/pricing)
- [Focusmate Pricing](https://www.focusmate.com/pricing/)
- [Focusmate Getting Started](https://support.focusmate.com/en/articles/9110188-getting-started)
- [Focusmate Focus Now](https://support.focusmate.com/en/articles/9994509-focus-now)
### Portal에서 가져올 것
- 배경이 주인공이고 인터페이스는 조용히 뒤로 물러나야 한다
- 감각 품질 자체가 제품 가치가 된다
- “아름답다”가 장식이 아니라 사용 지속 이유가 된다
### Focusmate에서 가져올 것
- 행동을 시작시키는 명확한 구조
- 사용자가 망설이지 않게 하는 단일 흐름
- `지금 바로 들어간다`는 즉시성
### LifeAt에서 가져올 것
- 가볍게 시작할 수 있는 친화성
- 공간과 집중을 연결하는 감성
### LifeAt에서 가져오면 안 되는 것
- planner / todo / calendar 중심 구조
- 목표를 많이 다루게 하는 흐름
- “집중 앱”보다 “정리 앱”처럼 읽히는 경험
---
## 3. 한 줄 정의
> Refocus는 사용자가 흔들렸을 때 죄책감 없이 다시 한 조각 위에 올라타게 만드는 조용한 복귀 의식이다.
중요한 점:
- `수정 기능`이 아니다
- `체크리스트`가 아니다
- `왜 못 했는지 묻는 평가 시스템`이 아니다
---
## 4. 제품 목표
Refocus System은 아래 4가지를 만족해야 한다.
1. 사용자가 세션을 포기하지 않게 한다
2. pause 이후 복귀 마찰을 줄인다
3. microStep을 다시 잡아 실행을 재개하게 한다
4. UI가 배경과 몰입을 방해하지 않는다
---
## 5. 시스템 원칙
### 1. Refocus는 한 번에 한 질문만 한다
질문을 여러 개 던지면 planner처럼 느껴진다.
항상 다음 하나만 물어야 한다.
- 계속할까?
- 지금 할 한 조각은 무엇일까?
- 이 목표를 끝낼까?
### 2. 사용자를 평가하지 않는다
금지:
- 왜 못 했어요?
- 얼마나 산만했나요?
- 다시 집중하세요
허용:
- 다음 한 조각이 있나요?
- 지금 다시 시작할 수 있게 한 줄만 남겨볼까요?
- 여기까지로 충분한가요?
### 3. goal은 1개, microStep도 1개
Refocus는 절대 리스트 관리 UI가 되면 안 된다.
- multi-step 금지
- queue 금지
- subtask list 금지
### 4. 배경은 항상 주인공이다
Refocus UI는 강한 모달이 아니라 **배경 위에 잠깐 생겼다가 사라지는 얇은 recovery layer**여야 한다.
### 5. Premium은 절제에서 온다
좋은 Refocus는 화려한 카드나 모션이 아니라 아래에서 온다.
- 올바른 정보 밀도
- 1개의 명확한 행동
- 자연스러운 등장과 퇴장
- 배경과 어우러지는 재질감
---
## 6. Refocus가 필요한 순간들
Refocus는 아래 4개 진입점으로 고정한다.
### A. Pause 직후
사용자가 세션을 멈춘 뒤 다시 돌아와야 하는 순간.
### B. MicroStep 완료 직후
현재 한 조각은 끝났지만 다음 행동이 아직 흐린 순간.
### C. 사용자가 의도를 직접 수정하고 싶을 때
goal이나 microStep을 다시 정리하고 싶은 수동 진입.
### D. 세션에서 멀어졌다가 복귀했을 때
탭을 바꾸거나 잠깐 이탈한 후 다시 `/space`로 돌아온 상황.
---
## 7. 화면 상태 모델
Refocus는 아래 5개 상태만 가진다.
1. `Focused`
2. `Paused`
3. `Refocus`
4. `Next Beat`
5. `Complete`
한 번에 활성화되는 확장 상태는 하나만 허용한다.
- `Refocus`
- `Next Beat`
- `Complete`
이 셋은 동시에 보이면 안 된다.
---
## 8. 상태별 상세 UX
### 8.1 Focused
목표:
- 사용자가 UI를 거의 의식하지 않고 일하는 상태
보여야 하는 것:
- goal
- optional microStep
- timer HUD
- minimal controls
보이면 안 되는 것:
- 질문
- 복구 유도 문구
- task-like affordance
### 8.2 Paused
목표:
- 세션이 끊긴 느낌이 아니라 잠시 호흡을 고르는 느낌
행동:
- 바로 큰 sheet를 띄우지 않는다
- HUD 상태가 paused로 바뀌고,
- `다시 시작할 준비가 되면 한 조각만 다시 잡는다`는 감각을 준다
### 8.3 Refocus
목표:
- 목표를 버리지 않고 다시 시작점을 만든다
UI:
- anchored tray 또는 compact sheet
- 필드 2개
- 이번 세션 목표
- 지금 할 한 조각
- CTA 2개
- 적용
- 취소
중요:
- `다시 방향 잡기`는 메인 액션이 아니라 recovery action이어야 한다
- button cluster처럼 보이면 안 된다
### 8.4 Next Beat
목표:
- microStep 완료 후 checklist가 아니라 “다음 한 조각”으로 연결
질문:
> 다음 한 조각이 있나요?
행동:
- `한 조각 정하기`
- `없이 계속`
금지:
- 다음 step list 펼치기
- 여러 개 제안
- 정리형 UI
### 8.5 Complete
목표:
- 목표가 끝났을 때 닫음과 다음 시작을 모두 부드럽게 연결
질문:
- 여기까지 끝났나요?
행동:
- 여기까지 끝내기
- 다음 목표로 이어가기
- 잠깐 쉬기
완료는 celebration보다 **closure quality**가 중요하다.
---
## 9. 상세 플로우
### Flow A. Pause -> Refocus -> Resume
1. 사용자가 pause 한다
2. UI는 즉시 평가하지 않는다
3. 사용자가 resume을 누르거나 intent를 누르면 Refocus로 들어갈 수 있다
4. 사용자는 goal / microStep 중 필요한 것만 조정한다
5. `적용 후 이어가기` 또는 `적용` 뒤 resume
목표:
- pause 이후 바로 복귀하는 것이 아니라,
- 한 번 숨을 고르고 다시 붙잡게 만든다
### Flow B. MicroStep Complete -> Next Beat
1. 사용자가 microStep completion mark를 누른다
2. 기존 microStep은 조용히 처리된다
3. `다음 한 조각이 있나요?`가 나타난다
4. 사용자는
- 새 microStep을 적거나
- 없이 계속 간다
목표:
- planner처럼 다음 목록을 만드는 것이 아니라
- 지금 하나만 다시 붙잡게 한다
### Flow C. Manual Refocus
1. 사용자가 goal 영역을 눌러 의도 수정 진입
2. goal / microStep 수정
3. 적용
4. 조용히 복귀
목표:
- 세션을 깨지 않는 범위에서 intent만 조정
### Flow D. Goal Complete -> Next Goal or Close
1. 사용자가 goal complete 진입
2. 현재 목표를 닫을지, 다음 목표로 이어갈지 선택
3. 다음 목표는 여전히 1개만 다룬다
목표:
- checklist가 아니라 clean transition
---
## 10. UI 구조
### 레이어 구조
#### Layer 1. Background
- 배경 이미지/영상
- 주인공
#### Layer 2. Core HUD
- timer
- sound / scene controls
- intent card
#### Layer 3. Recovery Layer
- refocus tray
- next beat prompt
- complete tray
Recovery Layer는 Core HUD와 같은 material family를 가져야 한다.
다만 더 조용하고 얇아야 한다.
### Material 방향
- iOS 계열의 refined glass 참고
- 강한 탁도보다 `투명 + blur + 얕은 경계`를 우선
- glow, heavy shadow, thick border 금지
- chip 남발 금지
### 모션 방향
- 빠르게 튀어나오지 않는다
- appear 220~280ms
- disappear 180~220ms
- scale보다는 opacity + position shift 위주
---
## 11. 카피라이팅 방향
### tone
- 짧다
- 저압력이다
- 평가하지 않는다
- 다시 시작할 수 있게 한다
### 좋은 예
- `지금 할 한 조각`
- `다음 한 조각이 있나요?`
- `한 줄만 다듬고 다시 시작해요.`
- `여기까지로 충분한가요?`
### 피해야 할 예
- `할 일`
- `리스트`
- `관리`
- `다음 단계들`
- `왜 못 했나요?`
---
## 12. Free / Pro에서의 역할
### Free
- 기본 refocus 진입
- goal / microStep 재설정
- next beat prompt
- goal complete 기본 흐름
### Pro
- 더 정교한 refocus guidance
- 세션 패턴 기반 microStep 제안
- 어떤 ritual에서 복귀율이 높은지 review에 반영
중요:
Pro는 `더 많은 목표`가 아니라 `더 높은 복귀 성공률`을 파는 쪽으로 가야 한다.
---
## 13. 성공 지표
Refocus System은 아래 지표로 판단한다.
- Pause 후 Resume 비율
- Pause 후 Refocus 진입 비율
- Refocus 후 2분 이상 유지 비율
- MicroStep 완료 후 Next Beat 입력 비율
- Goal complete 후 다음 세션 전환 비율
- 세션 중 abandon 비율 감소
---
## 14. 구현 우선순위
### Slice 1
- pause 이후 Refocus 진입 구조 정리
- goal / microStep 수정 tray 정교화
- 한 번에 하나의 overlay만 뜨도록 상태 정리
### Slice 2
- microStep 완료 -> Next Beat 흐름 정리
- checklist 느낌 제거
### Slice 3
- goal complete tray의 완성도 향상
- closure / next goal / break 분기 정리
### Slice 4
- Pro용 adaptive refocus 기획
- review와 refocus 연결
---
## 15. 절대 피해야 할 방향
- pause를 실패처럼 느끼게 하는 UX
- checklist UI
- multi-step planner화
- 과한 그래프 / 통계 immediate 노출
- 배경보다 더 앞에 나오는 recovery UI
- action chip 남발
- 한 번에 여러 질문을 던지는 sheet
---
## 16. 이 문서를 기준으로 다음 구현에서 꼭 지켜야 할 것
- Refocus는 `편집 기능`이 아니라 `recovery ritual`처럼 느껴져야 한다
- 사용자는 한 번에 하나의 행동만 선택해야 한다
- 배경은 절대 희생시키지 않는다
- premium quality는 더 많은 glass가 아니라 더 적은 friction에서 나온다

View File

@@ -0,0 +1,441 @@
# 11. Away / Return Recovery Spec
Last Updated: 2026-03-14
이 문서는 사용자가 `pause`를 누르지 않고 그냥 자리를 떠난 경우를 VibeRoom이 어떻게 감지하고, 어떻게 맞이하고, 어떻게 다시 복귀시킬지를 정의하는 상세 기준 문서다.
관련 문서:
- `../../product_principles.md`
- `../../current_context.md`
- `10_refocus_system_spec.md`
---
## 1. 왜 이 기획이 중요한가
ADHD 성향 사용자와 프리랜서는 자주 아래처럼 이탈한다.
- `pause`를 누를 생각도 못 한 채 자리에서 일어남
- 잠깐 딴 탭을 보다가 세션 흐름을 잃음
- focus가 끝났는지도 모른 채 돌아옴
이 상황을 제품이 다루지 않으면 아래 문제가 생긴다.
- Refocus가 “사용자가 pause를 눌렀을 때만 작동하는 기능”으로 축소된다
- 세션이 실제 흐름보다 더 기계적으로 느껴진다
- `pause``break`가 같은 “멈춘 상태”처럼 읽힌다
- 돌아온 사용자를 잘못된 상태로 맞이하게 된다
VibeRoom은 감시 앱이 되어서는 안 되지만,
**돌아왔을 때의 복귀 품질**은 반드시 설계해야 한다.
---
## 2. 한 줄 정의
> Away / Return은 사용자의 무의식적 이탈을 실패로 다루지 않고, 돌아왔을 때 가장 자연스럽게 다시 몰입 위에 올려놓는 복귀 레이어다.
중요한 점:
- 사용자를 통제하거나 막는 기능이 아니다
- “왜 떠났는가”를 추궁하지 않는다
- 핵심은 detection보다 **return UX**다
---
## 3. 이 시스템이 해결해야 하는 문제
### 문제 A. 사용자는 `pause`를 누르지 않는다
사용자는 실제로는 쉬고 싶어서 일어난 것이어도,
제품 안에서는 아무 액션도 하지 않은 채 세션이 흘러간다.
### 문제 B. focus가 끝났는데 break처럼 보인다
사용자가 없던 사이 focus가 끝났다면, 돌아왔을 때 단순 `Break`로 맞이하면 안 된다.
그건 제품이 사용자의 실제 맥락을 오해한 것이다.
### 문제 C. pause와 break가 겹쳐 보인다
현재 감정적으로는 이렇게 읽히기 쉽다.
- `Pause`: 내가 멈춤
- `Break`: focus가 끝나서 쉬는 중
둘은 의미가 다른데, UI와 상태가 충분히 분리되지 않으면 같은 “멈춤”처럼 느껴진다.
---
## 4. 핵심 원칙
### 1. 감시는 하지 않는다
아래는 금지한다.
- webcam / face tracking
- 키보드/마우스 무입력만으로 강제 이탈 판정
- 사용자를 혼내는 알림
- “집중하지 않았네요” 류의 카피
### 2. 확실한 신호만 사용한다
웹에서 “자리 비움”은 정확히 알 수 없다.
따라서 v1은 아래처럼 비교적 강한 신호만 쓴다.
- `visibilitychange`
- `pagehide`
- 브라우저/기기 sleep 이후 큰 시간 점프
- 창 복귀 시점
### 3. detection보다 return이 중요하다
중요한 것은 “네가 떠났다는 걸 알아냈다”가 아니라,
**“돌아온 지금 무엇을 제안할 것인가”**다.
### 4. Pause와 Break는 명확히 다르게 느껴져야 한다
- `Pause`는 recovery tone
- `Break`는 release / reset tone
- `Return`은 re-entry tone
### 5. focus ended while away는 Break가 아니라 Return이다
사용자가 없는 동안 focus가 끝났다면,
돌아온 순간의 경험은 `쉬는 중`이 아니라 `복귀 결정`이어야 한다.
---
## 5. 상태 모델
VibeRoom의 세션 상태를 제품적으로는 아래처럼 다룬다.
### Core States
- `Focus`
- `Pause`
- `Break`
### Recovery States
- `AwayCandidate`
- `Return`
### 의미
#### Focus
사용자가 현재 세션 안에서 일하고 있음
#### Pause
사용자가 의도적으로 멈춤
#### Break
focus 블록을 끝내고 의도적으로 쉬는 상태
#### AwayCandidate
사용자가 실제로 자리를 떴을 가능성이 높은 내부 판단 상태
#### Return
이탈 후 다시 돌아온 순간, 제품이 복귀를 제안하는 상태
---
## 6. 웹에서의 감지 전략
### v1에서 사용하는 신호
#### 1. visibility hidden
- 사용자가 탭을 떠남
- 브라우저가 background로 감
#### 2. pagehide / tab background
- 페이지가 전환되거나 숨겨짐
#### 3. sleep / wake 시간 점프
- 사용자가 기기를 잠그거나 화면이 꺼졌다가 돌아왔을 가능성
- `Date.now()` 기준 큰 delta로 감지
### v1에서 사용하지 않는 신호
#### blur / focus 단독
너무 오탐이 많다.
#### 무입력 시간만으로 Away 판단
읽고 생각하는 사용자를 잘못 판정할 수 있다.
#### pointer / keyboard tracking 강제화
감시처럼 느껴질 수 있어 금지
---
## 7. 판단 규칙
### Rule 1. focus 중 hidden/wake gap 발생
상태:
- `Focus`
- `visibility hidden` 또는 `sleep/wake delta` 발생
처리:
- 내부적으로 `AwayCandidate`
### Rule 2. 돌아왔을 때 focus가 아직 안 끝남
상태:
- 사용자가 복귀
- 남은 focus 시간이 남아 있음
처리:
- `Return` tray 노출
- 질문:
- `이어서 할까요?`
- `한 조각 다시 잡을까요?`
### Rule 3. 돌아왔을 때 focus가 이미 끝남
상태:
- 사용자가 복귀
- focus phase는 끝났음
- 하지만 사용자는 그 종료를 경험하지 못했음
처리:
- `Break` 직접 진입 금지
- `Return` tray 노출
- 질문:
- `자리를 비운 사이 이 블록이 끝났어요. 지금 어떻게 이어갈까요?`
행동:
- `지금부터 쉬기`
- `다음 목표로 이어가기`
- `한 조각 다시 잡기`
### Rule 4. pause 상태에서 복귀
상태:
- 이미 사용자가 직접 `Pause`한 상태
처리:
- 이건 Away보다 Pause 흐름이 우선
- 기존 pause recovery prompt 유지
즉, `Away / Return`은 manual pause를 덮어쓰지 않는다.
---
## 8. Return UX 설계
### Return의 목적
- 죄책감 없이 다시 올려놓기
- `지금 어떤 상태인지`를 간단히 알려주기
- 선택지를 2~3개만 제시하기
### Return의 기본 구조
- eyebrow: `다시 돌아왔어요`
- 짧은 현재 맥락 설명
- primary action 1개
- secondary action 1개
- tertiary는 최대 1개
### Case A. focus still running
카피 예:
- 제목: `이어서 갈까요?`
- 설명: `흐름은 그대로 남아 있어요. 바로 이어가거나 한 조각만 다시 잡을 수 있어요.`
행동:
- primary: `이어서 하기`
- secondary: `한 조각 다시 잡기`
### Case B. focus ended while away
카피 예:
- 제목: `자리를 비운 사이 이 블록이 끝났어요.`
- 설명: `지금부터 쉬거나, 다음으로 이어갈 수 있어요.`
행동:
- primary: `지금부터 쉬기`
- secondary: `다음 목표 이어가기`
- tertiary: `한 조각 다시 잡기`
### Case C. break ended while away
이건 v1에서는 단순화한다.
- break가 끝났고 사용자가 돌아왔다면
- `다음 블록으로 이어갈까요?` 정도의 단순 return prompt만 둔다
- 이 상태는 후속 slice에서 다룬다
---
## 9. Pause / Break / Return의 차이
### Pause
- 사용자가 직접 멈춘 상태
- 톤: recovery
- 질문:
- `한 조각 다시 잡기`
- `이대로 이어가기`
### Break
- 사용자가 focus 블록을 끝낸 뒤 쉬는 상태
- 톤: release / reset
- 질문:
- `쉬기 계속`
- `다음으로 가기`
### Return
- 사용자가 떠났다가 돌아온 상태
- 톤: re-entry
- 질문:
- `지금 어디서 다시 시작할까?`
핵심:
`Pause``Return`은 비슷하지만 다르다.
- Pause는 사용자가 멈춘 것
- Return은 제품이 사용자의 이탈을 감지하고 다시 맞이하는 것
---
## 10. UI / Layer 구조
### Layer 원칙
- Away / Return도 기존 recovery family 안에 들어간다
- 한 번에 하나의 recovery layer만 열 수 있다
우선순위:
1. `Complete`
2. `Return`
3. `Pause`
4. `Refocus`
5. `Next Beat`
### 이유
- Complete는 가장 명시적이고 종료 의미가 강함
- Return은 환경 변화에 대한 복귀 진입점
- Pause는 사용자의 수동 멈춤
- Refocus와 Next Beat는 더 세부적인 recovery 단계
---
## 11. 카피 원칙
### 좋은 톤
- `다시 돌아왔어요`
- `흐름은 그대로 남아 있어요`
- `한 조각만 다시 잡을까요?`
- `지금부터 쉬거나, 다음으로 이어갈 수 있어요`
### 금지 톤
- `집중을 놓쳤네요`
- `왜 자리를 비우셨나요`
- `세션이 중단되었습니다`
- `복귀하세요`
---
## 12. 구현 우선순위
### Slice A. Spec 정리
- 상태 모델 확정
- detection 전략 확정
- Return UX 문구 확정
### Slice B. Detection 도입
- `visibilitychange`
- `pagehide`
- sleep/wake delta
### Slice C. Return Tray 구현
- focus still running case
- focus ended while away case
### Slice D. Pause / Break 분리 강화
- copy
- visual tone
- action hierarchy
---
## 13. 측정 지표
- hidden -> return 이후 resume 비율
- away detected 후 abandon 비율
- focus ended while away 후 다음 행동 선택률
- return tray에서 primary 선택 비율
- return 후 2분 이상 유지 비율
---
## 14. 이번 기획이 기존 계획과 어떻게 연결되는가
이 문서는 `중간에 끼어든 기획`이 맞지만, 방향을 흐리는 끼어듦이 아니다.
오히려 `Refocus System`을 완성하기 위해 필요한 핵심 보강이다.
따라서 순서는 이렇게 재정렬한다.
1. `Refocus System` 구현
2. `Away / Return Recovery` 구현
3. 그 다음에 originally planned visual polish
4. 그 다음에 Break 품질과 Review 확장
즉, 원래 예정했던 다음 기획은 사라지지 않는다.
**Away / Return이 먼저 들어오고, visual polish와 break refinement가 그 뒤로 밀리는 것**이다.
---
## 15. 절대 피해야 할 방향
- 감시처럼 느껴지는 detection
- 무입력 시간을 벌점처럼 해석하는 것
- hidden -> 자동 pause 강제
- 돌아왔을 때 죄책감 유발 카피
- focus ended while away인데 그냥 break로 보내는 것
---
## 16. 다음 구현에서 꼭 지켜야 할 것
- detection은 조심스럽게, return UX는 분명하게
- pause와 return을 섞지 말 것
- break는 reward / reset tone으로 유지할 것
- away는 “실패”가 아니라 “복귀가 필요한 순간”으로 다룰 것

View File

@@ -0,0 +1,285 @@
# 12. Core Loop Execution Roadmap
Last Updated: 2026-03-14
이 문서는 VibeRoom의 핵심 제품 기획을 **어떤 순서로 구현까지 연결할지**를 정의하는 실행 로드맵이다.
중요한 목적은 두 가지다.
- 중간에 끼어드는 기획이 전체 방향을 흔들지 않게 한다
- 어떤 세션, 어떤 에이전트가 들어와도 **다음으로 무엇을 해야 하는지** 즉시 이해하게 한다
관련 문서:
- `../../product_principles.md`
- `../../current_context.md`
- `09_app_entry_detailed_spec.md`
- `10_refocus_system_spec.md`
- `11_away_return_recovery_spec.md`
---
## 1. 기본 원칙
VibeRoom은 아래 방식으로 진행한다.
1. 바뀌면 안 되는 제품 원칙을 먼저 고정한다
2. 코어 루프를 정의한다
3. 코어 루프를 **slice 단위**로 상세 기획한다
4. 각 slice는 `기획 -> 구현 -> 브라우저 QA -> 문서 업데이트`까지 닫고 간다
5. 다음 slice는 이전 slice가 제품적으로 안정된 뒤에 들어간다
즉:
- `모든 기획을 끝낸 뒤 한 번에 개발`하지 않는다
- `생각나는 기능을 바로 구현`하지도 않는다
- **큰 방향은 먼저 고정하고, 세부는 vertical slice로 기획 후 바로 구현**한다
---
## 2. 현재까지 완료된 것
### 완료 1. Product Principles
- 루트 문서 `../../product_principles.md`
- single-goal, premium focus, anti-to-do 방향 고정
### 완료 2. `/app` Entry Reframe
- 문서: `09_app_entry_detailed_spec.md`
- 구현 상태:
- `/app`은 single-goal commitment gate
- planner/list-first 구조 제거
- current session이 있으면 resume 우선
### 완료 3. Refocus System 기본 구조
- 문서: `10_refocus_system_spec.md`
- 구현 상태:
- pause -> refocus 흐름의 기본 skeleton 존재
- next beat / goal complete의 상태 분리 시작
---
## 3. 지금 끼어든 기획의 위치
### 끼어든 기획
- `11_away_return_recovery_spec.md`
이 기획은 원래 흐름을 덮어쓴 것이 아니다.
이 문서는 **Refocus System을 실제 사용자 행동에 맞게 완성하기 위해 중간에 추가된 필수 slice**다.
왜 끼어들었는가:
- 사용자는 `pause`를 누르지 않고 자리를 뜨는 경우가 많다
- 이 케이스를 다루지 않으면 Refocus System이 반쪽짜리가 된다
- `pause``break`가 겹쳐 보이는 문제도 여기서 정리해야 한다
즉, 이 기획은 “옆길”이 아니라 **Refocus System의 확장 파트**다.
---
## 4. 현재 기준의 구현 순서
아래 순서를 공식 순서로 고정한다.
### Phase 1. `/app` Entry Polish
목적:
- 시작 마찰을 최소화
- `/app`이 planner가 아니라 commitment gate로 읽히게 고정
상태:
- 기획 완료
- 구현 대부분 완료
- 남은 것은 브라우저 QA와 polish
### Phase 2. Refocus System
문서:
- `10_refocus_system_spec.md`
목적:
- pause 이후 복귀
- microStep 완료 후 다음 한 조각 연결
- goal complete의 자연스러운 closure
상태:
- 기획 완료
- 구현 진행 중
### Phase 3. Away / Return Recovery
문서:
- `11_away_return_recovery_spec.md`
목적:
- 사용자가 `pause` 없이 떠난 경우를 감지
- 돌아왔을 때 Break가 아니라 Return UX로 맞이
- `pause`, `break`, `return`의 감정적 의미를 분리
상태:
- 기획 완료
- 아직 구현 전
중요:
- 이것은 `Refocus System` 다음으로 이어지는 것이 아니라
- **Refocus System 구현의 후반부**로 바로 이어진다
### Phase 4. Complete / Break Separation Polish
목적:
- `goal complete`, `break`, `return`의 의미와 재질감 분리
- “쉬는 중”과 “복귀 결정”이 섞이지 않게 정리
상태:
- 아직 상세 기획 일부만 존재
- Away / Return 구현 후 들어간다
### Phase 5. Weekly Review Reframe
목적:
- total time보다 시작 성공률, 복귀율, 유지 패턴 중심으로 재설계
상태:
- 아직 본격 기획 전
### Phase 6. Premium Ambience System
목적:
- Portal급 감각 품질 확보
- 배경, 사운드, 전환, material의 art direction 통일
상태:
- 방향만 존재
- review 전후 어느 시점에 들어갈지 조정 가능
---
## 5. “그 다음에 하려던 기획”은 무엇인가
Away / Return이 끼어들기 전, 다음으로 예정된 축은 아래 두 가지였다.
1. `Refocus / Next Beat / Goal Complete`의 premium polish
2. `Pause``Break`의 감정/구조 분리
즉, 원래 예정된 기획은 사라진 것이 아니다.
단지 순서가 아래처럼 정리된 것이다.
이전 예상 순서:
1. Refocus polish
2. Break refinement
3. Review
현재 확정 순서:
1. Refocus polish
2. Away / Return Recovery
3. Break refinement
4. Review
정리하면:
- **Away / Return은 중간에 끼어든 임시 아이디어가 아니라**
- `Break refinement`보다 먼저 처리해야 하는 선행 조건이다
---
## 6. 다음 세션에서의 실제 작업 순서
다음 작업은 아래 순서로 진행한다.
### Step 1. `/space` Refocus visual/behavior polish 마무리
포함:
- pause tray
- refocus tray
- next beat tray
- goal complete tray
완료 기준:
- recovery flow가 checklist나 planner처럼 보이지 않는다
- overlay는 한 번에 하나만 보인다
### Step 2. Away / Return 구현
포함:
- `visibilitychange`
- `pagehide`
- sleep/wake delta 감지
- `Return` tray 추가
완료 기준:
- focus ended while away 시 standard break로 바로 가지 않는다
- return 상태에서 `지금부터 쉬기 / 이어가기 / 한 조각 다시 잡기`가 가능하다
### Step 3. Break 분리
포함:
- `Pause`, `Break`, `Return` 카피와 material 분리
- break를 recovery tone이 아니라 release tone으로 재설계
### Step 4. Review 상세 기획
포함:
- started
- resumed
- completed
- recovery rate
- ritual success correlation
---
## 7. 의사결정 규칙
새 기능이나 새 기획이 들어올 때는 아래 규칙으로 판단한다.
### 바로 진행해도 되는 경우
- 기존 코어 루프의 빈칸을 메우는 경우
- `start / immerse / refocus / return / complete` 중 하나를 선명하게 하는 경우
### 뒤로 미뤄야 하는 경우
- list/planner/task manager 느낌을 강하게 만드는 경우
- social, buddy, coworking 쪽으로 제품 무게를 옮기는 경우
- 화면에 오브젝트와 설정을 더 많이 추가하는 경우
---
## 8. 한 줄 결론
현재 끼어든 `Away / Return` 기획은 옆길이 아니다.
> 이것은 `Refocus System`을 실제 사용자 행동에 맞게 완성하기 위해 반드시 먼저 처리해야 하는 다음 단계다.
즉, 다음에 원래 하려던 기획은 사라지지 않았고,
순서는 아래처럼 재정렬되었다.
1. Refocus polish
2. Away / Return Recovery
3. Break refinement
4. Weekly Review

View File

@@ -1,18 +1,53 @@
# 90. Current State
Last Updated: 2026-03-12
Last Updated: 2026-03-14
## DONE
- `/app` single-goal commitment gate 재구성:
- 2-step `goal -> ritual` flow 제거
- current session이 있으면 `Resume` UI를 우선 노출하고, `/space`로 바로 이어가기만 제안
- 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 구현:
- HUD recovery layer를 `paused / refocus / next-beat / complete` 단일 overlay 상태로 정리
- pause 직후 바로 편집 시트를 열지 않고, 작은 recovery prompt를 먼저 노출
- `한 조각 다시 잡기`로 refocus에 들어가고, paused 상태에서는 `적용하고 이어가기`로 바로 resume 연결
- microStep 완료 후 `다음 한 조각이 있나요?` next-beat prompt로만 이어지게 정리
- 한 번에 하나의 recovery tray만 열리도록 hierarchy를 고정
- `/space` Refocus System slice 2 구현:
- pause prompt의 `이대로 이어가기`가 실제 resume 동작으로 연결
- goal complete tray에 `여기까지 끝내기` 경로 추가
- 현재 세션을 다음 목표 입력 없이도 정상 완료 처리할 수 있게 연결
- goal complete / rest / next-goal의 세 분기가 UI와 동작 모두에서 분리됨
- `/space` Refocus System slice 3 구현:
- goal complete tray가 초기부터 input form을 강요하지 않도록 progressive disclosure 구조로 변경
- `여기까지 끝내기 / 잠깐 쉬기 / 다음 목표 이어가기`를 먼저 제안하고, 다음 목표 입력은 선택 시에만 펼쳐지게 정리
- next-beat prompt에 현재 goal 문맥을 함께 보여주도록 보강
- `/space` Refocus System slice 4 구현:
- pause / next-beat / complete / refocus tray의 glass material, hairline, spacing을 공통 규칙으로 정리
- 선택 액션을 단순 inline 링크에서 quiet option row로 바꿔 recovery decision hierarchy를 선명하게 만듦
- `goal complete`의 세 분기를 같은 tray 안의 선택 행으로 통합해 planner/form 느낌을 약화
- `refocus` form field와 footer action 톤을 다른 recovery tray와 같은 제품군으로 맞춤
- `/space` Away / Return Recovery slice 구현:
- `visibilitychange`, `pagehide`, sleep/wake gap 기반 AwayCandidate 감지 추가
- 짧은 탭 전환에는 반응하지 않도록 hidden threshold를 둠
- 돌아왔을 때 focus가 아직 running이면 `Return` tray에서 `이어서 하기 / 한 조각 다시 잡기`를 제안
- 자리를 비운 사이 focus가 끝나 break phase가 되었으면 standard break 대신 `Return` tray를 먼저 띄움
- 이 경우 `지금부터 쉬기 / 다음 목표 이어가기 / 한 조각 다시 잡기`를 선택할 수 있음
- `다음 목표 이어가기``Goal Complete` next view로 바로 연결됨
- Focus Entry Surface / Execution Surface 재정의:
- `/app`을 planning home이 아니라 hero-first focus entry surface로 재구성
- 상단 카피를 `Planning Home` 톤에서 `지금 시작할 첫 블록` 진입 톤으로 교체
- 메인 hero에 one-line goal input + 단일 primary CTA `지금 시작`만 남기고, 첫 진입의 주 행동을 고정
- empty state에서는 starter draft를 자동 주입하지 않고 placeholder 입력으로 시작한다
- suggestion chip으로 draft를 빠르게 교체할 수 있게 하고, 직접 타이핑 시에는 ad-hoc start를 허용
- block CRUD는 메인 화면에서 제거하고 `블록 정리` manage sheet 안으로 내렸
- `FocusPlan` current item은 hero prefill로 이어지고, preview row는 최대 2개까지만 보조적으로 노출
- Free는 1개, Pro는 최대 5개 블록까지 관리하도록 프론트 제한을 유지
- 이후 `/app`은 current session이 있으면 `Resume`, 없으면 single-goal direct start만 남기는 commitment gate로 더 줄였
- block CRUD, preview row, list-first 구조는 메인 진입 경로에서 제거했다
- `/space`는 planning overview 없이 goal/scene/sound/timer + HUD 실행 화면으로 정리
- focus-plan / focus-session 서버 계약 연결:
- `GET /api/v1/focus-plan/today`
@@ -36,8 +71,8 @@ Last Updated: 2026-03-12
- `/app` route를 Session OS focus entry surface로 복구:
- `/app` route가 `/space` redirect 대신 `FocusDashboardWidget`을 렌더링
- current/next summary card와 list-first 구조를 제거하고, entry hero가 above-the-fold를 차지한다
- `start``plan persistence`와 분리해 goal only 쿼리로도 `/space` 진입 가능하게 정리
- Free에서 두 번째 블록 추가 시도 시 manage sheet 내부에서 paywall로 진입
- 현재는 current session이 있으면 resume, 없으면 `goal + microStep + start`만 제안하는 single-goal entry로 정리
- scene/sound/timer는 기본 ritual로 시작하고, 세부 조정은 `/space`에서 담당한다
- 플랜 tier 공유 store 추가:
- `entities/plan/model/usePlanTier.ts` 추가
- localStorage 기반 Free/Pro 상태를 `/app`, `/space`, `/stats`, dock paywall에서 공통 사용
@@ -226,19 +261,17 @@ Last Updated: 2026-03-12
## NEXT
1. `/app` focus entry surface start/manage 브라우저 스모크
2. `/space` goal-complete -> next goal immediate start 흐름 QA
1. `/app` single-goal commitment gate 브라우저 스모크
2. `/space` intent HUD / refocus / goal-complete hierarchy QA
3. `/stats` factual summary / trend / refresh 브라우저 QA
## RISKS
- `/app` manage sheet의 리스트는 append-only라 drag/drop reorder는 아직 없다
- Free/Pro 제한은 클라이언트 local tier 기준이므로 서버에서 직접 막지 않는다
- Free/Pro gating은 localStorage mock tier 기반이라 실제 구독 상태와 연결되지 않았다
- `advance-goal`은 atomic endpoint 기준으로 동작하지만, 네트워크 실패 시 사용자는 현재 시트에서 재시도해야 한다
- Session OS 도메인은 mock 기반이므로 실제 저장/복구 API 없이도 화면만 먼저 완성된 상태다
- empty state에서 CTA는 살아 있지만 실제 시작 전에 입력 포커스가 먼저 필요하므로, 첫 진입 사용성은 브라우저 확인이 필요하다
- current item이 아닌 preview row 선택은 ad-hoc start로 처리되므로, 큐 재정렬을 기대하는 사용자와 정신 모델 차이가 생길 수 있다
- `/space` paywall 전환 진입점은 `/app` / `/stats` 중심이라 execution 화면만 본 사용자에게는 업그레이드 맥락이 약할 수 있다
- `/admin` 업로드 콘솔은 구조 복구가 끝났지만, 실제 파일 업로드 경로는 브라우저 수동 검증 전까지 확정할 수 없다
- stage background overscan으로 좁은 화면에서 배경 crop이 조금 더 강하게 느껴질 수 있어 실기기 확인이 필요하다

View File

@@ -1,6 +1,6 @@
# Session Brief
Last Updated: 2026-03-12
Last Updated: 2026-03-14
세션 시작 시 항상 읽는 초소형 스냅샷 문서.
@@ -14,19 +14,42 @@ Last Updated: 2026-03-12
## 현재 우선순위
1. `/app` focus entry surface start/manage 브라우저 QA
2. `/space` goal-complete -> next goal immediate start 흐름 QA
3. `/stats` factual summary / trend / refresh QA
1. `Pause / Break / Return` 분리 polish
2. `/space` Refocus + Return 브라우저 QA
3. `Weekly Review` 상세 기획
## 최근 세션 상태
- `/app`을 planning home이 아니라 focus entry surface로 다시 재구성했다.
- hero에 one-line goal input과 단일 CTA `지금 시작`을 두고, 첫 블록 진입을 화면의 주 행동으로 올렸다.
- empty state에서는 값을 미리 채우지 않고 placeholder만 두며, 입력 후 바로 `/space`로 들어간다.
- suggestion chip으로 draft를 빠르게 바꿀 수 있고, 직접 수정하면 ad-hoc start가 가능하다.
- plan CRUD는 메인 화면에서 제거하고 `블록 정리` manage sheet 안으로 내렸다.
- current item은 hero를 prefill하고, next item은 최대 2개까지만 얕은 preview로 남긴다.
- Free는 1개, Pro는 최대 5개까지 관리한다.
- `/space` Refocus System 첫 slice를 구현했다.
- pause 직후 바로 편집 시트가 아니라 작은 recovery prompt를 먼저 띄운다.
- 여기서 `한 조각 다시 잡기`를 누르면 refocus tray로 들어간다.
- paused 상태의 refocus는 `적용하고 이어가기`로 바로 resume까지 연결된다.
- microStep 완료 후에는 checklist가 아니라 `다음 한 조각이 있나요?` prompt로만 이어진다.
- recovery UI는 `paused / refocus / next-beat / complete` 중 하나만 열리도록 단일 overlay 상태로 묶였다.
- `/space` goal complete 종료 경로를 복구했다.
- `여기까지 끝내기`로 현재 목표를 다음 목표 입력 없이도 정상 완료 처리할 수 있다.
- pause prompt의 `이대로 이어가기`는 단순 닫기가 아니라 실제 resume으로 연결된다.
- `/space` goal complete / next beat를 덜 form스럽게 정리했다.
- goal complete는 처음부터 input을 요구하지 않고, 선택지를 먼저 보여준 뒤 `다음 목표 이어가기`를 선택했을 때만 입력이 열린다.
- next-beat prompt는 현재 goal 문맥을 함께 보여줘서 사용자가 어떤 목표를 이어가는지 잃지 않게 했다.
- `/space` recovery tray material과 선택 위계를 같은 패밀리로 맞추기 시작했다.
- pause / next-beat / complete tray가 공통 dark-glass shell을 공유한다.
- inline 링크 중심이던 선택지를 quiet option row 구조로 바꿔, checklist보다 recovery decision처럼 읽히게 정리했다.
- `Goal Complete``여기까지 끝내기 / 잠깐 쉬기 / 다음 목표 이어가기`를 같은 tray 안의 선택 행으로 제시한다.
- `Refocus`는 같은 shell 안에서 field / action 톤을 통일해 다른 tray와 같은 제품군처럼 보이게 맞추는 중이다.
- `/space` Away / Return Recovery를 구현했다.
- `visibilitychange`, `pagehide`, sleep/wake gap 기반 감지를 추가했다.
- 짧은 탭 전환에는 반응하지 않도록 hidden threshold를 둬 오탐을 줄였다.
- 돌아왔을 때 focus가 계속 running이면 `Return` tray가 `이어서 하기 / 한 조각 다시 잡기`를 제안한다.
- 자리를 비운 사이 focus가 끝나 break phase가 되었으면 standard break 대신 `Return` tray가 먼저 뜬다.
- 이 경우 `지금부터 쉬기 / 다음 목표 이어가기 / 한 조각 다시 잡기` 중 하나를 고를 수 있다.
- `다음 목표 이어가기`는 goal complete next view로 바로 연결된다.
- `/app`을 single-goal commitment gate로 다시 줄였다.
- 2-step ritual setup을 제거했다.
- current session이 있으면 `Resume` UI만 보여주고, `/space`로 이어가기만 제안한다.
- current session이 없으면 `goal 1개 + optional microStep 1개 + 바로 시작`만 남긴다.
- scene/sound/timer는 기본 ritual로 시작하고 `/space`에서 바꾸게 둔다.
- manage/list 성격의 affordance는 메인 진입 경로에서 제거했다.
- `/space`는 execution-only surface로 정리됐다.
- setup drawer에서 Daily Plan / Ritual Library 섹션을 제거했다.
- goal, scene, sound, timer만 확인하고 focus HUD로 진입한다.

View File

@@ -17,62 +17,89 @@
## 작업 1
- 제목: Focus Entry Surface /space linked flow 브라우저 QA
- 제목: `/space` Refocus polish 마무리
- 목적:
- `/app`이 planning home이 아니라 focus entry surface로 보이는지 확인한다.
- hero input + primary CTA만으로 `/space` 진입이 가능한지 검증한다.
- `10_refocus_system_spec.md` 기준으로 pause / refocus / next beat / goal complete를 premium recovery flow로 정리한다.
- recovery overlay가 planner/checklist처럼 보이지 않게 한다.
- 변경 범위:
- `/app` hero input / placeholder / suggestion chip / start CTA 확인
- `블록 정리` sheet 열기, row 선택, row 수정, row 삭제 확인
- Free 1개 / Pro 5개 제한 확인
- pause tray
- refocus tray
- next beat tray
- goal complete tray
- copy / hierarchy / material / motion polish
- 제외 범위:
- 실제 결제 연동 금지
- calendar/task 외부 연동 금지
- multi-goal / list affordance 추가 금지
- social/accountability 확장 금지
- review 통계 확장 금지
- 완료 조건:
- `/app`이 리스트 CRUD보다 `지금 시작` hero가 먼저 읽힌다.
- empty state에서도 disabled primary CTA 없이 `/space` 진입 경로가 살아 있다.
- manage sheet 안에서만 add/edit/delete가 보이고, 메인 화면에는 row-level 관리 버튼이 없다.
- start link에 담긴 goal/plan item이 `/space` 세션 시작까지 유지된다.
- refocus가 `편집 기능`이 아니라 `recovery ritual`처럼 읽힌다.
- pause / next beat / complete가 한 번에 하나만 보인다.
- bright/dark scene 모두에서 안정적으로 읽힌다.
- 검증:
- 브라우저 수동 확인
- 커밋 힌트:
- chore(qa): focus-entry-surface smoke
- feat(space): refocus-system polish
## 작업 2
- 제목: 목표 완료 후 다음 목표 즉시 실행 QA
- 제목: `Away / Return Recovery` 구현
- 목적:
- `/space`가 execution-only surface로 보이는지 확인한다.
- goal complete sheet에서 다음 목표를 입력하면 setup으로 돌아가지 않고 즉시 다음 세션이 시작되는지 검증한다.
- `11_away_return_recovery_spec.md` 기준으로 pause 없이 떠난 사용자의 복귀 흐름을 구현한다.
- `pause`, `break`, `return`이 같은 멈춤 상태처럼 읽히지 않게 한다.
- 변경 범위:
- `/space?goal=...&planItemId=...` 진입 확인
- goal complete -> next goal -> running session 전환 확인
- scene/sound/timer 유지 여부 확인
- `visibilitychange`
- `pagehide`
- sleep/wake delta 감지
- return tray
- focus ended while away 처리
- 제외 범위:
- timer 종료 자동 전환 추가 금지
- ritual/template persistence 추가 금지
- webcam / idle tracking / 감시성 기능 금지
- planner/list affordance 추가 금지
- break를 standard pause처럼 재사용 금지
- 완료 조건:
- 현재 목표 완료 시 linked plan item이 완료 처리되고, 새 목표가 즉시 running session으로 이어진다.
- `/space` setup drawer에 planning/ritual 섹션이 남아 있지 않다.
- focus가 끝난 뒤 복귀하면 바로 standard break로 가지 않는다.
- return 상태에서 `이어가기 / 한 조각 다시 잡기 / 지금부터 쉬기` 중 적절한 제안이 나온다.
- 검증:
- 브라우저 수동 확인
- 브라우저 수동 확인 + 상태 전이 점검
- 커밋 힌트:
- chore(qa): advance-goal linked session smoke
- feat(space): away-return-recovery
## 작업 3
- 제목: `/stats` factual summary QA
- 제목: `Pause / Break / Return` 분리 polish
- 목적:
- `/stats`가 해석형 insight 없이 factual summary만 보여주는지 확인한다.
- 세 상태가 감정적으로도 구조적으로도 다르게 읽히도록 정리한다.
- 변경 범위:
- today / last7Days factual cards 확인
- trend 그래프와 refresh/source 상태 확인
- 카피
- material
- tray hierarchy
- timer/HUD와의 연결
- 제외 범위:
- 해석형 패턴 추천 추가 금지
- social/accountability mock 복구 금지
- review 통계 확장 금지
- social/accountability 확장 금지
- 완료 조건:
- `/stats`에서 started/completed/carried over/focus minutes만 일관되게 보인다.
- pause는 recovery tone
- break는 release tone
- return은 re-entry tone으로 분리된다
- 검증:
- 브라우저 수동 확인
- 커밋 힌트:
- chore(qa): stats factual summary smoke
- feat(space): separate-pause-break-return
## 작업 4
- 제목: `Weekly Review` 상세 기획
- 목적:
- total time 중심이 아니라 행동 변화 중심의 review를 설계한다.
- 변경 범위:
- started / resumed / completed / recovery rate / ritual fit 정의
- free / pro review 가치 구분
- 제외 범위:
- planner/dashboard 확장 금지
- 해석 과잉 카피 금지
- 완료 조건:
- review가 다음 세션 성공률을 높이는 역할로 정의된다.
- 검증:
- 기획 문서 작성
- 커밋 힌트:
- docs(product): weekly-review-spec