Skip to content

dinalarcode/CAPS-2-2025

Repository files navigation

πŸ₯— NutriLink x HealthyGo | Asisten Nutrisi Cerdas

NutriLink x HealthyGo adalah asisten nutrisi cerdas berbasis Flutter yang membantu pengguna mengelola diet dan tujuan kebugaran mereka dengan rekomendasi personal, panduan porsi, dan jadwal makan yang adaptif.


πŸ“± Halaman Utama Aplikasi

1. 🏠 Home (Beranda)

Halaman utama yang menampilkan:

  • Ringkasan Harian: Total kalori dikonsumsi, frekuensi makan, dan pengeluaran
  • Status Gizi: Monitoring BMI dan perbandingan dengan target berat badan
  • Jadwal Makan Hari Ini: Upcoming meals dengan status sudah/belum dikonsumsi
  • NutriAI Chatbot: Asisten AI untuk estimasi kalori makanan dari luar

2. 🍽️ Meal (Rekomendasi Makanan)

Sistem rekomendasi makanan yang cerdas:

  • Smart Recommendation: Rekomendasi menu berdasarkan TDEE dan target pengguna
  • Filter by Tags: Filter makanan berdasarkan kategori (Ayam, Ikan, Vegetarian, dll)
  • Personalized Scoring: Menu disusun berdasarkan kesesuaian dengan kebutuhan gizi
  • Shopping Cart: Keranjang belanja untuk meal prep (maksimal 10 item)
  • Date Selection: Pilih tanggal meal prep (besok hingga 30 hari ke depan)

3. πŸ“… Schedule (Jadwal Makan)

Manajemen jadwal makan harian:

  • Timeline View: Lihat jadwal makan per waktu (Sarapan, Siang, Malam)
  • Order Status: Status pesanan yang sudah dibuat
  • Date Navigation: Navigasi antar tanggal untuk melihat rencana makan
  • Meal Details: Detail nutrisi per menu (kalori, protein, karbo, lemak)

4. πŸ“Š Report (Laporan Nutrisi)

Analisis dan tracking nutrisi:

  • Daily Log: Catatan makanan harian dari NutriAI
  • Nutrition Breakdown: Rincian kalori, protein, karbohidrat, dan lemak
  • Progress Tracking: Grafik dan statistik konsumsi harian
  • Export Report: Ekspor laporan untuk review jangka panjang

5. πŸ‘€ Profile (Profil Pengguna)

Pengaturan dan informasi pengguna:

  • Personal Info: Nama, email, foto profil
  • Body Metrics: Tinggi, berat, BMI, target berat badan
  • Preferences: Alergi, aktivitas fisik, frekuensi makan
  • Settings: Edit profil, logout, hapus akun

✨ Fitur Unggulan

🎯 Smart Recommendation System

  • Algoritma rekomendasi berbasis TDEE (Total Daily Energy Expenditure)
  • Personalisasi berdasarkan:
    • Target berat badan (Menurunkan/Mempertahankan/Menaikkan)
    • Alergi makanan
    • Tingkat aktivitas fisik
    • Jenis kelamin dan usia

πŸ€– NutriAI Chatbot

  • AI-powered: Menggunakan Google Gemini API
  • Calorie Estimation: Estimasi kalori dari deskripsi makanan
  • Food Log Saving: Simpan hasil estimasi ke log harian
  • Conversational: Interaksi natural seperti chat biasa
  • Edit & Resend: Edit pesan sebelumnya dan kirim ulang

πŸ“¦ Smart Cart System

  • Persistent Storage: Cart tersimpan walaupun logout/restart app
  • Max 10 Items: Validasi otomatis untuk batas cart
  • Auto-save: Setiap perubahan cart langsung tersimpan
  • Real-time Badge: Badge cart update otomatis tanpa refresh

πŸ”„ Recommendation Cache

  • Daily Variation: Menu berbeda setiap hari dengan deterministic shuffle
  • 7-day Cache: Cache rekomendasi selama 7 hari
  • Instant Load: Loading cepat dari cache jika tersedia

πŸ› οΈ Teknologi yang Digunakan

Kategori Teknologi
Framework Flutter 3.x
Bahasa Dart
Backend Firebase (Authentication, Firestore, Storage)
AI/ML Google Gemini API
State Management Provider + StatefulWidget
Caching SharedPreferences
Image Caching CachedNetworkImage
Design Figma

πŸš€ Instalasi dan Setup

Prasyarat

Pastikan sudah terinstall:

  • Flutter SDK (versi 3.0 atau lebih baru)
  • Dart SDK (bundled dengan Flutter)
  • Android Studio atau VS Code
  • Git
  • Emulator Android atau Perangkat Fisik

Langkah-Langkah Instalasi

  1. Clone Repository

    git clone https://github.com/dinalarcode/CAPS-2-2025.git
    cd CAPS-2-2025
  2. Install Dependencies

    flutter pub get
  3. Setup Firebase

    • Buka Firebase Console
    • Buat project baru atau gunakan existing project
    • Download google-services.json untuk Android
    • Letakkan di folder android/app/
  4. Setup Gemini API

    • Dapatkan API key dari Google AI Studio
    • Buat file lib/config/gemini_config.dart:
      class GeminiConfig {
        static const String apiKey = 'YOUR_GEMINI_API_KEY';
      }
  5. Jalankan Aplikasi

    flutter run

πŸ“‚ Struktur Folder

lib/
β”œβ”€β”€ main.dart                    # Entry point aplikasi
β”œβ”€β”€ config/                      # Konfigurasi
β”‚   β”œβ”€β”€ firebaseOptions.dart    # Firebase configuration
β”‚   β”œβ”€β”€ apiKeys.dart            # API keys (gitignored)
β”‚   └── apiKeys.dart.example    # Template API keys
β”‚
β”œβ”€β”€ features/                    # Fitur utama aplikasi
β”‚   β”œβ”€β”€ meal/                   # 🍽️ Fitur rekomendasi makanan
β”‚   β”‚   β”œβ”€β”€ mealPage.dart       # Meal recommendation screen
β”‚   β”‚   β”œβ”€β”€ cartPage.dart       # Shopping cart
β”‚   β”‚   β”œβ”€β”€ foodDetailPopup.dart # Detail popup makanan
β”‚   β”‚   β”œβ”€β”€ filterPopup.dart    # Filter tags popup
β”‚   β”‚   └── mealRecommendationEngine.dart # Recommendation algorithm
β”‚   β”‚
β”‚   β”œβ”€β”€ profile/                # πŸ‘€ Fitur profil
β”‚   β”‚   └── profilePage.dart    # Profile management
β”‚   β”‚
β”‚   β”œβ”€β”€ report/                 # πŸ“Š Fitur laporan
β”‚   β”‚   └── reportPage.dart     # Nutrition reports & analytics
β”‚   β”‚
β”‚   └── schedule/               # πŸ“… Fitur jadwal
β”‚       └── schedulePage.dart   # Meal schedule management
β”‚
β”œβ”€β”€ pages/                       # Halaman aplikasi
β”‚   β”œβ”€β”€ auth/                   # Authentication pages
β”‚   β”‚   β”œβ”€β”€ welcomePage.dart
β”‚   β”‚   β”œβ”€β”€ loginPage.dart
β”‚   β”‚   β”œβ”€β”€ registerPage.dart
β”‚   β”‚   β”œβ”€β”€ termsAndConditionsPage.dart
β”‚   β”‚   └── termsAndConditionsDetailPage.dart
β”‚   β”‚
β”‚   β”œβ”€β”€ main/                   # Main app pages
β”‚   β”‚   └── homePage.dart       # 🏠 Home dashboard
β”‚   β”‚
β”‚   └── onboarding/             # Onboarding flow (14 pages)
β”‚       β”œβ”€β”€ onboardingHelpers.dart
β”‚       β”œβ”€β”€ nameInputPage.dart
β”‚       β”œβ”€β”€ sexPage.dart
β”‚       β”œβ”€β”€ birthDatePage.dart
β”‚       β”œβ”€β”€ heightInputPage.dart
β”‚       β”œβ”€β”€ weightInputPage.dart
β”‚       β”œβ”€β”€ targetSelectionPage.dart
β”‚       β”œβ”€β”€ targetWeightInputPage.dart
β”‚       β”œβ”€β”€ healthGoalPage.dart
β”‚       β”œβ”€β”€ dailyActivityPage.dart
β”‚       β”œβ”€β”€ sleepSchedulePage.dart
β”‚       β”œβ”€β”€ eatFrequencyPage.dart
β”‚       β”œβ”€β”€ allergyPage.dart
β”‚       β”œβ”€β”€ challengePage.dart
β”‚       └── summaryPage.dart
β”‚
β”œβ”€β”€ models/                      # Data models
β”‚   β”œβ”€β”€ mealModels.dart
β”‚   └── userProfileDraft.dart
β”‚
β”œβ”€β”€ services/                    # Business logic & API services
β”‚   β”œβ”€β”€ geminiService.dart      # Gemini AI integration
β”‚   β”œβ”€β”€ orderService.dart       # Order management
β”‚   β”œβ”€β”€ scheduleService.dart    # Schedule management
β”‚   β”œβ”€β”€ recommendationCacheService.dart  # Cache management
β”‚   β”œβ”€β”€ imageService.dart       # Image loading service
β”‚   └── firebaseService.dart    # Firebase operations
β”‚
β”œβ”€β”€ utils/                       # Helper utilities
β”‚   β”œβ”€β”€ storageHelper.dart      # Firebase Storage helper
β”‚   └── mealScheduleStorage.dart # Local storage helper
β”‚
└── widgets/                     # Reusable widgets
    β”œβ”€β”€ customNavbar.dart       # Bottom navigation bar
    └── nutriAI.dart            # πŸ€– NutriAI Chatbot

πŸ—„οΈ Database Structure (Firestore)

Collections

users/{userId}

{
  "email": "user@example.com",
  "name": "John Doe",
  "profile": {
    "sex": "Laki-laki",
    "birthDate": Timestamp,
    "heightCm": 170,
    "weightKg": 70,
    "targetWeightKg": 65,
    "target": "Menurunkan berat badan",
    "allergies": ["Seafood", "Udang"],
    "activityLevel": "lightly_active",
    "eatFrequency": 3,
    "profilePicture": "assets/images/avatars/Male Avatar.png"
  }
}

menus/{menuId}

{
  "id": 1001,
  "name": "Ayam Bakar Klaten...",
  "description": "Nikmati sajian...",
  "image": "1001.png",
  "calories": 469,
  "protein": 29,
  "carbohydrate": 43,
  "fat": 13,
  "price": 47000,
  "tags": ["Ayam", "Tahu", "Nasi"],
  "type": "Sarapan"
}

food_logs/{userId}/logs/{date}

{
  "date": "2025-11-24",
  "logs": [
    {
      "timestamp": Timestamp,
      "foodDescription": "Nasi goreng + telur",
      "totalCalories": 450,
      "totalProtein": 15,
      "totalCarbohydrate": 60,
      "totalFat": 12,
      "items": [...],
      "mealType": "Sarapan"
    }
  ]
}

🎨 Assets Organization

assets/
β”œβ”€β”€ fonts/                      # Custom fonts
└── images/
    β”œβ”€β”€ allergies/             # Ikon alergi makanan
    β”‚   β”œβ”€β”€ Beef.png
    β”‚   β”œβ”€β”€ Chicken.png
    β”‚   β”œβ”€β”€ Fish.png
    β”‚   β”œβ”€β”€ Seafood.png
    β”‚   └── Shrimp.png
    β”‚
    β”œβ”€β”€ avatars/               # Avatar default
    β”‚   β”œβ”€β”€ Female Avatar.png
    β”‚   └── Male Avatar.png
    β”‚
    β”œβ”€β”€ logos/                 # Logo aplikasi
    β”‚   β”œβ”€β”€ Logo Google.png
    β”‚   β”œβ”€β”€ Logo HealthyGo.png
    β”‚   └── Logo NutriLink.png
    β”‚
    └── illustrations/         # Ilustrasi UI
        β”œβ”€β”€ Data Privacy Illustration.png
        └── Login Illustration.png

πŸ” Keamanan dan Privacy

  • Firebase Authentication: Login aman dengan email/password dan Google Sign-In
  • Firestore Security Rules: Proteksi data user dengan rules yang ketat
  • Data Privacy: Data user terenkripsi dan tersimpan aman di Firebase
  • GDPR Compliant: User bisa hapus akun dan semua data terkait

πŸ› Troubleshooting

Build Error: Google Services

# Pastikan google-services.json sudah ada di android/app/
flutter clean
flutter pub get
flutter run

Cache Issues

# Clear cache dan rebuild
flutter clean
flutter pub cache repair
flutter pub get

Image Loading Issues

  • Pastikan semua path image menggunakan struktur folder baru
  • Check Firebase Storage rules untuk public access

πŸ‘₯ Tim Pengembang

  • Muhammad Iqbal Baiduri Yamani (5026221103)
  • Dicky Febri Primadhani (5026221036)
  • Yeremia Maydinata Narana (5026221068)
  • Baringga Aurico De Erwada (5026221133)
  • Airlangga Bayu Taqwa (5026221204)

πŸ“„ Lisensi

Project ini dibuat untuk keperluan akademik (SI Capstone Project).


πŸ“ž Kontak & Support

Untuk pertanyaan atau dukungan, hubungi:


NutriLink x HealthyGo - Smart Nutrition Assistant πŸ₯—βœ¨

About

NutriLink X HealthyGo Origin

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 8