Skip to content

About

AI-powered diabetes assistant. Scan food with your camera to get nutrition insights, track blood sugar, and manage daily habits.

Topics

Resources

Stars

3 stars

Watchers

0 watching

Forks

Repository files navigation

🩺 SADARI AI

Asisten Cerdas Manajemen Diabetes

Aplikasi berbasis AI untuk membantu penderita diabetes memantau gula darah, menganalisis nutrisi dari foto makanan, dan mengelola gaya hidup sehari-hari.

Next.js React Gemini Firebase Tailwind

Fitur · Arsitektur · Instalasi · Struktur · Deployment


✨ Fitur

Fitur Deskripsi Teknologi
Kamera Nutrisi Foto makanan atau label kemasan → deteksi kalori, karbohidrat, gula, dan indeks glikemik Gemini Vision
Scanner Hasil Lab Unggah foto hasil lab, AI mengekstrak dan menjelaskan nilainya dalam bahasa awam Gemini Vision
Asisten AI Chat Tanya jawab seputar diabetes 24/7, mendukung teks dan gambar Gemini + react-markdown
Konsultasi Dokter Alur chat terpisah dengan konteks profil medis pengguna Gemini
Deteksi Stres Rekam suara → transkrip + analisis volume audio diproses AI jadi estimasi tingkat stres Web Speech API + Web Audio API
Pedometer Menghitung langkah dari sensor gerak perangkat, tanpa library eksternal DeviceMotionEvent
Dashboard & Tracking Grafik gula darah, kalori, aktivitas harian, dengan sistem streak Recharts
Pengingat Obat Jadwal minum obat beserta riwayat kepatuhan Firestore
Arsip Medis Penyimpanan dokumen dan riwayat pemeriksaan Firebase Storage
Dwibahasa & Tema Indonesia/Inggris dan mode terang/gelap React Context

🧬 Arsitektur

graph TD
    A[Klien - Browser Mobile/Desktop] -->|Server Components| B[Next.js 15 App Router]
    B --> C[API Routes / Route Handlers]
    C -->|Teks, Vision, JSON mode| D[Google Gemini API]
    B -->|SDK Klien| E[(Firebase Firestore)]
    B --> F[Firebase Auth]
    B --> G[Firebase Storage]
    B -.Deploy.-> H[Google Cloud Run - asia-southeast2]
Loading

Stack

  • Frontend — Next.js 15 (App Router), React 19, Tailwind CSS 4, Motion, Recharts, Lucide
  • AI — Google Gemini via @google/genai. Model gemini-flash-latest untuk sebagian besar route, gemini-3-flash-preview untuk analisis lab
  • Backend — Next.js Route Handlers (serverless), tanpa server terpisah
  • Data — Firebase Firestore (realtime), Auth (email/password + Google Sign-In), Storage
  • Deploy — Docker multi-stage (node:18-alpine) di Google Cloud Run, region Jakarta

Rotasi API key otomatis

lib/gemini.ts mendukung beberapa API key sekaligus, dipisah koma. Saat satu key kena limit kuota (429 / RESOURCE_EXHAUSTED), request otomatis diulang dengan key berikutnya. Error non-kuota langsung dilempar tanpa retry.

GEMINI_API_KEY=key_pertama,key_kedua,key_ketiga

🛠️ Menjalankan Secara Lokal

Prasyarat: Node.js 18+ dan npm.

1. Clone dan install

git clone https://github.com/LindungiLw/sadari_app.git
cd sadari_app
npm install

2. Buat file .env di root proyek

Ambil API key dari Google AI Studio dan konfigurasi Firebase dari Firebase Console → Project settings → Your apps.

# Gemini — bisa diisi beberapa key dipisah koma untuk fallback kuota
GEMINI_API_KEY=AIza...

# Firebase (aman diekspos ke klien, dilindungi Security Rules)
NEXT_PUBLIC_FIREBASE_API_KEY=AIza...
NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN=nama-proyek.firebaseapp.com
NEXT_PUBLIC_FIREBASE_PROJECT_ID=nama-proyek
NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET=nama-proyek.firebasestorage.app
NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID=123456789
NEXT_PUBLIC_FIREBASE_APP_ID=1:123456789:web:abc

Warning

.env sudah masuk .gitignore dan .dockerignore — jangan pernah commit file ini atau menaruh nilai key di manifest deployment. GEMINI_API_KEY adalah rahasia sisi server; jika bocor, segera rotasi di Google AI Studio.

3. Jalankan

npm run dev

Buka http://localhost:3000.

Skrip yang tersedia

Perintah Fungsi
npm run dev Server pengembangan
npm run build Build produksi (.next dibersihkan dulu via rimraf)
npm start Menjalankan hasil build produksi
npm run lint ESLint

📁 Struktur Proyek

app/
├── layout.tsx              # Root layout, font, provider tema/bahasa/profil
├── page.tsx                # Landing page (dynamic rendering)
├── LandingPageClient.tsx
├── main/page.tsx           # Shell aplikasi — router antar-layar
└── api/                    # Route handler sisi server
    ├── analyze-food/       # Analisis nutrisi dari gambar
    ├── analyze-lab/        # Ekstraksi hasil lab
    ├── analyze-stress/     # Analisis stres dari suara
    ├── chat/               # Asisten AI umum (+ brain.ts)
    ├── doctor-chat/        # Konsultasi dokter
    ├── education/          # Konten edukasi
    └── recommendations/    # Rekomendasi harian

components/
├── screens/                # 13 layar utama (Dashboard, FoodScanner, Aktivitas, dll)
├── ui/                     # Modal & komponen (BottomNav, SnapAndTrack, dll)
├── context/                # ThemeContext, UserProfileContext
├── language/               # LanguageContext + translations.ts
└── SADARIIcons.tsx         # Ikon SVG kustom

lib/
├── firebase.ts             # Inisialisasi Firebase (lazy, hanya jika ada config)
├── gemini.ts               # Klien Gemini + rotasi key
└── utils.ts                # Helper cn()

hooks/use-mobile.ts
public/                     # Ikon, logo, gambar edukasi, manifest

📱 Dukungan Perangkat

Antarmuka mobile-first dan responsif, dengan penanganan safe area untuk notch dan Dynamic Island. Diuji pada Android, iOS, dan desktop.

Note

PWA saat ini dinonaktifkan secara sengaja. public/sw.js adalah killer service worker yang menghapus seluruh cache lalu meng-unregister dirinya sendiri, dan app/layout.tsx menjalankan skrip yang membatalkan registrasi semua service worker. Ini dipasang untuk menyelesaikan caching loop yang membuat pengguna terjebak di versi lama. Aplikasi berjalan sebagai web app biasa tanpa mode offline.

Fitur yang memerlukan izin perangkat:

  • Kamera — pemindaian makanan dan hasil lab
  • Mikrofon — deteksi stres
  • Sensor gerak — pedometer (di iOS perlu izin eksplisit DeviceMotionEvent.requestPermission())

🚀 Deployment

Menggunakan Docker multi-stage: instalasi dependensi → build → runner ramping.

gcloud run deploy sadari-app \
  --source . \
  --region asia-southeast2 \
  --allow-unauthenticated

Set environment variable lewat Cloud Run console atau --set-env-vars. Jangan menaruh nilai key di file manifest yang ikut ter-commit — gunakan Secret Manager untuk GEMINI_API_KEY.


Dikembangkan oleh Rahma

Dedikasi untuk membantu penderita diabetes di Indonesia hidup lebih sehat dan lebih lama.

About

AI-powered diabetes assistant. Scan food with your camera to get nutrition insights, track blood sugar, and manage daily habits.

Topics

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages