Kotlin ve Jetpack Compose kullanılarak modern Android standartlarında geliştirilmiş bir hatırlatma uygulamasıdır.
Doğum günleri, yıldönümleri, isim günleri ve diğer özel günleri unutmamanız için tasarlanmıştır.
- Birden Fazla Etkinlik Türü: Doğum günü, evlilik yıldönümü, ölüm yıldönümü, isim günü, nişan yıldönümü ve özel etkinlikler
- Akıllı Tarih Hesaplamaları: Bir sonraki tarih, kalan gün sayısı ve yaş otomatik hesaplanır
- Etkinlik Düzeni: Etkinlikler aya göre gruplanır, en yakındaki etkinlik ilk sırada gösterilir
- Kalıcı Kayıt: SQLite veritabanı sayesinde verileriniz asla kaybolmaz
- Favoriler: Önemli etkinlikleri favorilere ekleyip kolayca erişebilirsiniz
- Modern Arayüz: Material Design 3 tasarımı ve sezgisel gezinme deneyimi
- Ana Ekran: Tüm etkinlikleri, en yakın tarih sırasına göre listeler
- Favoriler Ekranı: Sadece favori olarak işaretlenmiş etkinlikleri gösterir
- Ayarlar Ekranı: (Gelecekteki özellikler için yer tutucu)
- Etkinlik Oluşturma Ekranı: Form doğrulamasıyla birlikte detaylı etkinlik oluşturma alanı
- Kişinin adı ve soyadı
- Etkinlik türü
- Etkinliğin bir sonraki tarihi ve haftanın günü
- Etkinliğe kalan gün sayısı
- Yaş bilgisi (yıl sayımı aktifse)
- Favori durumu
- Dil: Kotlin 2.0.21
- UI Framework: Jetpack Compose (Material 3 ile)
- Derleme Sistemi: Gradle (Kotlin DSL ile)
- Minimum SDK: 24 (Android 7.0 Nougat)
- Hedef SDK: 36
- Mimari: MVVM (Model-View-ViewModel) + Clean Architecture prensipleri
- Veritabanı: Room 2.6.1 (KSP desteğiyle)
- Navigasyon: Jetpack Navigation Compose 2.8.5
- Durum Yönetimi: StateFlow ve Compose State
- Tarih İşlemleri:
java.time.LocalDate(core library desugaring ile)
app/src/main/java/com/mrsuffix/birthdayapp/
├── data/
│ ├── local/
│ │ ├── AppDatabase.kt # Room veritabanı
│ │ ├── EventDao.kt # Veritabanı işlemleri
│ │ └── EventEntity.kt # Veritabanı varlıkları ve dönüştürücüler
│ └── repository/
│ └── EventRepository.kt # Veri katmanı soyutlaması
├── domain/
│ └── model/
│ ├── Event.kt # Alan modeli
│ └── EventType.kt # Etkinlik türü enum
├── ui/
│ ├── components/ # Yeniden kullanılabilir UI bileşenleri
│ │ ├── BottomNavigationBar.kt
│ │ ├── EmptyState.kt
│ │ ├── EventCard.kt
│ │ └── MonthHeader.kt
│ ├── navigation/ # Navigasyon yapısı
│ │ ├── NavigationGraph.kt
│ │ └── Screen.kt
│ ├── screens/ # Ekranlar
│ │ ├── createevent/
│ │ ├── favorites/
│ │ ├── home/
│ │ └── settings/
│ └── theme/ # Material 3 tema dosyaları
└── util/
└── DateUtils.kt # Tarih hesaplama yardımcıları
- Android Studio Hedgehog (2023.1.1) veya daha yeni sürüm
- JDK 11 veya üzeri
- Android SDK (API 24+)
- Depoyu klonla
- Android Studio’da aç
- Gradle dosyalarını senkronize et
- Emülatör veya fiziksel cihazda (API 24+) çalıştır
# Debug derlemesi
./gradlew assembleDebug
# Release derlemesi
./gradlew assembleRelease- Herhangi bir ana ekranda sağ alt köşedeki + butonuna dokun
- Açılan listeden etkinlik türünü seç
- Kişinin adını ve soyadını gir
- Etkinlik tarihini seç
- Yaş göstermek istiyorsan “Yılı say” seçeneğini aktif et
- Tüm zorunlu alanlar doldurulduğunda Etkinlik Oluştur butonuna bas
-
Ana Ekran: Tüm etkinlikleri en yakın tarihe göre sıralar
-
Favoriler Ekranı: Sadece favori etkinlikleri gösterir
-
Her etkinlik kartında:
- Kişi adı ve etkinlik türü
- Bir sonraki tarih ve haftanın günü
- Kalan gün sayısı
- Yaş bilgisi (aktifse)
- Her karttaki kalp simgesine dokunarak favori durumunu değiştir
- Dolu kalp = favori
- Boş kalp = favori değil
Uygulama, tarihlere göre şu bilgileri otomatik hesaplar:
- Bir Sonraki Tarih: Geçmiş etkinlikler bir sonraki yıla taşınır
- Kalan Gün: Bugünden etkinlik tarihine kadar olan süre
- Yaş: Yılı say aktifse, bir sonraki yaş otomatik gösterilir
Etkinlikler:
- En yakın tarihe göre sıralanır
- Ay ve yıla göre gruplanır (örneğin “AĞUSTOS - 2026”)
- Net bir şekilde görsel olarak ayrılır
- Veriler yerel SQLite veritabanına kaydedilir
- Uygulama kapatılsa da bilgiler korunur
- İnternet bağlantısı gerekmez
- Kişisel veriler cihaz dışına çıkmaz
Uygulama, katmanlı mimari prensiplerini takip eder:
- Veri Katmanı: Room veritabanı, DAO’lar, repository
- Alan Katmanı: Modeller ve yardımcı fonksiyonlar
- Sunum Katmanı: ViewModel’ler ve UI bileşenleri
- Model: Alan modelleri ve veritabanı nesneleri
- View: Compose UI fonksiyonları
- ViewModel: İş mantığı ve durum yönetimi
- ViewModel’ler
StateFlowile UI durumunu sağlar - UI, durum değişikliklerini reaktif olarak gözlemler
- Tek yönlü veri akışı ile kararlı davranış sağlanır
Yeni tür eklemek veya mevcutları değiştirmek için EventType.kt dosyasını düzenleyin:
enum class EventType(val displayName: String) {
BIRTHDAY("Doğum Günü"),
ANNIVERSARY("Yıldönümü"),
// Yeni türleri buraya ekleyin
}Veritabanı şeması değiştiğinde:
AppDatabase.ktiçindeki sürüm numarasını artır- Yeni bir migration stratejisi tanımla veya
fallbackToDestructiveMigration()kullan
Gelecekte eklenmesi planlanan özellikler:
- Etkinlik düzenleme ve silme
- Yaklaşan etkinlikler için bildirim sistemi
- Renkli kategori desteği
- Etkinlikleri dışa/içe aktarma (CSV, JSON)
- Arama ve filtreleme özellikleri
- Bildirim tercihlerine göre ayarlar
- Tekrarlayan etkinlik desteği
- Etkinliklere fotoğraf ekleme
Bu proje kişisel bir öğrenme projesidir, ancak öneri ve geri bildirimlere her zaman açığım!
Bu proje eğitim amaçlı olarak oluşturulmuştur.
MRsuffix - Berat NERKİZ & Mehmet Efe KARADAĞ
- Material Design 3 kılavuzları
- Jetpack Compose belgeleri
- Android geliştirici topluluğu
Uygulamanın kaynak kodunu görüp yinede korkanlar için virüs total linki. V1.0.1 - https://www.virustotal.com/gui/file/cd8969977d2f616b38c434c6aa51585e258477a08348f413231f489bc19edb7c?nocache=1 V1.0.0 - https://www.virustotal.com/gui/file/dfb7fb64d044ea4d9b02b234dffc5349088fceac4d18da11750a8894a74e2165?nocache=1
Not: Bu uygulama Android 7.0 (API 24) ve üzeri sürümleri hedefler, bu da cihazların %95’inden fazlasıyla uyumluluk sağlar.
A modern Android reminder application built with Kotlin and Jetpack Compose that helps you never forget important life events like birthdays, anniversaries, and other special occasions.
- Multiple Event Types: Birthday, Anniversary, Death Anniversary, Name Day, Wedding Anniversary, and custom events
- Smart Date Calculations: Automatically calculates next occurrence, days remaining, and age
- Event Organization: Events grouped by month with the nearest event displayed first
- Persistent Storage: SQLite database ensures your events are never lost
- Favorites: Mark important events as favorites for quick access
- Clean, Modern UI: Material Design 3 with intuitive navigation
- Home Screen: View all events sorted by next occurrence date
- Favorites Screen: Quick access to your marked favorite events
- Settings Screen: (Placeholder for future features)
- Create Event Screen: Full-featured form with validation
- Person's first name and last name
- Event type
- Next occurrence date with day of week
- Days remaining until the event
- Age (if year counting is enabled)
- Favorite status
- Language: Kotlin 2.0.21
- UI Framework: Jetpack Compose with Material 3
- Build System: Gradle with Kotlin DSL
- Min SDK: 24 (Android 7.0 Nougat)
- Target SDK: 36
- Architecture: MVVM (Model-View-ViewModel) with Clean Architecture principles
- Database: Room 2.6.1 with KSP
- Navigation: Jetpack Navigation Compose 2.8.5
- State Management: StateFlow and Compose State
- Date Handling: java.time.LocalDate with core library desugaring
app/src/main/java/com/mrsuffix/birthdayapp/
├── data/
│ ├── local/
│ │ ├── AppDatabase.kt # Room database
│ │ ├── EventDao.kt # Database operations
│ │ └── EventEntity.kt # Database entity & converters
│ └── repository/
│ └── EventRepository.kt # Data abstraction layer
├── domain/
│ └── model/
│ ├── Event.kt # Domain model
│ └── EventType.kt # Event type enum
├── ui/
│ ├── components/ # Reusable UI components
│ │ ├── BottomNavigationBar.kt
│ │ ├── EmptyState.kt
│ │ ├── EventCard.kt
│ │ └── MonthHeader.kt
│ ├── navigation/ # Navigation setup
│ │ ├── NavigationGraph.kt
│ │ └── Screen.kt
│ ├── screens/ # Screen implementations
│ │ ├── createevent/
│ │ ├── favorites/
│ │ ├── home/
│ │ └── settings/
│ └── theme/ # Material 3 theme
└── util/
└── DateUtils.kt # Date calculation utilities
- Android Studio Hedgehog (2023.1.1) or newer
- JDK 11 or higher
- Android SDK with API 24+
- Clone the repository
- Open the project in Android Studio
- Sync Gradle files
- Run on an emulator or physical device (API 24+)
# Debug build
./gradlew assembleDebug
# Release build
./gradlew assembleRelease- Tap the + (Floating Action Button) on any main screen
- Select the event type from the dropdown
- Enter the person's first name (required)
- Enter the person's last name (required)
- Select the event date (required)
- Toggle "Count years" if you want to display age
- Tap Create Event (enabled when all required fields are filled)
- Home Screen: Shows all events grouped by month, sorted by next occurrence
- Favorites Screen: Shows only events marked as favorites
- Each event card displays:
- Person's name and event type
- Next occurrence date and day of week
- Days remaining
- Age (if year counting is enabled)
- Tap the heart icon on any event card to toggle favorite status
- Filled heart = favorited
- Outlined heart = not favorited
The app intelligently calculates:
- Next Occurrence: If an event has already passed this year, it shows next year's date
- Days Remaining: Accurate calculation from today to the next occurrence
- Age Calculation: When enabled, shows how old the person will be on their next birthday
Events are automatically:
- Sorted by next occurrence (closest events first)
- Grouped by month and year (e.g., "AUGUST - 2026")
- Displayed with clear visual separation
- All events are saved to a local SQLite database
- Data persists across app restarts
- No internet connection required
- Your data never leaves your device
The app follows Clean Architecture principles:
- Data Layer: Room database, DAOs, and repository
- Domain Layer: Business models and utility functions
- Presentation Layer: ViewModels, UI components, and screens
- Model: Domain models and database entities
- View: Composable functions (UI)
- ViewModel: State management and business logic
- ViewModels expose
StateFlowfor UI state - UI collects state changes reactively
- Unidirectional data flow ensures predictable behavior
To add or modify event types, edit EventType.kt:
enum class EventType(val displayName: String) {
BIRTHDAY("Birthday"),
ANNIVERSARY("Anniversary"),
// Add more types here
}When modifying the database schema:
- Increment version in
AppDatabase.kt - Provide migration strategy or use
fallbackToDestructiveMigration()
Potential features for future versions:
- Event editing and deletion
- Push notifications for upcoming events
- Event categories with custom colors
- Export/import events (CSV, JSON)
- Search and filter functionality
- Settings for notification preferences
- Recurring events support
- Photo attachments for events
This is a personal learning project, but suggestions and feedback are welcome!
This project is created for educational purposes.
MRsuffix - Berat NERKİZ & Mehmet Efe KARADAĞ
- Material Design 3 guidelines
- Jetpack Compose documentation
- Android developers community
For those who are still hesitant despite seeing the application's source code, here is the VirusTotal link. V1.0.1 - https://www.virustotal.com/gui/file/cd8969977d2f616b38c434c6aa51585e258477a08348f413231f489bc19edb7c?nocache=1 V1.0.0 - https://www.virustotal.com/gui/file/dfb7fb64d044ea4d9b02b234dffc5349088fceac4d18da11750a8894a74e2165?nocache=1
Note: This app targets Android 7.0 (API 24) and above, ensuring compatibility with 95%+ of Android devices in use today.