feat(app): focus entry surface로 진입 화면 재구성

This commit is contained in:
2026-03-13 09:54:33 +09:00
parent 698c124ade
commit 2506dd53a7
16 changed files with 1346 additions and 30 deletions

View File

@@ -1,6 +1,6 @@
# Session Brief
Last Updated: 2026-03-11
Last Updated: 2026-03-12
세션 시작 시 항상 읽는 초소형 스냅샷 문서.
@@ -14,14 +14,50 @@ Last Updated: 2026-03-11
## 현재 우선순위
1. `/space` forest 배경이 `forest` / `green-forest` manifest key 모두에서 동일하게 붙는지 브라우저 QA
2. Goal Complete Sheet 플로우(완료 → 다음 한 조각) 마감 품질 점검
3. Stage 가독성/모션/레이어 폴리시 최종 정리
1. `/app` focus entry surface start/manage 브라우저 QA
2. `/space` goal-complete -> next goal immediate start 흐름 QA
3. `/stats` factual summary / trend / refresh QA
## 최근 세션 상태
- `/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`는 execution-only surface로 정리됐다.
- setup drawer에서 Daily Plan / Ritual Library 섹션을 제거했다.
- goal, scene, sound, timer만 확인하고 focus HUD로 진입한다.
- 목표 완료 후 다음 목표 즉시 실행 흐름이 backend contract와 연결됐다.
- GoalCompleteSheet confirm 시 `advance-goal` endpoint를 사용한다.
- 현재 세션 완료, linked plan item 완료, 새 current item 생성, 다음 세션 시작을 한 번에 처리한다.
- 실패 시 시트를 닫지 않고 그대로 재시도할 수 있다.
- `/stats`는 해석형 review 화면이 아니라 factual summary로 정리됐다.
- today / last7Days / trend만 유지한다.
- started/completed/carried over/focus minutes 중심으로 표시한다.
- 유료화 포지셔닝을 `Calm Session OS`로 재정의했다.
- Free는 기본 집중 시작, Pro는 더 잘 이어가기라는 메시지로 정리했다.
- old `Scene Packs / Sound Packs / Profiles` 중심 카피를 `Daily plan / Rituals / Weekly review` 구조로 교체했다.
- `/app`은 더 이상 `/space` redirect가 아니다.
- `FocusDashboardWidget`에서 goal only start와 plan-linked start를 모두 처리한다.
- Free에서 두 번째 블록 추가 시도는 manage sheet 안에서 paywall로 진입한다.
- 플랜 tier를 route 간에 공유하도록 정리했다.
- `usePlanTier` localStorage store를 추가해 `/app`, `/space`, `/stats`가 같은 Free/Pro 상태를 본다.
- Session OS mock 도메인을 추가했다.
- `FocusPlanItem`, `SessionTemplate`, `SessionOutcome`, `WeeklyReview`, `AsyncCheckIn` 모델과 mock 데이터를 `entities/session`에 추가했다.
- `/space` stage 배경을 overscan으로 보정했다.
- background layer를 `-inset-8`로 확장해 pan 애니메이션 중 가장자리 빈틈 노출을 줄였다.
- Gemini가 진행한 대형 파일 분리를 다시 점검했다.
- `SpaceWorkspaceWidget`, `SpaceToolsDockWidget`, `admin/page.tsx`, `shared/i18n/ko.ts` 모두 500줄 기준 안으로 정리된 상태를 재확인했다.
- 현재 주요 최대 파일은 `AdminDashboardView.tsx` 482줄, `useSpaceWorkspaceSelection.ts` 440줄 수준이다.
- `/admin` 분리 과정의 placeholder 회귀를 복구했다.
- 로그인 후 `Dashboard is under construction`만 보이던 상태를 제거했다.
- 실제 scene/sound 업로드 폼을 `AdminDashboardView`로 복원해 `AdminConsoleWidget`은 조합만 담당하도록 되돌렸다.
- 인증 전역 저장소 위치를 정리했다.
- `src/store/useAuthStore.ts`를 제거했다.
- 인증 상태 저장소를 `entities/auth/model/useAuthStore.ts`로 이동해 feature가 루트 store를 직접 참조하지 않도록 정리했다.
- `/space` 배경 asset 해석을 보강했다.
- media manifest scene key를 alias-aware 하게 정규화해 `green-forest``forest`를 같은 scene asset으로 읽는다.
- scene/sound asset에 `source(fallback|remote)` 메타를 추가해 remote asset 사용 여부를 코드에서 바로 식별할 수 있다.
@@ -32,11 +68,11 @@ Last Updated: 2026-03-11
- 기본 기능 잠금을 해소했다.
- Time `90/20`을 Free로 개방
- 기본 Sound 잠금 제거
- Pro 잠금 구조를 Packs/Profiles 중심으로 재구성했다.
- `Scene Packs / Sound Packs / Profiles` 요약 카드 추가
- Pro 잠금 구조를 Session OS 중심으로 재구성했다.
- `Daily Focus Plan / Rituals / Weekly Review` 요약 카드 추가
- 기본 Scene/Time/Sound는 잠금 없이 선택 가능
- Paywall 시트는 잠금 카드 클릭에서만 열리도록 바꿨다.
- Plan Pill(NORMAL) 클릭은 즉시 결제창 오픈 대신 상태 안내만 노출
- Plan Pill(FREE) 클릭은 즉시 결제창 오픈 대신 상태 안내만 노출
- Paywall 카피를 3개 가치 포인트 + 2개 CTA로 간결화
- Focus-First 구조로 전환했다.
- Quick Controls의 모드 전환 토글(기본/몰입)을 제거했다.
@@ -120,8 +156,13 @@ Last Updated: 2026-03-11
## 리스크
- Session OS 데이터는 아직 mock 기반이므로 실제 저장/동기화 API 없이도 화면이 그럴듯하게만 보일 수 있다.
- empty state에서 CTA는 유지하지만 실제 시작 전에 입력 포커스가 먼저 필요하므로, 첫 진입 사용성은 브라우저 확인이 필요하다.
- current item이 아닌 preview row 선택은 ad-hoc start로 처리되므로, 큐 재정렬을 기대하는 사용자와 정신 모델 차이가 날 수 있다.
- `/space` paywall 전환 진입점은 `/app` / `/stats` 중심이라 execution 화면만 본 사용자에게는 업그레이드 맥락이 약할 수 있다.
- stage background overscan으로 좁은 화면에서 배경 crop 체감이 조금 더 커질 수 있다.
- remote manifest 실패 시 원인 진단은 가능하지만, 사용자용 복구 CTA는 아직 없다.
- `/admin` 업로드 콘솔은 타입/구조상 복구됐지만 실제 브라우저 업로드 스모크는 아직 필요하다.
- alias 목록에 없는 legacy scene id가 다시 들어오면 scene fallback 문제가 재발할 수 있다.
- 네트워크 제한 환경에서는 `npm run build` 시 Google Fonts fetch 실패 가능
- localStorage 저장 포맷 변경 시 이전 세션 데이터와의 호환성 이슈가 생길 수 있음