A task manager that helps you stop overthinking and start doing. Organize tasks into flexible groups, let the app pick what to work on next, and track your daily progress — all designed to reduce decision fatigue.
Note: This app was vibe-coded — planned and ideated by a human, implemented with AI assistance.
Prerequisites: Flutter SDK and Linux dependencies must be installed first.
flutter pub get
./dev.sh
flutter test- Flexible task groups — tasks can live under multiple groups, so you organize things the way you think
- Today's 5 — a daily focus list of 5 tasks, picked by weighted random to surface what matters
- Random pick — can't decide what to do? Let the app choose for you, with "Go Deeper" for drilling into subtasks
- Start working / Done today — track what you're actively working on and what you finished today
- Priority & difficulty — tag tasks to influence how often they get picked
- Quick task & brain dump — rapidly capture ideas without worrying about where they go
- Search — find any task instantly from anywhere in the app
- Soft dependencies — mark tasks as "do after..." to gently guide your order without hard blocking
- Export / import — back up your data anytime, restore on any device
- Dark mode — easy on the eyes, with colorful task cards
- Supported platforms: Android
-
Flutter SDK
git clone --depth 1 --branch stable https://github.com/flutter/flutter.git ~/flutter echo 'export PATH="$HOME/flutter/bin:$PATH"' >> ~/.bashrc # If you use zsh, replace ~/.bashrc with ~/.zshrc in both lines. source ~/.bashrc
-
Linux desktop dependencies (Ubuntu/Debian)
sudo apt install -y clang ninja-build lld libsqlite3-dev inotify-tools
-
Android build dependencies (optional, for APK builds)
sudo apt install -y openjdk-17-jdk lib32stdc++6 lib32z1
Then install the Android SDK command-line tools from https://developer.android.com/studio (under "Command line tools only") and set up:
mkdir -p ~/Android/Sdk/cmdline-tools # Extract downloaded zip, move contents to ~/Android/Sdk/cmdline-tools/latest/ export ANDROID_HOME=$HOME/Android/Sdk export PATH=$ANDROID_HOME/cmdline-tools/latest/bin:$ANDROID_HOME/platform-tools:$PATH # build-tools;28.0.3 is kept for compatibility with older Android tooling that may still reference it. sdkmanager "platform-tools" "platforms;android-36" "build-tools;35.0.0" "build-tools;28.0.3" flutter config --android-sdk $HOME/Android/Sdk flutter doctor --android-licenses
flutter pub get./dev.shThis starts the app and watches lib/ for .dart file changes, triggering hot reload automatically — no need to press anything.
To run without auto-reload:
flutter run -d linuxThen press r for hot reload or R for hot restart manually.
flutter build apk --debugOutput: build/app/outputs/flutter-apk/app-debug.apk — transfer to your phone and install.
Warning: Debug and release APKs have different signing keys. Installing a debug APK over a release build (or vice versa) will uninstall the existing app and wipe its data. To test a debug build safely, back up the database first using the app's export feature, or use
adbto copy it:adb exec-out run-as com.taskroulette.task_roulette cat databases/task_roulette.db > /tmp/task_roulette_backup.db
To sideload a debug APK over ADB without flutter run (which auto-uninstalls on signature mismatch):
flutter build apk --debug
adb install -r build/app/outputs/flutter-apk/app-debug.apk # -r = replace if same signature
adb logcat -s flutter # view Flutter debug outputflutter testRun this before committing to catch regressions. Tests cover the Task model, database operations (using sqflite_ffi in-memory), and widget rendering.
To run a specific test file:
flutter test test/models/task_test.dartlib/
├── main.dart # App entry, theme, Provider setup
├── models/
│ ├── task.dart # Task model
│ └── task_relationship.dart # Parent-child relationship model
├── data/
│ └── database_helper.dart # SQLite database operations
├── providers/
│ └── task_provider.dart # State management (ChangeNotifier)
├── screens/
│ └── task_list_screen.dart # Main screen
└── widgets/
├── task_card.dart # Task grid card (tap, long-press for actions)
├── task_picker_dialog.dart # Search/filter dialog for linking tasks
├── leaf_task_detail.dart # Leaf task detail view with Done action
├── empty_state.dart # Empty state placeholder
├── add_task_dialog.dart # New task dialog
└── random_result_dialog.dart # Random pick result
test/
├── models/
│ └── task_test.dart # Task model unit tests
├── data/
│ └── database_helper_test.dart # DB operations tests
├── providers/
│ └── task_provider_test.dart # Provider state management tests
└── widgets/
├── leaf_task_detail_test.dart # Leaf detail widget tests
└── task_card_test.dart # Task card widget tests
-
Install adb (Ubuntu/Debian):
sudo apt install -y adb
-
Enable wireless debugging on your Android phone:
- Go to Settings > System > Developer options (tap Build number 7 times to unlock)
- Enable Wireless debugging
- Tap Wireless debugging to open its settings, then tap Pair device with pairing code
- On your computer:
adb pair <ip>:<pairing-port> # enter the pairing code when prompted adb connect <ip>:<port> # use the port shown on the Wireless debugging screen (not the pairing port)
-
Verify connection:
adb devices # should list your device
If the app becomes unresponsive on Android, capture logs:
# Clear old logs, then capture everything to a file
adb logcat -c && adb logcat > /tmp/crash_log.txt
# Now reproduce the freeze on the phone, then Ctrl+C to stop capture
# Or filter for ANR-specific messages only
adb logcat -s ActivityManager:E ANRManager:E
# Pull ANR traces after the freeze
adb pull /data/anr/traces.txtRelease builds are obfuscated. Download debug-symbols.zip from the GitHub release, then:
unzip debug-symbols.zip -d symbols/
flutter symbolize -i stacktrace.txt -d symbols/See docs/PERFORMANCE.md for details on database optimizations and performance considerations.