EFScheduler is a local-first Android app for task transitions and reminders, designed through a participatory process with neurodivergent users.
Unlike many productivity apps, EFScheduler is not built around accounts, calendars, cloud sync, or productivity tracking. It is built around transition support: helping users move from one task to another with clear timing, simple choices, and reliable local notifications.
Neurodivergent users were directly involved in shaping the app before and during development. The result is a transition-support tool built from their expressed needs and preferences, not a generic scheduling app with accessibility added later.
EFScheduler supports creating, editing, deleting, importing, and exporting scheduled tasks. It sends local Android notifications for task start times and optional early reminders. Completed tasks are removed from the active task list after the final notification fires.
The app also restores future reminders after device reboot.
EFScheduler stores tasks locally using Room and schedules reminders using Android’s local alarm and notification systems.
It does not use cloud storage, user accounts, server-side scheduling, Firebase, or network-based reminders. Manual JSON export and import are available for backup and restore.
EFScheduler uses notification permission so reminders can appear, and alarms/reminders permission so reminders can fire on time.
If alarm permission is disabled, the app explains why it is needed before sending the user to Android settings. The About / Permissions screen shows whether permissions are enabled or disabled.
The Android app uses Kotlin, Jetpack Compose, Room, AlarmManager, BroadcastReceiver, and local JSON import/export.
Important reminder components include NotificationReceiver for posting reminders and BootReceiver for restoring future reminders after reboot.
Useful Logcat tags during testing:
EFSchedulerRepo
EFSchedulerBoot
EFSchedulerNotif
MainActivity
The app currently includes a temporary Compose workaround for a LazyColumn prefetch crash:
ComposeFoundationFlags.isPausableCompositionInPrefetchEnabled = falseThis should be revisited after future Compose updates.
Open the project in Android Studio and run it on an emulator or Android device.
For reboot testing:
adb rebootIf multiple devices are connected:
adb devices
adb -s <device_id> rebootEFScheduler keeps schedule data on the device. Data only leaves the app when the user manually exports a backup file.