Giter Club home page Giter Club logo

frontend-test-assignment's Introduction

simbase-frontend-assigment

πŸ‘‹ Welcome to the Simbase Frontend Test Assignment!

To Submit

Here is my submission All completed tasks are highlighted below with a βœ…

General Instructions

  • Fork this repository to get started, and share it with beikeni (Alessandro Baccini) when you're finished.
  • This repository uses React + ReactRouter v6 + Typescript + Tailwind CSS, these tools are mandatory.
  • Some components are built using HeadlessUI, you can continue using it or replace it with another Tailwind-based library of your choice.
  • You can use whatever 3rd party library you want to achieve any of the tasks detailed below.
  • This excercise uses the Cat API. You will need to sign up to get an API key.
  • Consult the API Docs here. You will find a couple of endpoints already present in the app, but you will need to implement a couple more to complete the Favorites feature.
  • Make sure to read this entire document before getting started, some bonus tasks might affect how you work on the main features.
  • Before submitting the assignment write a brief explanation of your choices and any additional information you think is relevant.

Briefing

sample At the moment, when selecting a cat breed from the dropdown menu at the top, a corresponding list of photos is fetched and displayed. These photos, rendered within cards, have two buttons on them: a heart and an β€œX”. These buttons are now inactive. Your goal is to implement the following features and improvements to the application, while using tailwind CSS to style the UI components.

Features:

The β€œFavorites” feature:

  • βœ… Allow users to toggle the favorite status on and off.
  • βœ… The favorite status has to bee visible and toggleable from both the Home page and the Favorites page.
  • βœ… The favorite status has to be propagated to the API.
  • βœ… A confirmation modal has to be displayed when a user attempts to remove a favorite, only upon receiving this confirmation will the change be propagated to the API.
  • βœ… If the user is on the Favorites page and the favorite status is removed from a picture, the list has to refresh without any further action.

The β€œLimits” feature:

  • βœ… A component of your choice has to be placed next to the dropdown allowing the user to select how many pictures to display.
  • βœ… The component can be a radio, a slider, or anything else that you think would offer a good user experience.
  • βœ… The list of cards should refresh immediately if the limit is updated.

The β€œDelete Card” feature:

  • βœ… In the Home page the cards have an additional button marked with an β€œX”.
  • βœ… This button should remove the card on which it is on from the local state/cache.
  • βœ… Removing a card, similarly to removing a favorite, also should be confirmed via a confirmation modal.
  • βœ… This feature should only be present on the Home page.

Improvements:

Data Fetching & State

  • βœ… Implement some form of caching, you can use the tool of your choice. Some options are react-query, zustand, redux-toolkit/rtk-query, or even React context.

Types

  • βœ… Introduce types across the application.

Components

  • βœ… Create two confirmation modals on top of the BaseModal component:
    • βœ… Use one to confirm the deletion of a cat card from the Home page (local state).
    • βœ… Use the other one to confirm the removal of a favorite (local state & API).

Style

  • βœ… Style the BaseModal component.
  • βœ… Make the Home page and the Favorites page responsive. (desktop + mobile)
  • βœ… Make the card buttons responsive (heart and β€œx”).

Code Quality

  • βœ… Refactor the code of the Home page to be tidier and more readable.

Bonus Tasks:

Tip

We understand that some of these tasks can take up a lot of time. If a task is marked with a star, you have the option of explaining your approach in writing instead of implementing it.

  • βœ… Implement generic types in the BaseDropdown component.
  • βœ… Implement the confirmation modals so that they are rendered only when needed.
  • Make the page multilingual (static elements only) ⭐
  • Explain your approach to accessibility ⭐
  • βœ… Write automated tests (use the tooling of your choice) ⭐
  • βœ… Deploy website via a CDN (ex. AWS Cloudfront) ⭐
  • βœ… Any additional UX improvements will be counted as bonus. These can be things like highlighting important details, adding animations that help the user focus on the right element, adding hover states, etc..

Evaluation Criteria

At Simbase we try to walk the line between building solid products and delivering them within a reasonable time frame, always erring on the side of stability over speed of development.

We strive to write readable, modular, testable and well documented code that will make the life of those who will come after us (or ourselves 3 months later) easier. Through this assignment we hope to see how you can help us furthering this goal.

We normally don't encourage over-engineering, but if you wish to go overboard to illustrate how you would approach an issue in a production environment, by all means don't hold back.

Feedback

Whether you're selected for the next stage or not, we'll provide feedback on your assignment. We're looking forward to seeing your work! πŸš€

frontend-test-assignment's People

Contributors

charleserrington avatar beikeni 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.