Play the game: https://shehuphd.github.io/endurance-booth-game
GitHub code: https://github.com/shehuphd/endurance-booth-game
Tech stack: Javascript, HTML, CSS
I built this project as part of a hackathon, with a very specific setting in mind: a noisy conference floor, short attention spans, and a constant flow of people walking past a booth. The goal was not to build a deep or content-heavy game, but something that could pull people in visually, be understood in seconds, and encourage repeated attempts without explanation.
At a conference, most interactions fail for the same reasons. They require too much instruction, too much commitment, or too much context. This project was designed to work under the opposite constraints. Someone should be able to walk up, press a key, fail almost immediately, and still understand why they failed. Just as importantly, people nearby should be able to understand what is happening without playing at all.
The result was a minimalist endurance game focused on timing, pressure, and distraction rather than traditional mechanics or progression. The game is designed to run on any browser, on a large screen, in public.
The experience on the floor
From an audience engagement perspective, the game is intentionally unforgiving. A circle at the center of the screen steadily collapses unless the player keeps it alive by tapping a key or clicking. This creates visible tension, and people watching can immediately see when a run is about to fail.
A second input adds disruption. At any time, enemies drift in from the edges of the screen toward the center. These enemies can only be destroyed by firing a pulse from the center, and only when they are in a vulnerable state. The pulse itself expands outward visually, making success or failure obvious to both the player and spectators.

This setup works well in a booth setting for a few reasons. Runs are short, and failure is frequent and public. Difficulty escalates naturally without explanation. Most importantly, players almost always want to try again, either to beat their own time or to handle a situation that previously overwhelmed them.
By the time multiple enemies are on screen, the game becomes less about reflexes and more about managing attention. Players must keep the central rhythm alive while watching enemy states and deciding when not to act. That deliberate confusion creates the kind of stress that is entertaining to watch and challenging to play, without relying on complex controls.
Design choices
The game was deliberately constrained to two inputs. One input sustains the player, while the other is situational and risky. Visual clarity was prioritized over detail, with simple shapes and colors. Animations are exaggerated enough to be readable from a distance. There are no hidden systems that the player needs to learn; all of the important information is on screen.
The game features organic difficulty scaling. Early on, only a single enemy appears. Over time, enemies move faster and more of them are allowed on screen simultaneously. The thresholds for increasing enemy count are tied partly to performance and partly to elapsed time, ensuring that even cautious players eventually face pressure.
To prevent brute-force solutions, enemies alternate between an immune state and a vulnerable one, forcing players to wait and time their pulses. As the game progresses, these windows shorten, increasing cognitive load without adding new rules.
Technical implementation
From a technical standpoint, the project runs entirely in the browser using a single canvas element and plain JavaScript. There are no external libraries, no frameworks, and no build step. Looking at the codebase, game state and logic live in one module, rendering happens directly on the canvas, and UI concerns such as timers and labels are isolated. This separation made it possible to repeatedly strip features out and reintroduce them safely when things broke, which happened more than once during development.
Performance was kept predictable by bounding randomness and capping values such as enemy speed and count. Even at high levels, the game remains readable and technically stable, which is essential for a booth environment where crashes or freezes are unacceptable.
Outcome
The game creates tension quickly, communicates failure clearly, and rewards repeated attempts. Most importantly, it works as a shared experience. One person plays, several people watch, and everyone understands what just happened when it ends. That was the primary success criterion from the start.