alexhalbesleben / smartercalendar Goto Github PK
View Code? Open in Web Editor NEWA calendar that chunks and schedules tasks for you
License: MIT License
A calendar that chunks and schedules tasks for you
License: MIT License
Certain parts of the settings modal (really just the part where the user can edit the start and end time of each day) take up a lot of space. Collapsing certain sections like that one by default would reduce cognitive load and allow the user to see more important sections more quickly.
Right now, tasks are automatically assigned on the last day possible unless manually assigned. Manually assigning chunks gives users more control over how chunks are distributed, but having the option to assign chunks on the first day possible is ideal. The user should be able to set this value for individual chunks and a default value for all chunks in settings.
Chunks should be scheduled so that each day has a roughly even amount of total time. Previously assigned chunks should be taken into account when scheduling other chunks. Tasks should be given a priority and higher-priority tasks should be chunked first.
As a last resort, users should be able to manually chunk tasks themselves.
Settings should have explanatory tooltips
The calendar should have some indication of the current day
Completed tasks shouldn't be deleted. This has several consequences:
This change (and its consequences) will likely be the most significant upgrade of v4.
Go through and update documentation
There should be some way to have task folders that containing similar tasks that can collapse and expand. This is similar to the tags that will be implemented with the resolution of #94, but with a key difference: tasks can have multiple tags, but have only one folder. Folders will make large task lists more manageable.
Eventually, it might make sense to have settings for folders. However, that is not an immediate priority.
In the settings modal, users should be able to limit the amount of time worked on each day.
This is related to #33 and a single PR should resolve both issues.
Effort, as well as time spent, should be taken into consideration when chunking tasks.
This might require some slight reworking of the chunking algorithm.
Tasks should have a description, a text field in which the user can provide more detail about the task than is ideal to include in the task name.
Right now, the chunking algorithm considers chunks that have been completed when scheduling chunks for all days. The user should have the option to have this only take effect for the current day.
Basically, the user should have the option to work ahead and then work normally on future days.
I think it would be a neat idea to give the user some control over the calendar's color scheme. I don't think I'm ready to implement a full-blown theme system, but I think allowing the user to customize the color of chunks, completed chunks, and events would be neat. For now, they would probably be able to pick from a set of predefined colors (the site's existing color palette).
Eventually, this could be expanded into a more robust theme system.
Users should be able to have recurring events that repeat on a certain interval.
Days should have a modal that displays the following:
There should be some instructions somewhere telling people how to use this.
Related to #17.
Tasks should have an associated effort. Tasks are assigned to days based on how much total effort is being done each day (the sum of the product of each chunk's effort and duration).
Tasks should have a priority that determines in which order their chunks are scheduled. Right now, tasks that are due soonest are chunked first. This should remain the default behavior, but tasks with a higher priority should be chunked first (and ties broken by due date).
This specific bug occurs when chunking my college essays. I have a lot of essays with due dates ranging from October 15th to the end of December. However, even those that are due by the end of December are scheduled in October. Basically, the tasks due October 15th are chunked first and all other tasks--even those due later--are scheduled before them. I suspect that it's trying to balance out the time and effort spent each day. This behavior isn't ideal.
I'm not sure what the best solution is. I might need to override the default chunking behavior for tasks that are far enough apart. There might not be a good fix.
It is worth noting that as the due dates grow closer, these problems will resolve themselves. Nevertheless, the current behavior isn't ideal.
Upon the resolution of #18, users will be able to specify the maximum preferred time spent on each day of the week. Beyond this, they should also be able to set this value for specific days and override the default value for the day of the week.
Users should also have the option of clearing a specific value and reverting to the default.
Time-based chunking should consider either how much time each day spends on tasks OR how much time each day has left to spend.
There should be some sort of at-a-glance view of daily statistics. Ideally, this replaces the chunks visible for each day (I guess some alternate viewing mode).
Right now, the event modal's field for customizing the event date is prepended with "due." Events aren't completed the same way tasks/chunks are, so "due" should be changed to "date."
The site suffers from a lack of input validation pretty much everywhere. I believe there is a single check in the settings modal, but there should be more checks to make sure that inputs make sense. Some examples:
Pretty self-explanatory
See title. I know what I'm talking about and will fix it in a few minutes.
When a day has enough chunks to show a scrollbar, that scrollbar either cuts off part of the chunks (Chrome) or displays right next to the chunks with no spacing (Firefox, I think). It should display next to the chunks with some spacing. Need to check this on different browsers to ensure correct behavior.
I think it would be useful/interesting for the calendar to record some basic daily/weekly/monthly statistics. I'm thinking the following fields (and more could be added):
Recording these basic statistics for each day, week, and month also allows for each unit of time to be compared to previous time chunks. For example, users can see how much/many time/effort/tasks/chunks they have done compared to previous time periods. Eventually, these statistics could be graphed.
Not a super high priority because the calendar is more focused on making the present and future easier, not understanding the past. Still a good thing to have in my opinion when I get there.
This will require some architectural changes. Right now, completing tasks/chunks removes them from existence entirely. It will probably be a good idea to start storing these in addition to updating statistics when they are completed.
Right now, the navbar is not fixed to the top of the screen and disappear when the user scrolls down. By contrast, the footer remains fixed. The navbar should have fixed behavior.
Chunks with durations that are long decimals should display with the numbers rounded.
Users should have the ability to give tasks tags to help with organization. Tags should impact the visual display of tasks in the calendar and tasks list.
It doesn't need to explain the settings; that's what the tooltips are for.
Chunks should be able to be completed. When this happens, they no longer appear. The duration (and chunk number) of their parent task is updated.
Tasks should also have this ability. Tasks are completed when all of their chunks are completed. Additionally, tasks can be manually completed, which triggers the completion of all of their chunks.
I need to go over the entire page and make sure that it is fully accessible. I did this a while ago I don't think there are any super-pressing issues but it's worth doing again before the release of v4.
I'm just creating this so I can make a pull request to fix it.
There's a little bit of lag when I try to change values in both of these modals. I probably just need to update on debounce or something.
The algorithm should push tasks to other days if there isn't enough time in the current day to complete them.
Create a changelog visible to website users. I think it would be nice to display some sort of toast with a "see what's new" message after updates that links to this changelog.
Placeholder because this is what I'm working on
Right now, user data is stored, but it's kept client-side in local storage. This means that it does not persist across devices or even browsers. It can also be inadvertently deleted by the user. All in all, it isn't an ideal system. I don't know how to go about storing the data on a server, but it really should happen.
Write unit tests. I have a few but mostly for date utils and I need to have way better code coverage.
Settings modal should actually do something
Users should be able to choose between assigning chunks towards the front or back of the available date range or evenly.
Right now, the calendar only has perception of the calendar year of the current date. This isn't ideal, as users should be able to plan for events more than a year in the future and access old tasks/events from previous calendar years.
This will require some pretty significant internal changes as the year is largely ignored in the calendar logic.
When the create task modal is launched, the field editing the task's name should be focused. This should only happen when creating a task, not editing an existing one.
Users should be able to add events, which are similar to tasks but have some significant differences. Events are not chunked. Their duration is subtracted from the amount of time available on the day they take place, effectively giving the user a way to input their schedule and have the system adjust.
In the far future, I might integrate this with other calendar apps (Google Calendar, Apple's Calendar, etc.). If/when that happens, events will be important.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.