Skip to content

An application that recommends videos to you based on your daily mood. Screen designs were made in Stitch UI.

License

Notifications You must be signed in to change notification settings

umutsa177/Moodify

Repository files navigation

🎭 Moodify

Moodify Logo

Ruh halinize göre size özel video önerileri sunan mobil uygulama

Flutter Dart Supabase License


📱 Proje Hakkında

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.

✨ Temel Özellikler

  • 🎭 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

🔗 Proje Bağlantıları


🏗️ Mimari

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

🎯 Kullanılan Teknolojiler ve Paketler

🌐 Network & API

  • 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

🔐 Authentication & Backend

  • 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

💾 Local Storage & Cache

  • 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

💳 In-App Purchase

  • RevenueCat (Purchases Flutter 9.9.10): Subscription management
    • Cross-platform satın alma
    • Subscription tracking
    • Revenue analytics

🎨 UI & Design

  • 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ı

🌍 Localization

  • Easy Localization (3.0.7): Çoklu dil desteği (TR/EN)

🔄 State Management

  • Provider (6.1.5+1): Reaktif state management

🛠️ Core Utilities

  • Equatable (2.0.7): Value equality
  • Kartal (4.2.0): Flutter extension methods
  • JSON Annotation (4.9.0): Serialization annotations

🧪 Testing & Quality

  • Flutter Test: Widget ve entegrasyon testleri
  • Mockito (5.6.1): Mock objects
  • Very Good Analysis (10.0.0): Dart code linting

🔨 Development Tools

  • 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

📋 Project Management

  • Jira: Sprint planning ve task tracking
  • Postman: API testing ve documentation

🚀 Kurulum

Gereksinimler

  • 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+

Adım Adım Kurulum

  1. Projeyi klonlayın
git clone https://github.com/umutsa177/Moodify.git
cd Moodify
  1. Bağımlılıkları yükleyin
flutter pub get
  1. Code generation çalıştırın
flutter pub run build_runner build --delete-conflicting-outputs
  1. Localization dosyalarını kontrol edin
# assets/translations/ klasöründe en.json ve tr.json olmalı
  1. Supabase yapılandırması
  • Proje zaten Supabase Dashboard'da yapılandırılmış durumda
  • OAuth provider'ları (Google, Facebook) aktif
  1. RevenueCat yapılandırması
  • RevenueCat dashboard'dan API keys alın
  • Platform-specific ayarları yapın
  1. Uygulamayı çalıştırın
# Android
flutter run

# iOS
flutter run -d ios

# Debug mode
flutter run --debug

# Release mode
flutter run --release

📖 Kullanım

Temel Kullanım Akışı

  1. Kayıt/Giriş:

    • Email ile kayıt olun
    • Google hesabınızla giriş yapın
    • Facebook hesabınızla giriş yapın
  2. Ruh Hali Seçimi:

    • Günlük ruh halinizi kartlar arasından seçin
    • Her ruh hali için özel ikon ve açıklama
  3. 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
  4. Video İzleme:

    • Beğendiğiniz videoları izleyin
    • Favorilere ekleyin (local and cloud storage)
    • Profil sayfasından kaydedilenlere erişin
  5. Premium Özellikler:

    • RevenueCat ile subscription satın alın
    • Premium içeriklere sınırsız erişim

Test Çalıştırma

# 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 --verbose

🔧 Yapılandırma

Deep Link Yapılandırması

Android (android/app/src/main/AndroidManifest.xml)

Deep 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>

iOS (ios/Runner/Info.plist)

<key>CFBundleURLTypes</key>
<array>
    <dict>
        <key>CFBundleURLSchemes</key>
        <array>
            <string>com.umutsayar.moodify</string>
        </array>
    </dict>
</array>

Social Login Yapılandırması

Facebook Login

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

Google Login

Supabase Dashboard'da Google OAuth provider'ı aktif edilmelidir. Client ID ve Secret'lar Supabase tarafından yönetilir.

App Icon Yapılandırması

# App icon oluştur
flutter pub run flutter_launcher_icons

# Icon path: assets/icons/app_icon.png

Localization Ekleme

// 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?"
}

🎨 Ekran Görüntüleri

🌟 Splash & Giriş Ekranları

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
🎭 Ana Özellikler

Ruh Hali Seçimi
Günlük ruh halinizi seçin

Video Feed
Kişiselleştirilmiş video önerileri
👤 Profil & Ayarlar

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

🧪 Test Stratejisi

Unit Tests

  • Provider testleri (Mockito)
  • Service layer testleri
  • Utility function testleri

Widget Tests

  • UI component testleri
  • Navigation testleri
  • Form validation testleri

Integration Tests

  • 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.html

Code Style

Proje Very Good Analysis linting kurallarını kullanmaktadır:

flutter analyze

📝 Lisans

Bu proje MIT Lisansı altında lisanslanmıştır.


📞 İletişim

Umut Sayar


🙏 Teşekkürler

  • 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