Releases: NihilDigit/focuswell
FocusWell 26.6.6
Security hardening release for reminders, cloud sync, and the browser gate.
What changed:
- Reminder device registration now protects existing device identities. Re-registering a known device must prove the current install secret, and secret hash rotation is rejected from the normal register endpoint.
- GitHub sign-in now validates the OAuth state returned from the browser before exchanging a code. Mismatched or missing state is rejected.
- OAuth tokens and reminder install secrets are stored through Android Keystore-backed encrypted preferences, and app backup is disabled with explicit sensitive prefs exclusions.
- The browser extension UI is now fully English and can add the current page to the whitelist from the popup without manually editing JSON.
Build verification:
- Backend typecheck and tests passed in CI.
- Android unit tests passed in CI.
- Signed APKs are attached for arm64-v8a, armeabi-v7a, and x86_64.
Install the APK that matches your device ABI. Most modern phones should use arm64-v8a.
FocusWell 26.6.5
Updates the reserve well interest copy.
- Replaces the static 5/8/12% rate label with a current-balance estimate such as +14m @5% interest.
- Keeps the locked and empty-reserve states concise.
- Adds tests for the reserve interest preview text.
Built signed APKs for arm64-v8a, armeabi-v7a, and x86_64.
FocusWell 26.6.4
Fixes the locked-reserve recovery flow.
- 2h recovery focus now uses raw uninterrupted focus time before phone-use correction.
- Phone-use correction still affects earned reserve for that session.
- Shortens the frozen daily-grant panel copy so the restart label stays compact.
Built signed APKs for arm64-v8a, armeabi-v7a, and x86_64.
FocusWell 26.6.3
FocusWell 26.6.3 fixes the default daily rhythm introduced around the new 04:00 business day.
What changed:
- Changed the default wake target to 07:30.
- Changed the default sleep-protection window to 23:00-08:00.
- Added minute-level wake target storage and Settings controls in 30-minute steps.
- Added a Room migration so existing default 05:00 wake targets move to 07:30, and existing default 07:00 sleep ends move to 08:00.
- Updated README, product docs, schema, and tests for the new defaults.
Release evidence:
- GitHub Actions release workflow passed.
- Backend check passed in CI.
- Android unit tests passed in CI.
- Signed APKs were built for arm64-v8a, armeabi-v7a, and x86_64.
FocusWell 26.6.2
FocusWell 26.6.2 changes the reserve model around saving, depletion, and restart.
What changed:
- Added tiered savings interest for unlocked reserve: 5% daily on the first 6h, 8% from 6h to 24h, and 12% above 24h.
- Moved the default FocusWell day boundary back to 04:00 so late-night leisure stays in the same business day.
- Replaced the old three-day Daily Grant pause with a Leisure lock. Daily rewards can still be saved, but Leisure stays unavailable until one uninterrupted 2h focus session restarts the app.
- Added a 3h restart bonus when that 2h focus unlocks Leisure.
- Paused phone-use correction while Leisure is locked to keep the account model clear.
- Updated Today, check-in, depleted-state copy, docs, Room schema, and tests for the new rules.
Release evidence:
- GitHub Actions release workflow passed.
- Backend check passed in CI.
- Android unit tests passed in CI.
- Signed APKs were built for arm64-v8a, armeabi-v7a, and x86_64.
FocusWell 26.6.1
Changes
- Daily rule trackers now update while a matching Focus session is running.
- Tracker rings separate saved progress from live preview: solid arc means saved FocusRecord progress, dashed arc means the current active Focus preview.
- A tracker only enters completed/check state after saved records meet the target, so live preview does not settle rewards early.
- Added test coverage for active Focus tracker projection.
- Ignored local
.pithagoras/scratch files.
Release artifacts
Signed APKs are attached for arm64-v8a, armeabi-v7a, and x86_64, with checksums in SHA256SUMS.txt.
FocusWell 26.5.32
Active timer layout polish.
- Focus running now keeps the elapsed timer and "If ended now" earning preview in separate layout zones, so long timers no longer crowd the projected reward.
- Leisure running now shows elapsed time and sleep-protection cost as structured stats below the remaining timer, instead of squeezing the 2x state into the top badge row.
- Includes signed APKs for arm64-v8a, armeabi-v7a, and x86_64, plus SHA256SUMS.txt.
FocusWell 26.5.31
What's new
- Daily tracker progress is cleaner and easier to scan, with a total reward summary in the header.
- Today start actions have a stronger paired surface so Focus and Leisure feel equally available.
- Cloud backup now explains whether this device or the cloud backup is newer before replacing anything.
- Settings Data and Update sections use lighter rows, clearer icons, and consistent icon coloring.
- App copy was tightened to follow the current Material 3 content guidance.
Verification
- Release CI passed backend checks, Android JVM tests, and signed APK build.
- Local Android checks passed:
./gradlew testDebugUnitTest compileDebugAndroidTestKotlin assembleDebug. - Debug APK was installed on a connected device for Settings and Cloud backup review.
APKs
Signed APKs are attached for arm64-v8a, armeabi-v7a, and x86_64. Use SHA256SUMS.txt to verify downloads if installing manually.
FocusWell 26.5.26
What's new
- FocusWell now uses Google Sans Flex for app typography.
- Reserve and timer hero moments use a more expressive rounded 72pt semi-expanded ExtraBold Google Sans Flex instance.
- Dense UI such as rows, settings, labels, and controls keeps the normal-width Google Sans Flex family for readability.
- The bundled font license is included with app assets.
Verification
- Release CI passed backend checks, Android JVM tests, and signed APK build.
- Local Android checks passed:
./gradlew testDebugUnitTest compileDebugAndroidTestKotlin assembleDebug.
APKs
Signed APKs are attached for arm64-v8a, armeabi-v7a, and x86_64. Use SHA256SUMS.txt to verify downloads if installing manually.
FocusWell 26.5.25
What's new
- Balance now has an Add record FAB for creating manual balance records directly from the account view.
- Manual records save as ledger adjustments with a title, positive or negative minutes, and an optional note, so they appear in the Balance list and 7-day net chart.
- Negative manual adjustments are capped at the current reserve, preserving FocusWell's no-overdraft accounting rule.
Verification
- Release CI passed backend checks, Android JVM tests, and signed APK build.
- Local Android checks passed:
./gradlew testDebugUnitTest compileDebugAndroidTestKotlin assembleDebug.
APKs
Signed APKs are attached for arm64-v8a, armeabi-v7a, and x86_64. Use SHA256SUMS.txt to verify downloads if installing manually.