Claudio for Android
A personal productivity app for Android. Supabase holds the data, Room keeps it working offline, and Claudio is the mobile interface that makes it usable day-to-day — with Claude on top for daily briefs, task summaries, and a conversational assistant that can act.
Stack
- Kotlin
- Jetpack Compose
- Room
- WorkManager
- Supabase
- Claude API
What it does
- Home screen with today's tasks, filterable by priority and status, with a Claude-generated daily brief
- Full task management synced to Supabase — priority, status, due dates, notes, linked project, snooze
- Initiative tracking with description, status, target date, progress bar, and check-in history sparkline
- Conversational AI assistant (Ask Claudio) with full context of tasks and initiatives for natural language queries
- 15 agentic tools callable straight from conversation — create, update, snooze, and delete tasks and initiatives; `create_calendar_event` with attendees; `get_calendar_events`; `draft_email` via Gmail OAuth2; and `generate_work_plan`
- Voice input through the system speech recognizer and image attachment via Claude multimodal — capture a task by speaking or by photographing a whiteboard
- Morning report (Mon–Fri 08:00) and evening check-in (23:00) push notifications via WorkManager
- Glance home screen widget showing open and overdue task counts
- Offline-first with optimistic writes — changes sync to Supabase in the background
Why it matters
- Native Android UX purpose-built for this workflow — task capture takes under 15 seconds vs. ~45 seconds navigating a general task management app to the right database
- Agentic tools collapse what was a 3–4 app workflow — task, calendar, email — into a single conversation turn
- Morning brief (08:00 Mon–Fri) and evening check-in (23:00) compress daily context-loading from ~15 minutes to a 30-second read
Architecture
- MVI pattern with Hilt dependency injection and Room as the offline-first local database
- Kotlin Coroutines + StateFlow for unidirectional state; SharedFlow for one-shot UI events
- Supabase (PostgREST client) is the remote backend; Retrofit handles the Anthropic and Gmail APIs; EncryptedSharedPreferences (AES-256-GCM) stores keys on-device
- Model routing: Haiku 4.5 parses natural-language task input; Sonnet 4.6 handles agentic tool use and writes the check-in summaries and daily briefs
- SyncEngine reconciles local Room state against Supabase; a MigrationWorker carried the full locally-cached dataset across when the backend was replaced, then cleaned up after itself
- Gmail OAuth2 integration for the `draft_email` tool — token exchange and refresh handled on-device
- WorkManager schedules the morning report (Mon–Fri 08:00) and evening check-in (23:00) reliably across OEMs
- GitHub Actions CI/CD: lint + unit tests → signed AAB → Google Play internal track on every push to main
Philosophy
- Claude proposes, I confirm — every agentic tool follows a propose-then-confirm pattern, and nothing writes to the record without an explicit tap
- Offline-first because connectivity should never block a task capture
- Claude runs on explicit actions only — task parsing, check-in summaries — never ambient or on keystrokes