A modern Android note-taking application built with Kotlin and Jetpack Compose, following a clean, multi-module architecture organized by feature.
NoteMark follows a multi-module, feature-based architecture with a clear separation of concerns across three layers in each feature module:
NoteMark/
├── app/ # Application entry point
├── auth/
│ ├── data/ # Auth data sources & repositories
│ ├── domain/ # Auth business logic & use cases
│ └── presentation/ # Auth UI (login, register screens)
├── note/
│ ├── data/ # Note data sources & repositories
│ ├── domain/ # Note business logic & use cases
│ └── presentation/ # Note UI (list, detail, editor)
├── core/
│ ├── data/ # Shared data utilities
│ ├── domain/ # Shared models & interfaces
│ └── presentation/ # Shared UI components
├── releases/
│ ├── data/
│ ├── domain/
│ └── presentation/
└── build-logic/ # Convention plugins & shared build config
Each feature module is split into data, domain, and presentation layers, ensuring testability and scalability.
| Category | Technology |
|---|---|
| Language | Kotlin |
| UI | Jetpack Compose |
| DI | Dagger Hilt 2.56.2 |
| Build System | Gradle with Kotlin DSL & Convention Plugins |
| Code Generation | KSP (Kotlin Symbol Processing) |
| Serialization | Kotlin Serialization |
| Architecture | Multi-module, Clean Architecture (MVI/MVVM) |
| Module | Description |
|---|---|
:app |
Main application module, ties all features together |
:auth |
User authentication — login & registration flows |
:note |
Core note-taking feature — create, read, update, delete notes |
:core |
Shared utilities, base classes, and common UI components |
:releases |
GitHub releases browsing & changelog display |
:build-logic |
Shared Gradle convention plugins for consistent build config |
- Android Studio Hedgehog or newer
- JDK 17+
- Android SDK with minimum API level configured in the project
git clone https://github.com/extractive-mana-pulse/NoteMark.git
cd NoteMarkOpen the project in Android Studio and run the :app module on an emulator or physical device, or build via the command line:
./gradlew :app:assembleDebugThis project uses Gradle Convention Plugins (build-logic module) to share and centralize build configuration across all modules — keeping individual build.gradle.kts files clean and minimal.
Type-safe project accessors are enabled via:
enableFeaturePreview("TYPESAFE_PROJECT_ACCESSORS")Planned features and improvements tracked in the issue tracker:
- Theme support — Light / Dark / System theme switching
- GitHub Releases integration — In-app changelog and release notes
- Feature-based modularization — Full multi-module migration (in progress)
- Status bar fix — Proper edge-to-edge status bar handling
- Code rework — General refactoring and quality improvements
Contributions are welcome! Feel free to open an issue or submit a pull request.
- Fork the repository
- Create your feature branch:
git checkout -b feature/your-feature - Commit your changes:
git commit -m 'Add your feature' - Push to the branch:
git push origin feature/your-feature - Open a Pull Request
This project is open source. See the repository for license details.
extractive-mana-pulse — GitHub Profile