Built with Claude Code: This project is human designed and directed but the code is written by machine intelligences. Volunteer work, built to a deadline for a live event.


The brief

RethinkWork is a leadership and team-development consulting and coaching practice. They run retreats for client cohorts, and every cohort does the Liberators Race: a scavenger hunt that sends them through a historic downtown district, taking photos and looking for answers.

Teams text their photos in as they find things, which is where the problem is. By the end of the afternoon one phone is holding twenty seven images arriving out of order, from three teams. In less than an hour, these scattered images and text answers need to turn into a presentation showing what each team submitted, so the facilitators can judge the answers and find the winning team.


What shipped

One self-contained index.html. No server, no build step, no dependencies. Four tabs in the order the night actually runs:

  1. Setup: define the teams and the tasks, each task marked photo or written.
  2. Add Photos: drag and drop, file picker, or bulk upload. Bulk reads a team-keyword filename convention (jellyfish-pirate.jpg when team jellyfish sends a picture of a pirate) and files each image against the right team and task with no dropdowns to click.
  3. Answers: typed responses to the written questions, entered per team, visible during judging.
  4. Judge & Score: Each team’s submission, side by side, task by task. Pick a winner, award the points, and the leaderboard updates live. Bonus and penalty adjustments when needed.

A presentation mode strips the navigation and scales everything for a projector. State saves continuously in the browser, because the wifi sometimes has trouble partway through.


Lessons From Building

The requirements moved an hour out. Shortly before the start, the organizers mentioned they might want to add or subtract bonus points during the judging. This was in the document with the hunt questions, but wasn’t mentioned during the initial build. So I realized the tool needed a way to handle bonus points when the RethinkWork team mentioned it while driving to the event. I built a bonus points page from the parking lot, on my phone, directing a Claude Code session running on my PC at home. It was in the app before the first team left.

Automated sorting: only with cooperative wifi. The original design had an automated sorting stage: teams submit photos, a LLM reads them and determines which photo belongs to which question. Inside the building there was almost no reception. The website barely loaded, but the sorting stage could not run at all. We sorted the backlog by hand, renaming each photo ourselves.

The current version is built without the automated sorting step. Renaming the photos by hand is now part of the process, and the bulk upload feature is built to handle the ambiguity that manual labeling might bring.


Stack

  • One file — vanilla HTML, CSS and JavaScript in a single index.html. No frameworks, no build, no install.
  • Browser storage — teams, tasks, photos and scores persist locally; closing the tab does not lose the evening.
  • GitHub Pages — static hosting, and the file runs just as well opened from a desktop.
  • Design — the palette and the team creatures follow the event’s own printed flyer, so the scoreboard on the projector matched what people had been carrying around all day.

Conclusion

The audience enjoyed the presentation, seeing the photos side by side and getting competitive about which was a better answer. The RethinkWork team told me the teams were especially engaged this time, and asked to keep using this tool during their presentations. I won’t be showing up to the next retreat, but my tool will be. That’s the next test: my tool provided some value to clients, will it hold up when I’m not in the room?