For Your Party Code Challenge Specifications
Document Objective
The purpose of this document is to provide detailed documentation that clearly defines the application that an applicant will create for the For Your Party Code Challenge.
For Your Party needs a way to track the interest in the products it sells. This application will display the categorized products currently sold. In addition, the user should be able to "favorite" a product.
The end users of the application will be customers of For Your Party. The majority of these users use a modern version of Google Chrome browser and Firefox as well as mobile browsers.
The details for this web application are defined below.
The developer will import data from a csv file provided by this gist file products.csv into a structred database of their design. This database will then be used to render products display and also save favorites.
The experience will adhere to these requirements:
- Create a hierarchical menu displaying products by collapsible categories.
- Clicking / tapping on any of the products should "Add to Favorites" by calling a json API endpoint using the fetch API.
- This state will display a heart toggle (SVG) next to the product.
- Hovering over a product name will reveal it’s sale price.
When a user toggles a product as their favorite the User Interface should save that state in a database. Create an API that will receive a json payload containing the Name of the product and a flag signifying the product is favorited by the user. This will be stored in a structured database. This API endpoint should adhere to RESTful design practices.
The developer is expected to adhere to the following parameters
The application code will be created with the assumption that other developers will work on it in the future, so it must be documented enough to make it easy for others to understand and maintain.
The application code must be developed using Object‐Oriented methodologies. It must also be written in PHP 7+ and be E_STRICT‐compliant. The use of third party libraries and packages (ie. packagist.org) is allowed.
All application errors must be handled gracefully and display user‐friendly error messages if necessary.
The quality of the site design will not be judged, but the HTML must be semantic and valid.
While the overall design of the site will not be judged there are some CSS expectations.
- Design must be responsive in order to work well on mobile devices.
- Use of third party css frameworks and libraries are prohibited.
- Use BEM naming.
- Use CSS Grid instead of Flexbox.
- Use of
!important
is prohibited.
The developer will provide a url to a github (or similar git hosting service) repository. Instructions on how to run the application will be provided within the README.md file.
If you cannot finish simply do the best you can and explain your thought process in the comments. Work at your own pace. We prefer quality over speed.