Skip to content

chulopp/WorthIt

Repository files navigation

πŸ›’ WorthIt

Asisten Validasi Keputusan Belanja Real-Time

Flutter FastAPI Supabase Python Status


πŸ“– Deskripsi Singkat

WorthIt adalah aplikasi mobile yang membantu konsumen memvalidasi keputusan belanja secara real-time di dalam toko. Pengguna dapat memindai struk atau label harga, lalu sistem akan menganalisis apakah harga tersebut Worth It (wajar), Waspada (sedikit mahal), atau Mahal β€” berdasarkan data historis harga dari Alfagift menggunakan algoritma Weighted Moving Average (WMA) dan Support/Resistance.

Fitur Utama

Fitur Deskripsi
πŸ“Έ OCR Scan Scan struk/label harga via Gemini Vision AI
πŸ“Š Price Analysis Keputusan BUY / SUBSTITUTE / DONT_BUY berbasis WMA
πŸ›οΈ Shopping List Daftar belanja bulanan dengan estimasi budget
πŸ“ˆ Expense Tracker Riwayat pengeluaran per kategori
⭐ Favorites Simpan produk favorit untuk pantau harga
πŸ”” Notifications Alert harga produk dalam pantauan

πŸ—οΈ Tech Stack

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                    FRONTEND (Mobile)                    β”‚
β”‚   Flutter 3.x  Β·  Riverpod  Β·  Dio  Β·  Supabase SDK   β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                    BACKEND (Python)                     β”‚
β”‚   FastAPI  Β·  Uvicorn  Β·  PyJWT  Β·  Supabase Python   β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                      C-ENGINE                           β”‚
β”‚   worthit_engine.c  Β·  ctypes bridge (c_bridge.py)    β”‚
β”‚   WMA Β· Support Β· Resistance Β· SR Position            β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                    INFRASTRUCTURE                       β”‚
β”‚   Supabase (Auth + PostgreSQL + Storage)               β”‚
β”‚   WSL2 (Ubuntu)  Β·  Microsoft Dev Tunnels              β”‚
β”‚   Gemini 2.5 Flash (OCR/Vision)                       β”‚
β”‚   Playwright + APScheduler (Alfagift Scraper)         β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

πŸ“‹ Persyaratan Sistem

Untuk Semua Anggota Tim

Komponen Versi Minimum Catatan
Flutter SDK 3.11.5+ Install via flutter.dev
Dart SDK 3.11.5+ Sudah bundled dengan Flutter
Android SDK API 21+ via Android Studio
Git Terbaru

Untuk Menjalankan Backend (Developer)

Komponen Versi Minimum Catatan
WSL2 (Ubuntu 22.04+) - Wajib untuk menjalankan backend
Python 3.11+ Di dalam WSL
pip / venv Terbaru
Microsoft Dev Tunnels CLI Terbaru Install dev tunnels
GCC (build tools) - Untuk compile C-Engine: sudo apt install build-essential

πŸš€ Cara Menjalankan Secara Lokal

A. Setup Frontend (Flutter)

1. Clone repository

git clone https://github.com/<your-org>/worthit.git
cd worthit/frontend

2. Buat file konfigurasi lokal

File local_config.dart tidak ada di Git (sengaja dihapus demi keamanan). Buat manual dari template:

cp lib/config/local_config.example.dart lib/config/local_config.dart

Lalu isi dengan kredensial yang diperoleh dari lead developer:

// lib/config/local_config.dart
class LocalConfig {
  static const supabaseUrl = 'https://YOUR_PROJECT.supabase.co';
  static const supabaseAnonKey = 'sb_publishable_XXXX...';
  static const supabaseAuthRedirectUrl = 'com.example.worthit_app://login-callback';

  // URL dari Dev Tunnel yang aktif (tanya ke developer yang menjalankan backend)
  static const apiBaseUrl = 'https://XXXX-XXXX.devtunnels.ms';
}

3. Install dependencies dan jalankan

flutter pub get
flutter run

B. Setup Backend (Python / FastAPI di WSL)

Important

Seluruh langkah ini dijalankan di dalam terminal WSL2, bukan PowerShell Windows.

1. Masuk ke WSL dan navigasi ke folder backend

# Di PowerShell Windows:
wsl

# Kemudian di WSL:
cd "/mnt/d/Fallah's File/Code/Personal Project/WorthIt/backend"

2. Buat virtual environment dan install dependencies

python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt

3. Buat file .env

Minta file .env dari lead developer. JANGAN commit file ini ke Git.

# Isi file backend/.env:
SUPABASE_URL=https://YOUR_PROJECT.supabase.co
SUPABASE_SERVICE_ROLE_KEY=eyJhbG...
SUPABASE_JWT_SECRET=YOUR_JWT_SECRET
GEMINI_API_KEY=AIza...

4. Build C-Engine (jika belum ada worthit_engine.so)

cd engine
gcc -shared -fPIC -o worthit_engine.so worthit_engine.c -lm
cd ..

5. Jalankan Backend

uvicorn main:app --reload --host 0.0.0.0 --port 8000

Backend akan berjalan di http://localhost:8000. Swagger UI tersedia di http://localhost:8000/docs.


C. Expose Backend via Microsoft Dev Tunnels

Dev Tunnels diperlukan agar perangkat Android fisik bisa mengakses backend yang berjalan di WSL.

1. Login ke Dev Tunnels (sekali saja)

devtunnel user login

2. Buat dan aktifkan tunnel (jalankan di terminal WSL terpisah)

devtunnel host -p 8000 --allow-anonymous

Salin URL yang diberikan (format: https://XXXX-8000.devtunnels.ms) dan masukkan sebagai apiBaseUrl di local_config.dart frontend.


πŸ—ƒοΈ Struktur Proyek

WorthIt/
β”œβ”€β”€ frontend/                   # Flutter App
β”‚   └── lib/
β”‚       β”œβ”€β”€ config/             # Konfigurasi (Supabase URL, API URL)
β”‚       β”œβ”€β”€ controllers/        # Riverpod Notifiers
β”‚       β”œβ”€β”€ models/             # Data models (API response)
β”‚       β”œβ”€β”€ repositories/       # Data access layer
β”‚       β”œβ”€β”€ screens/            # Halaman-halaman UI
β”‚       β”œβ”€β”€ services/           # Auth, Notification, Privacy
β”‚       β”œβ”€β”€ utils/              # PDF, Snackbar, Image helpers
β”‚       └── widgets/            # Reusable UI components
β”‚
β”œβ”€β”€ backend/                    # Python FastAPI Backend
β”‚   β”œβ”€β”€ core/                   # Security (JWT), Categories
β”‚   β”œβ”€β”€ engine/                 # C-Engine bridge, WMA scoring
β”‚   β”œβ”€β”€ models/                 # Pydantic request/response models
β”‚   β”œβ”€β”€ routers/                # API endpoints (analyze, scan, shopping, dll.)
β”‚   β”œβ”€β”€ scripts/                # Alfagift scraper & data import tools
β”‚   β”œβ”€β”€ utils/                  # Supabase client singleton
β”‚   β”œβ”€β”€ main.py                 # FastAPI app entrypoint
β”‚   └── requirements.txt
β”‚
└── supabase_*.sql              # Schema & migration SQL files

πŸ—„οΈ Database (Supabase)

Proyek menggunakan Supabase (PostgreSQL). Tabel utama:

Tabel Deskripsi
users Profil user + subscription tier + monthly budget
products Katalog produk
price_history Riwayat harga per produk per bulan
scan_history Log setiap scan yang dilakukan user
purchase_history Barang yang benar-benar dibeli
monthly_shopping_lists Daftar belanja bulanan
shopping_list_items Item dalam daftar belanja
favorite_products Produk favorit user
notifications Notifikasi in-app

Untuk setup database baru, jalankan file SQL migrasi di folder root secara berurutan di Supabase SQL Editor.


🀝 Panduan untuk Anggota Tim Baru

  1. Fork & Clone repository ini
  2. Minta akses dari lead developer ke:
    • Supabase project (untuk mendapatkan Anon Key & URL)
    • File backend/.env (berisi service role key & secret)
  3. Setup frontend ikuti Langkah A di atas
  4. Untuk development yang memerlukan backend lokal, ikuti Langkah B & C
  5. Jika hanya perlu akses frontend, cukup gunakan URL Dev Tunnel yang sudah aktif dari developer lain

Tip

Tidak perlu menjalankan backend sendiri untuk sekadar mengembangkan UI. Koordinasi dengan developer backend untuk mendapatkan URL Dev Tunnel yang sedang aktif, lalu masukkan ke local_config.dart.


πŸ“Š Status Proyek

Komponen Status
Flutter Frontend 🟑 In Development
FastAPI Backend 🟑 In Development
C-Engine (Scoring) βœ… Selesai
Alfagift Scraper 🟑 In Development
OCR (Gemini Vision) βœ… Selesai
Supabase Auth (Google Sign-In) βœ… Selesai
Shopping List βœ… Selesai
Expense Tracker βœ… Selesai
Push Notifications πŸ”΄ Belum
Production Deployment πŸ”΄ Belum

⚠️ Catatan Keamanan untuk Tim

  • JANGAN commit backend/.env atau local_config.dart ke Git
  • JANGAN share URL Dev Tunnel secara publik β€” tunnel tidak terproteksi password di mode development
  • JWT verification saat ini dalam mode development β€” wajib diaktifkan sebelum deployment production

πŸ“¬ Kontak Tim

Role Nama
Fullstack Lead Fallah
Backend / Engine Tim Backend
Frontend / UI Tim Frontend

Built with ❀️ by WorthIt Team · 2026

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors