Site Description
The Ultimate Gear Review is a website dedicated to honest and in-depth reviews of tactical and adventure gear and training from professionals in the field and everyday users. It is a community effort to join people with similar interests together to create a place of reference to allow users to make informed decisions on equipment and training expenditures. In addition, the Ultimate Gear Review seeks to contribute to the advancement of gear and training by acting as a link between users and developers, thus leading to better products.
Source: http://www.ultimategearreview.com/about/
Development Overview
The application that powers ultimategearreview.com was written using Django with MySQL as it's database. Django was chosen after evaluating several options (primarily Drupal and Zend Framework). The layout (HTML, CSS) of the site had already been developed by another party and it was my contention that the path of least resistance would be to leave as much of that unchanged as possible.
My approach was to create two templates based on the original HTML files (one for the home page another for all sub pages). Where appropriate, static text was removed and replaced by a mechanism to control the content dynamically. In Django, this is done through the use of a URLs configuration file (urls.py) which contains various urls that trigger a specific method or action. These methods figure out what information is needed based on various factors, including: the page visited, the user's permissions and the current state of the database. These methods in turn have corresponding template files whose sole purpose is to display the data obtained by the method that calls them. These template files then extend the base.html file in order to display the information within the context of the overall site.
The User Perspective
There are four levels of groups on the website. Anonymous, Reviewer, Editor, and Administrator. Anyone who visits the site and is not logged in is an Anonymous user. A person with such a role can only view the site and submit a message to the Ultimate Gear Review staff using the contact form.
Anyone can sign up to become a Reviewer by visiting the registration page. Reviewers have the ability to write reviews of products listed on the website. However, an Editor must approve of any review written by a non-Editor. Whether or not a review has been approved, when logged in a Reviewer always has access to their reviews and can edit them at any time. If they edit a review which has already been approved, it will go back into the review process and be hidden again until given the OK by an Editor.
An Editor has permissions similar to a Reviewer with the only difference being that their reviews do not require further approval (though they can choose to keep them inactive). They also, as stated, have the power to approve/disapprove of other user's reviews. Approval of a review is done using a link that makes an Ajax call to the server and updates the status of the review (to approved/disapproved) on the fly.
The Administrator of the site has the same permissions as an Editor, plus the ability to add new companies and products to the website. Companies and products, like reviews, can be "hidden" from public view by the Administrator. Doing so automatically hides any associated data. For example, if "Company A" makes "Product XYZ" and "Company A" is marked inactive, "Product XYZ" will not appear on the product page.
The review system also incorporates a way to rate products on a scale from 1-5. Ratings of all the active reviews of a given product are averaged to determine it's overall rating. This information appears as part of the product's description. Reviews that are not yet approved do not count toward this calculated value.
All non-Anonymous users have their own profile page and have the option to edit their information using a web form. If someone visits a profile page that has not yet been created (all users instantly have a link to their profile page, whether or not it yet exists), the application will automatically generate a profile with temporary data and display that. This was done in order to avoid having visitors being redirected to a 404 page simply because a user hadn't yet created their profile.
My Role
My role in developing this website was in designing and coding the entire Django application. This included determining the model structure, url configuration, and the view/template logic. Testing and debugging of the application was done by myself as well. The overall look and feel was created by Logoworks.
