Welcome to the watchTowr javascript assignment.
💡 Please fork this repository before you get started!
We'll be working predominently with React, Typescript and Node.
There are two sections to this assignment, the first being the expected must have requirements to be completed and the secondary good to have stretch goals that you're free to attempt if you have additional time. It's not expected you complete all the stretch goals of this assignment, but you're expected to complete at the primary requirements.
- 1. 🖥️
watchTowrjavascript assignment - 2. 📖 Table of Contents
- 3. 🚀 How to get started
- 4. 🥅 Primary Goals
- 5. 🎯 Secondary Goals
- 6. 👀 What we're specifically looking for
This project is bootstraped with create-react-app and the typescript-template. The css engine we're using is chakra-ui.
You're free to use the components provided by chakra-ui but we hope you at least take some time to customize the look to match to provided example.
As for other packages, feel free to import any other packages you see fit! That's what the JS community is for. However, do know that any package you install will be used against you 😉 during the interview!
For the first primary goal is to create a Carousel that slides from left to right and right to left as with the following example:
These are the following acceptance criterias:
- Given that there are more than 3 items in the carousel,
- there should be navigation arrow on each side of the component to allow users to slide to the next set of 3 items.
- there should be a preview dot tab at the bottom of the carousel that informs based on the number of sets of 3 there are. For example, if there are 6 items, then there should be 2 dots that represent the number of sets. If there are 7 items, there should be 3 dots.
- Given that there is less than 3 times in the set within the carousel,
- The card items should flush to the left of the component
- Given that when the user clicks the navigation arrows or the preview dots, the carousel should slide smoothly in their respective directions
Feel free to use these acceptance criterias as your test suite cases!
Pre start instructions:
- Please checkout a branch from
devwith the namefeat/task-1. feat/task-1should be the working environment of your implementation.- Use the
package.jsonscriptyarn start:task1to initialize the project. - Happy hacking!
Expected delivery instructions:
- We expect the code to be committed into a branch called
feat/task-1 - There should be a pull request called
feat: TASK-1 carousel componentto mergefeat/task-1intodev. - Feel free to merge the branch from
feat/task-1into main after you've completed the requirements.
Please only attempt this part of the task after you've completed Task 1.
This next primary requirement is a extension to the first task
We want to extend the usage of the carousel to accept data from a backend service.
Your acceptance criteria is as follows:
- Given component should fetch the relevant information from the provided mocked backend,
- then preload the relevant data before the last set of cards in the carousel to reduce load times for the user
- if the network request is too slow and the user has already reached the end of the carousel, then render a loading state to inform the user of the inflight request
- Given the asynchronous data,
- the preview dots should reflect the total set of cards in the carousel after the values have been updated
Pre start instructions:
- Please checkout a branch from
devwith the namefeat/task-2. feat/task-2should be the working environment of your implementation.- Use the
package.jsonscriptyarn start:task2to initialize the project. - Happy hacking!
Expected delivery instructions:
- Similarly to task 1, there should be a branch called
feat/task-2 - There should be a pull request called
feat: TASK-2 server data for carousel componentto mergefeat/task-2intodev. - Feel free to merge the branch from
feat/task-2into main after you've completed the requirements.
Here are some secondary stretch goals you can try and accomplish if you find yourself itching for more!
- Try switching out the mocked json service to a live http endpoint and deploy your carousel app!
- Try to create an actual http service with express to service data so that you can deploy both your front-end and back-end code!
- Try dockerizing both your back-end and front-end codebases and serve them locally with
docker-compose! - Try adding client-side navigation to your carousel so you're able to navigate to a detail page from the cards!
- Try adding to the drag event so it's compatible with mobile phones!
- Thought process of code, the best way to showcase this is via commits
- Structure of components and props passing, what are some ways you can structure your components so it doesn't break the single responsibility principle.
- Managing of state and effects of data, how do you make sure your component doesn't render to often?
- Eye for detail while implementing user interfaces, our designers painstakingly craft each user interface and we want to make sure we live up to their standards.
- Having fun writing and building user interfaces! Our client facing product team members love product building.



