Making schedules for small teams is really difficult if there are contstraints on how the schedules can be laid out.
If there is a maximum number of people that can be on shift at one time, or if there is a maximum number of hours on payroll, things get really complicated. Timelinter is an attempt to fix that. It is a schedule maker that will complain if constraints are violated.
It's essentially a linter for schedules.
This is a complicated project, whose user experience still needs work. To get familiar with it, I'd recommend following these steps:
-
Register
-
Login
-
Add timeline (in /add)
-
Add a few people (in /add)
-
Add availability to people (in /people/[id])
-
Add people to timeline (in /timeline/[id])
-
Add blocks to timeline by clicking on the person you want to assign those blocks
-
Look at the Problems tab to see if there are any people whose assigned blocks are outside availability
This will have to move soon as Heroku winds down its free plan.
The application will store Users, Timelines, and People
- users can have multiple timelines (by reference)
- each timeline can have multiple people attatched to it (by reference)
- each timeline will have multiple blocks assigned within it
- users can have multiple people (by reference)
- each person can have multiple "availabilty blocks" within in
An Example User:
{
username: "shannonshopper",
password: // a password hash,
timelines: // an array of references to Timeline documents
people: // an array of references to Person documents
}
An Example Timeline:
{
user: // a reference to a User object
name: "Tutoring",
people: // an array of references to Person documents
blocks: // an array of Block documents stored within the timeline
}
An Example Person:
{
name: "Alyssa P. Hacker"
user: // a reference to a User object
availability: // an array of Block documents stored within the timeline
}
An Example Block:
{
person: // a reference to a Person object (to whom this block belongs)
startTime: // a JS Date object
endTime: // a JS Date object
}
/register - for the user to register
/login - for the user to login
/add - page for creating timelines and people
/timelines - page for showing all timelines
/timeline/[id] - page for showing specific timeline
/people - page for showing all people
/people/[id] - page for showing specific timeline
- as non-registered user, I can register a new account with the site
- as a user, I can log in to the site
- as a user, I can add timelines to the site
- as a user, I can add people to the site
- as a user, I can add a person's availability to their record
- as a user, I can add people to timelines; their availability will be shown when you click on them
- as a user, I can add assigned blocks to people within timelines
- As a user, I can see any problems (including blocks assigned outside people's availability)