feat(app): atmosphere entry shell 1차 구현
This commit is contained in:
@@ -1,9 +1,16 @@
|
||||
# 90. Current State
|
||||
|
||||
Last Updated: 2026-03-15
|
||||
Last Updated: 2026-03-16
|
||||
|
||||
## DONE
|
||||
|
||||
- `/app` Atmosphere Entry Shell 1차 구현:
|
||||
- no-session `/app`을 `goal + duration + atmosphere` 중심의 premium entry shell로 교체했다
|
||||
- `microStep` 입력은 entry에서 제거했고, `예상 시간(분)` 입력과 12개 dummy atmosphere grid를 추가했다
|
||||
- atmosphere는 `scene + sound`가 함께 묶인 선택 단위로 동작하며, 선택한 atmosphere가 `/app` 배경과 `/space` start payload에 같이 반영된다
|
||||
- custom duration server contract 전까지는 입력한 분 값을 가장 가까운 기본 리듬(`25/5`, `50/10`, `90/20`)으로 매핑한다
|
||||
- weekly review entry는 main CTA를 먹지 않도록 no-session shell의 quiet secondary dock 위치로 이동했다
|
||||
|
||||
- `Paused Session Takeover Flow` 구현:
|
||||
- `/app` paused gate에 `새 목표로 전환` 진입점을 추가했다
|
||||
- takeover confirm sheet에서만 current paused session을 정리하고 single-goal start 상태로 넘어간다
|
||||
|
||||
@@ -4,13 +4,18 @@ Last Updated: 2026-03-16
|
||||
|
||||
이 문서는 `/app`을 **`goal + duration + atmosphere` 중심의 premium focus entry surface**로 재설계하기 위한 기준 문서다.
|
||||
|
||||
현재 상태:
|
||||
|
||||
- `Slice 1` no-session shell 구현 완료
|
||||
- `Custom Duration Contract`와 `Weekly Review Dock Reposition`은 다음 slice로 남아 있음
|
||||
|
||||
관련 문서:
|
||||
|
||||
- `../../product_principles.md`
|
||||
- `../../current_context.md`
|
||||
- `../stats/14_weekly_review_reframe_spec.md`
|
||||
- `./15_app_stats_entry_flow_spec.md`
|
||||
- `./18_paused_session_reentry_spec.md`
|
||||
- `../../../../../product_principles.md`
|
||||
- `../../../../../current_context.md`
|
||||
- `../../stats/current/14_weekly_review_reframe_spec.md`
|
||||
- `../../../flows/current/15_app_stats_entry_flow_spec.md`
|
||||
- `../../../flows/current/18_paused_session_reentry_spec.md`
|
||||
|
||||
---
|
||||
|
||||
@@ -175,6 +180,9 @@ Last Updated: 2026-03-16
|
||||
- 최대 180분
|
||||
- helper:
|
||||
- `이 목표를 끝내는 데 걸릴 것 같은 시간을 적어요.`
|
||||
- quick duration suggestion은 허용한다.
|
||||
- 예: `25`, `45`, `70`, `90`
|
||||
- 단, planner처럼 보이지 않도록 아주 조용한 assistive chip이어야 한다
|
||||
|
||||
### C. Atmosphere Grid
|
||||
|
||||
@@ -189,6 +197,8 @@ Last Updated: 2026-03-16
|
||||
- 카드명
|
||||
- sound label
|
||||
- 1줄 description
|
||||
- selected state
|
||||
- hover / focus state
|
||||
|
||||
예시:
|
||||
|
||||
@@ -209,7 +219,14 @@ Last Updated: 2026-03-16
|
||||
- 이유:
|
||||
- goal + duration + atmosphere가 모두 한 번에 묶여 entry action으로 읽힌다
|
||||
|
||||
### E. Weekly Review Entry
|
||||
### E. Selection Rules
|
||||
|
||||
- no-session 상태에서는 atmosphere 1개가 기본 선택된 상태로 시작한다
|
||||
- review handoff로 들어온 경우에는 handoff preset과 가장 가까운 atmosphere를 preselect한다
|
||||
- 사용자가 duration을 직접 수정하기 전까지는 선택된 atmosphere의 기본 duration suggestion을 보여줄 수 있다
|
||||
- 사용자가 duration을 직접 수정한 뒤에는 atmosphere를 바꿔도 duration 값을 덮어쓰지 않는다
|
||||
|
||||
### F. Weekly Review Entry
|
||||
|
||||
이건 main stage 바깥의 quiet secondary placement로 둔다.
|
||||
|
||||
@@ -319,6 +336,65 @@ Last Updated: 2026-03-16
|
||||
|
||||
---
|
||||
|
||||
## 9. Visual Direction
|
||||
|
||||
### Primary Stage
|
||||
|
||||
- no-session `/app`의 주인공은 하나의 넓은 start stage다
|
||||
- 이 stage 안에서:
|
||||
- goal
|
||||
- duration
|
||||
- primary CTA
|
||||
가 먼저 읽혀야 한다
|
||||
- stage는 glassmorphism을 쓰더라도 dashboard 카드처럼 보이면 안 된다
|
||||
- typography와 spacing으로 premium하게 보여야 한다
|
||||
|
||||
### Atmosphere Grid
|
||||
|
||||
- 아래 grid는 decoration이 아니라 실제 선택 surface다
|
||||
- card는 서로 다른 장면으로 충분히 구분돼야 한다
|
||||
- selected state는:
|
||||
- 두꺼운 outline보다 얇은 light ring
|
||||
- 미세한 scale
|
||||
- title/sound contrast 상승
|
||||
정도로 표현하는 편이 맞다
|
||||
|
||||
### Review Dock
|
||||
|
||||
- review는 top-right quiet dock 또는 stage 바깥의 조용한 secondary panel로 둔다
|
||||
- 절대 main CTA와 같은 무게가 되면 안 된다
|
||||
- “이번 주 review”는 읽히되, goal 입력을 방해하면 실패다
|
||||
|
||||
---
|
||||
|
||||
## 10. Slice 1 구현 원칙
|
||||
|
||||
이번 구현 slice는 `/app`의 **no-session shell**을 먼저 바꾸는 단계다.
|
||||
|
||||
포함:
|
||||
|
||||
- goal input
|
||||
- duration input
|
||||
- 12개 atmosphere grid
|
||||
- selected atmosphere 기반 background 반영
|
||||
- quiet review dock의 기본 위치
|
||||
|
||||
제외:
|
||||
|
||||
- paused resume gate 재설계
|
||||
- `/stats` IA 변경
|
||||
- server custom duration contract
|
||||
|
||||
### Slice 1 임시 계약
|
||||
|
||||
- 사용자는 분 단위 duration을 입력한다
|
||||
- 하지만 server contract가 아직 preset 기반이면, 이번 slice에서는 **입력 시간에 가장 가까운 기존 focus preset**으로 임시 매핑한다
|
||||
- 이 임시 매핑은 다음 slice(`Custom Duration Contract`)에서 실제 duration 연동으로 대체한다
|
||||
- UI에는 이 상태가 과장 없이 드러나야 한다
|
||||
- 예: `지금은 가장 가까운 기본 리듬으로 먼저 들어가요.`
|
||||
|
||||
---
|
||||
|
||||
## 9. UI 방향
|
||||
|
||||
### 톤
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# Session Brief
|
||||
|
||||
Last Updated: 2026-03-15
|
||||
Last Updated: 2026-03-16
|
||||
|
||||
세션 시작 시 항상 읽는 초소형 스냅샷 문서.
|
||||
|
||||
@@ -26,6 +26,12 @@ Last Updated: 2026-03-15
|
||||
- microStep은 `/app`에서 제거하고, duration은 분 단위 직접 입력으로 전환한다.
|
||||
- scene + sound 조합 카드는 `Atmosphere`로 부르며, 첫 구현은 12개 dummy grid를 사용한다.
|
||||
- weekly review와 achieved-goal insight는 main stage가 아니라 quiet secondary dock로 유지한다.
|
||||
- `/app` Atmosphere Entry Shell 1차 구현을 반영했다.
|
||||
- no-session 상태는 더 이상 legacy `goal + microStep + fixed ritual` 화면을 쓰지 않는다.
|
||||
- 현재는 `goal 1개 + 예상 시간(분) + atmosphere 12개 grid + start CTA`로 들어간다.
|
||||
- 선택한 atmosphere는 `/app` 배경 preview와 `/space` start payload의 `scene/sound`에 같이 반영된다.
|
||||
- duration은 우선 가장 가까운 기본 리듬으로 매핑하는 임시 계약을 사용한다.
|
||||
- weekly review entry는 right-side quiet dock 위치로 옮겨 main CTA보다 낮은 위계를 유지한다.
|
||||
|
||||
- `Paused Session Takeover Flow`를 구현했다.
|
||||
- `/app` paused gate에 `새 목표로 전환` 액션이 추가됐다.
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
- goal + duration + selected atmosphere가 start surface 안에서 명확히 읽힌다
|
||||
- 12개 dummy atmosphere가 4열 그리드로 배치된다
|
||||
- 진행 상태:
|
||||
- 대기
|
||||
- 구현 완료, browser QA 대기
|
||||
- 검증:
|
||||
- `/app` no-session browser QA
|
||||
- 커밋 힌트:
|
||||
@@ -61,7 +61,7 @@
|
||||
- `70분` 같은 값이 실제 focus duration으로 반영된다
|
||||
- break duration이 정책 기준으로 계산된다
|
||||
- 진행 상태:
|
||||
- 대기
|
||||
- 다음 작업
|
||||
- 검증:
|
||||
- start -> `/space` -> timer duration 확인
|
||||
- 커밋 힌트:
|
||||
|
||||
Reference in New Issue
Block a user