hsoyal-dot/Utavine
基于 Wear OS 实时心率的 AI 驱动音乐应用,利用 Gemini AI 进行情感检测,并通过 Spotify API 提供个性化音乐推荐。
- Stars
- 1
- Forks
- 0
- 最近推送(UTC)
- 2026年2月13日
- 项目状态
- 未归档
语言DartC++CMakeRubySwiftJavaScriptCHTMLKotlinObjective-C
技术话题
使用的依赖
依赖清单 17 项
- flutter
{"sdk":"flutter"} - animated_splash_screen
^1.3.0 - cupertino_icons
^1.0.8 - flutter_svg
^2.1.0 - hydrated_bloc
^10.0.0 - path_provider
^2.1.5 - flutter_bloc
^9.1.0 - firebase_core
^3.13.0 - firebase_auth
^5.5.2 - get_it
^8.0.3 - dartz
^0.10.1 - dotenv
^4.2.0 - flutter_dotenv
^5.2.1 - http
^1.4.0 - video_player
^2.10.0 - flutter_test开发依赖
{"sdk":"flutter"} - flutter_lints开发依赖
^5.0.0
原始 README
以下为英文项目原文快照,最新内容请访问 GitHub。
展开 / 收起项目 README
Utavine: Mood-based Music App
Utavine is an AI-powered smart music app that recommends music based on your real-time heart rate (from Wear OS smartwatches). By analyzing your BPM through a companion app, VineHeart, and generating mood keywords using Gemini, it provides personalized music experiences.
📱 Features
- 🔒 Firebase Authentication for user login
- ❤️ Real-time Heart Rate tracking via VineHeart (WearOS companion app)
- 🧠 Gemini API to generate mood keywords based on heart rate
- 🎧 Spotify API integration to search & recommend songs
- ☁️ Supabase for storing user-specific heart rate data
- 🌐 Flutter + Dart + Firebase Auth + Supabase
💭 How It Works
- Heart Rate Tracking: VineHeart (a Wear OS app) tracks heart rate using
SensorManager. - Supabase Sync: Every 60s, it pushes the data (
bpm,timestamp,user_id) to Supabase. - User Login: Users log into Utavine using Firebase Authentication.
- Fetch BPM: Utavine fetches the latest BPM using the logged-in Firebase UID.
- AI Mood Matching: Gemini API converts BPM into keywords (e.g.,
"calm", "focus"). - Spotify Suggestions: Spotify API returns song suggestions for those keywords.
🧱 Tech Stack
| Layer | Tech |
|---|---|
| UI | Flutter |
| Mobile Companion | VineHeart- Kotlin-based Wear OS App |
| Backend | Dart, Node.js |
| Auth | Firebase |
| Database | Supabase (PostgreSQL) |
| AI | Google Gemini API |
| Music | Spotify API |
📂 Folder Structure (Flutter)
utavine/
├── lib/
│ ├── data/
│ │ ├── models/
│ │ └── sources/
│ │ ├── api/
│ │ └── services/
│ ├── presentation/
│ │ └── vine_sense/
│ │ ├── bloc/
│ │ └── screens/
│ └── main.dart
└── .env
⚙️ Setup
🧩 Firebase Auth (Shared by both apps)
- Set up Firebase project.
- Enable Email/Password sign-in method.
- Add
google-services.jsonto both apps. - Ensure
firebase_core&firebase_authare initialized in both apps.
📲 VineHeart (Wear OS App)
- Uses
SensorManagerto read heart rate. - Pushes data to Supabase via REST using OkHttp.
- Requires
.envsetup insidelocal.properties:SUPABASE_URL=https://your-instance.supabase.co/rest/v1 SUPABASE_API_KEY=your-key
🌐 Utavine Mobile App
- Uses Firebase Auth for login/signup.
- Reads user UID to fetch
bpmdata from Supabase. - Converts BPM to keywords via Gemini.
- Fetches Spotify songs.
.env (for Utavine)
SUPABASE_URL=https://your-instance.supabase.co/rest/v1
SUPABASE_API_KEY=your-key
SPOTIFY_BASE_URL=http://localhost:3000
GEMINI_API_KEY=your-gemini-key
🚀 Roadmap
- [x] Real-time HR sync via VineHeart
- [x] Firebase Auth login for both apps
- [x] Gemini keyword mapping
- [x] Spotify integration
- [ ] UI/UX polish for VineSense screen
- [ ] Add playlists and like/save feature
- [ ] Push notifications for mood-based music
👤 Author
Hemraj Soyal (MCA Student at Vellore Institute of Technology)
- 🔗 LinkedIn: linkedin.com/in/hsoyal-dot
- 🔗 GitHub: github.com/hsoyal-dot