Tasky

A personal Android tracker for 75-day habit challenges — or any length you choose.

Android 7.0+. Educational / individual use only. Your data stays on the device — privacy policy.

Tasky challenge screen showing Day 12 of 75 with three of five tasks completed

Product

Screens

Set up a challenge, tick daily tasks, review history, share status, and back up your progress — all offline on the phone.

Set up
Your tasks
Today
All done
Settings
Black theme
Share

Everyday use

Use cases

Built for people running a personal challenge, not for teams or coaches.

Engineering

How it’s built

The Android source stays private. This public repo only holds the showcase, license, disclaimer, and signed APK releases.

Private

navforu/tasky

Kotlin / Jetpack Compose app, unit tests, upload keystore (as CI secrets), version.properties, and the release.yml workflow that publishes here.

Public

navforu/tasky-app

This site (GitHub Pages), screenshots, MIT license, disclaimer, and every Tasky-x.y.z.n.apk on Releases — overwritten from public/ on each successful publish.

  1. Push to private main

    CI bumps the version, runs JVM unit tests, and builds a release APK signed with the upload keystore from GitHub secrets (not a throwaway debug key).

  2. Publish only if tests and build succeed

    Pull requests stop after test/build. On main, a fine-grained PUBLIC_REPO_TOKEN (Contents: read/write on this repo only) checks out tasky-app, syncs the private repo’s public/ folder with rsync, and pushes.

  3. GitHub Release + APK

    CI creates tag vMAJOR.MINOR.PATCH.BUILD here, attaches Tasky-….apk and a .sha256 checksum, then commits the new version.properties back to the private repo.

Versions handle themselves

Releases use MAJOR.MINOR.PATCH.BUILD. Every publish increments the last digit unless you flip a bump flag before pushing.

# version.properties in the private repo
VERSION=0.0.0.7
BUMP_MAJOR=false  → 1.0.0.0
BUMP_MINOR=false  → 0.1.0.0
BUMP_PATCH=false  → 0.0.1.0
# all false → regular build: 0.0.0.7 → 0.0.0.8
# past .99 carries left: 0.0.0.99 → 0.0.1.0
# versionCode = M·1e6 + N·1e4 + P·100 + B (always increases)