iykyka/mobile
Claude ebf333d287
제품명 변경(분신→와카뷰) + 소프트 그라디언트/글래스모피즘 UI + 브랜드 로딩 화면
명칭 변경:
- decision-log.md Q6 확정: "분신"(가칭) → "와카뷰 (Ykavu)" — 焚身(분신자살)
  동음이의 리스크도 있었고 메신저 브랜드로 부르기 무거웠음. Master가 최종
  선택한 이름으로 변경(2026-07-31), 파생 문서(AGENTS.md/CLAUDE.md/PRD 등)·
  Flutter 앱 텍스트·web manifest/index.html·AndroidManifest 라벨까지 전부 반영
- ai-service: 본인확인 고정 문구(identity.py)·시스템 프롬프트(generation.py)도
  갱신 — 새 이름 기준으로 "본인이야 와카뷰야?" 류 질문을 감지하도록 정규식도
  같이 손봄(단순 문자열 치환만으론 어미 형태가 안 맞아서 테스트 추가/조정)
- poc/tone-corpus/의 실험용 프롬프트는 의도적으로 그대로 둠(ai-service README에
  이미 명시된 대로 프로덕션과 분리된 실험 도구)

UI/UX:
- mobile/lib/theme/app_theme.dart: 시드 컬러를 인디고/라벤더로 변경, 화면 전체에
  깔리는 소프트 그라디언트(라이트: 라벤더→스카이→핑크 파스텔, 다크: 딥 인디고→
  네이비→플럼) + 카드/인풋/칩을 반투명 "글래스" 서피스로 전환
- mobile/lib/widgets/gradient_backdrop.dart(신규): MaterialApp.builder에 연결해
  모든 화면에 자동으로 그라디언트 배경 적용
- mobile/lib/screens/splash_screen.dart(신규) + main.dart 재구성: 기존엔
  session.restore()를 기다리는 동안 아무 것도 안 그려서 흰 화면/텍스트만 뜨는
  구간이 있었음 — runApp을 먼저 하고 restore 동안 브랜드 스플래시가 뜨도록 변경
- chat_screen·autonomy_settings_screen·data_flow_screen의 커스텀 패널들도
  글래스 스타일로 맞춤

BunsinApp -> YkavuApp (mobile/lib/main.dart, test/widget_test.dart 동기화)

Flutter SDK가 없는 환경이라 flutter analyze/run으로 직접 컴파일 검증은 못했음 —
중괄호/괄호 균형과 기존에 검증된 API 패턴 위주로 신중하게 작성함. go test·
pytest는 전부 통과.
2026-07-31 01:15:42 +00:00
..
android 제품명 변경(분신→와카뷰) + 소프트 그라디언트/글래스모피즘 UI + 브랜드 로딩 화면 2026-07-31 01:15:42 +00:00
lib 제품명 변경(분신→와카뷰) + 소프트 그라디언트/글래스모피즘 UI + 브랜드 로딩 화면 2026-07-31 01:15:42 +00:00
test 제품명 변경(분신→와카뷰) + 소프트 그라디언트/글래스모피즘 UI + 브랜드 로딩 화면 2026-07-31 01:15:42 +00:00
web 제품명 변경(분신→와카뷰) + 소프트 그라디언트/글래스모피즘 UI + 브랜드 로딩 화면 2026-07-31 01:15:42 +00:00
.gitignore Add Flutter mobile client skeleton and defer human PoC to last 2026-07-30 04:16:41 +00:00
.metadata fix Flutter Web/Chrome compile by stubbing SQLCipher DB 2026-07-30 07:05:31 +00:00
README.md 제품명 변경(분신→와카뷰) + 소프트 그라디언트/글래스모피즘 UI + 브랜드 로딩 화면 2026-07-31 01:15:42 +00:00
analysis_options.yaml Add Flutter mobile client skeleton and defer human PoC to last 2026-07-30 04:16:41 +00:00
pubspec.lock Complete Phase 1 B: encrypted drift DB, FCM notify, session revoke 2026-07-30 05:28:39 +00:00
pubspec.yaml Complete Phase 1 B: encrypted drift DB, FCM notify, session revoke 2026-07-30 05:28:39 +00:00

README.md

와카뷰 mobile (Flutter)

Phase 1 클라이언트 (docs/roadmap.md §2.3 / A3). v1은 Android 빌드만 대상으로 한다 (docs/tech-design.md §8).

지금 있는 것

  • 초대 코드 가입 (POST /auth/signup) + Bearer 세션
  • 말투 샘플 온보딩(기기 로컬 저장; 최종 카피는 PoC 이후)
  • 대화방 목록/생성 (GET/POST /conversations) — 수동 ID 입력 제거
  • 연락처 CRUD + 대화 시작 (/users/:id/contacts)
  • 채팅 히스토리 로드 + WebSocket 수신
  • 와카뷰 초안 / L1 승인(수정·버리기·재초안·승인 발송)
  • 와카뷰 뱃지 · 거부권 · 되돌리기
  • 사후 알림 함 (GET /users/:id/escalation-logs)
  • 자율성 L0~L2 + 화이트리스트 CRUD UI

실행

# core-backend + ai-service 가 떠 있어야 실제 호출이 된다
cd mobile
flutter pub get

# Android 에뮬레이터 → 호스트의 core-backend(기본 8080)
flutter run --dart-define=CORE_API_BASE=http://10.0.2.2:8080

# 실기기/로컬 네트워크
flutter run --dart-define=CORE_API_BASE=http://<your-lan-ip>:8080

E2E

API 레벨 (클라우드/CI에서 실행 가능)

# core-backend :8080 + ai-service :8001 기동 후
export ADMIN_API_TOKEN=dev-admin-token
python3 scripts/e2e_a3.py

A3 체크리스트(가입·연락처·대화·히스토리·draft/L1·에스컬레이션·되돌리기·거부권·화이트리스트)를 HTTP로 검증한다.

에뮬레이터/실기기 UI 탭 (Android SDK 필요)

  1. 초대 코드로 가입 → 말투 샘플 저장(또는 나중에)
  2. 연락처에 상대 사용자 ID 등록 → 대화 시작
  3. 메시지 전송 · 새로고침 후 히스토리 유지
  4. 초안 요청 → L1 패널에서 수정/버리기/승인 발송 → 와카뷰 뱃지 확인
  5. 민감 문장으로 에스컬레이션 → 사후 알림 함 진입
  6. 와카뷰 메시지 되돌리기 · 거부권
  7. 자율성 L0~L2 + 화이트리스트 추가/삭제

로컬 DB (drift + SQLCipher)

말투 샘플·온보딩 플래그는 lib/db/ 암호화 SQLite에 저장한다. 패스프레이즈는 flutter_secure_storage. Linux 개발 호스트에 libsqlcipher.so가 없으면 메모리 폴백으로 기동한다(Android 릴리즈 경로에서는 SQLCipher 사용).

# Linux에서 drift 테스트/암호화 DB를 쓰려면
sudo apt-get install -y libsqlite3-dev libsqlcipher1

아직 없는 것

  • Firebase 프로젝트의 실제 FCM registration token 연동 (google-services.json)
  • 오프라인 메시지 큐 / 멀티디바이스 실시간 설정 동기화 고도화
  • 온보딩 말투 UX 디테일 (PoC #1 결과는 맨 마지막에 반영)
  • iOS 빌드 (v1 범위 밖)