VibeConnect is a real-time chat application built using Flutter, Firebase, and Cloudinary. It provides a seamless and interactive messaging experience with secure authentication, media sharing, and a responsive UI.
- 🔐 Secure Authentication – Firebase authentication for user login and signup.
- ⚡ Real-Time Messaging – Instantly send and receive messages with Firestore database.
- 📂 Cloud-Based Storage – Cloudinary integration for high-quality media uploads and optimization.
- 🖼️ Profile Customization – Users can upload profile pictures and update display names.
- 📱 Responsive UI – Optimized for both Android and iOS devices with a smooth user experience.
- 🔔 Push Notifications – Get notified instantly when you receive a message.
- 🌙 Dark Mode Support – Toggle between light and dark themes for better usability.
- Frontend: Flutter (Dart)
- Backend: Firebase Authentication, Firestore Database
- Cloud Storage: Cloudinary
- State Management: Provider
- Push Notifications: Firebase Cloud Messaging (FCM)
- Flutter SDK installed
- Firebase project set up
- Cloudinary account with an upload preset
-
Clone the repository
git clone https://github.com/yourusername/vibeconnect.git cd vibeconnect -
Install dependencies
flutter pub get
-
Set up Firebase
- Create a Firebase project and add
google-services.json(Android) &GoogleService-Info.plist(iOS). - Enable Firestore and Authentication in the Firebase Console.
- Create a Firebase project and add
-
Configure Cloudinary
- Sign up on Cloudinary and get your Cloud Name.
- Replace the placeholder in
CloudinaryService.dartwith your Cloud Name and Upload Preset.
-
Run the app
flutter run
import 'dart:io';
import 'package:http/http.dart' as http;
import 'dart:convert';
class CloudinaryService {
static const String cloudName = "your-cloud-name";
static const String uploadPreset = "your-upload-preset";
static Future<String?> uploadImage(File image) async {
try {
String url = "https://api.cloudinary.com/v1_1/$cloudName/image/upload";
var request = http.MultipartRequest('POST', Uri.parse(url))
..fields['upload_preset'] = uploadPreset
..files.add(await http.MultipartFile.fromPath('file', image.path));
var response = await request.send();
if (response.statusCode == 200) {
var responseData = await response.stream.bytesToString();
var jsonResponse = jsonDecode(responseData);
return jsonResponse['secure_url'];
} else {
return null;
}
} catch (e) {
print("Error: $e");
return null;
}
}
}This project is licensed under the MIT License. Feel free to use and modify it.
Contributions, issues, and feature requests are welcome! Feel free to check the issues page.
- 📧 Email: smabd7409@gmail.com
- 🔗 LinkedIn: https://www.linkedin.com/in/abdullah-ali-44a892330