Effectively manage your tasks, stay organized, and achieve your goals with Task Manager, a powerful and user-friendly Android application.
- Effortless Task Management: Create, edit, or delete tasks with ease.
- Detailed Task Organization: Assign names, descriptions, priorities (high, medium, low), tags (work, personal, study, etc.), and due dates (including time) to each task.
- Reminders: Set reminders for upcoming tasks with options for 5 minutes, 1 hour, or 1 day before the due date. Local notifications will appear on your device to keep you informed.
- Multiple Task Views: Manage your tasks efficiently with various views:
- Pending Tasks: See upcoming tasks categorized as Past Due, Due Today, and No Due Date.
- Completed Tasks: Review and track tasks you've marked as completed.
- Calendar View: Visualize all tasks in a calendar format.
- Mark as Complete: Accomplish tasks and mark them as completed (and viceversa) to remove them from your active task lists and disable reminders.
- Theme Customization: Switch between dark and light themes to personalize your app experience (App takes device theme by default).
- Offline Functionality: Work seamlessly even without an internet connection. The app stores your tasks locally using SQLite for reliable access.
- Angular ^18.0.0: Used for building the application logic
- Ionic Framework ^8.0.0: Used for building the hybrid mobile app structure and UI components
- Capacitor:
- @capacitor/core: ^6.1.0 Provides core functionalities for native device access
- @capacitor-community/sqlite plugin: ^6.0.0-alpha.1 (for SQLite database access)
- @capacitor/android: ^6.1.0 (for Android platform functionalities)
- java: for android build you need to install a recent version of Java JDK Development Kit
- NPM 10.5.2: Package manager
- Node.js 20.13.1: Package manager
- Angular CLI: 18.0.0
- rxjs 7.8.0: For reactive programming
- ionicons 7.2.1: Icon library designed for ionic
- angular-calendar ^0.31.1: Angular component made by Matt Lewis
- VSCode (Recomended)
- Android Studio (Required)
Presentation
presentation.mp4
Task with notificartion
Task_with._notification.mp4
git@github.com:EduGese/Task-Manager.git
npm install
- Android Studio
- java: for android build you need to install a recent version of Java JDK Development Kit
ionic serve
npm run build:native
npm run ionic:android
This application follows a layered hybrid mobile architecture using Angular 18 standalone components, Ionic Framework, and Capacitor. It features clear separation of concerns (presentation, service, data, and native integration layers) for maintainability and scalability. State management relies on RxJS BehaviorSubject for reactive updates, and the Service Layer encapsulates all business logic and SQLite database operations.
src/app/pages: Main route-level pages (Home, Calendar, Completed Tasks, Tabs)src/app/components: Reusable UI components (Task List, Task Form, Task Details)src/app/services: Business logic and data services (Storage, SQLite, Notifications)src/app/models: TypeScript interfaces/data modelssrc/app/upgrades: Version-controlled database migrations
// Task creation in StorageService
async addTask(task: Task): Promise<void> {
const sql = 'INSERT INTO tasks (name, description, priority, tag, creationdate, duedate, notificationdaterange, notificationdate) VALUES (?, ?, ?, ?, ?, ?, ?, ?)';
const params = [task.name, task.description, task.priority, task.tag, task.creationdate, task.duedate, task.notificationdaterange, task.notificationdate];
const createdTask = await this.db.run(sql, params);
if (task.notificationdaterange && createdTask.changes?.lastId) {
this.notificationsService.scheduleNotification(createdTask.changes?.lastId, task.notificationdate, task.name, task.description, task.notificationdaterange);
}
await this.getTasks(); // Refresh the task list for all subscribers
}- Tasks are stored using parameterized SQL queries.
- After each change, the app calls
getTasks()to update the reactive state (BehaviorSubject) and all subscribed components. - Notifications are scheduled immediately after creating a new task if required.
- Angular 18 Standalone Components: All UI components are standalone, no NgModules.
- Reactive State Management: Always interact with tasks through services and observables, not directly in components.
- Database Migration System: Never edit existing migration scripts, always version your schema changes.
- Initialization: Never bypass the initialization flow - always let APP_INITIALIZER prepare critical services and DB.
- Cross-Platform Coding: Always test new features both on web and native (SQLite WASM vs. native SQLite).
- Modals & Forms: Use Ionic's Modal Controller with reactive forms and validators.
- DI Structure: Singleton services via providedIn: 'root', bootstrap-level providers via bootstrapApplication.
- Theming: Use Ionic dark mode and CSS variables. Dynamic styling is handled by TaskStylesService.
- Contributing: See DeepWiki for extension guidelines and advanced plugin/model integration patterns.
- Unit test stubs are in place (Jasmine, Karma). Note: Full test coverage for business logic and database operations is a planned improvement.
- Linting (ESLint) is configured.
- Before contributing, run:
npm run lint npm run test - See DeepWiki for more on testing strategy and continuous integration suggestions.
- To avoid issues with database initialization, always let the app fully bootstrap before user interaction.
- For Android builds, ensure all plugin permissions are granted and devices are properly set up.
- Never modify the DB schema directly - only make structural changes through the migration system.
- When adding features that use SQLite, test both web and Android (WASM vs. native engines).
- For help on error messages, advanced debugging, and DevTips, see the DeepWiki.
For detailed architecture diagrams, migration conventions, developer onboarding, and technical deep dives, please visit the DeepWiki.
This project is licensed under the MIT License.
























