{"id":21540041,"url":"https://github.com/robinpowered/frontend-interview-challenge","last_synced_at":"2025-09-10T15:38:19.152Z","repository":{"id":25741202,"uuid":"85733229","full_name":"robinpowered/frontend-interview-challenge","owner":"robinpowered","description":"Robin Frontend Interview Challenge","archived":false,"fork":false,"pushed_at":"2023-07-19T14:21:40.000Z","size":2865,"stargazers_count":36,"open_issues_count":9,"forks_count":20,"subscribers_count":9,"default_branch":"master","last_synced_at":"2025-01-24T08:11:39.820Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"HTML","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/robinpowered.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-03-21T17:31:16.000Z","updated_at":"2024-02-21T13:59:16.000Z","dependencies_parsed_at":"2025-01-24T08:11:42.494Z","dependency_job_id":"273e4bff-becc-407e-9656-e8227e968b3d","html_url":"https://github.com/robinpowered/frontend-interview-challenge","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robinpowered%2Ffrontend-interview-challenge","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robinpowered%2Ffrontend-interview-challenge/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robinpowered%2Ffrontend-interview-challenge/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robinpowered%2Ffrontend-interview-challenge/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/robinpowered","download_url":"https://codeload.github.com/robinpowered/frontend-interview-challenge/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244117041,"owners_count":20400735,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-24T04:17:03.569Z","updated_at":"2025-03-17T21:44:49.142Z","avatar_url":"https://github.com/robinpowered.png","language":"HTML","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Robin Front-end Interview Challenge\n\nHi there! Congrats on making it to the take-home portion of our interview process! We aim for this exercise to be enjoyable and brief, and welcome feedback. We also are happy to answer questions, so please don't be shy about reaching out to your point of contact at Robin should you find any parts of this challenge unclear or confusing.\n\n## Getting Started\n\nTo get up and running:\n\n1. Install NodeJS 16+. If you have `nvm` installed, run `nvm use` from the root of the repository.\n2. Install dependencies:\n\n   ```bash\n   npm install\n   ```\n\n3. Boot up the test web server \u0026 front-end application:\n\n   ```bash\n   npm start\n   ```\n\n## Challenge\n\nYou will be building a simple web app that fetches data from a remote server, transforms it, and outputs some UI. In the end, your solution should match this wireframe:\n\n![Wireframe](wireframe.png)\n\nSpecifically, we ask that you:\n\n### 1. Fetch remote data\n\nPlease make an HTTP request to fetch JSON from the bundled web server. This server is started automatically upon running `npm start` and is available at `http://localhost:8080/data`.\n\nWe've also [proxied](https://create-react-app.dev/docs/proxying-api-requests-in-development/) the server for your convenience, so you may fetch data in your client-side code by simply making a `GET` request to `/data`.\n\nSee the `User data` section below for more information about the shape of the JSON.\n\n### 2. Display the data in a table\n\nPlease render a table of events for all users, but **only include events that start and end within each user's working hours**.\n\n### 3. Add a user filter\n\nPlease create a filter with options for each user in the dataset. When a user is selected, only show events in the table for the selected user.\n\n## Guidelines\n\nWhen writing your solution, please:\n\n- Timebox your effort to no more than 2 hours. Even if your solution is incomplete, we'd prefer that you feel proud of the code you did write rather than accept an incomplete or buggy solution.\n- Use whatever tools or packages you'd like to help you write your solution. If you enjoy performing network requests with `axios` or styling tables with `styled-components`, feel free to install these libraries!\n- TypeScript is enabled in this project and is available for use but it is **not required**! Write your solution in whichever language you're most comfortable with. If you prefer plain JavaScript, the easiest path forward is to create `.js` or `.jsx` modules instead of `.ts` or `.tsx` (and rename the existing `App.ts` to `App.js`, too).\n\n## User data\n\nThe test data served by the bundled web server is array of objects where each object represents an individual user, with properties for:\n\n- A list of meetings the user has on their schedule (`events` property)\n- The hours in which the user works (`working_hours` property), and their time zone\n- The user's ID and name (`user_id` and `user_name` properties)\n\n```json\n[\n  {\n    \"user_id\": 1,\n    \"user_name\": \"Alice\",\n    \"working_hours\": {\n      \"start\": \"09:00\",\n      \"end\": \"17:00\",\n      \"time_zone\": \"America/New_York\"\n    },\n    \"events\": [\n      {\n        \"id\": 2,\n        \"title\": \"Meeting B\",\n        \"start\": \"2019-01-01T09:00:00-0500\",\n        \"end\": \"2019-01-01T10:00:00-0500\"\n      },\n      ...\n    ]\n  },\n  ...\n]\n```\n\n## Extras\n\nOptionally and only if you find yourself with extra time on your hands (we really mean it - these are not requirements), we'd love to see you show off your skills by adding any of the following:\n\n- loading and error states\n- accessible table considerations\n- offline detection for users of the application\n- the scaffolding to share selected user state across the application (pretend we were going to add more views to this application, and each view needed access to the filtered user - how could we achieve that? )\n\n## Submitting the Challenge\n\nIf you have any notes you'd like us to review when we look over this project, please feel free to add them to the `notes.md` file at the root.\n\nAfter completing this challenge, please email us your zipped solution!\n\nWe look forward to seeing your work and will get back to you promptly.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frobinpowered%2Ffrontend-interview-challenge","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frobinpowered%2Ffrontend-interview-challenge","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frobinpowered%2Ffrontend-interview-challenge/lists"}