# 12. First Usable Windows UX Slice ## 목적 첫 실제 구현 슬라이스는 `가입이 바로 끝나고`, `최근 대화가 바로 보이며`, `메시지를 실제로 보내고`, `다시 켜도 바로 복귀되는` 상태를 만드는 것이다. 이 문서는 현재 기획 문서의 합의사항을 실제 첫 구현 단위로 압축한 기준서다. ## 이 슬라이스가 포함해야 하는 범위 - Alpha 가입: `이름 + 초대코드` - 최근 대화 목록 - 단일 대화 읽기/쓰기 - 초안 자동 보존 - 전역 검색 진입 affordance - 빈 상태, 로딩 상태, 오류 상태 - 앱 재실행 시 최근 대화 복귀 이번 슬라이스에서는 아래를 의도적으로 제외한다. - 그룹 관리 고도화 - 파일 업로드 완성형 - 반응, 멘션, 고급 필터 - 우측 정보 패널 상세 기능 - 설정 전체 ## 완료 기준 사용자는 도움 없이 아래를 끝낼 수 있어야 한다. 1. 앱 실행 후 30~60초 안에 가입 2. 자동 생성된 첫 대화 또는 `나에게 메시지` 확인 3. 메시지 1건 전송 4. 검색창 진입이 어디 있는지 즉시 이해 5. 앱을 껐다 켜도 최근 대화로 복귀 ## 첫 화면 계층 ### 1. Launch Gate 조건: - 유효 세션 있음: 메인 셸로 즉시 이동 - 유효 세션 없음: 가입 화면 진입 화면 목적: - 로고 연출보다 판단 속도 - `이 앱은 바로 들어가 쓸 수 있다`는 인상 제공 표시 요소: - 앱 이름 - 한 줄 설명: `이름과 초대코드만 있으면 바로 시작할 수 있어요` - 최근 로그인 기기 복귀 버튼은 후순위로 두고, 1차는 숨겨도 됨 ### 2. Alpha Onboarding 필수 필드: - 이름 - 초대코드 필수 버튼: - `시작하기` 보조 요소: - `이 PC에서 계속 로그인` - 에러 위치 바로 아래 인라인 문구 금지: - 프로필 사진 업로드 강제 - 상태메시지 입력 강제 - 다단계 도움말 캐러셀 완료 후 이동: - `나에게 메시지` 또는 inviter와의 기본 대화가 선택된 메인 셸 ### 3. Main Shell 레이아웃: - 좌측 내비게이션 레일 - 중앙 채팅 목록 - 우측 대화 패널 첫 슬라이스에서는 `3열 구조`를 유지하되, 실제 인지 방식은 `목록 + 현재 대화` 2영역처럼 느껴지게 해야 한다. ## 초기 화면 계층 상세 ### 좌측 내비게이션 레일 이번 슬라이스에서 노출할 항목: - `대화` - `알림` - `보관함` - `더보기` 실제 활성은 `대화`만 우선 완성한다. 상단 고정 요소: - 앱 워드마크 또는 심볼 - `Ctrl+K` 힌트가 있는 검색 진입 버튼 하단 고정 요소: - 현재 사용자 이름 - 연결 상태 점 ### 중앙 채팅 목록 상단: - 검색 진입 버튼 또는 입력형 검색 박스 - `새 대화` 버튼 리스트 아이템 최소 요소: - 대화 이름 - 마지막 메시지 1줄 - 마지막 시간 - 읽지 않음 배지 - 선택 상태 첫 슬라이스에서 중요한 점: - 데이터가 늦어도 스켈레톤 또는 로컬 캐시를 먼저 보여 준다 - Hover 시 과도한 액션을 노출하지 않는다 - 클릭 타깃을 넓게 잡는다 ### 우측 대화 패널 상단 헤더: - 대화 이름 - 참여자 요약 - 검색 버튼 메시지 타임라인: - 날짜 구분선 - 내 메시지 / 상대 메시지 구분 - 보낸 시각 - 전송 상태 아이콘: `보내는 중`, `보냄`, `실패` 하단 작성 영역: - 멀티라인 입력창 - 첨부 버튼은 비활성 또는 준비중 상태로 둘 수 있음 - `전송` 버튼 이번 슬라이스에서는 작성 경험이 무엇보다 중요하다. ## 가장 작은 상호작용 세트 이 목록은 `프로토타입을 넘었다`고 느끼게 하는 최소 기준이다. 1. 이름/초대코드 입력 후 엔터 또는 버튼으로 가입 2. 가입 성공 시 즉시 메인 셸 진입 3. 자동 생성된 첫 대화가 선택된 상태로 열림 4. 메시지 입력 중 초안 자동 저장 5. 엔터 전송, `Shift+Enter` 줄바꿈 6. IME 조합 중 엔터가 전송으로 오작동하지 않음 7. 메시지 전송 직후 optimistic row 표시 8. 전송 실패 시 같은 버블에서 `다시 보내기` 9. 목록에서 다른 대화 클릭 시 우측 패널 즉시 전환 10. `Ctrl+K` 또는 검색 버튼으로 검색 진입 UI 열림 11. 앱 재실행 시 마지막 대화 복귀 ## 검색 affordance 정의 첫 슬라이스에서 검색은 `완전한 검색 기능`보다 `검색 진입이 매우 쉽다`를 먼저 만든다. 필수 요소: - 좌측 상단 검색 진입 버튼 - placeholder: `검색 Ctrl+K` - 대화 헤더에도 검색 버튼 제공 첫 구현 동작: - `Ctrl+K` 누르면 중앙 오버레이 검색창 오픈 - 검색 결과는 3종만 우선 지원 - 대화 - 사람 - 메시지 최근 결과 검색 결과가 아직 제한적이어도 괜찮다. 대신 아래는 지켜야 한다. - 키보드 방향키 이동 - Enter 진입 - Esc 닫기 - 결과 없음 상태에서 다음 행동 제안 ## 빈 상태 설계 ### 가입 직후 빈 상태 금지한다. 대신 아래 둘 중 하나를 강제한다. - `나에게 메시지` 자동 생성 - inviter와의 기본 대화 자동 생성 ### 채팅 목록 빈 상태 문구: - `아직 대화가 없습니다` - `새 대화를 시작하거나 초대 링크를 복사해 보세요` 행동: - `새 대화` - `초대 링크 복사` ### 대화 패널 빈 상태 조건: - 목록은 있으나 아직 선택된 대화가 없음 문구: - `대화를 선택하면 여기에서 바로 이어서 볼 수 있어요` 행동: - 없음 또는 `첫 대화 열기` ## 로딩 상태 설계 ### 앱 시작 로딩 - 전체 스피너만 두지 않는다 - 셸 골격을 먼저 보여 주고, 목록과 타임라인에 스켈레톤을 넣는다 ### 목록 로딩 - 6~8개 정도의 스켈레톤 행 - 마지막 시간, 이름, 미리보기 형태가 보이도록 구성 ### 대화 로딩 - 상단 헤더는 먼저 보여 주고 - 메시지 영역만 스켈레톤 말풍선 표시 ## 오류 상태 설계 ### 가입 실패 원칙: - 필드 인근에서 바로 이유를 말한다 - 사용자가 다음 행동을 즉시 알 수 있어야 한다 예: - `초대코드를 확인해 주세요` - `이름은 2자 이상 입력해 주세요` - `서버에 연결하지 못했습니다. 잠시 후 다시 시도해 주세요` ### 목록 불러오기 실패 문구: - `대화 목록을 불러오지 못했습니다` 행동: - `다시 시도` 보조: - 마지막 로컬 캐시가 있으면 함께 표시 ### 메시지 전송 실패 표현: - 실패한 메시지를 그대로 남긴다 - 버블 하단에 `전송하지 못함` - 인라인 `다시 보내기` ## 첫 슬라이스가 bare prototype보다 나아 보이는 이유 - 가입 직후 빈 화면이 없다 - 목록과 대화가 동시에 보여서 구조가 즉시 이해된다 - 입력 중 초안이 살아 있어서 실제 앱처럼 느껴진다 - IME와 엔터 규칙이 맞아서 한국어 입력이 불안하지 않다 - 실패가 사라지지 않고 복구 가능하다 - 검색이 아직 완전하지 않아도 진입 경험은 완성형에 가깝다 ## 첫 구현 우선순위 1. Launch Gate와 Alpha 가입 2. 메인 셸 3열 골격 3. 채팅 목록 로컬 우선 렌더 4. 대화 읽기와 메시지 전송 5. 초안 자동 저장과 마지막 대화 복귀 6. `Ctrl+K` 검색 오버레이 7. 빈/로딩/오류 상태 정교화 ## 화면별 핵심 카피 초안 가입: - `이름만 입력하면 바로 시작할 수 있어요` - `초대코드를 붙여넣으면 바로 들어갈 수 있어요` 목록 빈 상태: - `아직 대화가 없습니다` - `새 대화를 시작하면 여기에 표시됩니다` 대화 빈 상태: - `대화를 선택하면 여기에서 바로 이어서 볼 수 있어요` 전송 실패: - `전송하지 못했습니다` - `네트워크를 확인하고 다시 보내세요` 검색 결과 없음: - `검색 결과가 없습니다` - `대화 이름이나 메시지 내용을 다시 확인해 보세요` ## 구현 메모 - 첫 버전에서는 `대화`, `검색`, `작성 경험`에 집중한다. - 업무형/친근형 공존은 구조가 아니라 문맥 레벨에서 처리한다. - 첫 슬라이스가 좋으면 이후 파일, 링크, 알림, 보관함을 붙여도 구조가 흔들리지 않는다.