Ruh halinize göre size özel video önerileri sunan mobil uygulama
Moodify, kullanıcıların günlük ruh haline göre kişiselleştirilmiş video önerileri sunan yenilikçi bir Flutter uygulamasıdır. Uygulama, modern UI/UX tasarım prensipleri ile Stitch UI kullanılarak tasarlanmış olup, kullanıcı deneyimini ön planda tutar.
- 🎭 Ruh Hali Bazlı Öneri Sistemi: Kullanıcının günlük ruh haline göre Vimeo API üzerinden özelleştirilmiş video içerikleri
- 🌍 Çoklu Dil Desteği: Easy Localization ile Türkçe ve İngilizce dil desteği
- 🔐 Çoklu Kimlik Doğrulama: Supabase Auth ile Email, Google ve Facebook girişi
- 💳 RevenueCat Entegrasyonu: Premium özelliklere erişim için uygulama içi satın alma sistemi
- 🔗 Deep Link Desteği: App Links ile harici bağlantılar üzerinden doğrudan içeriğe erişim
- 📊 Hibrit Veri Yönetimi: Hive CE ile offline veri yönetimi
- 🎨 Modern UI/UX: Shimmer efektli, akıcı yükleme animasyonları
- 🔄 State Management: Provider pattern ile reaktif state yönetimi
- 🖼️ Optimize Görsel Yönetim: Cached Network Image ile performanslı görsel yükleme
- ✅ Test Coverage: Mockito unit testleri ve Flutter widget ve entegrasyon testleri
- 🎨 UI Tasarım: Stitch UI - Moodify
- 📊 Proje Yönetimi: Jira Kanban Panosu
- 🗄️ Backend: Supabase Dashboard
Proje, Modular Clean Architecture prensiplerine göre yapılandırılmıştır:
lib/
├── core/ # Çekirdek işlevsellik
│ ├── model/ # Temel model sınıfları
│ ├── network/ # Network yönetimi (Dio)
│ │ └── feed_network_manager.dart
│ ├── providers/ # Global provider'lar
│ │ ├── auth/
│ │ │ └── auth_provider.dart
│ │ ├── feed/ # Video feed yönetimi
│ │ ├── profile/ # Profil yönetimi
│ │ └── saved_videos/ # Kaydedilen videolar
│ ├── router/ # Navigasyon yönetimi
│ │ └── app_router.dart
│ └── service/ # Servis katmanı
│ ├── auth_service.dart # Supabase Auth servisi
│ └── profile_service.dart
│
├── feature/ # Feature modülleri
│ ├── auth/ # Kimlik doğrulama
│ │ ├── sign_in/
│ │ │ ├── mixin/
│ │ │ │ └── sign_in_mixin.dart
│ │ │ ├── view/
│ │ │ │ └── sign_in_view.dart
│ │ │ └── widget/
│ │ │ ├── sign_in_button.dart
│ │ │ ├── sign_in_redirect_button.dart
│ │ │ └── title_and_subtitle.dart
│ │ ├── sign_up/
│ │ └── verification/
│ │
│ ├── edit_profile/ # Profil düzenleme
│ ├── feed/ # Ana video feed
│ ├── mood_selection/ # Ruh hali seçimi
│ │ ├── view/
│ │ │ └── mood_selection_view.dart
│ │ └── widget/
│ │ ├── mood_card.dart
│ │ └── title_and_description.dart
│ │
│ ├── navBar/ # Alt navigasyon
│ ├── profile/ # Profil sayfası
│ ├── settings/ # Ayarlar
│ ├── splash/ # Splash ekranı
│ └── product/ # Ürün sabitleri ve uzantılar
│ ├── constant/
│ │ ├── color_constant.dart
│ │ ├── double_constant.dart
│ │ └── string_constant.dart
│ ├── enum/
│ │ ├── auth_status.dart
│ │ ├── icon_constant.dart
│ │ ├── moods.dart
│ │ └── video_view_type.dart
│ ├── extension/
│ │ ├── loading_extension.dart
│ │ ├── project_decoration.dart
│ │ └── toast_extension.dart
│ └── initialize/
│ ├── app_start.dart
│ ├── app_theme.dart
│ ├── hive_registrar.g.dart
│ └── main.dart
- Dio (5.9.0): HTTP client ve REST API istekleri
- Vimeo API: Video içerik sağlayıcısı
- Webview Flutter (4.13.0): In-app web görünümü
- URL Launcher (6.3.2): Harici link açma
- Supabase Flutter (2.10.3): Backend-as-a-Service
- Email/Password Authentication
- Google OAuth
- Facebook OAuth
- Real-time Database
- App Links (6.4.1): Deep linking ve OAuth redirect
- Hive CE (2.15.0): NoSQL local database
- Hive CE Flutter (2.3.3): Flutter integration
- Path Provider (2.1.5): File system paths
- Cached Network Image (3.4.1): Image caching
- RevenueCat (Purchases Flutter 9.9.10): Subscription management
- Cross-platform satın alma
- Subscription tracking
- Revenue analytics
- Shimmer (3.0.0): Loading placeholder animasyonları
- Flutter SVG (2.2.3): SVG görsel desteği
- Image Picker (1.2.0): Kamera ve galeri erişimi
- Fluttertoast (9.0.0): Toast mesajları
- Easy Localization (3.0.7): Çoklu dil desteği (TR/EN)
- Provider (6.1.5+1): Reaktif state management
- Equatable (2.0.7): Value equality
- Kartal (4.2.0): Flutter extension methods
- JSON Annotation (4.9.0): Serialization annotations
- Flutter Test: Widget ve entegrasyon testleri
- Mockito (5.6.1): Mock objects
- Very Good Analysis (10.0.0): Dart code linting
- Build Runner (2.10.3): Code generation
- JSON Serializable (6.11.1): JSON serialization
- Hive CE Generator (1.10.0): Hive type adapters
- Flutter Launcher Icons (0.14.4): App icon generation
- Jira: Sprint planning ve task tracking
- Postman: API testing ve documentation
- Flutter SDK (>=3.10.0 <4.0.0)
- Dart SDK (>=3.10.0)
- Android Studio / VS Code
- iOS: Xcode 14+ (macOS için)
- Android: Android SDK 21+
- Projeyi klonlayın
git clone https://github.com/umutsa177/Moodify.git
cd Moodify- Bağımlılıkları yükleyin
flutter pub get- Code generation çalıştırın
flutter pub run build_runner build --delete-conflicting-outputs- Localization dosyalarını kontrol edin
# assets/translations/ klasöründe en.json ve tr.json olmalı- Supabase yapılandırması
- Proje zaten Supabase Dashboard'da yapılandırılmış durumda
- OAuth provider'ları (Google, Facebook) aktif
- RevenueCat yapılandırması
- RevenueCat dashboard'dan API keys alın
- Platform-specific ayarları yapın
- Uygulamayı çalıştırın
# Android
flutter run
# iOS
flutter run -d ios
# Debug mode
flutter run --debug
# Release mode
flutter run --release-
Kayıt/Giriş:
- Email ile kayıt olun
- Google hesabınızla giriş yapın
- Facebook hesabınızla giriş yapın
-
Ruh Hali Seçimi:
- Günlük ruh halinizi kartlar arasından seçin
- Her ruh hali için özel ikon ve açıklama
-
Video Keşfi:
- Ruh halinize göre Vimeo'dan özelleştirilmiş videolar
- Shimmer effect ile smooth loading
- Cached images ile hızlı görüntüleme
-
Video İzleme:
- Beğendiğiniz videoları izleyin
- Favorilere ekleyin (local and cloud storage)
- Profil sayfasından kaydedilenlere erişin
-
Premium Özellikler:
- RevenueCat ile subscription satın alın
- Premium içeriklere sınırsız erişim
# Tüm testleri çalıştır
flutter test
# Coverage raporu oluştur
flutter test --coverage
# Entegrasyon testleri
flutter test integration_test/
# Specific test file
flutter test test/widget_test.dart
# Verbose mode
flutter test --verboseDeep link yapılandırması Supabase OAuth redirect için ayarlanmıştır:
<!-- Deep link için -->
<intent-filter android:autoVerify="true">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<!-- Supabase redirect URI -->
<data
android:scheme="com.umutsayar.moodify"
android:host="oauth2redirect" />
</intent-filter><key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLSchemes</key>
<array>
<string>com.umutsayar.moodify</string>
</array>
</dict>
</array>Android (android/app/src/main/res/values/strings.xml):
<string name="facebook_app_id">YOUR_FACEBOOK_APP_ID</string>
<string name="facebook_client_token">YOUR_FACEBOOK_CLIENT_TOKEN</string>
<string name="fb_login_protocol_scheme">fbYOUR_FACEBOOK_APP_ID</string>iOS: Info.plist'e Facebook SDK ayarlarını ekleyin
Supabase Dashboard'da Google OAuth provider'ı aktif edilmelidir. Client ID ve Secret'lar Supabase tarafından yönetilir.
# App icon oluştur
flutter pub run flutter_launcher_icons
# Icon path: assets/icons/app_icon.png// assets/translations/en.json
{
"welcome": "Welcome to Moodify",
"select_mood": "How are you feeling today?"
}
// assets/translations/tr.json
{
"welcome": "Moodify'a Hoş Geldiniz",
"select_mood": "Bugün nasıl hissediyorsun?"
}
Splash Screen Google, Facebook ve Email ile giriş |
Giriş Ekranı Hızlı ve kolay giriş süreci |
Kayıt Ekranı Hızlı ve kolay kayıt süreci |
Ruh Hali Seçimi Günlük ruh halinizi seçin |
Video Feed Kişiselleştirilmiş video önerileri |
Profil Sayfası Kaydedilen videolarınız ve fazlası |
Ayarlar Dil, premium ve hesap ayarları |
Premium Uygulama içi satın alma |
Profil Düzenleme Sayfası Kullanıcı adı, profil fotoğrafı ve kişisel bilgilerin düzenlenmesi |
- Provider testleri (Mockito)
- Service layer testleri
- Utility function testleri
- UI component testleri
- Navigation testleri
- Form validation testleri
- Authentication flow
- Video feed flow
- Premium subscription flow
- Deep link handling
# Test coverage raporu
flutter test --coverage
genhtml coverage/lcov.info -o coverage/html
open coverage/html/index.htmlProje Very Good Analysis linting kurallarını kullanmaktadır:
flutter analyzeBu proje MIT Lisansı altında lisanslanmıştır.
Umut Sayar
- Linkedin: Umut Sayar
- Email: [email protected]
- Telefon: 0 (536) 478 0495
- Flutter - Harika bir framework için
- Supabase - Backend ve authentication altyapısı için
- Stitch UI - Muhteşem UI tasarımları için
- Vimeo - Video içerik API'si için
- RevenueCat - In-app purchase yönetimi için
- Jira - Proje yönetimi için
⭐ Projeyi beğendiyseniz yıldız vermeyi unutmayın!
Made with ❤️ by Umut Sayar








