YuiNote - personal offline organizer for Android (Kotlin, Jetpack Compose, Room)
  • Kotlin 97.2%
  • PowerShell 2.1%
  • Python 0.7%
Find a file
2026-11-06 15:37:02 +02:00
app Release 2.1.0: export list to PDF 2026-11-06 15:37:02 +02:00
gradle Add auto-update: launch check, patch download, publish script 2026-11-06 15:08:24 +02:00
tools Release 2.1.0: export list to PDF 2026-11-06 15:37:02 +02:00
.gitignore Add auto-update: launch check, patch download, publish script 2026-11-06 15:08:24 +02:00
build.gradle.kts Initial commit: YuiNote Android organizer 2026-11-04 18:28:55 +02:00
gradle.properties Initial commit: YuiNote Android organizer 2026-11-04 18:28:55 +02:00
gradlew Initial commit: YuiNote Android organizer 2026-11-04 18:28:55 +02:00
gradlew.bat Initial commit: YuiNote Android organizer 2026-11-04 18:28:55 +02:00
plan.md Initial commit: YuiNote Android organizer 2026-11-04 18:28:55 +02:00
README.md Add auto-update: launch check, patch download, publish script 2026-11-06 15:08:24 +02:00
settings.gradle.kts Initial commit: YuiNote Android organizer 2026-11-04 18:28:55 +02:00

YuiNote

A personal organizer app for Android 8+. Fully offline, with a Ukrainian-language UI.

The Android package is com.yui.note. The design (palette, fonts, shapes, settings) is shared with the sibling app YuiPeachy.

Features

  • Home screen with the current weekday, date and a live clock; only the hours that have events are shown
  • Events with a date, time, description and a reminder (at the event time, or 5 min – 1 day before)
  • Repeating events: daily, weekly, monthly or yearly, with a custom interval (e.g. every 2 weeks); each occurrence can be marked done separately
  • Custom categories with a short name and a color; the color shows next to the event and on the calendar dates
  • Month calendar with colored date marks, a year overview (tap the month name) and swipe left / right to change months
  • Tap a category on the calendar to see all of its events for the year
  • Lists and checklists with unlimited items, notes with autosave, pinned notes
  • Long press on a list or a note: edit, move up / down, delete (notes can also be pinned)
  • System notifications through AlarmManager, restored after reboot, time change and timezone change; any system notification sound
  • Backup / restore as a JSON file (merge or replace)
  • Light / dark theme; swipe between the four tabs
  • Auto-update: on every launch the app checks git.whiledo.xyz and offers a newer version; when possible it downloads only a binary patch against the installed APK and rebuilds the new APK on the device (SHA-256 verified)

Stack

Kotlin, Jetpack Compose (Material 3), Room (KSP, auto-migrations), DataStore, Navigation Compose, graphics-shapes, Gradle 9.8 / AGP 9.5 with a version catalog. minSdk 26.

Build

$env:JAVA_HOME = 'C:\Program Files\Android\Android Studio\jbr'
.\gradlew.bat assembleDebug
.\gradlew.bat assembleRelease

A release build is signed only if YUIPEACHY_KEYSTORE and YUIPEACHY_KEYSTORE_PASSWORD environment variables are set (alias YuiPeachy). Without them the release APK is unsigned. The keystore and password are not part of this repository.

Output: app/build/outputs/apk/release/app-release.apk.

Updates

Update files live in the public updates branch (update.json, the latest APK and patches from the last versions), read through the Forgejo API because release downloads are behind a Cloudflare challenge.

# raise versionCode / versionName in app/build.gradle.kts, edit tools/release-notes.txt, then:
.\tools\publish-update.ps1 -Push

The script builds the signed release, keeps every version in releases/ (patch bases), creates patches with tools/make_patch.py (needs Python, bsdiff4 is installed into tools/.venv) and pushes the branch.

Documentation

See plan.md for the original technical specification (in Ukrainian).