Code Challenge

Build a Game Voting App

A full-stack exercise to demonstrate your engineering judgment, UX sense, and ability to work with a third-party REST API.

Updated Submission Requirements

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.yml that reviewers can run with docker-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:

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

  1. Display every game in the library, sorted by vote count (highest first).
  2. Let a user add a new game by title. Duplicate titles (case-insensitive) must be rejected by your backend.
  3. Let a user vote for a game.
  4. Let a user remove a vote they've cast.
  5. Let a user remove a game from the list.
  6. Every screen must work well on both mobile and desktop.
  7. Errors (network failure, validation failure) should be surfaced to the user in a friendly way — no silent failures.

Business Rules

Stack

We recommend but don't require:

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:

  1. A link to a public GitHub repository with your code.
  2. A working docker-compose.yml in the repo so reviewers can run it locally with docker-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.
  3. 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: