-
From the project's root, you can simply run
/bin/sh start.sh
, or for a more a more in depth start, refer to the next section. -
Once done with the app, simply run
/bin/sh stop.sh
from the root of the project to remove the containters and images from your machine. -
Only caveat is you'll need to be running on a Mac OS for these scripts to successfully execute.
-
In your terminal, navigate to
backend
and executedocker build -t express-server .
Verify the image was successfully built by executingdocker images
.Once done, navigate to
client
and executedocker build -t app-frontend .
Again, make sure the image was successfully built usingdocker images
.
-
In
backend
run the command:docker run -d --name app-server -p 3001:3001 express-server
. The-d
runs the command in detahced mode,--name
flag gives the app a name and-p
tag maps your machine's local port to the port exposed in the container. -
Next in
client
, run:docker run -d --link app-server:server --name task-app -p 3000:3000 app-frontend
where--link
creates an alias that can be used to communicate with the backend. -
Once both conatiners are running successfully, you can navigate to
localhost:3000
to view the app!- API documentation is at
localhost:3001/explorer
- API documentation is at
To get started, install all dependencies by running yarn
or npm install
. As an optional bonus, feel free to write
some unit tests for the reducers and/or components. There is no single "right" way to implement this problem -- it is
open ended as a feature. This portion of the interview is about examining how you write code/make architectural
decisions.
The application you'll be building is a simple task management tool. The tool will allow an end user to create, manage and delete tasks using a web interface. The functionality that your project should contain is as follows:
- Submit a task providing a task name, description, and due date.
- Display a list of existing tasks.
- View the details of a specific task.
- Mark a task as completed.
- Remove a task.
- Filter list of tasks to tasks due tomorrow and / or today.
- Filter list of tasks to just those tasks which are overdue.
- Filter list of tasks to tasks marked as completed.
- As a user, I need a visual indication of which tasks are due tomorrow and / or today as well as those tasks which are past due (2 different indications).
The application will need to be able to store tasks. For this exercise in-memory storage is acceptable. The user interface can be created without style / theming. Style / Theming will score you bonus points, but is not the goal of this exercise. The application has no need for authentication, authorization or any type of user profile or tracking. It is assumed that the application is used by a single user. The use of Docker / Docker Compose to run the application is encouraged.
backend
-- the folder where the backend livescommon
models
-- task model definitionserver
-- task model configurationboot
routes
-- where the express based LoopBack API routes are exported
client
-- the folder where the front end livespublic
-- you shouldn't need to modify anything in heresrc
actions
-- I'd suggest placing action creators/constants in this directorycomponents
-- presentational components can go herepages
-- actual pages of the application (link submission/list of links)reducers
-- Redux reducers go in hereindex.js
-- entry point for the web app. Everything should already be setup here.
This project was bootstrapped with Create React App. For
information about using Create React App
, click the previous link.