Git Product home page Git Product logo

smartercalendar's People

Contributors

alexhalbesleben avatar dependabot[bot] avatar

Stargazers

 avatar  avatar  avatar  avatar

Watchers

 avatar

smartercalendar's Issues

Settings modal should have collapsible fields

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.

The user should have the option of frontloading tasks

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.

Chunk scheduling should be more intelligent

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.

Completed tasks shouldn't be deleted

Completed tasks shouldn't be deleted. This has several consequences:

  • The "complete" button on task/chunk modals is no longer also a delete button (and a separate delete button will be necessary)
  • Statistics (see #92) is a possibility
  • The chunking algorithm takes into account chunks already done on the current day so you don't complete tasks and then have more scheduled on the same day
  • You can see completed tasks/chunks (should be colored differently to indicate that they are complete)

This change (and its consequences) will likely be the most significant upgrade of v4.

Task folders

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.

Tasks should have a description

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.

The user should have a degree of control over the color scheme

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.

Recurring events

Users should be able to have recurring events that repeat on a certain interval.

Days should have a modal

Days should have a modal that displays the following:

  • Total chunks
  • Total time
  • Total effort
  • Possibly more

How to use page

There should be some instructions somewhere telling people how to use this.

Tasks should have an effort

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

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).

Chunking algorithm bug

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.

Users should be able to edit the maximum preferred time spent on specific days

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.

The event modal lists the date as "due"

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."

Input validation

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:

  • Tasks must have a name (no empty names or names with only whitespeace)
  • Tasks cannot be due before the current date
  • Tasks cannot have a negative duration, effort, priority (eventually), or number of chunks
  • Chunks cannot be manually assigned after their parent task's due date or before the current date
  • Anywhere where a range of dates/times can be edited, the end date/time must be after the start date/time

Day scrollbars display over chunks

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.

Statistics

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):

  • Time worked
  • Effort completed
  • Tasks done
  • Chunks done

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.

Tasks should have tags

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.

Chunks and tasks should be able to be completed

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.

Check accessibility

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.

Create a formal changelog

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.

Styling

Placeholder because this is what I'm working on

Find some way to store data server-side

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.

Unit tests

Write unit tests. I have a few but mostly for date utils and I need to have way better code coverage.

The calendar only works for a year

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.

Users should be able to add events

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.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.