Inspiration

My own daily struggle with managing time effectively and consistently sticking to a productive schedule was the core inspiration behind Dayly. I often found traditional calendars and to-do lists to be rigid, lacking the intelligence to adapt to my fluctuating energy levels and unpredictable task durations. It was precisely during this period of seeking a better way that I came across Spotify's Daylist feature. The idea of a dynamically curated, personalized experience – but for tasks rather than music – immediately struck me. I envisioned a tool that could learn from my past behavior to provide a genuinely personalized and optimized daily schedule, aiming to transform task management from a rigid chore into a smart, adaptive assistant that reduces stress and boosts productivity.

What it does

Dayly is an intelligent scheduling script that leverages historical data and machine learning to generate a personalized daily schedule. Users provide their past activity logs, and Dayly analyzes this data to understand their routines, typical task durations, and preferred timing for various events. It then predicts realistic durations for tasks and uses an optimization solver (Google OR-Tools CP-SAT) to intelligently arrange a set of tasks for a given day, aiming to minimize deviations from the user's average daily task count and preferred task start times. The output is a clear, minute-by-minute schedule designed to optimize efficiency and adherence to personal habits.

How we built it

I built Dayly using Python, leveraging its robust ecosystem for data manipulation, machine learning, and optimization.

Data Processing: I used pandas to load, clean, and preprocess historical scheduling data from a CSV file, calculating event durations and extracting insights like average tasks per day and typical event start times.

Machine Learning: scikit-learn was instrumental in building my individual task duration prediction model. I used a LinearRegression model within a Pipeline with OneHotEncoder and StandardScaler to handle categorical and numerical features, allowing the system to learn personalized task durations.

Scheduling Optimization: The core scheduling logic is powered by Google OR-Tools CP-SAT solver. This powerful constraint programming library allowed me to define complex rules for task placement, ensuring no overlaps and incorporating objective functions to prioritize task count consistency and adherence to typical start times.

User Interface: The application features a simple command-line interface, prompting the user for a date and presenting the generated schedule in a clear, readable format.

What's next for Dayly

For the future of Dayly, I envision several exciting enhancements:

User Feedback Loop: Incorporating a mechanism for users to rate generated schedules or actual task durations, allowing the models to continuously learn and improve over time.

Recurring Tasks Management: A more robust system for defining and managing recurring tasks with flexible timing options.

UI/UX Development: Building a more intuitive graphical user interface (web or desktop) to make Dayly accessible to a wider audience, moving beyond the command-line.

Cloud Deployment: Exploring options for deploying the scheduling engine to a cloud platform, enabling access from multiple devices and potentially integrating with existing calendar services.

Task Dependencies: Adding the ability to define dependencies between tasks (e.g., "Task B must start after Task A finishes").

External Integrations: Connecting with popular calendar apps (Google Calendar, Outlook) for seamless import of historical data and export of generated schedules.

Share this project:

Updates