Vibe is a cross-platform music streaming client built with Flutter. It utilizes a FastAPI backend for data management, Supabase for authentication, and local caching strategies to provide a responsive user experience.
- Frontend Framework: Flutter & Dart
- State Management: Flutter Riverpod (with compile-time code generation)
- Audio Playback: JustAudio & JustAudio Background
- Local Caching: Hive
- Backend Framework: FastAPI & SQLModel
- Authentication & Database: Supabase (Authentication) & PostgreSQL
- Media Storage: Cloudinary
- Google Authentication: Secure user sign-in and session persistence managed via Supabase.
- Audio Engine: Gapless playback, background service integration, and progress monitoring using JustAudio.
- Waveform Visualization: Interactive scrubbers rendering audio waveforms during playback.
- Dynamic Search: Debounced search queries targeting song names, artists, and metadata tags.
- Offline Caching: Local persistence of recently played tracks using a local key-value store (Hive).
- Favorites System: Toggling and syncing of track favorite states with the remote database.
- Media Upload: Direct audio and thumbnail uploads to Cloudinary storage.
The project follows clean architecture principles, separating layers into:
- Core: App-wide services (API, Supabase, Caching), design systems, themes, and global constants.
- Features: Modular structures (Auth, Home, Music, Search, Library) containing distinct Models, Views (Pages & Widgets), and ViewModels/Notifiers.
| Home Screen | Music Player | Search Page |
|---|---|---|
| [Placeholder: Home Screenshot] | [Placeholder: Player Screenshot] | [Placeholder: Search Screenshot] |
[Link to video demonstration / Walkthrough]
- Flutter SDK (v3.12.0 or newer recommended)
- Dart SDK (v3.11.3 or newer)
- A running instance of the Vibe FastAPI backend
-
Clone the repository:
git clone https://github.com/GalaxyPhoenix716/Vibe.git cd vibe -
Initialize dependency packages:
flutter pub get
-
Configure Environment Variables: Create a
.envfile in the project root folder and specify the configuration parameters:BACKEND_URL=your_backend_api_url SUPABASE_URL=your_supabase_project_url SUPABASE_PUBLISHABLE_KEY=your_supabase_anon_key
-
Generate Code Bindings: Compile the Riverpod annotation files:
dart run build_runner build --delete-conflicting-outputs
-
Run the application:
flutter run