Track Your Routine (TYR) is a comprehensive Flutter application designed to help users manage their daily routines and tasks efficiently. The app provides a seamless experience for creating, organizing, and tracking tasks with intelligent notification reminders. Built with Firebase for authentication and data storage, TYR ensures your tasks are securely synced across all your devices.
🛠️ Under Development - Actively being improved with new features and enhancements.
- User Registration & Login - Secure authentication powered by Firebase Auth
- Remember Me - Stay logged in across app sessions
- Password Management - Change password functionality with secure re-authentication
- Profile Management - Update username and view account information
- Create Tasks - Add tasks with title, description, date, and time
- Task Categories - Organize tasks by category:
- 💼 Work/Business
- 🏖️ Vacation/Travel
- 🎊 Party/Events
- Task List View - View all your tasks in a clean, organized list
- Real-time Sync - Tasks are automatically synced with Firebase Firestore
- Local Notifications - Receive reminders for your scheduled tasks
- Smart Alerts - Get notified when your task time arrives
- Task Creation Confirmation - Instant notification when a task is created
- Modern Dark Theme - Beautiful Material Design 3 dark theme
- Responsive Design - Works seamlessly across all screen sizes
- Google Fonts - Elegant typography using Google Fonts
- Intuitive Navigation - Easy-to-use drawer navigation
- ✅ Android
- ✅ iOS
- ✅ Web
- ✅ Windows
- ✅ Linux
- ✅ macOS
- Flutter - Cross-platform UI framework
- Dart - Programming language (SDK >=2.19.3 <3.0.0)
- Firebase Core - Firebase initialization
- Firebase Authentication - User authentication and management
- Cloud Firestore - NoSQL database for task storage
google_fonts: ^4.0.4- Custom typographyshared_preferences: ^2.1.1- Local data persistenceflutter_local_notifications: ^15.1.1- Local notification systemintl: ^0.18.1- Internationalization and date formattingfile_picker: ^5.5.0- File selection capabilitiescupertino_icons: ^1.0.2- iOS-style icons
Before you begin, ensure you have the following installed:
- Flutter SDK (>=2.19.3) - Install Flutter
- Dart SDK (comes with Flutter)
- Firebase Account - Create Firebase Project
- IDE - Android Studio, VS Code, or IntelliJ IDEA with Flutter plugins
- Platform-specific tools:
- Android: Android Studio with Android SDK
- iOS: Xcode (macOS only)
- Web: Chrome (for web development)
git clone https://github.com/MSF01/tyr.git
cd tyr- Go to Firebase Console
- Create a new project or use an existing one
- Enable Authentication (Email/Password method)
- Enable Cloud Firestore database
Android:
- Download
google-services.jsonfrom Firebase Console - Place it in
android/app/directory - The file should already be present in the project
iOS:
- Download
GoogleService-Info.plistfrom Firebase Console - Place it in
ios/Runner/directory - Update
ios/Runner/Info.plistif needed
Web:
- Add Firebase configuration to
web/index.html - Follow FlutterFire setup guide
Update lib/firebase_options.dart with your Firebase project configuration, or regenerate it using:
# Run on connected device/emulator
flutter run
# Run on specific platform
flutter run -d chrome # Web
flutter run -d windows # Windows
flutter run -d macos # macOS
flutter run -d linux # Linux# Android APK
flutter build apk --release
# Android App Bundle
flutter build appbundle --release
# iOS
flutter build ios --release
# Web
flutter build web --release
# Windows
flutter build windows --release- Launch the app
- Tap "Register Now" to create a new account
- Enter your username, email, and password
- You'll be redirected to the login screen
- Log in with your credentials
- From the home screen, tap "Click me to Create"
- Enter task title (required)
- Select date and time using the date/time pickers
- Add an optional description
- Choose a category (Work 💼, Vacation 🏖️, or Party 🎊)
- Tap "Create" to save the task
- You'll receive a confirmation notification
- Open the navigation drawer (☰)
- Tap "Tasks"
- View all your tasks in a scrollable list
- Tasks are automatically synced in real-time
- Open the navigation drawer
- Tap "Profile"
- View your account information
- Change username or password as needed
- Logout when finished
- Notifications are automatically scheduled when you create a task
- You'll receive a reminder when the task time arrives
- Make sure to grant notification permissions when prompted
tyr/
├── lib/
│ ├── main.dart # App entry point and routing
│ ├── splash.dart # Splash screen
│ ├── color.dart # Color constants
│ ├── firebase_options.dart # Firebase configuration
│ ├── Pages/
│ │ ├── home.dart # Home screen with feed
│ │ ├── login_page.dart # Login screen
│ │ ├── register_page.dart # Registration screen
│ │ ├── tasks.dart # Task list view
│ │ ├── create_task.dart # Task creation form
│ │ └── profile.dart # User profile screen
│ └── components/
│ ├── app_drawer.dart # Navigation drawer
│ ├── card.dart # Feed card component
│ ├── textfield.dart # Custom text field
│ ├── password_textfield.dart # Password input field
│ ├── character_limit_textfield.dart # Text field with character limit
│ ├── gradient_button.dart # Gradient button component
│ ├── local_notification.dart # Notification service
│ └── variables.dart # Shared variables
├── android/ # Android platform files
├── ios/ # iOS platform files
├── web/ # Web platform files
├── windows/ # Windows platform files
├── linux/ # Linux platform files
├── macos/ # macOS platform files
├── test/ # Test files
├── pubspec.yaml # Dependencies and project config
└── README.md # This file
Android:
- Permissions are automatically handled by
flutter_local_notifications - Ensure notification channel is created (already implemented)
iOS:
- Add notification permissions to
ios/Runner/Info.plist:
<key>UIBackgroundModes</key>
<array>
<string>fetch</string>
<string>remote-notification</string>
</array>Modify the theme in lib/main.dart:
theme: ThemeData.dark(useMaterial3: true).copyWith(
scaffoldBackgroundColor: Colors.black,
appBarTheme: const AppBarTheme(color: Colors.black),
)Contributions are welcome! This is an open-source project, and we appreciate any help you can provide.
- Fork the repository
- Create a feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add some AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
- Follow the existing code style
- Write clear commit messages
- Add comments for complex logic
- Test your changes before submitting
- Update documentation if needed
If you find a bug or have a feature request, please open an issue on GitHub with:
- Clear description of the problem/feature
- Steps to reproduce (for bugs)
- Expected vs actual behavior
- Screenshots (if applicable)
- Device/platform information
This project is licensed under the MIT License - see the LICENSE file for details.
MIT License
Copyright (c) 2023 Muhammad Shayaan
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
Muhammad Shayaan
Note: Screenshots will be added soon. If you'd like to contribute screenshots, please open a pull request!
If you have any questions or need help, please:
- Open an issue on GitHub
- Check existing issues for solutions
- Review the documentation
Made with ❤️ using Flutter
⭐ Star this repo if you find it helpful!