StoryLeave 유저 앱입니다. 현재는 단일 :app 모듈과 XML/ViewBinding 기반으로 구성합니다.
kr.ac.anu.storyleave
├── core
│ ├── common # 공통 결과 타입과 확장 함수
│ ├── ui # ViewBinding, UI 상태, WindowInsets 공통 처리
│ ├── navigation # 화면 이동 관련 공통 코드
│ └── network # 네트워크 공통 처리
├── data
│ ├── local # DataStore 등 로컬 데이터 소스
│ ├── remote # API와 원격 DTO
│ └── repository # Repository 구현체
├── domain
│ ├── model # 도메인 모델
│ ├── repository # Repository 인터페이스
│ └── usecase # 복합 비즈니스 로직
├── feature
│ ├── main
│ ├── auth
│ ├── highlight
│ ├── form
│ ├── post
│ ├── map
│ ├── friend
│ ├── my
│ └── ai
└── di # Hilt 모듈
각 기능 패키지에는 화면 단위로 Fragment, ViewModel, UiState를 함께 둡니다. 데이터와 도메인 계층은 실제 기능에서 필요해질 때 구현합니다.
- 공통 색상, 간격, 모서리와 컴포넌트 스타일은
res/values의sl_접두사 리소스를 사용합니다. - 버튼은
Widget.StoryLeave.Button.Primary또는Widget.StoryLeave.Button.Secondary스타일을 사용합니다. - 화면은
BaseBindingFragment를 상속해 ViewBinding 생명주기를 관리합니다. app_nav_graph아래에서 인증과 메인 그래프를 분리하며, 메인 하단 탭은 폼·하이라이트·마이로 구성합니다.- 피그마에 없는 다크 테마를 임의로 만들지 않도록 현재는 라이트 테마만 제공합니다.
./gradlew ktlintCheck로 Kotlin 코드 스타일을 검사합니다../gradlew ktlintFormat으로 자동 수정 가능한 스타일 문제를 정리합니다.