Instruction
This test is to help us understand your coding style and level. Use the opportunity to demonstrate your coding skills.
In this test, you’ll need to create a catalog application with the details provided below:
- The mandatory requirements are for all candidates.
- The optional requirements are required for Intermediate level (Junior/Intern are encouraged to try if you have enough time).
You are not expected to spend more than 2 days to complete the test. Please create a public repo github, push all your code on it and send us back the repo’s url.
Catalog Application
John is running a computer shop. Your job is to develop a web-based product that helps John quickly find products. You are provided with a mockup of the application and functional requirements below. The mockup is only a suggestion, feel free to arrange the UI in any way that you find more reasonable.
Website Interface Mockup
You are provided with a product listing api: API which returns a current list of John’s products. Each product item has the following fields:
- id: number
- name: string
- imageUrl: string
- dateAdded: Date
- dateUpdated: Date
- price: number
- brand: string
- code: string
Mandatory Requirements
Since John’s product collection is large, he’d like to be able to search for products by keywords in products’ names. Please implement a search feature that meet these criteria:
- Searches are case-insensitive. i.e query “acer laptop” would match a product named “Next generation Acer Laptop“.
- Queries can match non adjacent terms, i.e “Acer Laptop” should match a product named “Acer Aspire 5 Slim Laptop“.
- Queries can match product names out of order. For example, the query “acer laptop” should match a product named “Cheap laptop from Acer“.
- Your implementation should be performant, i.e it should work for much larger collections than provided in sample data.
Optional Requirements
For better user experience, you may consider to:
-
Filter products as user types query.
-
Highlight matched terms in displayed results.
-
Rank search results by relevance. For example, when searching for “Acer Laptop”:
-
In-order matches are displayed first. Product named “Acer Laptop 14 inch” should appear before “Cheap laptop from Acer”
-
Product names that match the query closer should be displayed first. i.e product with named “Acer Aspire 5 Slim Laptop” should be ranked higher than “Acer Aspire with Full HD IPS Display and Backlit Keyboard Laptop”
-
-
Allow partial term matching. E.g searching for “Acer Lapt” can result “Acer Aspire 5 Slim Laptop”
Do not limit yourself to the suggested topics or details mentioned here. Feel free to dive into a separate area or separate aspect of the area as you see fit. We want you to showcase your technical depth and distinguish yourself from less experienced engineers.
FYI: Our Tech Stack
Backend | Nodejs, Python (Django) |
Database | Mongodb, Postgresql, GCloud Data Store |
App | Flutter, Swift, Java, React Native |
Front End | React JS |
Storage | GCloud Storage |
Server | GCloud Compute Engine |