Prof pages

Ready for a review, some UI elements may be changed but the core seems good. 

Closes #142
Just for some context, the reason to return a float rather than an int here is that we expect to return a normalized rating between 0.0 and 1.0 and thus returning a float here allows us the caller to make the assumption that the returned value will always be a float.