feat: 항해 종료 시 버튼을 꾹 눌러서 종료

This commit is contained in:
2026-02-14 21:28:17 +09:00
parent 166d04384f
commit 332c2c5996
9 changed files with 232 additions and 61 deletions

282
.cli/product/spec.md Normal file
View File

@@ -0,0 +1,282 @@
# 포커스텔라(Focustella) Web MVP 기획문서 (PRD v0.1)
> 혼자 일하는 사람을 위한 “집중 항해” 서비스.
> 별자리 항로(시간)를 선택하고, 출항 전 미션(이번 작업 목표)을 싣고, 항해(집중) 후 도착(짧은 회고)으로 항해일지를 남긴다.
---
## 1. 목적과 성공 기준
### 1.1 문제 정의
- 혼자 일할 때 **집중 시작**이 어렵고, 흐트러지면 다시 **재시작**이 힘들다.
- 작업을 마친 뒤 “내가 뭘 했지?”가 남아 **성취감/회고**가 약하다.
- 목표 미달성 시 기록이 “실패”로 남으면 **기분이 나쁘고** 서비스 이탈로 이어질 수 있다.
### 1.2 Web MVP 목표
- 세계관(우주 항해)을 **방해가 아니라 동기/의식(ritual)**로 사용해
1. 출항(시작) 장벽을 낮추고
2. 항해(집중) 방해를 최소화하며
3. 도착(회고)로 다음 행동을 남긴다.
### 1.3 성공 지표(초기)
- Activation: 첫 방문→첫 항해 시작 전환율
- Completion: 항해 종료까지 도달률(중단률 포함)
- Retention: D1/D7 재항해율
- Journal: 항해일지 생성률, 회고 입력률(1줄이라도)
---
## 2. 핵심 컨셉
### 2.1 핵심 루프(Core Loop)
1. 로비에서 **항로 선택**
2. 출항 전 **미션 체크인(목표 한 줄)**
3. 항해(집중)
4. 도착(짧은 회고)
5. 항해일지 저장
6. 다음 항해로 연결
### 2.2 톤&매너
- “훈육/채찍” 금지. “관제/도킹/로그” 같은 **부드러운 안내**.
- 실패/낙제/미완료 같은 표현 최소화.
- 기록은 **성공/실패**가 아니라 **진행/학습/다음 행동** 중심.
---
## 3. MVP 범위
### 3.1 포함(Include)
- 데스크탑 웹 중심(모바일은 최소 대응)
- 첫 화면(로비)에서 항로 선택 → 미션 → 항해실 → 도착/일지
- 항로: 1시간/3시간(초기 2~6개 카드 이내)
- 항해일지: 항로/미션/결과 상태/한 줄 회고/다음 액션
- “출발 시각”은 **강제 스케줄이 아닌** *몰입을 돕는 선택지*로 설계
### 3.2 제외(Exclude) — MVP에서 하지 않기
- 실시간 채팅, 랭킹, 과한 게임화
- 복잡한 애니메이션(항해실에서 특히 금지)
- 강한 방해 차단(사이트 차단/앱 차단)
- 복잡한 소셜 매칭/파티 시스템
---
## 4. 출발 시각(강제성) 설계
### 4.1 원칙
- “정시 출발만 가능”처럼 **기다림 강제**는 이탈 위험이 큼.
- 강제성은 “시간표”보다 “절차/윈도우”가 세계관과 UX 모두에 유리.
### 4.2 MVP 추천: 혼합형
- 기본: **즉시 출항(차터)** — 마찰 최소
- 옵션: **출항 윈도우(게이트 개방 시간)** — 몰입/의식/약한 강제성
- 예: 하루 4~8회, 불규칙 시각(09:0809:15 같은 7분 창)
- 사용자는 “대기”가 아니라 “출항 준비”를 하도록 로비에 체크리스트 제공
- 글로벌: 윈도우는 사용자 **로컬 시간대 기준**으로 제공(개인 루틴 중심)
- (추후) 이벤트성 “UTC 글로벌 편”은 주 1회 정도로 실험 가능
### 4.3 놓쳤을 때 UX(중요)
- “실패”가 아니라 “다음 도킹 창 안내”
- 즉시 출항(차터)로 우회 가능하게 유지
---
## 5. 정보 구조(IA) & 화면 구성
### 5.1 라우팅(예시)
- `/` 로비(항로 선택)
- `/boarding` 미션 체크인(출항 직전)
- `/flight` 항해실(집중)
- `/debrief` 도착/회고
- `/log` 항해일지 목록
- `/log/:id` 항해일지 상세
- `/settings` 설정(초간소/모션 감소 등)
### 5.2 화면별 스펙
#### A) 로비(첫 화면) — “항로 선택이 주인공”
**목표:** 설명보다 선택→출항까지 1분 안에 도달
구성(최소):
- 상단: 로고 | 항해일지 | 설정
- 메인 문장: “어느 별자리로 출항할까요?”
- (선택) 미션 한 줄 입력(바로 입력해도 되고, 탑승 후 입력해도 됨)
- 항로 카드 그리드(최대 6개)
- 별자리명 / 소요시간 / 한 줄 용도(딥워크/정리 등) / `탑승`
- 출항 방식 표기: `바로 출항` 또는 `다음 게이트 09:08`
- 하단 분위기: “정거장에 N명이 대기 중”(실시간이 아니어도 됨)
카드 예시:
- 오리온 · 3h · 딥워크(집필/코딩)
- 거문고 · 1h · 기획/정리
- 백조 · 1h · 회고/리뷰
#### B) 탑승(미션 체크인)
**원칙:** 미션은 “결과”가 아니라 “행동/진척” 형태로 유도
필드:
- 미션(필수): 한 줄
- (선택) 메모: 1줄(오늘의 제약/컨디션)
- 출항 버튼: `출항(도킹 완료)`
가이드 문구(예):
- “완료보다 진척을 목표로 적어보세요.”
- “예: ‘서론 10문장 쓰기’, ‘가설 2개 검증하기’”
#### C) 항해실(집중 화면) — “초간소 UI”
**원칙:** 항해실에서 연출/깜빡임/복잡한 UI 금지
구성(최소):
- 상단 작은 라벨: `오리온 항로 · 순항`
- 중앙: 남은 시간(크게)
- 하단: `일시정지` `종료` `메모(선택)`
- 옵션: “초 단위 숨기기(분 단위만)”, “모션 감소”
단계(점화/접근 등)는 **화면 변화 없이**:
- 상단 얇은 토스트 3초(선택 행동 있을 때만)
- 예: “접근 단계: 마무리 5분 — 다음 액션 한 줄 적기”
#### D) 도착(회고)
**목표:** 30초~2분 내 회고 완료 → 일지 생성
질문(추천):
1. 이번 항해에서 **확보한 것**(한 줄)
2. 다음 항해의 **첫 행동**(한 줄)
3. (선택) 막힌 이유(칩 선택)
결과 상태(실패 금지, 3상태):
- ✅ 계획대로
- 🌓 부분 진행
- 🧭 방향 재설정(범위 조정/우선순위 변경)
CTA:
- `항해일지 저장`
- `다음 항로 선택`
#### E) 항해일지 목록/상세
- 목록: 카드형(날짜, 항로, 미션, 상태)
- 상세: 자동 생성 템플릿 + 사용자 회고
---
## 6. 데이터 모델(초안)
### 6.1 Entity: Route
- id
- name (e.g., "오리온")
- duration_minutes (60/180)
- tag (딥워크/정리/리뷰)
- description (1줄)
### 6.2 Entity: Voyage(항해 세션)
- id
- user_id (MVP에서는 익명 가능)
- route_id
- scheduled_type: `charter | window`
- scheduled_at (optional)
- started_at
- ended_at
- status: `completed | partial | reoriented | aborted`
- mission_text
- notes (optional)
- debrief_progress (한 줄)
- next_action (한 줄)
- blocker_tag(optional): `scope | interruption | energy | priority_change | other`
### 6.3 Entity: User(옵션)
- id
- timezone
- preferences: minimal_mode, hide_seconds, reduce_motion
---
## 7. UX 규칙(중요)
### 7.1 “목표 미달성” 감정 설계
- “실패/미완료”를 저장하지 않는다.
- 기록은 항상 “진행/확보/다음 액션”으로 남는다.
- 중단(aborted)도 “이탈”이 아니라 “복귀 안내 + 다음 액션” 중심으로 처리.
### 7.2 항해 중 방해 최소화
- 알림 최소(단계 토스트는 선택형/짧게)
- 애니메이션/깜빡임 금지(특히 항해실)
- 소리 기본 OFF(옵션)
---
## 8. 기술/구현 메모(비결정 영역)
- 프론트: (예) Next.js/React
- 상태/타이머: 탭 비활성/절전 대응 고려
- 저장: 로컬 우선(익명 MVP), 추후 로그인/동기화
---
## 9. 분석/이벤트(최소)
- `route_view` (로비 노출)
- `route_select` (항로 선택)
- `mission_submit` (미션 체크인 완료)
- `voyage_start`
- `voyage_pause`
- `voyage_end` (status 포함)
- `debrief_submit` (회고 입력 완료)
- `log_view`
---
## 10. 로드맵(후순위)
1. 계정/동기화/멀티 디바이스
2. 출항 윈도우 개인화(사용자 루틴 기반)
3. “이벤트성 UTC 글로벌 편”
4. 데스크탑 앱(트레이/항상 위/단축키)
5. 모바일: 알림/일지 보기 중심
---
## 11. 오픈 이슈(결정 필요)
- 항로 개수: MVP는 2~6개 중 최적?
- 출항 윈도우: 하루 몇 회가 이탈을 최소화하면서 몰입을 만들까?
- 익명 사용 vs 최소 로그인: 초기 전환율/재방문 간 trade-off
- 항해 중 중단 정책: 즉시 종료 허용 + 도착 회고 최소 강제 여부
---
## 12. Acceptance Criteria (MVP 완료 기준)
- 사용자는 첫 화면에서 3클릭 이내로 항해 시작 가능
- 항해실은 5개 이하 UI 요소로 유지(타이머/미션/버튼)
- 도착 시 3상태(완료/부분/재설정) 중 하나로 저장 가능
- 항해일지 목록에서 과거 항해를 열람 가능
- “실패/미완료”라는 표현 없이도 유저가 상황을 기록할 수 있음