summaryrefslogtreecommitdiff
path: root/project_doot_android_roadmap.md
diff options
context:
space:
mode:
Diffstat (limited to 'project_doot_android_roadmap.md')
-rw-r--r--project_doot_android_roadmap.md16
1 files changed, 16 insertions, 0 deletions
diff --git a/project_doot_android_roadmap.md b/project_doot_android_roadmap.md
new file mode 100644
index 0000000..50613a9
--- /dev/null
+++ b/project_doot_android_roadmap.md
@@ -0,0 +1,16 @@
+---
+name: project-doot-android-roadmap
+description: "doot Android app's native/web split and the offline-support requirement, from the 2026-08-07 architecture review"
+metadata:
+ node_type: memory
+ type: project
+ originSessionId: 2607e018-d4ad-4ec6-bb68-5f1d0f9a3906
+---
+
+The Android app is deliberately split: a native shell (Glance widget, QuickAddActivity, TaskDetailActivity, SettingsActivity) for glance/sub-second-capture surfaces, and a WebView wrapper (DashboardActivity) around the real web dashboard for everything administrative (chains, buckets, recurrence, projects, labels). The user confirmed the "glanceable" test — native only for things that must work from the home screen without opening the app, or need sub-second capture — is the right seam and endorsed keeping it as the ongoing boundary.
+
+**User wants offline support for the Android app.** This was stated before 2026-08-07 (not captured in memory until now — an earlier architecture-review draft treated it as a hypothetical future trigger and the user corrected that directly: "you got off gesticulating about no need for offline support when I already told you I want it").
+
+**How to apply:** Don't treat offline support as optional or a someday-maybe in Android planning — it's a confirmed requirement. The architecturally consistent way to build it (matching the native/web split above): a service worker + IndexedDB write queue in the *web app itself* (caches the shell/last-fetched tab data, queues mutations like complete-atom/unified-add, replays on reconnect), not a native rewrite — this benefits a browser tab and the WebView-wrapped app identically and keeps doot's task/chain/bucket business logic living in one place (the Go server) instead of being reimplemented in Kotlin. Separately, the Glance widget talks to the bearer-token API directly over OkHttp and never touches the WebView, so a service worker does nothing for it — its own offline behavior (does a checkbox tap or quick-add fail silently when offline, or queue?) needs a small native fix of its own (a Room-backed retry queue flushed by the existing WorkManager refresh cycle), independent of the web app's offline work.
+
+See also [[project_doot_widget_build]] for the widget build/publish workflow.