Creating PrioriPlanner was a rewarding experience that allowed me to combine cutting-edge technologies with a deeply functional and intuitive user experience. At its core, PrioriPlanner is more than just a task manager—it’s a productivity companion, designed to simplify the process of categorizing and prioritizing tasks using the powerful Eisenhower Matrix.
When I embarked on this project, I knew that task management apps were nothing new. What set my vision apart was the goal of helping users overcome the overwhelming clutter of daily tasks and responsibilities. The Eisenhower Matrix provided the perfect framework for sorting tasks into clear categories, making it easier to focus on what truly matters:
- Do Now: Tasks with immediate deadlines or important consequences.
- Schedule: Long-term tasks that contribute to overarching goals.
- Delegate: Tasks that can be assigned to others, freeing up your time for higher-value work.
- Eliminate: Distractions and low-priority tasks.
- Anytime: Tasks without urgency that can be done at your convenience.
Building a system that allows users to manage tasks this way, while still offering flexibility through custom filtering and recurring tasks, was a challenge that pushed me to explore and implement advanced features of the iOS platform.
The core architecture of PrioriPlanner was built with a strong focus on scalability, testability, and maintainability. Here’s a breakdown of the key technologies and patterns I used to make this happen:
- SwiftUI: SwiftUI powers the entire user interface, allowing for seamless design and interactive elements. Its declarative nature made it easier to keep the UI and state in sync, while the use of Combine ensured reactive data flow across the app.
- Realm: For persistence, I chose Realm, a lightweight yet powerful database that supports local storage. By using Realm, I was able to ensure that all user data—whether it be tasks, subtasks, or recurring schedules—was securely stored locally and never shared. This decision was crucial in maintaining user privacy while also providing fast data access.
- Combine: To manage the state and asynchronous data flows, I utilized Combine for reactive programming. This allowed me to handle complex state changes—whether it be loading tasks, filtering them based on user preferences, or updating recurring tasks—in an efficient and predictable manner.
- Dependency Injection: Keeping the app modular and testable was a key priority. I implemented Dependency Injection to allow for loose coupling between components, making the architecture more flexible and easier to maintain. This not only simplified unit testing but also ensured that any future updates or feature additions could be done without major refactoring.
- Unit Tests & Snapshot Tests: A robust application requires a solid foundation of tests. I implemented Unit Tests across all features to verify that actions such as task creation, task completion, and recurring task scheduling were functioning as expected. Snapshot Tests were also used to ensure that the UI rendered correctly across different states, maintaining the visual integrity of the app through updates.
1. Daily Task Goal and Smart Filtering: I wanted users to feel a sense of accomplishment at the end of each day. The Today’s Task Goal feature was designed to keep users on track by highlighting what needed to be done today, without overwhelming them with everything on their list. Smart filtering automatically organizes tasks into the most relevant categories, allowing users to focus on high-priority actions while minimizing decision fatigue.
2. Pomodoro Focus Timer: Integrated directly into tasks, the Pomodoro Timer encourages focused, productive work sessions. The addition of this feature was a great way to blend task management with scientifically backed productivity methods, making the app more valuable to users.
3. Recurring Tasks: Users can create tasks that recur on their chosen interval, allowing them to automate repetitive responsibilities. This feature showcases the app’s ability to adapt to a user’s workflow, reducing the time spent manually managing recurring activities.
4. Security & Data Integrity: User trust is paramount. By choosing local storage with Realm, I ensured that all user data is kept securely on-device and never shared with third parties. This decision underscores my commitment to user privacy and data security, two key principles for any modern app.
Building PrioriPlanner wasn’t just about creating an app—it was about building a system that could grow and adapt while maintaining excellent performance and user experience. Here’s how this project exemplifies my technical skills and my ability to deliver real-world solutions:
- Comprehensive Testing Approach: With Unit Tests ensuring business logic integrity and Snapshot Tests maintaining UI consistency, I ensured the app’s stability across updates and new feature implementations.
- Deep Understanding of iOS Development: My proficiency with SwiftUI, Combine, and Realm allowed me to deliver a highly functional, user-centric app. Each technology choice was made with performance, security, and user experience in mind, showcasing my ability to leverage modern iOS frameworks effectively.
PrioriPlanner was a complex yet rewarding project that allowed me to demonstrate my technical expertise while building a tool that genuinely improves productivity. From modular architecture to detailed task tracking features, this app reflects my dedication to clean code, robust testing, and a user-first mindset. I’m proud of how it turned out and excited to continue iterating on its success.