A lightweight, offline-first Android note-taking app built with Kotlin, Jetpack Compose, and Material 3. Organize notes into hierarchical sections, rate them 1-5 stars, and back up your data as JSON.
- Hierarchical sections — organize notes in nested sections (folders within folders)
- Card-based note display — shows a text preview with 1-5 star ratings
- One-tap copy — copy note content to clipboard with visual feedback
- Sort by rating or date — toggle between chronological and rating-based sorting
- Soft delete with undo — delete notes with a chance to undo before permanent removal
- Backup & restore — export/import all data as unencrypted JSON via Android's file picker
- Material 3 dark theme — consistent design with dynamic color support
| Layer | Technology |
|---|---|
| Language | Kotlin |
| UI | Jetpack Compose + Material 3 |
| Architecture | MVVM |
| Database | Room (SQLite) |
| Navigation | Navigation Compose |
| Async | Kotlin Coroutines + Flow |
- Android Studio Hedgehog (2023.1.1) or newer
- Android SDK API 24+ (Android 7.0)
- JDK 17
- Clone or download the project
- Open in Android Studio: File → Open → select project directory
- Wait for Gradle sync to complete
- Connect a device or start an emulator
- Click Run (Shift+F10)
./gradlew assembleReleaseOutput: app/build/outputs/apk/release/app-release-unsigned.apk
./gradlew testapp/src/main/java/com/example/quicknotes/
├── backup/ # JSON export/import logic
├── data/ # Room entities, DAOs, database
├── repository/ # Data repositories
├── ui/
│ ├── components/ # Reusable UI components
│ ├── screens/ # Screen composables
│ └── theme/ # Material 3 theme, colors, typography
├── viewmodel/ # ViewModels
└── MainActivity.kt # Single-activity entry point
Version: 6 (Room)
| Entity | Key Fields |
|---|---|
Section |
id, title, parentSectionId (FK, self-referencing), createdAt, updatedAt |
Note |
id, content, rating (1-5), sectionId (FK), isDeleted, createdAt, updatedAt |
Migration 5→6 adds the isDeleted column for soft delete. Versions 1-4 use destructive fallback.
Backups are JSON files with schema version 1. See BACKUP_RESTORE.md for full format documentation, failure modes, and verification steps.
Privacy warning: Backup files are unencrypted plaintext JSON. Treat them as sensitive data.
- BACKUP_RESTORE.md — backup format, import/export behavior, failure modes
- datamodel.md — entity relationships and data flow diagrams
- RELEASE_READINESS_REPORT.md — test results and release assessment
- BETA_RELEASE_CHECKLIST.md — beta release status and known limitations
MIT License. See LICENSE.