Tana is retired as the data source (kate-personal-task-system.md is the
migration spec, included here). Tasks now come from Asana via PAT — the
search endpoint with a My Tasks fallback for the free tier — with tiering
mirroring the morning brief (Critical = P1 notes + due <= today, Overdue,
Due-today, a separate Undated bucket, future hidden), all dated in
Europe/Amsterdam. Checkboxes complete the task in Asana with a verified
read-back; quick capture creates Asana tasks with an enumerated project
picker, due-date chips, and a P1 chip. Focus/success criteria are read
from Exist.io and editable via a new dialog on the widget header, which
acquires the attributes before writing when needed.
The Tana client, daily-note parser, and VPN-era config are gone, and the
app/package is renamed net.deprekated.tana.widget -> net.deprekated.dailyfocus
("Daily Focus"), so it installs as a separate app.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0185inixqEN2k9Nzc1y6uaJK
|
||
|---|---|---|
| .claude | ||
| app | ||
| gradle/wrapper | ||
| .gitignore | ||
| build.gradle.kts | ||
| gradle.properties | ||
| gradlew | ||
| kate-personal-task-system.md | ||
| README.md | ||
| settings.gradle.kts | ||
Daily Focus Widget
Android home-screen widget implementing Direction A · "Stack" from the
Claude Design hand-off (dense/utilitarian, compact density, accent #C08BF5):
today's focus, success criteria, the task list with critical/overdue tasks
pinned under colored accent rails, and a single-line quick-capture bar.
Built with Jetpack Glance (androidx.glance:glance-appwidget).
Data sources (post Tana→Asana migration)
Per kate-personal-task-system.md:
- Tasks — Asana (personal workspace, PAT). Fetched via the task-search endpoint, falling back to the My Tasks list on the free tier. Tiering mirrors the morning brief: Critical (P1 in notes + due ≤ today), Overdue, Due-today, Undated (own bucket below), future-dated hidden. All "today" math is Europe/Amsterdam. Checking a box completes the task in Asana (verified read-back); recurring tasks respawn natively.
- Focus / Success criteria — Exist.io (
focusandsuccess_criteriastring attributes, date-keyed). Tapping the header opens an editor that writes today's values back (acquiring the attributes for this client first if needed). - Quick capture creates an Asana task assigned to Kate, in the picked
project (enumerated live; defaults to Personal), with optional due date
and a P1 chip that stamps
Priority: P1into the notes.
Setup: open the app and paste an Asana personal access token and an Exist.io token, then Save & sync.
Layout
app/src/main/java/.../glance/DailyFocusWidget.kt— the widget UI, receiver, and checkbox action. Design tokens (colors, spacing) at the top.app/src/main/java/.../data/—AsanaApi/ExistApiclients,Tiering(pure bucketing logic, unit-tested),FocusRepository(cache + refresh + actions),MidnightRefresh(Amsterdam-midnight rollover alarm).app/src/main/java/.../CaptureActivity.kt— quick-capture dialog (widget bar, QS tile);FocusEditActivity.kt— focus/success editor;MainActivity.kt— capture + connection settings.app/src/main/res/drawable/— glass surface, pinned-row backgrounds with baked-in accent rails, project pill, capture bar, checkbox states, icons.
Known fidelity gaps vs. the prototype
- No backdrop blur — RemoteViews can't blur the wallpaper, so the frosted
glass is approximated with a 52% translucent
#12101Asurface. - System fonts — the prototype's Hanken Grotesk / JetBrains Mono are approximated with the system sans-serif and monospace families (custom fonts aren't supported in Glance text).
- Letter-spacing on the uppercase section labels isn't supported by Glance.
Build
./gradlew :app:assembleDebug
adb install app/build/outputs/apk/debug/app-debug.apk
Then long-press the home screen → Widgets → Daily Focus.
The 2026-07 Asana rework renamed the applicationId from
net.deprekated.tana.widgettonet.deprekated.dailyfocus, so it installs as a new app — the old Tana widget/app can be removed and the widget re-added once.