0% found this document useful (0 votes)
159 views2 pages

Full Stack Developer Challenge Guide

The document describes a challenge for a full stack developer to build a small web application using Angular and Node.js with the following requirements: The app should have a server component that pulls data from a Hacker News API into a MongoDB database every hour and exposes an API. It should be implemented with Node.js, NestJS, and TypeScript. It should also have a client component that renders the data in chronological order and allows deleting posts. It should be implemented with Angular or React without additional frameworks. Both components should be containerized with Docker and Docker Compose and have test coverage and be deployed to GitLab with CI/CD pipelines.

Uploaded by

Samuel Pilay
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
159 views2 pages

Full Stack Developer Challenge Guide

The document describes a challenge for a full stack developer to build a small web application using Angular and Node.js with the following requirements: The app should have a server component that pulls data from a Hacker News API into a MongoDB database every hour and exposes an API. It should be implemented with Node.js, NestJS, and TypeScript. It should also have a client component that renders the data in chronological order and allows deleting posts. It should be implemented with Angular or React without additional frameworks. Both components should be containerized with Docker and Docker Compose and have test coverage and be deployed to GitLab with CI/CD pipelines.

Uploaded by

Samuel Pilay
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
  • Full Stack Developer
  • Considerations
  • Extras

Full Stack Developer 

 
 
CHALLENGE 
We would like you to build a small web application to test your knowledge of Angular and 
related technologies. 
 
Please refer to the attached wireframe for an understanding of what the finished app 
should look like. 
 
The app should have two separate components: the Server and the Client. 
 
The server should take care of pulling the data into the database and expose an API for the 
Angular client. The client should render a web page that lists the articles in chronological 
order. 
 
SERVER COMPONENT 
Once an hour, the server app should connect to this API which shows recently posted 
articles about [Link] on Hacker News: 
 
[Link]
 
The server app should insert the data from the API into a MongoDB database and also 
define a REST API which the client will use to retrieve the data. 
 
CLIENT COMPONENT 
The user should be able to view a web page which shows the most recent posts in date 
order (newer first). They should be able to click the delete button to delete an individual 
post from this view. One a post is deleted it should not reappear, even if the HN API returns 
it. Also, keep an eye on how the date is presented on each row in the wireframes. 
 
STACK 
You must use the following technologies to build the app: 
 
● Server component: Active LTS version of N ​ [Link]​ + N
​ estJS​ + MongoDB 
● Client component: latest version of Angular or latest version React 
 
CONSIDERATIONS 
● [Link] version active LTS 
● The server component should be coded in TypeScript 
● The client component s​ hould not​ use any UI framework library like Bootstrap, 
Material UI, etc. 
● At least 30% test coverage (statements) for the server component. 
● The whole project has to be uploaded to GitLab 
● Both artifacts (server and client) have to be Dockerized 
● To start the project there should be a docker-compose that uses both images and 
the MongoDB image. 
 
EXTRAS 
● Tests and linters should be run on a GitLab pipeline ([Link]).  
● The client should be compiled in a Docker multi-stage build. 

 
Other than that, you are free to use any suitable npm or other libraries. 
 
Send us your completed code as a public Gitlab repo URL emailed to ​veronika@[Link] 
The repo should be only one (monorepo), for both server and client. 
 
Include a README which explains anything we need to do to run the demo app, for 
example: setting up a database, forcing a data refresh to populate the DB for the first time, 
etc. 
 
If you have any questions about the task, please let us know. 
 
Once again, thank you for your time and we are looking forward to seeing the results! 

Common questions

Powered by AI

The requirement of at least 30% test coverage for the server component ensures a minimal level of code quality and reliability by mandating automated testing. This helps in identifying bugs early in the development process, encourages writing modular code, and facilitates maintainability and scalability of the project. Adequate test coverage can increase stakeholder confidence, reduce the risk of critical failures in production, and provide a safety net for future code changes .

After setting up the repository using the monorepo structure, the developer should create the Dockerfiles for multi-stage builds of client and server components, and a Docker Compose file for joint service management along with MongoDB. Implement the backend to fetch and store data from the Hacker News API, ensuring data consistency. The developer should then build the Angular or React frontend to interact with the REST API. Finally, they should run the entire setup using Docker Compose, which will manage the build and deployment processes, followed by running associated tests to verify functionality .

The server component should connect to the Hacker News API every hour to fetch recent articles about Node.js and insert this data into a MongoDB database. To manage data consistency, the server must ensure that duplicate entries are not inserted by checking for existing records before insertion. Utilizing unique identifiers per record from the API will help manage duplicates. Moreover, when a post is deleted via the client, it should be permanently removed from MongoDB to prevent it from reappearing, ensuring consistent data management .

The restriction against using UI frameworks like Bootstrap pushes developers towards relying on native styling capabilities of Angular or React, such as Angular's CSS encapsulation or React's styled-components. Consequently, developers might leverage libraries that provide utilities for handling CSS efficiently, like CSS-in-JS libraries. Additionally, developers need to ensure cross-browser compatibility and responsiveness through manual CSS development or utility-first CSS libraries, requiring more effort in style management and testing .

Incorporating tests and linters in a GitLab CI pipeline automates the detection of code quality issues and ensures adherence to coding standards. This continuous integration practice aids in early bug detection, consistent code styling, and verification of code changes, all leading to a reliable build process. If tests and linters were omitted, it could result in more frequent introduction of bugs into the codebase, decreased code quality, and prolonged development cycles due to issues being identified later in the project lifecycle .

Using a monorepo structure means both the client and server components reside within a single GitLab repository, simplifying version control and cross-component refactoring. It facilitates unified project configuration and dependency management, thereby promoting easier collaboration among teams. However, it may also result in a larger codebase, potentially complicating merges and increasing the chance of conflicts, necessitating robust CI/CD practices to maintain coherence .

A README file in the GitLab repository serves as the primary guide for understanding the setup, configuration, and execution of the project. It provides insight into the project's structure, dependencies, and operational requirements, which is essential for onboarding new developers, ensuring smooth project transitions, and maintaining continuity even when team members change. A well-documented README can significantly enhance the project's usability and reproducibility, resulting in a more coherent and accessible development process .

The client component should not use any UI framework libraries like Bootstrap or Material UI, which constrains developers to rely on custom styling solutions. This can lead to challenges in efficiently managing styles and layout, potentially increasing development time to ensure a user-friendly interface. Developers may need to implement responsive design manually, which could result in increased complexity and potential styling inconsistencies across different devices .

The server component must be built using the Active LTS version of Node.js, NestJS, and MongoDB, while the client component must use the latest version of Angular or React. Dockerization is crucial as it ensures that both components along with MongoDB can be deployed consistently across different environments, optimizing for development and production parity. Docker Compose facilitates managing these multiple services, making the setup reproducible and scalable .

The restriction on UI framework usage encourages customization and potentially cleaner, less opinionated styling that aligns precisely with project requirements. It drives developers to focus on performance-optimized, lightweight applications that do not include extraneous framework features. Custom design solutions can better accommodate the specific data presentation and interaction styles outlined in the wireframe, enhancing user experience and ensuring that application behavior matches expectations .

Full Stack Developer 
 
 
 
CHALLENGE 
 
We would like you to build a small web application to test your knowledge of Ang
CONSIDERATIONS 
●
Node.js version active LTS 
●
The server component should be coded in TypeScript 
●
The client componen

You might also like