Skip to content

Latest commit

 

History

History
76 lines (48 loc) · 5.03 KB

oldREADME.md

File metadata and controls

76 lines (48 loc) · 5.03 KB

full-stack-test-template

A monorepo template to use for our full-stack test.

Expectations

As the name implies this is meant to be a full-stack test, but no full-stack engineer focuses equally on frontend and backend. Please complete both ends of the test, but feel free to lean more into the area you are most passionate about.

There is no time limit imposed by us or required response time. You can do a little each day over a weeks time or get it all done in a few hours. It's completely up to you, your schedule, and what you care to invest in this test. Just know that we don't need you to go overboard - it's just one part of your overall assessment and we know you have a life outside of working on this test.

Process

  1. Start by using this template. You can do this by clicking the "Use this template" button in the top right, then "Create a new reposistory". You should make this new repo private.
  2. Read the details about the test below and complete the test to your liking.
  3. Invite the code review team to your repository and email us to let us know it's ready. If the list of GitHub users has not already been provided to you, work with your contact here to get that list.
  4. We will review your work and schedule a technical interview where you will meet some of our engineers and discuss this test.

The Test

There are two sections to the test: API and UI. There are READMEs in each workspace, though they are just the default READMEs generated by NestJS & Vite. You can use them for reference or modify/replace them with anything you want to document.

API

Set up a SQLite database with TypeORM and configure it with the NestJS workspace. Create simple CRUD endpoints for any kind of entity (“users” would be a go-to default but feel free to come up with something more interesting to you, pick something from a hobby or a TV show you like; anything), and also create an SSE endpoint that sends notifications when an entity is created. Bonus points if your entity has any one-to-one or many-to-one relations. We would expect everything to follow Nest’s and TypeORM’s patterns, shown in their documentation. This includes controller/provider separation and TypeORM repositories & entities.

Just for the sake of this test, commit & push your SQLite database as well with a number of records already populated in the database.

UI

Find something that inspires you on Dribbble and use that as a basis for your front end. We’re not expecting anything crazy but we just want to compare what you picked vs what you implemented to see how you implement a design. The only thing we specifically ask is that you use MUI components, only because that’s what we use for our web apps. Develop a page that loads your API’s entities (e.g. “users”) and displays them as a list along with any of their detailed information.

Also develop a working frontend implementation of your SSE endpoint so that toast notifications are displayed whenever one of your entities is created.

We want to emphasize that we do not expect a full scale application with working navigation, complex animations, etc. You should only develop what you need in order to accomplish the goal we've given. Dribbble designs should be used as a basis/foundation for your app's design, not as a goal in itself.

Prerequisites

Technologies

Just like the stack we use in our monorepo, this monorepo uses NestJS for the API, and React (bundled by Vite) for the front end web app. We use pnpm for our package manager, which also manages the workspaces within the monorepo.

Getting Started

After installing the prerequisites, you can use nvm to install & path the correct Node version based on the .nvmrc in this repository.

nvm install
nvm use

Then, install packages from the monorepo root

pnpm i

You can use nx, either from a global install or with pnpx, to run workspace scripts from each workspace. There are more details on their website but for some quick examples:

  • pnpx nx run api:start:dev is going to run a package.json script in the api workspace, and the script is start:dev
  • pnpx nx run-many -t start:dev -p api web is going to concurrently run the start:dev scripts in both api and web workspaces

Other Scripts

  • pnpm run start:dev - Runs both API and web app together, concurrently