Code Monkey home page Code Monkey logo

take-home-assignment's Introduction

Usage:

  • make run to run app in dev mode
  • make docker to build docker images
  • make docker-run to build and run docker images

Task

Your task is to build a full-stack "Todo" Application in TypeScript. There are two discrete components to this system: A web client that will allow the user to interact with the application and a back-end API that the web client interacts with to store and retrieve data. Each component should run in its own process, however the entire project should be contained in a single git repository. The system does not need to support multiple users or persist data between application restarts though several bonus tasks including adding data persistence are outlined in the sections below. The final step is packaging the application in a manner that makes starting the application in development mode easy. The completed version should take no longer than 6 hours to produce but will take significantly less for candidates familiar with the required toolchain. Some implementation details are intentionally left to your discretion. This helps us determine your familiarity with the TypeScript ecosystem and best-practices.

The two models you will need are provided:

enum TodoStatusEnum {
  Active = 'Active', // the todo has is not completed
  Inactive = 'Inactive', // the todo is completed
  Archived = 'Archived', // the todo is archived (bonus)
}

interface Todo {
  title: string; // the title of the todo
  status: TodoStatusEnum; // the status of the todo
  lastUpdatedAt: number // a unix timestamp representing the time the todo was last updated
  createdAt: number; // a unix timestamp representing the time the todo was created
}

Getting Started

Fork this repository into your GitHub account. When you are finished, make a pull request back to this repository. Include a short summary of your experience completing this project in the pull request description.

Front-end Application

Bootstrap the front-end application however you best see fit. We recommend using a tool like create-react-app. The front-end should make HTTP requests to the backend to retrieve, create, and update todos. Style your front-end as best you see fit (this is not part of the grading). Your application will be graded on the following criteria:

Requirements

  • The user can create a todo with a title via a form.
  • The user can view a table of todos.
  • The user can edit the status and title of a to do via the todo table.
  • The user can delete a todo via the todo table
  • The user can archive a todo (Bonus Task)
  • The user can view a table of archived todos at the /archived endpoint (Bonus Task)

Tools

Back-end Application

Bootstrap the back-end application however you best see fit. The back-end should accept HTTP requests from the front-end and retrieve, create, and update todos stored in memmory. The backend DOES NOT need to support multiple users, authentication, or persist todos between restarts. You may add support for authentication or persistence as a bonus task. Your application will be graded on the following criteria:

Requirements

  • The back-end has a endpoint that allows for the creation of a todo
  • The back-end has an endpoint that allows all todos to be retrieved as a list
  • The back-end has an endpoint that allows a todo to be edited
  • The back-end has an endpoint that allows a todo to be deleted
  • The back-end requires a user to be authenticated to take the above actions (Bonus Task)
  • The back-end persists todos between restarts (Bonus Task)

Tools

Operations Tasks

  • Provide a single make run command that will install all dependencies and start the applications
  • Provide a single make build command that builds the both the front-end and back-end applications into Docker images and tags them as latest (Bonus Task)
  • Provide a single make docker-run command that builds both applications as Docker containers and runs them in a manner that allows them to communicate (Bonus Task)

take-home-assignment's People

Contributors

samheutmaker avatar brianbauer42 avatar bauerfyr avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.