A modern offline-first Notes application built with Kotlin, Jetpack Compose, Clean Architecture, and MVI.
The app supports local persistence, Firebase backup, daily background sync, and shareable notes similar to Google Drive links.
Designed with scalability, maintainability, and production-grade architecture in mind.
- Create, update, and delete notes
- Color-coded notes
- Automatic timestamps
- Clean and minimal UI built with Jetpack Compose
- Notes are stored locally using Room Database
- App works fully offline
- Data syncs automatically when internet becomes available
- Secure note backup using Firebase
- User-based data storage
- Automatic daily 24 hours sync using WorkManager
- Generate a shareable link for notes
- Anyone with the link can view the note
- Uses an HTML index page to display shared notes
- Login using Google Sign-In
- Login using Mobile Number (OTP)
- WorkManager performs periodic synchronization
- Ensures local notes are backed up to Firebase
Built with production-ready patterns:
- Clean Architecture
- MVI (Model View Intent)
- Repository Pattern
- Dependency Injection with Hilt
Handles schema changes safely using Room Migrations
The project follows Clean Architecture with MVI pattern.
presentation/ ui/ viewmodel/ state/
domain/ repository/ usecase/
data/ repository/ datasource/ room/ firebase/
- Jetpack Compose UI
- ViewModels
- MVI state management
- Business logic
- Use cases
- Repository implementations
- Room database
- Firebase integration
| Technology | Purpose |
|---|---|
| Kotlin | Primary language |
| Jetpack Compose | Modern UI |
| MVI | State management |
| Clean Architecture | Scalable architecture |
| Room Database | Local storage |
| Firebase | Cloud backup |
| Firebase Authentication | Google & Phone login |
| WorkManager | Background sync |
| Hilt | Dependency injection |
Key libraries used:
- Jetpack Compose
- Room Database
- Firebase Authentication
- Firebase Firestore / Storage
- Hilt (Dagger)
- WorkManager
- Kotlin Coroutines
- Lifecycle Components
The app follows an offline-first synchronization model:
- Notes are created locally in Room
- WorkManager runs periodic sync
- Unsynced notes are uploaded to Firebase
- Firebase acts as backup storage
Notes can be shared using a public link similar to Google Drive.
- User taps Share
- A share URL is generated
- The note becomes accessible via a public HTML page
- Anyone with the link can view the note
- Real-time note sync
- Collaborative notes
- Note folders / tags
- Rich text editor
- Web version of the notes app
You can host shared notes (HTML pages) using Firebase Hosting.
- Install Firebase CLI (if not already installed):
npm install -g firebase-tools
firebase login
firebase init hosting
Choose your Firebase project
Set public directory (e.g., public/)
Configure as a single-page app? Yes
Overwrite existing index.html? No
Deploy to Firebase Hosting:
firebase deploy --only hosting
# 👨💻 Author
**Arindam Ghosh**
Android Developer | Kotlin | Jetpack Compose | Clean Architecture | KMM