Overview
Our team wants a simple way to collect and vote on games we'd like to add to the office library. Employees should be able to suggest new titles and vote on the ones they want most. Your job is to build that app.
This challenge evaluates how you structure a small full-stack application, how you integrate with an external API, and how you make deliberate product decisions. It should take a reasonable amount of focused time — quality of thought matters more than feature count.
What You'll Build
A full-stack web application with two parts:
- Frontend — the user interface employees interact with in their browser.
- Backend — your own server that talks to our REST API for persistence and enforces any business rules you add.
Your backend consumes the Essense of Australia Code Challenge API. See the full endpoint reference at /docs. Generate your API key at /api-key.
Requirements
- Display every game in the library, sorted by vote count (highest first).
- Let a user add a new game by title. Duplicate titles (case-insensitive) must be rejected by your backend.
- Let a user vote for a game.
- Let a user remove a vote they've cast.
- Let a user remove a game from the list.
- Every screen must work well on both mobile and desktop.
- Errors (network failure, validation failure) should be surfaced to the user in a friendly way — no silent failures.
Business Rules
- A user may cast one vote OR add one new game per day (midnight to midnight, their local time is fine). How you identify a "user" is up to you — cookies, local storage, or a simple auth layer are all acceptable. Our API doesn't enforce this, so your backend must.
Stack
We recommend but don't require:
- Frontend: TypeScript + React
- Backend: PHP 8 with any framework you like (Laravel, Symfony, Slim) — or no framework at all
Styling, routing, and testing choices are yours to make. If you add tests, we'll look for whether they cover the things that actually matter rather than 100% coverage for its own sake.
AI Tools
Using AI assistants like Claude or ChatGPT is strongly encouraged. We want to see how you work with them — not whether you work without them.
If you use AI, try to keep your work in a single session. We may review the thread as part of the evaluation to see how you reason about, critique, and refine what the tool gives you. Treat AI output the way you'd treat a code review from a junior developer: read everything, question assumptions, and don't ship what you don't understand.
Submission
When you're done, send us:
- A link to a public GitHub repository with your code.
- Either a publicly accessible URL where your app is deployed (Vercel, Netlify, Railway, Fly.io, etc.), or a working
docker-compose.ymlin the repo so reviewers can run it locally withdocker-compose up.
A short README.md explaining how to run the app, what decisions you made, and (if applicable) a link to your AI chat session is always welcome.
Evaluation
Reviewers will look at:
- Code quality, structure, and readability
- UX and UI polish — does it feel considered?
- Correct and idiomatic use of our REST API
- How thoughtfully you implemented the daily vote rule
- Error handling and edge-case awareness
- Your AI-tooling conversation, if you chose to share it