Native Android app combining two household tools:
- choreDash — chore tracker with NFC tag support. Tap a tag on the fridge, washing machine, etc. to log that chore as done.
- taskDash — shared to-do list with categories, priority, due dates, and per-task reminder notifications.
Both tools read from / write to the same Supabase project used by the web app.
Credentials are entered once in the Settings tab and persisted in DataStore.
| Tool | Version |
|---|---|
| Android Studio | Hedgehog 2023.1+ |
| JDK | 17 |
| Android Gradle Plugin | 8.13.x |
| Compile SDK | 35 |
| Min SDK | 26 (Android 8) |
# Debug APK
./gradlew assembleDebug
# Run unit tests
./gradlew test
# Lint
./gradlew lintDebugapp/src/main/java/com/mapgie/dash/
DashApplication.kt # HiltAndroidApp + WorkManager Configuration.Provider
MainActivity.kt # NFC foreground dispatch, Compose entry point
alarm/
AlarmReceiver.kt # BroadcastReceiver for task reminders
AlarmScheduler.kt # AlarmManager wrapper
BootReceiver.kt # Re-schedules alarms after reboot
BootWorker.kt # HiltWorker: queries pending reminders on boot
DailyStaleChoreWorker.kt # HiltWorker: daily stale-chore notification
data/
model/ # Chore.kt, Task.kt, Owner.kt + enums/extension fns
preferences/ # SettingsRepository (DataStore)
repository/ # ChoreRepository, TaskRepository (Supabase)
supabase/ # SupabaseClientProvider
di/
AppModule.kt # Hilt modules
notification/
NotificationHelper.kt # Channel creation + show helpers
permission/
PermissionHelper.kt # Settings deep links for exact alarms + notifications
nfc/
NfcHandler.kt # NDEF/URI/raw-hex tag-ID extraction
ui/
theme/ # Color.kt, Theme.kt, Type.kt
navigation/ # DashNavGraph.kt
screens/
chores/ # ChoreListViewModel + ChoreListScreen
tasks/ # TaskListViewModel + TaskListScreen
settings/ # SettingsViewModel + SettingsScreen
licenses/ # LicensesScreen
components/ # ChoreCard, LogBottomSheet, EditChoreSheet,
# TaskCard, EditTaskSheet
- Write NDEF Text records to your NFC tags (any NFC writer app).
- The tag ID is used to identify a chore — see
NfcHandler.extractTagId(). - When the app receives an NFC intent,
LogBottomSheetopens pre-filled with the matching chore (or shows "Unknown tag" if no chore matches).
This app has no backend of its own. It reads/writes a Supabase project directly (optionally the same project as the taskDash web app). Each install needs its own project and credentials:
- Create a free project at supabase.com.
- Open SQL Editor → New query, paste the entire contents of
supabase/schema.sql, and run it. This creates theowners,tags,scans, andtodostables with the columns and row-level security policies the app expects. - Add at least one row to
owners(e.g.INSERT INTO owners (handle) VALUES ('alex');) so the "I am" picker in Settings has something to show. - In Supabase, go to Settings → API and copy the Project URL and the anon / public key.
- In the app, open Settings → Supabase connection and enter the Project URL, anon key, and your owner handle, then tap Save.
If you're pairing this app with the taskDash web app, point both at the same
Supabase project; schema.sql covers both apps' tables (including todos and
owners), so you only need to run it once.
app/debug.keystore and gradle/wrapper/gradle-wrapper.jar are binary files.
After cloning, copy them from a local choreDash checkout or generate a new debug keystore with:
keytool -genkey -v -keystore app/debug.keystore -alias androiddebugkey \
-keyalg RSA -keysize 2048 -validity 10000 \
-storepass android -keypass android -dname "CN=Android Debug,O=Android,C=US"See Settings → Open-source licenses inside the app.