ICare is a modular Android application built with Jetpack Compose and Kotlin Multiplatform principles, aimed at delivering an efficient, scalable, and user-friendly healthcare experience for patients, doctors, clinics, pharmacies, imaging/lab centers, and administrators.
- User Authentication
- Email/Password login
- Google Sign-In
- Secure registration with medical info
- Appointment Management
- Book, view, confirm, or cancel appointments
- View consultation history
- Consultation Handling
- Add/view consultations by doctors
- Manage patient prescriptions
- Medical Entities Management
- Clinics, Pharmacies, Imaging & Lab Centers
- Add/update by admin
- Doctor Scheduling
- Doctor availability and schedule management
- Modular Design
- Clean separation by feature for better scalability and maintainability
icare/
├── app/ # Main application
├── core/ # Shared utilities, UI components, and domain models
│ ├── domain/ # Data models and business logic
│ ├──data/ # Local DB (Room) and remote repositories
│ └── ui/ # Shared Compose UI components
├── features/ # Feature-specific modules
│ ├── admin/ # Admin dashboard and management
│ ├── appointments/ # Booking, viewing, and managing appointments
│ ├── auth/ # Authentication (Google, Email/Password)
│ ├── consultation/ # consultation-related views and actions
│ ├── home/ # Home Screen and navigation
│ ├── notifications/ # push notifications and alerts
│ ├── onboarding/ # Onboarding screens
│ └── settings/ # User settings and preferences
└── build.gradle.kts # Modular Gradle configuration
- MVI (Model-View-Intent)
- Clean Architecture
- Presentation:
ViewModels + Composables - Domain:
UseCases +Models - Data:
Repositories+ Room DB + Remote APIs
- Presentation:
Each ViewModel corresponds to domain-specific use cases, such as:
AddNewClinic,UpdateClinic,ListClinicsAddNewDoctor,UpdateDoctor,GetDoctorScheduleSignInWithGoogle,Register,DeleteAccountAddNewPharmacist,ListPharmacies,UpdatePharmacy- etc.
Activity diagrams and PlantUML files for use cases are available in /docs/diagrams.
Simplified UML class diagrams are created to focus on the interaction between ViewModels and Domain Models. These include:
AuthViewModelAppointmentViewModelClinicViewModelCenterViewModelPharmacyViewModel- and more...
Each ViewModel exposes functions that interact with UseCases and hold UI state.
- ✅ UML Class Diagrams (Models + ViewModels)
- ✅ Activity Diagrams for Use Cases
- ✅ Component Diagram of the System
- PlantUML files are maintained under
/docs/diagrams/.
- Kotlin
- Jetpack Compose
- Koin for Dependency Injection
- Room for local persistence
- Coroutines & Flow
- Firebase Auth for secure login
- KSP/Annotation processing for compile-time wiring
- DrawIo for diagram modeling
- Security: Encrypted auth flow, input validation, and account deletion.
- Performance: Lazy UI loading, state caching, and coroutine-optimized async operations.
- Scalability: Modularization and clean architecture allow scaling across teams/features.
- Maintainability: Strict adherence to Clean Architecture and MVVM patterns.
- Availability: Offline support using local Room DB with remote fallback.
ICare Documentation.pdf: Located in/docs/
Contributions are welcome! Please follow the code conventions and keep modules isolated by responsibility.
ICare is distributed under the terms of the Apache License (Version 2.0). See the license for more information.
This project uses:
- Firebase
- Koin
- Jetpack Compose
- DrawIo for diagrams