A beautiful and modern Flutter application for managing contacts from your portfolio website. This app connects to Firebase Firestore to display, search, and manage people who have contacted you through your portfolio.
- Beautiful Modern UI: Clean, Material 3 design with dark/light theme support
- Real-time Data: Live updates from Firebase Firestore
- Contact Management: View, search, and manage all your portfolio contacts
- Statistics Dashboard: See contact metrics (today, week, month, total)
- Email Integration: Quick reply to contacts directly from the app
- Search Functionality: Find contacts by name or email
- Responsive Design: Works beautifully on all screen sizes
- Loading States: Elegant shimmer loading effects
- Error Handling: Graceful error states with retry functionality
The app follows a clean, modular architecture:
lib/
├── models/ # Data models
│ └── contact.dart # Contact model with Firestore integration
├── providers/ # State management
│ └── contact_provider.dart # Contact state provider
├── screens/ # UI screens
│ ├── contacts_screen.dart # Main contacts list screen
│ └── contact_detail_screen.dart # Detailed contact view
├── services/ # Business logic
│ └── firebase_service.dart # Firebase operations
├── widgets/ # Reusable UI components
│ ├── contact_card.dart # Contact card widget
│ └── stats_card.dart # Statistics card widget
├── firebase_options.dart # Firebase configuration
└── main.dart # App entry point
- Flutter SDK (latest stable version)
- Firebase project with Firestore enabled
- A code editor (VS Code, Android Studio, etc.)
git clone <your-repo-url>
cd monitorverse
flutter pub get- Go to your Firebase Console
- Select your project (or create a new one)
- Go to Project Settings > Your apps
- Add a new app for your platform (Android/iOS/Web)
- Download the configuration files or copy the configuration values
- Update
lib/firebase_options.dartwith your actual Firebase configuration:
// Replace the placeholder values with your actual Firebase config
static const FirebaseOptions web = FirebaseOptions(
apiKey: 'your-actual-api-key',
appId: 'your-actual-app-id',
messagingSenderId: 'your-messaging-sender-id',
projectId: 'your-project-id',
authDomain: 'your-project-id.firebaseapp.com',
storageBucket: 'your-project-id.appspot.com',
);Your Firestore database should have a collection named contacts with documents containing:
{
"name": "John Doe",
"email": "john@example.com",
"subject": "Project Inquiry",
"message": "Hi, I'm interested in your services...",
"company": "ABC Corp", // Optional
"createdAt": "2024-01-15T10:30:00Z" // Timestamp
}flutter run- Statistics Card: Shows total, today, week, and month contact counts
- Contact Cards: Beautiful cards displaying contact information
- Search: Find contacts by name or email
- Pull to Refresh: Refresh data with a simple pull gesture
- Complete Contact Info: Full name, email, company, subject, and message
- Quick Actions: Email the contact directly
- Beautiful Design: Card-based layout with proper spacing
ContactCard(
contact: contact,
onTap: () => navigateToDetail(contact),
onDelete: () => deleteContact(contact),
)StatsCard(stats: {
'total': 50,
'today': 2,
'week': 8,
'month': 15,
})- firebase_core & cloud_firestore: Firebase integration
- provider: State management
- google_fonts: Beautiful typography
- url_launcher: Email integration
- shimmer: Loading animations
- intl: Date formatting
- Contact: Represents a contact with methods for Firestore conversion
- Includes computed properties like
initialsandformattedDate
- FirebaseService: Handles all Firebase operations
- Methods for CRUD operations, search, and statistics
- Error handling and data transformation
- ContactProvider: Manages app state using Provider pattern
- Handles loading states, error states, and data operations
- Provides reactive updates to UI
- ContactsScreen: Main screen with list and search
- ContactDetailScreen: Detailed view of individual contacts
- Responsive design and proper navigation
- ContactCard: Reusable contact card component
- StatsCard: Statistics display component
- Clean, maintainable widget structure
- Make sure you have Flutter installed
- Update the Firebase configuration in
firebase_options.dart - Run
flutter pub getto install dependencies - Run
flutter runto start the app
Feel free to contribute to this project by:
- Reporting bugs
- Suggesting new features
- Submitting pull requests
- Improving documentation
This project is open source and available under the MIT License.
Note: Remember to replace the placeholder values in firebase_options.dart with your actual Firebase project configuration before running the app.