gorilla-tag-mobile is a mobile multiplayer movement game in the style of Gorilla Tag: players run and climb through a shared low-poly jungle world using touch controls, and they play together in shared rooms where they can see and interact with other players in the same session. The product is delivered as a first-party web application that runs in a phone browser, with an application-owned backend that keeps room state and player presence in sync across everyone in a room.
The audience is young, social, drop-in phone players who want a loud, physical, tag-you're-it playground rather than a polished productivity interface. The emotional register is streetwear-adjacent, industrial and a little chaotic: concrete grounds, safety-orange accents, hazard tape, quoted wordmarks and garment-tag room labels.
This document is the System Requirements Document for the project. It specifies the current product intent, the accepted pages and their access boundaries, the functional requirements, the two accepted personas, the end-to-end journeys, the visual and motion direction, and the technical delivery shape.
The product is a first-party mobile web game. The React frontend renders four application-owned pages — Landing, Login, Play and Rooms — and the shared FastAPI backend serves the game APIs and multiplayer session service. Redis holds live room state and presence so that every player in a room sees the same session; MariaDB holds application-owned persistent data such as player identity and durable room records.
Access is layered. Landing and Login are anonymously reachable: Landing is the public entry surface that explains the game, and Login is where a player establishes identity for the first time or verifies a returning identity. Rooms and Play require login, because a player's in-game identity, room membership and presence must remain bound to the correct participant across sessions. There is no differentiated permission model: every logged-in player can browse rooms, create a room, join a room and play. The Room Host role describes who created a given room, not a privileged account tier.
The reference to Gorilla Tag is a style and domain reference only — a mobile movement game with climbing and multiplayer rooms. No Gorilla Tag assets, branding, names or copy are used. The current scope is the four pages above and the multiplayer loop they support. Nothing beyond that loop — no cosmetics economy, no progression system, no social feed, no voice chat, no matchmaking ranking — is part of this delivery.
JOIN A ROOM (solid orange rectangle, pinned bottom-left of the hero band) leads toward the protected room flow, routing through Login when identity is not yet established. CREATE ROOM (black outline button beside it) leads toward room creation, likewise routing through Login when needed.GORILLA TAG in Archivo Black, stacked on two lines, spanning the left 9 columns, with MOBILE in a black punched garment-tag chip tucked under the baseline.RUN CLIMB TAG JOIN separated by asterisks) along section seams.clamp(64px, 12vw, 168px), and the CTA pair stacks without clipping.FR-1 — Mobile Gorilla Tag-style game. As a Mobile Player, I should play a Gorilla Tag-style movement game on my phone, so that I get the tag-you're-it playground experience on a device I already carry. Provenance: explicit. Trigger: the player opens the app. Observable result: the game renders and is playable in a mobile browser. Access: Landing is anonymous; Play requires login. Failure/recovery: if the device or browser cannot render the game frame, the player sees an inline notice and can return to Landing. Continuation: the player proceeds to identity establishment and room selection.
FR-2 — Touch-based locomotion including running and climbing. As a Mobile Player, I should move through the world using touch-based locomotion including running and climbing, so that movement feels physical on a touchscreen. Provenance: explicit. Trigger: the player touches the locomotion controls on Play. Observable result: the player's gorilla runs and climbs, and the locomotion state is reflected in the HUD. Access: login required (Play). Failure/recovery: if a touch input is not registered, the control remains responsive and the player can retry the gesture. Continuation: the player keeps moving and climbing through the shared world.
FR-3 — Shared multiplayer rooms with visible players. As a Mobile Player, I should join shared multiplayer rooms and see other players in the same session, so that the game feels social and alive. Provenance: explicit. Trigger: the player joins a room from Rooms. Observable result: the player's gorilla and every other player's gorilla appear in the same session, with presence and positions kept in sync. Access: login required (Rooms and Play). Failure/recovery: if presence sync drops, a reconnect notice appears and the player can retry; if the room closes, the player returns to Rooms with a notice. Continuation: the player continues playing in the shared session or picks another room.
FR-4 — Create or join a room. As a Room Host, I should create a room to play with others, and as a Mobile Player I should join an existing room, so that players can gather in the same session. Provenance: explicit. Trigger: the player selects create-room and chooses a mode or map, or selects an existing room card and joins. Observable result: a new room appears in the room list with its code, mode and player count, or the player enters the selected room. Access: login required (Rooms). Failure/recovery: if creation fails, the player stays on Rooms with an inline error and can retry; if a join fails because the room filled or closed, the card shows the failure and the player picks another. Continuation: the host's room becomes joinable by others; the joining player lands on Play.
FR-5 — Self-service enrollment. As a new player, I should enroll on the Login page before entering protected play and room state, so that my in-game identity and room membership are mine. Provenance: required_inference. Trigger: the player chooses enroll on Login and submits a display name and credentials. Observable result: a player identity is created and a session is established. Access: Login is anonymous. Failure/recovery: a duplicate display name or invalid input shows an inline error and preserves the entered values. Continuation: the player is routed to Rooms.
FR-6 — Returning verification. As a returning player, I should verify on the Login page for subsequent sessions, so that I resume my identity and room state. Provenance: required_inference. Trigger: the player chooses verify on Login and submits credentials. Observable result: the existing identity is verified and the session is restored. Access: Login is anonymous. Failure/recovery: invalid credentials show an inline error and preserve the entered values. Continuation: the player is routed to Rooms, or back to the destination they were heading toward.
FR-7 — Redis-backed multiplayer session service. As the system, I should maintain room state and presence in Redis through the backend multiplayer session service, so that players in the same room share presence. Provenance: required_inference. Trigger: a player joins, moves within, or leaves a room. Observable result: room membership, player count and positions are consistent for every player in that room. Access: internal to the backend; no direct human interaction. Failure/recovery: if Redis is unavailable, the backend reports a session error to the affected Play session, which shows a reconnect notice. Continuation: once Redis is reachable again, presence resyncs for the room.
The Mobile Player is the core participant: someone on a phone who wants a Gorilla Tag-style movement game they can drop into. Their product context is the Play surface and the Rooms list — they arrive already knowing they want to move, climb and be around other players. Their primary goal is a smooth, playable mobile session with locomotion and multiplayer presence.
Their distinct responsibilities are joining a session, moving and climbing using touch controls, and interacting with other players in the shared space. Their relevant inputs and decisions are which room to join, when to run versus climb, and when to leave a room. They interact with the Room Host as the person whose room they enter, and with other Mobile Players as the gorillas they see and move alongside. Their observable success is a session where their gorilla runs and climbs responsively and other players are visibly present in the same world.
What makes this role different from the Room Host is that the Mobile Player's work is the movement loop itself — the moment-to-moment touch locomotion and shared presence — rather than the act of starting a session for others.
The Room Host is a Mobile Player who takes on the responsibility of starting a play session for others. Their product context is the Rooms surface, specifically the create-room flow and the resulting room card. Their primary goal is a populated, running room that others can enter.
Their distinct responsibilities are creating a room, choosing a mode or map, and letting friends join. Their relevant inputs and decisions are the mode or map selection at creation and whether to leave the room once it is running. They interact with Mobile Players as the people who join their room, and they see their room's player count rise as others enter. Their observable success is a room that appears in the room list with its code and mode, and that fills with other players.
What makes this role different from the Mobile Player is the act of creation and ownership of a session — the Room Host's success is measured by whether others can and do enter the room they started, not only by their own movement in it.
GORILLA TAG wordmark with MOBILE in a tag chip, the hazard-stripe band, and the phone mockup showing the low-poly jungle with a gorilla mid-climb.RUN CLIMB TAG JOIN) and understands the game is touch-locomotion and multiplayer.JOIN A ROOM. Because no session exists, the app routes to Login.Muse and headline: Virgil Abloh — Remixed familiarity: a mobile jungle tagged in safety orange.
Mode: Light.
Colour tokens (exact):
| Role | Hex | Use |
|---|---|---|
| Background | #EDEAE3 | Warm concrete off-white, dominant ground |
| Surface | #F7F5F0 | Paper-white panels, cards, forms |
| Text | #111111 | Near-black ink for all type |
| Primary | #FF5A00 | Safety orange — CTAs, the TAG stamp, active room state |
| Accent | #FFD400 | Hazard yellow — construction-tape stripe and micro-highlight only, never text on light ground |
| Muted | #8A867E | Metadata, rules, secondary labels |
No gradients, no glass. Contrast: ink on concrete ≈ 17:1; orange on ink and ink on orange both ≥ 4.5:1 at body size.
Typography:
'RUN', 'CLIMB', 'TAG').clamp(64px, 12vw, 168px); body ladder 40/28/20/16/14; micro-labels 11px uppercase at 0.12em tracking.Shape language: Hard corners everywhere (0px radius on panels and buttons), 2px black borders, exposed 1px grid lines drawn across sections, hazard-stripe bands (repeating 45° orange/yellow) as section dividers and button underlines. Small rectangular garment-tag chips with a punched-hole graphic. Buttons are solid black or solid orange rectangles with an offset 3px shadow — never rounded pills.
Layout: Asymmetric editorial grid with a visible 12-column baseline: oversized headline spanning 9 columns, a narrow right rail of quoted metadata, full-bleed concrete bands between sections. Rooms uses a label-wall grid of tag-chips with room code, player count and mode in ruled table rows. Play is a full-viewport game frame with a minimal HUD in tag-chip corners. Everything stacks cleanly at 375px with the rail dropping below the headline.
Imagery: Product-on-concrete — the mobile game frame rendered against raw grey concrete and chain-link, with low-poly gorilla silhouettes and climbing holds. Industrial textures: scuffed paint, tape, stencilled numbers. No stock people, no gradient blobs, no glossy 3D primitives.
Readability rule: headlines, wordmarks, labels, numbers, cards' text and controls stay entirely inside the viewport and their container at 375px, 768px and 1280px, wrapping or scaling to fit, with nothing covering them. Imagery and decoration may crop, bleed, rotate or overlap as the direction asks, as long as they cover no readable text or control.
The public entry is a full-bleed concrete band occupying the top 70vh, built as a construction-drawing poster for a tag game.
GORILLA TAG in Archivo Black at clamp(64px, 12vw, 168px), stacked on two lines, flush-left, with MOBILE as a small quoted label tucked under the baseline inside a black punched garment-tag chip.JOIN A ROOM as a solid orange rectangle, with CREATE ROOM as a black outline button beside it.RUN CLIMB TAG JOIN separated by asterisks) scrolling along the section seam.No centred headline, no subtext paragraph, no blue button, no gradient. The concept recomposes only accepted Landing content and controls — the two CTAs and the path into Login.
Interaction Model: Animated Motion Tempo: expressive Hero Dimensionality: flat
Landing Hero Motion Brief
GORILLA TAG wordmark and the edge-on phone mockup showing a gorilla mid-climb against concrete.MOBILE tag chip under the baseline, hazard-stripe band beneath, phone mockup bleeding off the right edge, orange JOIN A ROOM and black outline CREATE ROOM pinned bottom-left, ticker at the seam.prefers-reduced-motion, the ticker becomes a static wrapped row and hover swaps resolve instantly.frontend, backend, database (MariaDB) and redis.MOBILE label and HUD corners.RUN CLIMB TAG JOIN) scrolling along section seams, static and wrapped under reduced motion.
THE LOOP

THE LOOP
No comments yet. Be the first!