Task Management System
I've worked on a number of these over the years. The current one is pretty good and mostly meets my need. However, I want to rebuild it and add a little more rigor.
Tasks
- Title
- Date (null puts it on a backlog) - I've run into a lot of trouble with this in the past, I think I'll store it as an int this time representing days since 8/13/84
- Points
- Priority
- Notes
Automation
Repetition - Only once instance of a task can be active at a time. All other instances appear as 'ghosts'. When a task is completed, the points are given and the active instance gets moved to the next day.
- After Complete
- r[n] where n is any integer
- Repeats n days after the task is completed
- Weekly Pattern
- w[(0-6)*] for instance w135 for mon, wed, fri
- Task will recur on the next weekday matching the pattern
- Monthly day pattern
- m[((0-5)(0-6))*] for every two integer set, the first number is the week (0-5) and the second integer is the day of the week
- m1131 would be the second and fourth monday of a month
- Monthly Date pattern
- M[(-/+)01-31*] every signed two integer pair represents a day of the month, if a number is negative, it counts from the end of the month.
- M+01+15-1 would the 1st, 15th and last day of every month
- Year Pattern
- y(((01-12)(01-31))*] the first two integers would be the month, the second two would be the date
- y011504150815 would be the 15th of January, April and August every year.
Date locking - a locked task cannot change it's date (except on complete/repeat cycle)
Automated Re-balancing, day or all.
One note, I previously supported task dependency spawning (create one task when another was completed), that is going to be handled with projects this time.
Users
- point-to-minute conversion
- points per day pattern
- viewing preferences
- Project auto-balance default
Timers
- Title
- Done
Projects
- Auto-balance: If true, each task will be added to the 'next fit' date when a stage is activated, if false - they will be added to the current date. If auto-balance is not specifically set for a project, it will default to the user setting.
Projects are a way to group tasks into sets of dependencies. A project is divided into stages, tasks belong to a project-stage.
I should be able to sum up the points in a project and come up with a completed percentage.
All tasks in project not in the current stage will be placed on the backlog (not given a date). As soon as one stage is complete, all the tasks from the next stage will be added, following auto-balance rules.
UI
The first UI I build is going to be plain HTML, just to stub out the functionality. Lauren will build the rest.
API
- /user/new
- Operation: creates a new user
- Required: username, password
- Returns: userid
- /user/login
- Operation: login
- Required: username, password
- Returns: userid
- /task/new
- Operation: Creates a new task
- Required: title
- Optional: date, priority, points, automation
- Returns: task object (json)
- /task/update
- Operation: Updates attributes of a task
- Required: task id
- Optional: any task attributes
- Returns: task object (json)
- /task/delete
- Operation: deletes a task
- Required: task id
- Returns: confirmation
- /task/done
- Operation: Marks a task as done
- Required: task id
- Returns: confirmation
- /timer/new
- Operation: creates a new timer
- Required:
- Optional:
- Returns:
- template
- Operation:
- Required:
- Optional:
- Returns: