feat(core-loop): /app 진입과 /space 복구 흐름 구현
This commit is contained in:
@@ -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이 조금 더 강하게 느껴질 수 있어 실기기 확인이 필요하다
|
||||
|
||||
Reference in New Issue
Block a user