# BaoLife Android Parity Task List

This document outlines all tasks required to build an Android app matching the iOS BaoLife app feature-for-feature.

**iOS Reference Repo:** `/Users/craigvandergalien/Documents/GitHub/lichunWebsocket`
**Android Project:** `/Users/craigvandergalien/AndroidStudioProjects/lichunandroid`
**Package:** `com.craigvg.lichun_android`

---

## Summary

| Phase | Estimated Hours | Status |
|-------|-----------------|--------|
| 1. Project Foundation | 5-8 | ⬜ |
| 2. Core Architecture | 40-50 | ⬜ |
| 3. Data Models | 15-20 | ⬜ |
| 4. Design System | 10-15 | ⬜ |
| 5. Core Managers | 20-25 | ⬜ |
| 6. Shared Components | 25-30 | ⬜ |
| 7. Feature Modules | 100-120 | ⬜ |
| 8. Navigation | 8-10 | ⬜ |
| 9. Integrations | 20-25 | ⬜ |
| 10. Platform Features | 10-15 | ⬜ |
| 11. Testing | 20-25 | ⬜ |
| 12. Polish & Launch | 15-20 | ⬜ |
| **TOTAL** | **~290-360 hours** | |

---

## Critical Path (MVP Order)

1. WebSocket + Models (can't do anything without server communication)
2. Design System + Core Components (everything depends on these)
3. Character Creation + Onboarding (first user experience)
4. Home + Events (core gameplay loop)
5. Activities (main interaction)
6. Monetization (revenue)
7. Dating, Messaging, Retention (engagement features)
8. Settings, Store (complete parity)

---

## Phase 1: Project Foundation

### 1.1 Project Setup
- [ ] Configure Gradle with required dependencies
- [ ] Set up package structure mirroring iOS feature modules
- [ ] Configure ProGuard/R8 for release builds
- [ ] Set up debug/release build variants
- [ ] Configure signing for Play Store

### 1.2 Dependencies to Add

| iOS | Android Equivalent | Gradle Dependency |
|-----|-------------------|-------------------|
| SwiftUI | Jetpack Compose | `androidx.compose:compose-bom` |
| Combine | Kotlin Flow + StateFlow | (built into Kotlin coroutines) |
| URLSession WebSocket | OkHttp WebSocket | `com.squareup.okhttp3:okhttp` |
| StoreKit 2 | Google Play Billing | `com.android.billingclient:billing-ktx` |
| Firebase iOS SDK | Firebase Android SDK | `com.google.firebase:firebase-bom` |
| SDWebImage + SVGCoder | Coil + AndroidSVG | `io.coil-kt:coil-compose`, `com.caverock:androidsvg-aar` |
| AVFoundation | MediaPlayer / ExoPlayer | (built-in) or `androidx.media3:media3-exoplayer` |
| UserNotifications | Firebase Cloud Messaging | `com.google.firebase:firebase-messaging` |

---

## Phase 2: Core Architecture

### 2.1 WebSocket Service (~20 hours)
**iOS Reference:** `WebSocketService.swift` (1130 lines)

- [ ] Create `WebSocketManager.kt`
- [ ] Implement OkHttp WebSocket connection to `wss://lichun.app/wss/`
- [ ] Auto-reconnection with exponential backoff (0.1s → 5s, 1000 retries)
- [ ] Message serialization with kotlinx.serialization or Moshi

#### Outbound Messages (Client → Server)
- [ ] `init` - Connection initialization with device UUID
- [ ] `claimEvent` - Claim life event reward
- [ ] `claimDailyReward` - Claim daily login
- [ ] `claimQuestReward` - Claim quest completion
- [ ] `acknowledgeAchievement` - Acknowledge unlock
- [ ] `getAchievements` - Fetch achievements list
- [ ] `getDailyRewards` - Fetch daily reward state
- [ ] `getDailyQuests` - Fetch daily quests
- [ ] `getEnergyRefillTiers` - Fetch monetization options
- [ ] `getTimeSkipTiers` - Fetch time skip options
- [ ] `purchaseEnergyRefill` - Purchase energy refill
- [ ] `purchaseTimeSkip` - Purchase time skip
- [ ] `speed` - Game speed control (6 levels)
- [ ] `quitHabit` - Start quitting a habit
- [ ] `stopQuitHabit` - Cancel quitting
- [ ] `setFocus` - Set player focus
- [ ] `retrievePerson` - Get person details

#### Inbound Messages (Server → Client)
- [ ] `u` - Lightweight updates (energy, money, diamonds, time, location, mood)
- [ ] `batch_update` - Batched efficiency updates (14+ fields)
- [ ] `playerObject` - Complete player state
- [ ] `personObject` - Individual character update
- [ ] `messageEvent` - Life events (claimable rewards system)
- [ ] `questionEvent` - Game events requiring player choices
- [ ] `conversationEvent` - Chat message updates
- [ ] `relationshipEvent` - Relationship milestone events
- [ ] `achievementsList` - All achievements
- [ ] `achievementUnlocked` - New achievement unlock notification
- [ ] `dailyRewardClaimed` - Daily reward confirmation
- [ ] `dailyRewardStatus` - Current daily reward state
- [ ] `questRewardClaimed` - Quest completion confirmation
- [ ] `questProgress` - Quest progress updates
- [ ] `dailyQuestsStatus` - Current daily quests state
- [ ] `energyRefillTiers` - Available energy purchase options
- [ ] `timeSkipTiers` - Available time skip options
- [ ] `purchaseComplete` - Purchase confirmation
- [ ] `timeSkipComplete` - Time skip event summary
- [ ] `tutorialStepUpdated` - Tutorial progress
- [ ] `tutorial_message` - Tutorial messages
- [ ] `onboardingComplete` - Onboarding finished
- [ ] `extraCurriculars` - Available activities
- [ ] `getSwipeCharacter` - Dating swipe candidate
- [ ] `dataExportReady` - GDPR export completion
- [ ] `accountDeleted` - Account deletion confirmation
- [ ] `error` - Server error messages

### 2.2 State Management (~10 hours)

#### GameStateViewModel
**iOS Reference:** `Core/ViewModels/GameStateViewModel.swift` (130 lines)

- [ ] Create `GameStateViewModel.kt`
- [ ] StateFlow for: energy, money, diamonds, time, season, gameSpeed
- [ ] Computed properties: `canAfford()`, `formattedTime`, `seasonEmoji`
- [ ] Subscribe to WebSocketManager updates

#### PlayerViewModel
**iOS Reference:** `Core/ViewModels/PlayerViewModel.swift` (231 lines)

- [ ] Create `PlayerViewModel.kt`
- [ ] Character state: person info, relationships, activities, inventory
- [ ] Computed properties: `fullName`, `age`, `healthPercentage`
- [ ] Activity methods: `getCurrentActivities()`, `isEnrolledIn()`, `getActivityRecord()`
- [ ] Relationship helpers: `romanticRelationships`, `familyRelationships`, `friendRelationships`
- [ ] Server action methods: `quitHabit()`, `setFocus()`, `retrievePerson()`

#### AppViewModel
- [ ] Create `AppViewModel.kt`
- [ ] Navigation state (selected tabs, modal views)
- [ ] Cross-tab navigation coordination

#### Dependency Injection
- [ ] Set up Hilt or Koin for dependency injection
- [ ] Inject ViewModels into Composables

### 2.3 Error Handling (~5 hours)
- [ ] Create `WebSocketError` sealed class:
  ```kotlin
  sealed class WebSocketError : Exception() {
      object ConnectionFailed : WebSocketError()
      object MessageParsingFailed : WebSocketError()
      data class ServerError(val message: String) : WebSocketError()
      object RateLimited : WebSocketError()
  }
  ```
- [ ] Implement error recovery UI
- [ ] Retry logic with exponential backoff
- [ ] User-friendly error messages

---

## Phase 3: Data Models

### 3.1 Core Models (7 classes)

#### Player.kt
**iOS Reference:** `Core/Models/Player.swift` (81 lines)

- [ ] Create `Player.kt` data class
- [ ] Properties: `date`, `status`, `season`, `hourOfDay`, `minuteOfHour`, `gameSpeed`
- [ ] Collections: `activeConversations`, `focuses`, `storeItems`, `occupations`, `inAppPurchases`
- [ ] Relationships: `r` (relationships list), `relData` (relationship data)

#### Person.kt
**iOS Reference:** `Core/Models/Person.swift` (61 lines)

- [ ] Create `Person.kt` data class
- [ ] Basic info: `id`, `image`, `status`, `sex`, `firstname`, `lastname`, `age`, `birthday`
- [ ] Stats: `mood`, `affinity`, `money`, `diamonds`, `prestige`, `happiness`, `health`, `intelligence`
- [ ] Activities: `activities`, `activityRecords`, `currentEducation`, `habits`
- [ ] Social: `relationships`, `availableConversations`, `bio`, `interests`, `personalityTraits`
- [ ] Enhanced: `compatibilityScore`

#### Activity.kt
**iOS Reference:** `Core/Models/Activity.swift` (139 lines)

- [ ] Create `Activity.kt` with sealed class hierarchy
- [ ] `ActivityRecord` - Historical performance tracking
- [ ] `EducationRecord` - School/college records (GPA, major, minor)
- [ ] Activity types:
  - [ ] `ElementarySchoolClass`
  - [ ] `HighSchoolClass`
  - [ ] `OccupationClass`
  - [ ] `ExtracurricularClass`
- [ ] `Habit` - Negative habits with quitting progress (0-30 days, "active"/"quitting" status)

#### MessageEvent.kt
**iOS Reference:** `Core/Models/MessageEvent.swift` (89 lines)

- [ ] Create `MessageEvent.kt` data class
- [ ] Core: `id`, `message`, `type`, `date`, `hour`
- [ ] Costs: `energyCost`, `diamondCost`, `moneyCost`, `affinityChange`
- [ ] Characters: `characters: List<SimplePerson>?`
- [ ] Claiming: `claimed`, `claimedAt`
- [ ] `EventCategory` enum: `career`, `social`, `achievement`, `education`, `health`, `finance`, `random`, `neutral`, `negative`
- [ ] Computed: `isClaimable`, `isNegative`

#### Conversation.kt
**iOS Reference:** `Core/Models/Conversation.swift` (96 lines)

- [ ] `ConversationClass` - Available conversation options
- [ ] `ConversationMessage` - Individual messages with sentiment analysis
- [ ] `ConversationObj` - Full conversation thread wrapper

#### Question.kt
**iOS Reference:** `Core/Models/Question.swift` (32 lines)

- [ ] `Question` - Game events requiring choices
- [ ] `AnswerOption` - Choice with resource costs (energy/money/diamonds)

#### StoreItem.kt
**iOS Reference:** `Core/Models/StoreItem.swift` (69 lines)

- [ ] `StoreItem` - In-game purchasable items
- [ ] `InAppPurchaseItem` - Real money purchases (with diamond rewards)

### 3.2 Retention Models (3 classes)

#### Achievement.kt
**iOS Reference:** `Core/Models/Achievement.swift` (63 lines)

- [ ] Create `Achievement.kt` data class
- [ ] Properties: `id`, `name`, `description`, `category`, `reward`, `unlocked`, `unlockedAt`, `progress`, `acknowledged`
- [ ] `AchievementCategory` enum: `career`, `relationships`, `education`, `wealth`, `activities`

#### DailyReward.kt
**iOS Reference:** `Core/Models/DailyReward.swift` (46 lines)

- [ ] `DailyRewardState` - 7-day login streak state
- [ ] `DayReward` - Individual day rewards (diamonds, energy, money, bonus items)

#### DailyQuest.kt
**iOS Reference:** `Core/Models/DailyQuest.swift` (98 lines)

- [ ] `DailyQuestsState` - Collection of daily quests
- [ ] `DailyQuest` - Quest with category, progress, target
- [ ] `QuestCategory` enum: `social`, `career`, `activities`, `education`, `wealth`
- [ ] `QuestReward` - Quest reward breakdown

### 3.3 Monetization Models (2 classes)

#### EnergyRefillTier.kt
**iOS Reference:** `Core/Models/EnergyRefillTier.swift` (45 lines)

- [ ] `EnergyRefillTier` data class
- [ ] Types: `small`, `medium`, `full`, `unlimited_24h`
- [ ] Properties: `type`, `energyAmount`, `diamondCost`, `displayName`, `description`

#### TimeSkipTier.kt
**iOS Reference:** `Core/Models/TimeSkipTier.swift` (75 lines)

- [ ] `TimeSkipTier` data class
- [ ] Types: `1hour`, `1day`, `1week`, `next_event`
- [ ] `TimeSkipSummary` - Post-skip event summary with stat changes
- [ ] `TimeSkipEvent` - Individual events that occurred during skip

### 3.4 Dating Models (3 classes)

- [ ] `RelationshipEvent` - Types: argument, anniversary, jealousy, proposal, breakupThreat
- [ ] `EventChoice` - Choice with affinity/diamond/money/energy costs
- [ ] `FocusOption`, `Relationship`, `DateIdea`

---

## Phase 4: Design System

### 4.1 Colors (~3 hours)
**iOS Reference:** `Shared/DesignSystem/AppColors.swift` (159 lines)

- [ ] Create `ui/theme/AppColors.kt`

```kotlin
object AppColors {
    // Primary
    val primary = Color(0xFFF4A5B5)        // Soft rose pink
    val secondary = Color(0xFFB5C9F4)      // Soft periwinkle
    val accent = Color(0xFFFFD89B)         // Warm peach

    // Backgrounds
    val background = Color(0xFFFFF8F3)     // Warm cream
    val surfaceElevated = Color(0xFFFFF0E6) // Peachy cream
    val surfaceSubtle = Color(0xFFFDF5EE)

    // Text (Warm Browns)
    val primaryText = Color(0xFF5A4A3A)
    val secondaryText = Color(0xFF8B7A6A)
    val disabledText = Color(0xFFC4B5A7)

    // Stats
    val energy = Color(0xFF9DDFAA)          // Sage green
    val money = Color(0xFFFFE07A)           // Butter yellow
    val diamond = Color(0xFFA8D5EA)         // Sky blue
    val health = Color(0xFFFFB3BA)          // Coral pink
    val happiness = Color(0xFFFFFEA7)       // Sunflower
    val intelligence = Color(0xFFC9B8F4)    // Lavender
    val prestige = Color(0xFFF9D5A7)        // Apricot
    val looks = Color(0xFFFFB6C8)           // Blush

    // Glass Effects
    val glassTintLight = Color.White.copy(alpha = 0.7f)
    val glassTintDark = Color.Black.copy(alpha = 0.3f)
    val modalOverlay = Color.Black.copy(alpha = 0.4f)
}
```

- [ ] Implement dark mode variants (warm evening lighting)
- [ ] Seasonal color schemes (spring, summer, autumn, winter)

### 4.2 Typography (~3 hours)
**iOS Reference:** `Shared/DesignSystem/AppTypography.swift` (145 lines)

- [ ] Create `ui/theme/AppTypography.kt`
- [ ] Font hierarchy:
  - `displayTitle`: 34sp, bold
  - `title`: 28sp, bold
  - `title2`: 26sp, semibold
  - `largeTitle`: 24sp, semibold
  - `headline`: 18sp, semibold
  - `body`: 16sp, regular
  - `bodyBold`: 16sp, semibold
  - `caption`: 13sp, regular
  - `captionBold`: 13sp, semibold
  - `small`: 11sp, regular
  - `micro`: 10sp, regular
- [ ] Dynamic type support for accessibility

### 4.3 Spacing (~2 hours)
**iOS Reference:** `Shared/DesignSystem/AppSpacing.swift` (126 lines)

- [ ] Create `ui/theme/AppSpacing.kt`

```kotlin
object AppSpacing {
    // Base spacing
    val xxs = 2.dp
    val xs = 6.dp
    val sm = 10.dp
    val md = 20.dp
    val lg = 30.dp
    val xl = 40.dp
    val xxl = 60.dp
    val xxxl = 80.dp

    // Component dimensions
    val buttonHeight = 54.dp
    val smallButtonHeight = 40.dp
    val cornerRadius = 16.dp
    val smallCornerRadius = 10.dp
    val largeCornerRadius = 24.dp
    val pillCornerRadius = 27.dp

    // Avatar sizes
    val avatarSmall = 44.dp
    val avatarMedium = 70.dp
    val avatarLarge = 120.dp
    val avatarXLarge = 180.dp

    // Touch targets
    val minTouchTarget = 44.dp
}
```

### 4.4 Theming (~3 hours)
- [ ] Create Compose Theme with MaterialTheme customization
- [ ] Shadow definitions (soft, medium, large)
- [ ] Shape definitions
- [ ] Create `BaoLifeTheme` composable

---

## Phase 5: Core Managers

### 5.1 ToastManager (~5 hours)
**iOS Reference:** `Shared/Managers/ToastManager.swift` (230 lines)

- [ ] Create `managers/ToastManager.kt`
- [ ] Toast types: `success`, `error`, `warning`, `info`
- [ ] Queue management for multiple toasts
- [ ] Auto-dismiss with configurable duration (default 3s)
- [ ] StateFlow for current toast
- [ ] Compose overlay implementation

### 5.2 SoundManager (~8 hours)
**iOS Reference:** `Shared/Managers/SoundManager.swift` (370 lines)

- [ ] Create `managers/SoundManager.kt`
- [ ] 14+ game sounds:
  - UI: `tap`, `switch`, `modalOpen`, `modalClose`
  - Transactions: `purchase`, `coinEarned`, `diamondEarned`
  - Notifications: `message`, `achievement`, `levelUp`
  - Feedback: `success`, `error`, `warning`
  - Game: `newEvent`, `relationship`
- [ ] MediaPlayer or SoundPool implementation
- [ ] Volume controls per category (0.2 - 0.5)
- [ ] Muting support
- [ ] Preloading for instant playback

### 5.3 AnalyticsManager (~5 hours)
**iOS Reference:** `Shared/Managers/AnalyticsManager.swift` (370 lines)

- [ ] Create `managers/AnalyticsManager.kt`
- [ ] Firebase Analytics integration
- [ ] Crashlytics error reporting
- [ ] 30+ event types:
  - App lifecycle: `app_launch`, `app_background`, `app_foreground`
  - Onboarding: `onboarding_start`, `onboarding_step_*`, `onboarding_complete`
  - Character: `character_created`, `character_death`
  - Purchases: IAP and in-game tracking
  - Dating: `swipe`, `match`, `date`, `gift`
  - Navigation and game actions
- [ ] Screen view tracking
- [ ] User property management
- [ ] Stack trace capture for errors

### 5.4 TooltipManager (~4 hours)
**iOS Reference:** `Shared/Managers/TooltipManager.swift` (153 lines)

- [ ] Create `managers/TooltipManager.kt`
- [ ] Sequential tooltip display
- [ ] Position and arrow direction configuration
- [ ] Completion tracking with SharedPreferences
- [ ] Compose tooltip implementation

### 5.5 HapticFeedback (~2 hours)
- [ ] Create `utils/HapticFeedback.kt`
- [ ] Patterns: `light`, `medium`, `heavy`, `success`, `warning`, `error`
- [ ] VibrationEffect API implementation (API 26+)
- [ ] Fallback for older devices

---

## Phase 6: Shared Components

### 6.1 Buttons (4 components) (~4 hours)
**iOS Reference:** `Shared/Components/Buttons/`

- [ ] `PrimaryButton` - Main action button with loading state
- [ ] `IconButton` - Icon-only button
- [ ] `CozyIconButton` - Icon button with haptic feedback
- [ ] Button theming and styles

### 6.2 Cards (2 components) (~3 hours)
**iOS Reference:** `Shared/Components/Cards/`

- [ ] `BaseCard` - Standard card wrapper (shadows, borders, backgrounds)
- [ ] `CharacterListCard` - Character display in lists

### 6.3 Stats (4 components) (~4 hours)
**iOS Reference:** `Shared/Components/Stats/`

- [ ] `CozyStatBar` - Animated 0-100 progress bar with gradient
- [ ] `CozyStatBadge` - Stat display badge
- [ ] `ResourcePill` - Compact resource display (energy/money/diamonds/health)
- [ ] `StatBar` - Generic stat progress indicator

### 6.4 Indicators (3 components) (~3 hours)
- [ ] `ProgressBar` - Progress indicator
- [ ] `CozyConnectingView` - Connection state display
- [ ] Loading spinners and shimmer effects

### 6.5 Feedback (2 components) (~4 hours)
**iOS Reference:** `Shared/Components/Feedback/`

- [ ] `CelebratoryPopup` - Success animations with confetti
- [ ] `ToastOverlayView` - Toast notifications overlay

### 6.6 Dialogs (~3 hours)
- [ ] `ConfirmationDialog` - Reusable confirmation dialogs
- [ ] Material3 dialog styling

### 6.7 Effects (~4 hours)
**iOS Reference:** `Shared/Components/Effects/`

- [ ] `SeasonalParticles` - Animated seasonal particles
  - Spring: Cherry blossoms
  - Summer: Fireflies
  - Autumn: Falling leaves
  - Winter: Snowflakes
- [ ] Canvas-based particle system

### 6.8 Other Components (~5 hours)
- [ ] `CozyHeaderView` - Standard header component
- [ ] `CozyInterestTag` - Interest/trait tags
- [ ] `SVGImageView` - SVG rendering with Coil + AndroidSVG

---

## Phase 7: Feature Modules

### 7.1 Home Feature (14 files) (~12 hours)
**iOS Reference:** `Features/Home/`

- [ ] `HomeScreen` - Card-based dashboard
- [ ] `StatusHeaderCard` - Time, season, character name, resources
- [ ] `AvatarCard` - 120dp circular avatar with gradient border and mood
- [ ] `QuickStatsCard` - Health, happiness, intelligence, prestige stat bars
- [ ] `LifeTimelineCard` - Scrollable claimable life events with filtering
- [ ] `LifeEventCard` - Three visual states:
  - Unclaimed: Pulsing gradient border, "Tap to claim" prompt
  - Claiming: Squish animation (0.95 scale), confetti burst, haptic
  - Claimed: Muted (0.7 opacity), checkmark, timestamp
- [ ] `GameControlsCard` - Speed buttons (6 levels) + game actions
- [ ] `SpeedButtonsView` - 6 speed levels (10000ms, 1000ms, 500ms, 50ms, 20ms, 1ms)
- [ ] `BottomButtonsView` - Start/stop/restart
- [ ] `HeaderView` - Top header bar
- [ ] `MainCharacterView` - Character display
- [ ] `ProfileMenuView` - Bottom sheet menu
- [ ] `MoreView` - Additional options

### 7.2 Dating Feature (18 files) (~30 hours) ⚠️ MOST COMPLEX
**iOS Reference:** `Features/Dating/`

- [ ] `DatingScreen` (port 479 lines) - Main dating hub
- [ ] `SwipeDatingScreen` (port 325 lines) - Card stack with swipe gestures
  - Swipe right = like, left = pass
  - Card stack animations
- [ ] `RelationshipsScreen` (port 254 lines) - All relationships view
- [ ] `RelationshipDetailScreen` (port 719 lines) - Individual relationship deep dive
- [ ] `DateActivitySelectionScreen` (port 590 lines) - Choose date activities
- [ ] `DateMiniGameScreen` (port 675 lines) - Mini-game mechanics during dates
- [ ] Components:
  - [ ] `MatchCard` - Swipeable profile card with gestures
  - [ ] `EnhancedProfileCard` - Full profile with compatibility
  - [ ] `CompatibilityBadge` - Score display
  - [ ] `CompatibilityExplanationView` - Breakdown of compatibility
  - [ ] `RelationshipSnapshotCard` - Summary card
  - [ ] `RomanticHeroCard` - Featured relationship display
  - [ ] `QuickActionsBar` - Call, text, gift, propose buttons
  - [ ] `InterestTag` - Shared interest display
  - [ ] `StatBadge` - Stat display
  - [ ] `RecentMomentsCard` - Memories/moments card
  - [ ] `RelationshipEventModal` - Arguments, anniversaries, proposals, jealousy, breakup threats

### 7.3 Activities Feature (6 files) (~10 hours)
**iOS Reference:** `Features/Activities/`

- [ ] `ActivityScreen` - Main activities view
- [ ] `ActivitiesListScreen` - Browse available activities
- [ ] `ExtracurricularListScreen` - Extracurricular activities
- [ ] `OccupationListScreen` - Jobs/careers with levels
- [ ] `ActivityButton` - Enrollment/unenrollment action
- [ ] `HabitRow` - Habit display with quit progress (0-30 day counter)

### 7.4 Character Feature (9 files) (~12 hours)
**iOS Reference:** `Features/Character/`

- [ ] Character Creation Flow:
  - [ ] `WelcomeScreen` - Onboarding welcome
  - [ ] `CharacterSetupScreen` - Name, gender, age, avatar selection
  - [ ] `ConfirmationScreen` - Confirm character creation
- [ ] `PersonDetailScreen` - Character stats and info view
- [ ] `DeathScreen` - End game / legacy view with restart option
- [ ] `AvatarView` - Avatar rendering (SVG support)
- [ ] `CharacterCard` - Character display in lists

### 7.5 Messaging Feature (11 files) (~12 hours)
**iOS Reference:** `Features/Messaging/`

- [ ] `ChatScreen` - Active conversation view
- [ ] `MessagesScreen` - Inbox/message list
- [ ] `CozyMessageBubble` - Message bubble with sentiment indicator (positive/negative)
- [ ] `ConversationListItem` - List row with avatar, preview, unread badge
- [ ] `ExpandableMessageInput` - Auto-growing text input
- [ ] `DynamicTextInput` - Dynamic sizing
- [ ] `ChatHeaderCard` - Chat header with character info
- [ ] `MessagesHeaderCard` - Messages list header
- [ ] `MessageRowCard` - Individual message row
- [ ] `MessagesEmptyState` - Empty inbox state
- [ ] `RelationshipBadge` - Relationship type indicator

### 7.6 Monetization Feature (5 files) (~10 hours)
**iOS Reference:** `Features/Monetization/`

- [ ] `EnergyRefillModal` - Bottom sheet with tiers:
  - Small: 50 energy
  - Medium: 100 energy
  - Full: 200 energy
  - Unlimited 24h: Unlimited energy for 24 hours
- [ ] `TimeSkipModal` - Bottom sheet with tiers:
  - Skip 1 hour
  - Skip 1 day
  - Skip 1 week
  - Skip to next event
- [ ] `TimeSkipSummaryScreen` - Post-skip event recap
- [ ] Purchase confirmation dialogs
- [ ] Diamond pricing displays

### 7.7 Onboarding Feature (12 files) (~12 hours)
**iOS Reference:** `Features/Onboarding/`

- [ ] `OnboardingContainerScreen` - 5-step orchestration
- [ ] `OnboardingStep1_WelcomeScreen` - Welcome message
- [ ] `OnboardingStep2_CharacterScreen` - Character creation
- [ ] `OnboardingStep3_UITourScreen` - Contextual tooltips pointing to UI elements
- [ ] `OnboardingStep4_GuidedActionsScreen` - Required first activities
- [ ] `OnboardingStep5_CompletionScreen` - Celebration and transition to game
- [ ] `TooltipView` - Positioned tooltip with arrow direction
- [ ] `OnboardingTaskCard` - Checklist task display
- [ ] `TourCard` - Feature explanation card
- [ ] `FeatureRow` - Feature highlight
- [ ] Progress persistence in SharedPreferences

### 7.8 Retention Features (8 files) (~15 hours)
**iOS Reference:** `Features/Retention/`

#### Achievements
- [ ] `AchievementsScreen` - Gallery/grid view of all achievements
- [ ] `AchievementDetailScreen` - Individual achievement info
- [ ] `AchievementUnlockModal` - Celebration popup with confetti
- [ ] Unacknowledged achievement queue management

#### Daily Rewards
- [ ] `DailyRewardsScreen` - 7-day calendar display
- [ ] Streak tracking logic
- [ ] Progressive rewards display (day 1-7)
- [ ] Missed day handling (streak reset)

#### Daily Quests
- [ ] `DailyQuestsScreen` - Quest cards with progress
- [ ] Quest category icons
- [ ] Progress tracking (X/Y format)
- [ ] Reward claiming UI

### 7.9 Settings Feature (2 files) (~4 hours)
**iOS Reference:** `Features/Settings/`

- [ ] `DataExportScreen` - GDPR data export request
- [ ] `AccountDeletionScreen` - Scheduled deletion with confirmation
- [ ] Settings menu integration

### 7.10 Store Feature (4 files) (~5 hours)
**iOS Reference:** `Features/Store/`

- [ ] `ProductGridScreen` - Store item browsing (grid layout)
- [ ] `StoreItemCard` - Item display with pricing
- [ ] Purchase flows with in-game currency
- [ ] Item categories

### 7.11 Events Feature (1 file) (~6 hours)
**iOS Reference:** `Features/Events/`

- [ ] `EventModalView` - Unified question/event modal
- [ ] Multi-character event support (show multiple characters in event)
- [ ] Answer options with cost display (energy/money/diamonds icons)
- [ ] Reward display and claiming
- [ ] Event queue management

### 7.12 Social Feature (~2 hours)
- [ ] `SocialScreen` - Social interactions view

---

## Phase 8: Navigation

- [ ] Set up Compose Navigation with NavHost
- [ ] `MainNavigation.kt` - Navigation graph
- [ ] Bottom navigation bar (3 tabs):
  - Tab 0: Home
  - Tab 1: Activities
  - Tab 2: Dating
- [ ] Sheet modals (ModalBottomSheet):
  - [ ] EnergyRefillModal
  - [ ] TimeSkipModal
  - [ ] AchievementUnlockModal
  - [ ] DailyRewardsView
  - [ ] DailyQuestsView
  - [ ] ProfileMenuView
- [ ] Deep linking support
- [ ] Navigation state preservation
- [ ] Back button handling

---

## Phase 9: Integrations

### 9.1 Firebase (~8 hours)
- [ ] Firebase project setup in Firebase Console
- [ ] Add `google-services.json`
- [ ] Analytics integration
- [ ] Crashlytics integration
- [ ] FCM for push notifications
- [ ] Device token registration
- [ ] Send token to server on character creation

### 9.2 Google Play Billing (~10 hours)
- [ ] Play Billing Library 6.x integration
- [ ] Product setup in Play Console:
  - [ ] `diamond1` - Small diamond pack
  - [ ] `diamond2` - Large diamond pack
- [ ] `BillingManager.kt` implementation
- [ ] Purchase flow:
  - [ ] Query products
  - [ ] Launch purchase flow
  - [ ] Handle purchase result
  - [ ] Consume purchase
- [ ] Receipt validation with backend server
- [ ] Handle pending purchases
- [ ] Restore purchases

### 9.3 Image Loading (~4 hours)
- [ ] Coil setup for async image loading
- [ ] AndroidSVG integration for avatar SVGs
- [ ] Custom SVG decoder for Coil
- [ ] Caching configuration
- [ ] Placeholder and error state images
- [ ] Memory management

---

## Phase 10: Platform Features

- [ ] Push notifications with FCM
  - [ ] `FirebaseMessagingService` implementation
  - [ ] Notification channels (Android 8+)
  - [ ] Notification display
- [ ] App lifecycle handling
  - [ ] `ProcessLifecycleOwner` for background/foreground
  - [ ] WebSocket reconnection on foreground
- [ ] Network connectivity monitoring
  - [ ] `ConnectivityManager` listener
  - [ ] Offline state handling
- [ ] SharedPreferences for local state
  - [ ] Tutorial progress
  - [ ] Onboarding state
  - [ ] Device token
  - [ ] User preferences
- [ ] Keyboard handling and IME
- [ ] Edge-to-edge display (WindowCompat)
- [ ] Accessibility
  - [ ] Content descriptions
  - [ ] TalkBack support
  - [ ] Touch target sizing (min 44dp)

---

## Phase 11: Testing

### 11.1 Unit Tests
- [ ] ViewModel tests (JUnit, MockK)
- [ ] WebSocket message parsing tests
- [ ] Model serialization/deserialization tests
- [ ] Business logic tests

### 11.2 UI Tests
- [ ] Compose UI tests for key flows
- [ ] Screenshot tests for components (Paparazzi or similar)
- [ ] Navigation tests

### 11.3 Integration Tests
- [ ] WebSocket connection tests
- [ ] Purchase flow tests (mock billing)
- [ ] End-to-end user flows

---

## Phase 12: Polish & Launch

- [ ] Performance optimization
  - [ ] Compose recomposition optimization
  - [ ] Memory leak detection (LeakCanary)
  - [ ] Baseline profiles
- [ ] Animation refinement
  - [ ] Smooth 60fps animations
  - [ ] Reduce jank
- [ ] Loading states across all screens
- [ ] Error states and recovery UI
- [ ] Localization setup (if needed)
- [ ] Play Store listing
  - [ ] App icon and feature graphic
  - [ ] Screenshots
  - [ ] Description
- [ ] App bundle configuration
- [ ] Pre-launch report fixes
- [ ] Closed testing track setup

---

## Appendix: File Structure

```
lichunandroid/
├── app/
│   ├── src/main/java/com/craigvg/lichun_android/
│   │   ├── BaoLifeApp.kt                    # Application class
│   │   ├── MainActivity.kt                   # Single activity
│   │   ├── network/
│   │   │   ├── WebSocketManager.kt          # WebSocket connection
│   │   │   ├── MessageHandler.kt            # Message parsing
│   │   │   └── models/                       # Network DTOs
│   │   ├── domain/
│   │   │   ├── models/                       # Domain models (27 classes)
│   │   │   │   ├── Player.kt
│   │   │   │   ├── Person.kt
│   │   │   │   ├── Activity.kt
│   │   │   │   ├── MessageEvent.kt
│   │   │   │   ├── Conversation.kt
│   │   │   │   ├── Question.kt
│   │   │   │   ├── Achievement.kt
│   │   │   │   ├── DailyReward.kt
│   │   │   │   ├── DailyQuest.kt
│   │   │   │   └── ...
│   │   │   └── repositories/
│   │   ├── ui/
│   │   │   ├── theme/
│   │   │   │   ├── AppColors.kt
│   │   │   │   ├── AppTypography.kt
│   │   │   │   ├── AppSpacing.kt
│   │   │   │   └── BaoLifeTheme.kt
│   │   │   ├── components/                   # 35 reusable components
│   │   │   │   ├── buttons/
│   │   │   │   ├── cards/
│   │   │   │   ├── stats/
│   │   │   │   ├── dialogs/
│   │   │   │   ├── effects/
│   │   │   │   └── ...
│   │   │   ├── screens/                      # Feature screens
│   │   │   │   ├── home/
│   │   │   │   ├── dating/
│   │   │   │   ├── activities/
│   │   │   │   ├── character/
│   │   │   │   ├── messaging/
│   │   │   │   ├── monetization/
│   │   │   │   ├── onboarding/
│   │   │   │   ├── retention/
│   │   │   │   ├── settings/
│   │   │   │   ├── store/
│   │   │   │   └── events/
│   │   │   └── navigation/
│   │   │       └── MainNavigation.kt
│   │   ├── viewmodel/
│   │   │   ├── GameStateViewModel.kt
│   │   │   ├── PlayerViewModel.kt
│   │   │   └── AppViewModel.kt
│   │   ├── managers/
│   │   │   ├── ToastManager.kt
│   │   │   ├── SoundManager.kt
│   │   │   ├── AnalyticsManager.kt
│   │   │   ├── TooltipManager.kt
│   │   │   └── BillingManager.kt
│   │   ├── utils/
│   │   │   ├── HapticFeedback.kt
│   │   │   ├── DateFormatters.kt
│   │   │   └── Extensions.kt
│   │   └── di/
│   │       └── AppModule.kt                  # Hilt/Koin module
│   └── src/main/res/
│       ├── drawable/                          # Icons, SVG avatars
│       ├── raw/                               # 14+ sound effects
│       └── values/
│           ├── colors.xml
│           ├── strings.xml
│           └── themes.xml
├── build.gradle.kts
└── settings.gradle.kts
```

---

## Reference: iOS File Counts

| Category | iOS Files | iOS LOC (approx) |
|----------|-----------|------------------|
| Core Models | 11 | ~800 |
| ViewModels | 2 | ~360 |
| WebSocketService | 1 | 1,130 |
| Managers | 4 | ~1,100 |
| Design System | 3 | ~400 |
| Shared Components | 35+ | ~2,000 |
| Feature Views | 84 | ~6,000 |
| Extensions/Utils | 19 | ~800 |
| **Total** | **~160** | **~12,500** |
