EcoScan
EcoScan - 面向ITC UTHM KitaHack團隊的AI廢棄物分類遊戲化專案
- 星標
- 1
- 分支
- 0
- 最近推送(UTC)
- 2026年9月30日
- 專案狀態
- 未封存
原始 README
以下為英文專案原文快照,最新內容請造訪 GitHub。
EcoScan
EcoScan is ToastTech's guest-first waste-sorting app. Point a camera at a household item and Firebase AI Logic asks Gemini to classify it, suggest a bin, and provide a short recycling tip.
The project began at KitaHack 2026 and is now being prepared as a public Flutter/Firebase project.
Access model
| Feature | Guest | Registered user |
|---|---|---|
| Home | Yes | Yes |
| AI waste scan | Yes | Yes |
| Local session points | Yes | Yes |
| Impact breakdown | Yes | Yes |
| Rankings | No | Yes |
Rankings currently contain preview entries and the signed-in user's local session points. A shared, persistent leaderboard will require a Firestore data model and security rules; the UI calls this out rather than presenting demo values as live data.
Architecture
Flutter web/mobile
├─ Firebase Authentication (email/password, Rankings only)
├─ Firebase App Check (abuse protection)
├─ Firebase AI Logic → Gemini Developer API (waste scans)
└─ Riverpod in-memory state (guest points and Impact)
Firebase Hosting serves build/web
The app does not contain a Gemini API key. Firebase AI Logic brokers AI calls, and App Check helps reject unauthorized clients. Firebase web configuration in lib/firebase_options.dart identifies the Firebase project; it is not a server secret.
Local development
Requirements
- Flutter 3.41.1 or a compatible stable release
- A Firebase project with a registered web app
- A browser/device with a camera
- Firebase CLI only if you plan to deploy
Firebase console setup
- In Authentication → Sign-in method, enable Email/Password.
- In Firebase AI Logic, start with the Gemini Developer API and enable the required API.
- In App Check, register the web app with a reCAPTCHA Enterprise provider.
- Add
localhostfor local testing and your Firebase Hosting domains for production. - Keep budget alerts and API usage monitoring enabled even when using no-cost quotas.
Run
flutter pub get
cp config.example.json config.local.json
flutter run -d chrome --dart-define-from-file=config.local.json
Replace the placeholder in config.local.json with the public reCAPTCHA Enterprise site key. config.local.json is ignored by Git. Do not add a Gemini API key, service-account JSON, passwords, or App Check debug tokens to this repository.
The camera requires HTTPS in production; localhost is accepted during development.
Validate and build
dart format --output=none --set-exit-if-changed lib test
flutter analyze
flutter test
flutter build web --release --dart-define-from-file=config.local.json
For detailed Firebase and GitHub deployment setup, see docs/DEPLOYMENT.md.
Project status
- Guest scanning and local Impact state are implemented.
- Rankings are account-gated with Firebase Authentication.
- Shared leaderboard persistence, password reset, account deletion, scan history, and recycling-centre maps are not implemented yet.
- Bin colours are a prototype convention. Disposal guidance varies by local authority and should be verified before a public regional launch.
Contributing and security
See CONTRIBUTING.md, CODE_OF_CONDUCT.md, and SECURITY.md.
License
EcoScan is licensed under the GNU General Public License v3.0. Derivative distributions must comply with the GPL's source-sharing requirements.
分類
使用的依賴
依賴清單 10 項
- flutter
{"sdk":"flutter"} - flutter_riverpod
^3.3.2 - firebase_ai
^4.0.0 - firebase_app_check
^0.4.8 - firebase_auth
^6.2.0 - firebase_core
^4.3.0 - cupertino_icons
^1.0.8 - camera
^0.11.3+1 - flutter_test開發依賴
{"sdk":"flutter"} - flutter_lints開發依賴
^6.0.0
如何選擇適合專案的儲存庫?
先依使用情境篩選,再比較專案活躍情況,最後到原始儲存庫確認使用要求。
- 透過儲存庫名稱、作者或描述搜尋,再依技術分類縮小範圍。
- 綜合星標、分支與最近推送比較專案;星標反映社群關注,不保證品質。
- 使用前在 GitHub 確認 README、授權條款與 Issues。
來源與維護
“A repository is the most basic element of GitHub.”
GitHub Docs — About repositories ↗