{"id":19962795,"url":"https://github.com/mui/tech-challenge-full-stack","last_synced_at":"2025-08-18T15:06:33.952Z","repository":{"id":63292731,"uuid":"473145894","full_name":"mui/tech-challenge-full-stack","owner":"mui","description":"This challenge is part of the hiring process for some of the Software Engineer positions at MUI.","archived":false,"fork":false,"pushed_at":"2025-08-09T19:05:53.000Z","size":114,"stargazers_count":16,"open_issues_count":1,"forks_count":6,"subscribers_count":14,"default_branch":"master","last_synced_at":"2025-08-15T18:51:15.166Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mui.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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,"zenodo":null},"funding":{"github":null,"patreon":null,"open_collective":"mui-org","ko_fi":null,"tidelift":null,"custom":null}},"created_at":"2022-03-23T10:50:47.000Z","updated_at":"2025-08-11T06:26:50.000Z","dependencies_parsed_at":"2024-11-08T23:25:05.265Z","dependency_job_id":"abdd1abf-f3ed-4d2b-a3f4-3828757c6376","html_url":"https://github.com/mui/tech-challenge-full-stack","commit_stats":{"total_commits":18,"total_committers":2,"mean_commits":9.0,"dds":"0.38888888888888884","last_synced_commit":"855e033ba71099687eb7b56b26b823016b47224a"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/mui/tech-challenge-full-stack","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mui%2Ftech-challenge-full-stack","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mui%2Ftech-challenge-full-stack/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mui%2Ftech-challenge-full-stack/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mui%2Ftech-challenge-full-stack/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mui","download_url":"https://codeload.github.com/mui/tech-challenge-full-stack/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mui%2Ftech-challenge-full-stack/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":271012016,"owners_count":24684455,"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","status":"online","status_checked_at":"2025-08-18T02:00:08.743Z","response_time":89,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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-13T02:12:59.395Z","updated_at":"2025-08-18T15:06:33.911Z","avatar_url":"https://github.com/mui.png","language":"TypeScript","funding_links":["https://opencollective.com/mui-org"],"categories":[],"sub_categories":[],"readme":"# Full-stack technical challenge @ MUI\n\nThis challenge is part of the hiring process for some of the Software Engineer positions at MUI.\nThe idea is to make as much progress as possible under a given time constraint (3-4 hours).\n\n## Why are we doing this?\n\nMUI is looking for Full-stack engineers to join the team.\nWe are looking for people who are proficient in both modern React development and backend technologies.\nThroughout this challenge, you are required to build a basic forum application.\n\n## Context about MUI\n\nMUI's objective is to become the UI toolkit for React developers.\nWe're unifying the fragmented ecosystem of dependencies into a single set of simple, beautiful, consistent, and accessible React components.\n\nOur mission is, ultimately, to make building great UIs and web apps a breeze ⎯ quicker, simpler, and accessible to more people.\nAt the end of the day, it's about [_writing less code_](https://youtu.be/GnO7D5UaDig?t=2451).\n\nHead over to [our company Handbook](https://mui-org.notion.site/Why-MUI-d8b8c142a6a44e3aa963f26edf4e03db) to learn more!\n\n## The challenge\n\nYou are handed a PostgreSQL database containing some data and a starter Next.js application.\nYou have to interface with this database and visualize it in a React UI.\n\n## Database\n\nThe database contains the following schema and is seeded with some dummy data.\n\n```sql\nCREATE TABLE thread (\n  id SERIAL PRIMARY KEY,\n  created_at TIMESTAMP NOT NULL DEFAULT Now(),\n  title TEXT NOT NULL\n);\n\nCREATE TABLE post (\n  id SERIAL PRIMARY KEY,\n  thread_id INT REFERENCES thread (id) NOT NULL,\n  created_at TIMESTAMP NOT NULL DEFAULT Now(),\n  title TEXT NOT NULL,\n  body TEXT NOT NULL,\n  starred BOOLEAN NOT NULL DEFAULT false\n);\n```\n\nThis is a simple forum-like application with separate threads, each thread containing a set of posts.\nYour task is to build a UI on top of this data that allows viewing the threads and adding new posts.\n\nA mockup of a potential UI:\n\n```\n+--------------------------------------------------+\n| thread 1 | title: thread 2                       |\n| thread 2 +---------------------------------------+\n| thread 3 | Post title 1               created_at |\n| thread 4 |                                       |\n| thread 5 | Post body 1                           |\n| thread 6 |---------------------------------------|\n|    .     | Post title 1               created_at |\n|    .     |                                       |\n|    .     | Post body 1                           |\n|          |---------------------------------------|\n|          | textfield                             |\n|          |                                       |\n|          |---------------------------------------|\n|          |                               [ send ]|\n+--------------------------------------------------+\n```\n\n### Run instructions\n\nStart the database with:\n\n```sh\ndocker-compose up\n```\n\nRun the application with:\n\n```sh\nyarn\nyarn dev\n```\n\nThe UI is accessible at http://localhost:3002\nIf everything is set up well you should see the message \"Database connection: succeeded\"\n\n### Requirements\n\n- You are allowed to use any library or ORM you want, but you must use the provided PostgreSQL database and Next.js application.\n- List of threads: Threads must be displayed in a list, **sorted by the thread with the most recently created post first**.\n- Selecting a thread: Clicking a thread should reveal its posts sorted by least recent first\n- There's a form that allows you to enter a subject and a body and a button to add a new post to the thread.\n\n### Out of scope\n\n- To keep the scope of the assignment small, we'll keep the system user-agnostic. No authentication is required, assume you are the only user of this application.\n- No need to write documentation, unless there are extra steps involved in starting the application.\n\n### Nice to haves:\n\nDon't tackle these unless you have time left\n\n- Keyboard accessibility\n- Pagination\n- Form validation\n- Allow for creating new threads\n- The database comes without indices. Propose a set of indices to optimize the usage of this db.\n\n### Evaluation\n\n- First of all, try to respect the time limit, it's part of the grading\n- Quality over quantity: prefer doing half of the features at 100% rather than all of the features at 50%.\n\n## Submission\n\nInstructions:\n\n- **DO NOT** fork / host your project on a public repository.\n- Please send us a zip file containing this project using the upload link that we have provided by email (**with** the _.git_ folder).\n- To significantly reduce the size of the archive, remove the `/_node_modules_/` and `/.next/` folders.\n- If you don't have the upload link, you can send it to job@mui.com.\n\nWe're excited and looking forward to seeing what you'll create!\nGood luck 🚀\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmui%2Ftech-challenge-full-stack","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmui%2Ftech-challenge-full-stack","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmui%2Ftech-challenge-full-stack/lists"}