Assessment Hello! Thanks so much for your interest in joining Ambee tech team as a full stack developer! Below is the technical test for you! Please do let us know if you have any questions! You can email me on maddy@getambee.com Best of luck! Description =========== We work on many of the latest and greatest of technologies and versions respectively. Hence we are always challenged with learning something or the other or sometimes simply revamping what we do. Hence this assessment is to get to know you or put you in an unfamiliar but similar situation. We look upto you to be familiar with at least (some of) the following technologies (if not all) and show the ability in your coding and architecture! ### Frontend technologies: * ECMA 6 * Frontend framework e.g. VueJS/AngularJS/ReactJS * Webpack * HTML/CSS as needed ### Backend technologies: * NodeJS 8+ with ECMA 6 * Golang 1+ * Python 3+ * Redis or anything else of that kind ### Deployment * Docker & Kubernetes * or Serverless framework with AWS lambda or Cloud functions if you prefer so! ### Testing * Integration testing * Unit testing If you dont know something above, thats actually a great opportunity to learn it and implement it in this task. ## Goal 1 Understand how to calculate air quality data Visit this link and read about it - https://www.how-to-calculate.com/educational-calculator/how-to-calculate-air-pollution-level/ ## Goal 2 ** Building the Lead generating AQI Calculator ** Visit this link as an example of what we are trying to build - https://www.airnow.gov/aqi/aqi-calculator/ lets create a micro-service for storing the air quality data. Assume that there are sensors that send readings about air quality to your database over another microservice. Service for accepting the following 1) pollutant name 2) pollutant value 3) Customer Name 4) Customer Email id This should store username and password, while you calculate and output Air Quality Index to console when you test it.(since its a backend only app as of now) This service must be highly available and fault tolerant. System should take the leads and store in a data storage. If the data storage is unavailable for some reasons, system should automatically retry every 1 minute until the data storage is up. Since we could receive high volume of leads, the cost of network communication with the frontend app (Goal 2) needs to be minimised. We need something better, more optimized, more efficient than JSON! Note: You can use Golang/NodeJS/Python for this goal. ## Goal 3 ** Frontend app UI ** * Create a simple Front end app with a nav-bar, and a form the way you saw in the link in Goal 2. * You should have an application route called /aq-index * On this route your front end framework should takeover and render a page like the one in Goal2. * Data for this page should be served from from your app's route e.g. http://localhost:3000/json/aq-index.json * You should use Webpack to optimize, pack your assets, and serve to browser! * At Ambee we prefer isomorphic coding and server side rendering. Note: This is your opportunity to show your JS skills. Try over-engineering! Use advanced JS features like Async/Await, Generators, Event based operations whenever possible! Isomorphic javascript with server-side rendering (for SEO) is common at Ambee. ## Goal 4 **Security** (Optional) Young hackers are always around and growing. They need a playground to test their toys however Ambee can't be the target! Lets implement a rate limiter (redis?): * A single IP should not be able to hit your app more than 100 times per min * Integration of oAuth (https://auth0.com/), JWT * Anything else you would like to do to secure your app? ## Goal 5 **Deployment** Awesome! Good work! Deployment time! * All your services should be in containers (docker). * Use Kubernetes to deploy the whole stack.(try it out, you might love it there is a nice tutorial https://kubernetes.io/docs/tutorials/). There are others too feel free to. But if you couldn't do Kubernetes its okay. We get it. * Write a single deployment file for us which should do everything needed to have your app up and running. Your deployment file should work on Linux/Mac at least! Dockerizing your app is a must ## Goal 6 **Happy testing!** Last but not the least, testing! You can follow TDD or FDD! * There should be a way to test the application features and functions. * Must have integration tests! * Must have unit tests! ### Submit your code - Please don't forget to write your readme file which should contain what/why your have done things in certain way! Documentation is highly appreciated! - Your solution should be committed back into this repository like you would do in a normal project. - You can commit and push as many times as you want. - We prefer https://12factor.net/. - We value a clean coding style. It would be nice if you follow something like Airbnb's JavaScript Style Guide! Best of luck!