These requirements supersede any conflicting requirement stated elsewhere on this page. Where the two disagree, follow this box.
- Backend must be PHP. The Stack section below lists PHP as a recommendation — it is now a hard requirement. Any framework (or none) is still fine.
- Persistence must be a real database (e.g. MySQL, PostgreSQL, SQLite) — not cookies or local storage. This applies to how your backend stores games, votes, and daily-limit tracking. Cookies or local storage may still be used only to identify which user is acting, as described in Business Rules below.
- Your submission must be self-contained and runnable locally with a working
docker-compose.ymlthat reviewers can run withdocker-compose up. A deployed URL is welcome in addition, but is no longer an acceptable substitute for the docker-compose path. - Your entire AI chat transcript must be included in the submission — not just a link, and no longer optional.
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. Updated: identifying the user this way is still fine, but tracking and persisting that limit (and all game/vote data) must go through a real database, not cookies or local storage — see Updated Submission Requirements.
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. Updated: PHP is now required, not just recommended — see Updated Submission Requirements.
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. 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.
Updated: including your full AI chat transcript in the submission is now required, not optional — see Updated Submission Requirements. We will review the thread as part of the evaluation to see how you reason about, critique, and refine what the tool gives you.
Submission
When you're done, send us:
- A link to a public GitHub repository with your code.
- A working
docker-compose.ymlin the repo so reviewers can run it locally withdocker-compose up. Updated: this is now required for every submission — a deployed URL alone is no longer sufficient. See Updated Submission Requirements. A publicly accessible deployed URL is still welcome in addition. - Your entire AI chat transcript, included directly in the submission. Updated: no longer optional — see Updated Submission Requirements.
A short README.md explaining how to run the app and what decisions you made is required.
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