This is a Next.js project bootstrapped with create-next-app.
First, run the development server:
npm run dev
# or
yarn dev
# or
pnpm dev
# or
bun devOpen http://localhost:3000 with your browser to see the result.
You can start editing the page by modifying app/page.tsx. The page auto-updates as you edit the file.
This test consists of a base task and a focus task. The base task is required for all applicants. Choose one focus task depending on your field of expertise.
This task should take around 3 hours to complete. Please do not spend more than 4 hours. It is not expected that you finish all tasks with production-level quality in the time given. Besides output, we want to see your understanding of the tasks, your strengths, approach and philosophy. There will be time in the interview to discuss what you didn't have time to finish and the trade-offs you made.
Usage of AI coding assistants is encouraged, but be mindful that we will ask questions to test your understanding of the code in the interview.
When you are done, please create a PR in the repository including a description of your changes.
If you need to be added with a different account, or run into any trouble, contact dario.sanchez@why.de asap.
- We recommend using pnpm. If you use a different package manager, delete the
pnpm-lock.yamlfile first.- Quick intro:
pnpm ito install dependencies,pnpm devto run dev mode (with live changes),pnpm buildto build andpnpm startto serve the built version locally.
- Quick intro:
Display a grid of music search results (artists, albums, songs) with the name and an image if available. Feel free to also display other information returned in the API response.
Here is a Figma file with a basic mockup: https://www.figma.com/design/QaAUTjri39HPaSUTEoMfWQ/Cat-Grid?node-id=282-53
UI polish is not the focus of the base task. Feel free to use component libraries to speed up development. We like shadcn. Other than that, please use TailwindCSS (it's already set up).
Requirements:
- Fetch data from the iTunes Search API
- Example request:
https://itunes.apple.com/search?media=music&entity=musicArtist,album,song&term={your+search+term}
- Example request:
- A search bar for plaintext search. The search should trigger automatically as the user types (debounced), without requiring a button click.
- A filter row below the search bar with:
- Entity type filter (artist, album, song) — use the API's
entityparameter - Client side genre filter
- Explicit content checkbox (defaults to unchecked/hidden) — use the API's
explicitparameter
- Entity type filter (artist, album, song) — use the API's
- The grid must be responsive and work on desktop and mobile screen sizes.
- Fetching should be done via Next.js server actions.
For the Frontend Developer position. This task focuses on page navigation, animations, and data fetching.
Requirements:
- Implement sorting by name (alphabetical ascending/descending). The user should be able to toggle this via a button.
- Use Motion to add interactivity or animation. Where and how is up to you — be creative and show us what you can do.
- Clicking on a card opens a detail view with more information. For example, clicking an album shows a page with all its songs. Be creative with what makes sense for each entity type.
- Example request:
https://itunes.apple.com/lookup?id={albumId}&entity=song
- Example request:
Bonus
- Instead of navigating to a new page, open the detail view in a modal using Next.js route interception. This is an advanced pattern — don't let it eat into time for the core requirements.
For the Full Stack Developer position. This task focuses on API design and AI integration.
Requirements:
Implement a /api/similar/{artistId} endpoint that takes an artist ID and returns 3 similar artist suggestions generated by an LLM. We recommend using the Vercel AI SDK.
- OpenAI API Key will be provided.
This task is not just about structuring the AI output — we're also interested in your thinking behind the prompt design.
Trigger this endpoint from the frontend. Then, use the iTunes API to fetch information about the suggested artists and display them to the user.