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 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
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)
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)
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
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
- 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
- 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
- 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
- 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
| 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 |
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
-
Clone Repository
git clone https://github.com/dinalarcode/CAPS-2-2025.git cd CAPS-2-2025 -
Install Dependencies
flutter pub get
-
Setup Firebase
- Buka Firebase Console
- Buat project baru atau gunakan existing project
- Download
google-services.jsonuntuk Android - Letakkan di folder
android/app/
-
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'; }
-
Jalankan Aplikasi
flutter run
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
{
"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"
}
}{
"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"
}{
"date": "2025-11-24",
"logs": [
{
"timestamp": Timestamp,
"foodDescription": "Nasi goreng + telur",
"totalCalories": 450,
"totalProtein": 15,
"totalCarbohydrate": 60,
"totalFat": 12,
"items": [...],
"mealType": "Sarapan"
}
]
}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
- 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
# Pastikan google-services.json sudah ada di android/app/
flutter clean
flutter pub get
flutter run# Clear cache dan rebuild
flutter clean
flutter pub cache repair
flutter pub get- Pastikan semua path image menggunakan struktur folder baru
- Check Firebase Storage rules untuk public access
- Muhammad Iqbal Baiduri Yamani (5026221103)
- Dicky Febri Primadhani (5026221036)
- Yeremia Maydinata Narana (5026221068)
- Baringga Aurico De Erwada (5026221133)
- Airlangga Bayu Taqwa (5026221204)
Project ini dibuat untuk keperluan akademik (SI Capstone Project).
Untuk pertanyaan atau dukungan, hubungi:
- GitHub: @dinalarcode
- Repository: CAPS-2-2025
NutriLink x HealthyGo - Smart Nutrition Assistant π₯β¨