A beautiful Android application built with Jetpack Compose that tracks relationship milestones and celebrates love stories.
- Live Counter: Real-time tracking of days, weeks, months, and years together
- Milestone Tracking: Progress towards relationship milestones (100 days, 1 year, etc.)
- Achievements System: Unlock achievements as you reach different milestones
- Couple Names: Personalize the app with both partners' names
- Date Selection: Set your relationship start date with a beautiful date picker
- Material Design 3: Modern, beautiful UI following Google's latest design principles
- Smooth Animations: Delightful animations and transitions throughout the app
- Gradient Backgrounds: Beautiful pink, purple, and blue gradient backgrounds
- Responsive Design: Optimized for different screen sizes
- Debug Features: Hidden debug menu (tap the heart icon 5 times)
- Kotlin: Modern Android development language
- Jetpack Compose: Declarative UI toolkit (Android's equivalent to SwiftUI)
- Material Design 3: Latest Material Design system
- Hilt: Dependency injection framework
- DataStore: Modern data storage solution for preferences
- StateFlow: Reactive state management
- Coroutines: Asynchronous programming
- MVVM: Model-View-ViewModel architecture
- Repository Pattern: Data abstraction layer
- Single Activity: Modern Android navigation with Compose
- State Management: Unidirectional data flow with StateFlow
app/src/main/java/com/lovecounter/
├── data/
│ ├── local/ # Local data storage (DataStore)
│ ├── model/ # Data models and entities
│ └── repository/ # Repository implementations
├── di/ # Dependency injection modules
├── ui/
│ ├── components/ # Reusable UI components
│ ├── screens/ # Screen composables
│ ├── theme/ # Material Design theme
│ └── viewmodel/ # ViewModels for state management
├── utils/ # Utility classes
├── LoveCounterApplication.kt
└── MainActivity.kt
LoveCounterData: Main data class storing relationship informationTimeComponents: Calculated time breakdowns (years, months, days, etc.)Milestone: Achievement milestone definitions
CounterCard: Beautiful cards displaying time countsTimeCard: Individual time unit displaysLoveButton: Custom styled buttons with animations
LoveCounterViewModel: Main app state management with reactive data flows
- Java JDK 17+: Required for Android development
# macOS with Homebrew brew install openjdk@17 # Set JAVA_HOME (add to ~/.zshrc or ~/.bash_profile) export JAVA_HOME=/opt/homebrew/Cellar/openjdk@17/17.x.x/libexec/openjdk.jdk/Contents/Home
- Android Studio (recommended) or Android SDK
- Android SDK 24 (Android 7.0) or higher
- Kotlin 1.9.10+
- Clone/Download the project
- Install Java JDK (see prerequisites above)
- Run the setup script:
cd "Love counter Android Build" ./setup.sh
- Open terminal in project directory
- Build the project:
./gradlew assembleDebug
- Install on connected device:
./gradlew installDebug
- Open Android Studio
- Choose "Open an existing project"
- Select the project folder
- Wait for Gradle sync
- Run the app (Shift + F10)
- The app uses local storage only (DataStore Preferences)
- No network permissions required for basic functionality
- Future cloud sync integration planned with Supabase
This Android app is a faithful conversion of the iOS SwiftUI Love Counter app, featuring:
- Equivalent UI: Jetpack Compose components mirroring SwiftUI layouts
- Matched Animations: Similar smooth transitions and scaling effects
- Consistent UX: Same user flows and interaction patterns
- Preserved Features: All core functionality from the iOS version
- SwiftUI → Jetpack Compose
- Core Data → DataStore (with future Room integration)
- ObservableObject → ViewModel + StateFlow
- @State → State/MutableState
- Timer → Coroutine-based timer
- Supabase authentication integration
- Cloud data synchronization
- Room database for offline-first architecture
- Widget support for home screen
- Notification reminders for milestones
- Photo memories integration
- Sharing functionality
- Multiple relationship support
This project is part of a personal app development portfolio.
This is a personal project, but feedback and suggestions are welcome!