{"id":26026985,"url":"https://github.com/andordavoti/todoaholic","last_synced_at":"2025-03-06T15:33:42.086Z","repository":{"id":44804790,"uuid":"440660817","full_name":"andordavoti/todoaholic","owner":"andordavoti","description":"Minimalist todo app for iOS, Android, web \u0026 macOS, developed with Flutter and Firebase. DevOps with GitHub Actions and Fastlane.","archived":false,"fork":false,"pushed_at":"2023-08-12T13:47:34.000Z","size":4948,"stargazers_count":5,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2023-08-12T13:54:38.992Z","etag":null,"topics":["fastlane","firebase","firebase-analytics","firebase-auth","firebase-cloud-functions","firebase-crashlytics","firebase-hosting","firebase-performance-monitoring","firestore","flutter","github-actions"],"latest_commit_sha":null,"homepage":"https://todoaholic.com/","language":"Dart","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/andordavoti.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2021-12-21T21:59:01.000Z","updated_at":"2023-08-12T13:54:38.993Z","dependencies_parsed_at":"2022-08-25T13:01:58.790Z","dependency_job_id":null,"html_url":"https://github.com/andordavoti/todoaholic","commit_stats":null,"previous_names":[],"tags_count":0,"template":null,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andordavoti%2Ftodoaholic","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andordavoti%2Ftodoaholic/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andordavoti%2Ftodoaholic/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andordavoti%2Ftodoaholic/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/andordavoti","download_url":"https://codeload.github.com/andordavoti/todoaholic/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":242235763,"owners_count":20094463,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["fastlane","firebase","firebase-analytics","firebase-auth","firebase-cloud-functions","firebase-crashlytics","firebase-hosting","firebase-performance-monitoring","firestore","flutter","github-actions"],"created_at":"2025-03-06T15:32:49.849Z","updated_at":"2025-03-06T15:33:42.062Z","avatar_url":"https://github.com/andordavoti.png","language":"Dart","funding_links":["https://www.buymeacoffee.com/andordavoti"],"categories":[],"sub_categories":[],"readme":"\u003cimg src=\"resources/icon/todoaholic-icon-macos.png\" width=\"250\" \u003e\n\n# todoaholic\n\nA minimalist open-source and free todo app for iOS, Android, macOS \u0026 web.\n\n\u003ca href=\"https://www.buymeacoffee.com/andordavoti\" target=\"_blank\"\u003e\u003cimg src=\"https://cdn.buymeacoffee.com/buttons/v2/default-yellow.png\" alt=\"Buy Me A Coffee\" style=\"height: 60px !important;width: 217px !important;\" \u003e\u003c/a\u003e\n\n## Get the app\n\n- iOS: [App Store](https://apps.apple.com/us/app/todoaholic/id1601535769)\n- Android: [Google Play Store](https://play.google.com/store/apps/details?id=com.andordavoti.todoaholic)\n- macOS: [App Store](https://apps.apple.com/us/app/todoaholic/id1601535769) (only for Apple Silicon Macs)\n- web (PWA): [todoaholic.com](https://todoaholic.com/)\n\n## Features\n\nManage tasks cross-platform in real-time. No need to refresh the browser if you made a change through the mobile app. Everything syncs across all of your devices in real-time automatically.\n\nCreate custom lists (ex. shopping list, bucket list, reading list, movie list).\n\n\u003cdetails\u003e\n\u003csummary\u003eIntuitive gestures to cross out, move, remove and edit tasks.\u003c/summary\u003e\n  \u003cul\u003e\n    \u003cli\u003eTap a task to cross it of your list\u003c/li\u003e\n    \u003cli\u003eSlide a task to the right to move it to the next day\u003c/li\u003e\n    \u003cli\u003eSlide an undone task to the left to edit it\u003c/li\u003e\n    \u003cli\u003eSlide a done task to the left to delete it\u003c/li\u003e\n    \u003cli\u003eSlide a list in the drawer to the left to edit or remove it\u003c/li\u003e\n  \u003c/ul\u003e\n\u003c/details\u003e\n\nTask timeline. Get an overview of what you have going on in the coming days.\n\nOffline support for the mobile and desktop apps.\n\n\u003cdetails\u003e\n\u003csummary\u003eKeyboard shortcuts for desktop and web.\u003c/summary\u003e\n  \u003cul\u003e\n    \u003cli\u003eNavigate the day you are viewing on the home screen with the left and right arrow keys (current date with arrow down, one week forward with arrow up)\u003c/li\u003e\n    \u003cli\u003ePress \"A\" or \"+\" on the task or custom list screen to quickly add a task\u003c/li\u003e\n    \u003cli\u003ePress \"H\" to go \"home\" and view your current tasks\u003c/li\u003e\n    \u003cli\u003ePress \"T\" to view the timeline\u003c/li\u003e\n    \u003cli\u003ePress \"P\" to view your profile\u003c/li\u003e\n  \u003c/ul\u003e\n\u003c/details\u003e\n\n## Future plans\n\n- Calendar integration\n- Recurring tasks (tasks that repeat every day, week or month)\n- Sign in with Apple \u0026 Google\n\n## Known issues\n\n- Reordering tasks is not working properly for now.\n\n## Tech Stack\n\n### Frontend:\n\n- [Flutter](https://flutter.dev/)\n\n### Backend:\n\n**Auth:** [Firebase Auth](https://firebase.google.com/products/auth)\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cstrong\u003eDB:\u003c/strong\u003e \u003ca href=\"https://firebase.google.com/products/firestore\"\u003eFirestore\u003c/a\u003e\u003c/summary\u003e\n\n  \u003cul\u003e\n    \u003clh\u003e\u003cstrong\u003eComposite indexes on collection ID \"todos\":\u003c/strong\u003e\u003c/lh\u003e\n    \u003cli\u003edate Ascending, isDone Ascending, order Ascending\u003c/li\u003e\n    \u003cli\u003edate Ascending, order Ascending, isDone Ascending\u003c/li\u003e\n    \u003cli\u003edate Ascending, order Ascending, isDone Descending\u003c/li\u003e\n    \u003cli\u003eisDone Ascending, date Ascending\u003c/li\u003e\n    \u003cli\u003eisDone Ascending order Ascending\u003c/li\u003e\n  \u003c/ul\u003e\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003ca href=\"https://firebase.google.com/docs/functions\"\u003eFirebase Cloud Functions\u003c/a\u003e\u003c/summary\u003e\n\nCustom schedule function that runs once every week to check for users that have been inactive for three months and removes them. Their user data is then removed by this extension: \u003ca href=\"https://firebase.google.com/products/extensions/firebase-delete-user-data\"\u003eFirebase Delete User Data Extension\u003c/a\u003e.\n\n\u003c/details\u003e\n\n## CI/CD pipelines\n\n### iOS:\n\nA [GitHub Action](https://github.com/features/actions) automatically builds the Flutter iOS app with [Fastlane](https://fastlane.tools/), and deploys it to TestFlight throught the App Store Connect API when there is a push to the master branch or a PR merge.\n\n### Android:\n\nA [GitHub Action](https://github.com/features/actions) automatically builds the Flutter Android app bundle, and deploys it to Google Play Store Internal Test Track with [Fastlane](https://fastlane.tools/), when there is a push to the master branch or a PR merge.\n\n### web:\n\nA [GitHub Action](https://github.com/features/actions) automatically builds the Flutter web app, and deploys it to [Firebase Hosting](https://firebase.google.com/docs/hosting) when there is a push to the master branch or a PR merge. There is also a [GitHub Action](https://github.com/features/actions) that deploys a preview of the app for the PR for testing before you merge to master.\n\n### Other services used:\n\n- [Firebase Analytics](https://firebase.google.com/products/analytics)\n- [Firebase Crashlytics](https://firebase.google.com/products/crashlytics)\n- [Firebase Performance Monitoring](https://firebase.google.com/products/performance)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fandordavoti%2Ftodoaholic","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fandordavoti%2Ftodoaholic","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fandordavoti%2Ftodoaholic/lists"}