Skip to content

alpha.21: Brick inverse mode, one motion vocabulary across the app - #22

Merged
codebooo merged 1 commit into
mainfrom
claude/lifeos-production-plan-v3-dmynx3
Jul 28, 2026
Merged

alpha.21: Brick inverse mode, one motion vocabulary across the app#22
codebooo merged 1 commit into
mainfrom
claude/lifeos-production-plan-v3-dmynx3

Conversation

@codebooo

Copy link
Copy Markdown
Owner

Two additions (0.1.0-alpha.21).

1. Brick inverse mode

A profile can now invert the whole idea: instead of the tag starting a block, you set the window the apps stay shut (say 08:00 to 22:00) and the tag becomes the only way in. Each tap buys a set stretch of access - put the tag somewhere inconvenient and every unlock costs a walk.

Settings:

  • Blocked-from / blocked-until window (both required).
  • Unlock length: 15, 30, 60 or 120 minutes as chips, or any value typed in.
  • Unlocks per window: once only, twice, three times, or unlimited. The count resets when the window next starts, so "once only" means one unlock per day.

Behaviour, all of it deliberate:

  • Outside the window nothing is blocked and a tap says exactly that, naming the window.
  • A tap while access is already open reports the remaining time rather than spending an unlock.
  • A spent allowance names the time the window ends instead of failing silently.
  • Inverse profiles are schedule-driven on both edges and refuse manual or tag-based ending - the tag buys time inside the window, it does not end the mode.
  • If the phone was off at the window's start minute, the first tap opens the window and then spends an unlock, so a missed alarm cannot become a loophole.
  • LifeOS itself is never blocked, so unlocking always stays reachable.
  • The mode card shows a live countdown of the open unlock and how much allowance is left.

Room schema 15 with defaults on the new columns and an auto-migration. Ten new unit tests cover blocking during the window, unlock grants, expiry, single/multi/unlimited allowances and the exit rules; the Brick suite is at 22 tests, all passing.

2. Motion

New core/designsystem/component/Motion.kt holds one vocabulary instead of ad-hoc animations per screen: LifeMotion timings (130 ms out, 220 ms in, 240 ms swap), FadeThrough for content that gets swapped, FadeVisible for things that come and go, and Modifier.smoothSize() for layouts that resize.

Screen transitions are now a single fade plus a barely-there scale, with no slides. Applied through the app:

  • Clock: tab content, and the timer's countdown / typed entry / wheels.
  • Pastebin: tab content.
  • Brick: list-to-editor switch, and the setup banners.
  • Screen Time: week totals cross-fade into the tapped day's numbers.
  • Downloader: status line fades in and out.
  • Clear Sky: a refresh shows an inline progress line instead of blanking the forecast.
  • Home: the grid-to-list switch animates its size.

Verification

:app:assembleDebug, :app:assembleRelease (minified) and the full test task pass.


Generated by Claude Code

Brick inverse mode
- A profile can now flip the whole idea around: instead of the tag starting a
  block, you set the window the apps stay shut (e.g. 08:00 to 22:00) and the
  tag is the only way in. Each tap buys a set stretch of access.
- Settings: window start and end, unlock length (15/30/60/120 minutes or a
  typed value), and unlocks per window - once only, twice, three times or
  unlimited. The count resets when the window next starts, so "once only"
  means one unlock per day.
- Outside the window nothing is blocked and a tap says so. A tap while access
  is already open reports the remaining time instead of spending an unlock,
  and a spent allowance names the time the window ends.
- Inverse profiles are schedule-driven on both edges and refuse manual or
  tag-based ending; the tag buys time inside the window rather than ending it.
- If the phone was off at the window's start minute, the first tap opens the
  window and then spends an unlock, so a missed alarm cannot become a loophole.
- The mode card shows the live unlock countdown and remaining allowance.
- Room schema 15 (defaults on the new columns, auto-migration). Ten new unit
  tests cover blocking, unlock grants, expiry, allowances and exit rules.

Motion
- New core:designsystem/Motion.kt holds the shared vocabulary: LifeMotion
  timings, FadeThrough for swapped content, FadeVisible for things that come
  and go, and Modifier.smoothSize() for layouts that resize.
- Screen transitions are now a single fade plus a barely-there scale, with no
  slides.
- Applied throughout: clock tabs and the timer's countdown/typed-entry/wheels,
  Pastebin tabs, Brick's list-to-editor switch, screen-time week-to-day stat
  cards, the Downloader status line, Clear Sky refreshes and the Home
  grid-to-list switch.

Version 0.1.0-alpha.21.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011kSsXNrSk6NDjM2FjFZ7Y9
@codebooo
codebooo force-pushed the claude/lifeos-production-plan-v3-dmynx3 branch from d678314 to c9c4609 Compare July 28, 2026 19:40
@codebooo
codebooo merged commit 2605749 into main Jul 28, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants