Develop a combined backend and frontend application that consumes a 200-article JSON feed, implements simple database search querying, and displays a (at minimum, barebones) website with basic category and search filtering.
We expect to see:
- A backend application in PHP that consumes the JSON feed, publishes it to a database, and exposes the database via APIs.
- These APIs should expose retrieval of lists of articles, and can perform simple filtering (against categories) and querying (search) of the article main body and title
- The quality of the search results are not judged in the case of full-text search
- A database that stores the JSON feed in a well-formed way, with appropriate indexes
- An SPA frontend that calls the backend API, shows the articles, and has UX for filtering the category names and a search box
- The design of the frontend is not important and is not judged in this test
- Memory usage should be a consideration
- A full git log showing work done
- A README to explain how to boot and run the end result
What would be nice to have:
- Unit tests
- Migrations
- Full docblock comments
- PHP 7.4 usage
- Docker
The choice of frameworks is up to the developer, however keep in mind that TNW predominately develops with Laravel and React.JS.
A json file (feed.json
) is bundled with the test. This is a production capture of the TNW Data API.
Although quite verbose, the following fields are of importance (the rest can be ignored or consumed if desired):
title
– The title of the articleslug
– The unique id of the articlecontent
– This contains the main body of the article. In the provided feed only one array item exists which contains a html body.categories
– Shows the categories associated to the article. primary being the single primary category, and additional being a 0-n list of additional categories. If an article does not have a primary category, use the first additional category.media
– Associated media for the article. The featured type (which may not exist) should appear at the top of the article. If it does not exist, show a placeholder.
We expect this test to take no longer than 6-8 hours, however there is no hard limit.