Built with Flutter + Firebase — role-based dashboards, real-time call tracking, location intelligence, and a multi-product loan pipeline in one unified workspace.
TeleCRM Pro is a production-style Customer Relationship Management application engineered for telecalling teams in the loan and financial services industry. It streamlines the full lead lifecycle — from contact assignment and outbound dialing to status tracking, loan application capture, and managerial oversight — through clean role-based dashboards and a real-time Firestore backend.
The app supports two distinct user roles (Admin and Employee), each with a tailored workspace built on top of a shared, modern Material 3 UI powered by Google Fonts (Inter).
- Secure email/password authentication via Firebase Auth
- Auto-routing
AuthWrapperthat loads the correct dashboard based on the user's role - Two-tier RBAC: Admin (organisation-wide view) and Employee (assigned-leads view)
- Real-time stats grid — total contacts, interested leads, pending follow-ups, today's call volume
- Live activity feed of the most recent call logs across the entire team
- Contact management — view all contacts, add new leads, assign to employees
- Quick-action cards for Analytics, Reports, and bulk operations
- Personalised dashboard with assigned leads and personal KPIs
- One-tap dialer integration via
url_launcherfor native phone calls - Call disposition workflow with 8 lead-status options (Interested, Not Interested, Callback, Wrong Number, Rejected, Busy, No Answer, Not Reachable)
- Automatic call log persistence to Firestore with duration, notes, and timestamps
- Automatic GPS location check-in on login for field-tracking and attendance
The app supports a complete loan-application capture flow across:
| Loan Type | Icon | Use Case |
|---|---|---|
| Home Loan | Home | Residential property financing |
| Personal Loan | Wallet | Unsecured personal credit |
| Business Loan | Business | SME / enterprise financing |
| Education Loan | School | Student / higher-education funding |
| Vehicle Loan | Car | Auto financing |
| Gold Loan | Stars | Gold-collateralised loans |
| Agriculture Loan | Grass | Farm and rural-credit products |
Each application captures structured form data linked to the contact and the employee who submitted it.
- Foreground GPS capture with
geolocator+permission_handler - Daily location logs written to Firestore (
locationLogscollection) for audit and territory analysis
- Material 3 theming with custom indigo / purple gradient accent system
- Google Fonts (Inter) typography across the app
- Responsive grid-based dashboards, custom stat cards, status badges, and contact cards
- Soft-grey scaffold (
#F9FAFB) with high-contrast surfaces for readability
| Layer | Technology |
|---|---|
| Framework | Flutter 3.9+ / Dart 3.9+ |
| Backend | Firebase (Cloud Firestore, Auth, Storage) |
| State Management | Provider · GetX |
| UI | Material 3 · Google Fonts (Inter) |
| Native Bridges | url_launcher, call_log, geolocator, permission_handler |
| Persistence | Cloud Firestore (real-time) · shared_preferences |
| Utilities | intl (localization & formatting) |
lib/
├── main.dart # Entry point, Firebase init, AuthWrapper routing
├── constants/
│ └── app_constants.dart # Status options, loan types, helpers
├── models/ # Firestore-backed domain models
│ ├── user_model.dart
│ ├── contact_model.dart
│ ├── call_log_model.dart
│ └── loan_application_model.dart
├── services/ # Business logic & integrations
│ ├── auth_service.dart # Firebase Auth + role resolution
│ ├── firestore_service.dart # CRUD streams for contacts/logs/loans
│ ├── call_log_service.dart # Native dialer launcher
│ └── location_service.dart # GPS capture & permission flow
├── screens/ # UI screens (10 total)
│ ├── login_screen.dart
│ ├── admin_dashboard.dart
│ ├── employee_dashboard.dart
│ ├── all_contacts_screen.dart
│ ├── contact_list_screen.dart
│ ├── contact_detail_screen.dart
│ ├── call_screen.dart
│ ├── status_selection_screen.dart
│ ├── loan_type_selection_screen.dart
│ └── loan_form_screen.dart
└── widgets/ # Reusable UI components
├── stat_card.dart
├── contact_card.dart
└── status_badge.dart
| Collection | Purpose |
|---|---|
users |
User profiles, roles (admin / employee), employee IDs |
contacts |
Leads with assignment, loan type, status, last-call timestamp |
callLogs |
Call disposition records (duration, status, notes) |
loanApplications |
Submitted loan forms with structured formData map |
locationLogs |
Per-employee daily GPS check-ins |
The project ships with native runners for every Flutter target:
- ✅ Android
- ✅ iOS
- ✅ Web
- ✅ Windows
- ✅ macOS
- ✅ Linux
- Flutter SDK 3.9.0 or higher (install guide)
- Dart 3.9+
- A Firebase project (free Spark plan works)
- Android Studio / Xcode for mobile builds
git clone https://github.com/V1shal-dev/telecrm-pro.git
cd telecrm-proflutter pub get- Create a new Firebase project at console.firebase.google.com
- Enable Authentication → Email/Password
- Enable Cloud Firestore (start in production mode)
- Enable Firebase Storage
- Register your apps and add the generated config:
- Android: place
google-services.jsoninandroid/app/ - iOS: place
GoogleService-Info.plistinios/Runner/ - Or run
flutterfire configureto auto-generatefirebase_options.dart
- Android: place
In Firestore, create a document in the users collection:
{
"name": "Admin User",
"email": "admin@example.com",
"phone": "+910000000000",
"role": "admin",
"isActive": true,
"createdAt": "<server timestamp>"
}Then create the matching account in Firebase Auth → Users with the same email.
flutter run # current connected device
flutter run -d chrome # web
flutter run -d windows # desktopflutter build apk --release # Android APK
flutter build appbundle --release # Play Store bundle
flutter build ios --release # iOS
flutter build web --release # Web| Platform | Permission | Reason |
|---|---|---|
| Android & iOS | Phone (tel: URI) |
Launch the native dialer for outbound calls |
| Android & iOS | Location (fine) | Daily employee check-in via geolocator |
| Android | READ_CALL_LOG |
Read native call duration via call_log |
| All | Internet | Firebase connectivity |
These are wired through permission_handler and requested at runtime.
- In-app analytics & conversion reports
- Push notifications for assigned leads
- CSV bulk-import for contacts
- Voice-note recordings attached to call logs
- Multi-tenant support
- Dark mode
Contributions, issues, and feature requests are welcome. Feel free to fork the repo and open a pull request.
- Fork the project
- Create your feature branch (
git checkout -b feat/amazing-feature) - Commit your changes (
git commit -m 'feat: add amazing feature') - Push to the branch (
git push origin feat/amazing-feature) - Open a Pull Request
Distributed under the MIT License. See LICENSE for more information.
Built with ❤️ by a Full-Stack Engineer
- GitHub: @V1shal-dev
- Email: patilvishal9446@gmail.com
- LinkedIn: Vishal Patil
If you find this project useful, please consider giving it a ⭐ — it really helps!