multiplayer-game-discord is a simple, flat, text-and-button multiplayer crime-economy game. It is played two ways: from inside Discord using Discord's new GUI, and from a web browser. The product intent is a fast-to-read social economy where players hold on-hand cash, protect it in a bank, steal from each other, gamble it, and team up for high-risk bank heists — all rendered as a legible instrument panel of numbers, timers, probabilities and ruled data rows rather than a graphical game.
The audience is Discord-native players (roughly 18–30) who already live in flat, text-dense dark interfaces and expect to read balances, countdowns and odds at a glance. The game is deliberately un-graphical: no illustration, no casino imagery, no decorative motion. The visual content is the data itself.
The product is built with a React front end, a Node backend, and MongoDB for persistence. Accounts are established through Discord or Google, and a player entering from Discord never sees a separate login page — their logged-in Discord identity is used directly for their account.
The game is a persistent multiplayer economy. Every player has two money positions — on-hand cash and banked cash — plus a set of timed states (work cooldown, lottery entry, jail sentence, escape gate, heist membership). All of these are durable and shared across players, so the backend owns balances, timers, jail state, lottery participation, blackjack outcomes, heist membership and event records, and background automation resolves the hourly work window, the 24-hour lottery draw, jail release and escape timing, and heist resolution.
Players act through a small set of flat, text-and-button surfaces: a public Landing entry, an authenticated Dashboard overview, and dedicated surfaces for Work, Lottery, Rob, Jail, Bank, Blackjack, Heist and Events. A persistent player plate shows Cash, Bank and Net worth as ruled label/value rows on every authenticated screen, and a single-line event ticker announces robberies, lottery wins and heist outcomes — while deposits and withdrawals are never announced.
Actors. The accepted active human personas are Player and Heist Teammate. Discord and Google are provider-owned authentication surfaces, not personas. The backend and its background automation are system processes.
Narrow exclusions. The UI stays flat with only text and buttons and nothing too graphical. Deposits and withdrawals are never announced. Playing from Discord must not require a separate login page. Jailed players cannot work, rob, enter the lottery, or take other actions until their sentence ends.
Current delivery. The current product is a first-party web application (React front end, Node backend, MongoDB) plus a Discord-side entry. The web application owns the Landing entry, the authenticated game surfaces, and all game state. Discord's GUI is a provider-owned surface that hands the already-authenticated Discord user into the game; the player does not pass through a separate login page there. Google sign-in is a provider-owned authentication surface used from the web entry.
Access ownership. The Landing page is anonymously reachable and explains the game and its two entry paths. Everything that reads or changes a player's durable state — Dashboard, Work, Lottery, Rob, Jail, Bank, Blackjack, Heist, Events — requires an established player identity. Identity is established by Discord or Google; the game binds that provider identity to a player account (email-based) and keeps balances, timers and outcomes attached to the correct player. Identity continuity is required because money, jail sentences, lottery entries and heist membership must remain bound to the right participant across sessions and across the two entry surfaces.
Current vs. future. Everything described in this document is current. No future-horizon features are accepted in the authoritative thread; the "buy items" mention in the source is a stated property of on-hand cash (cash can be used to buy items) and is recorded as a constraint on cash, not as a current item-shop capability.
Not applicable — no reference directive in this request declares a content_source.
FR-1 — Play from Discord's GUI. As a Player, I should be able to play the game from inside Discord using Discord's new GUI, so that I can play without leaving Discord. (explicit)
FR-2 — Play from a web browser. As a Player, I should be able to play the same game from a web browser, so that I can play without Discord. (explicit)
FR-3 — React front end, Node backend, MongoDB. As a Player, I should experience a game built with a React front end, a Node backend, and MongoDB, so that the product runs on the stated stack. (explicit)
FR-4 — Flat, text-and-button UI. As a Player, I should see a flat interface made of only text and buttons with nothing too graphical, so that the game stays simple and fast to read. (explicit)
FR-5 — On-hand cash and banked cash. As a Player, I should hold on-hand cash and be able to deposit it into a bank and withdraw it, so that I can protect money or keep it available. (explicit)
FR-6 — Cash can be stolen. As a Player, I should be able to have my on-hand cash stolen by other players, so that holding cash carries risk. (explicit)
FR-7 — Cash can be used to buy items. As a Player, I should be able to use on-hand cash to buy items, so that cash has a spending purpose beyond holding and gambling. (explicit)
FR-8 — Hourly work. As a Player, I should be able to collect a random $100–$300 once every hour, so that I have a recurring income. (explicit)
FR-9 — 24-hour lottery. As a Player, I should be able to enter a lottery that runs every 24 hours, so that I have a chance at a large payout. (explicit)
FR-10 — Rob other players. As a Player, I should be able to rob another player's on-hand cash with a probability of success, so that I can take cash from others. (explicit)
FR-11 — Police and jail on failed robbery. As a Player, I should face a probability of being caught by police and placed in jail when a robbery fails, so that robbing carries real risk. (explicit)
FR-12 — Jail blocks actions. As a Player, I should be unable to work, rob others, enter the lottery, or take other actions while jailed, until my 1–2 hours are up, so that jail is a real lockout. (explicit)
FR-13 — Escape attempts every 30 minutes. As a Player, I should be able to attempt an escape every 30 minutes while jailed, so that I have a chance to end my sentence early. (explicit)
FR-14 — Bank deposits and withdrawals. As a Player, I should be able to deposit on-hand cash to keep it safe and withdraw it again, so that banked money is protected from robbery. (explicit)
FR-15 — Blackjack with on-hand cash. As a Player, I should be able to play a game of blackjack using on-hand cash, so that I can gamble my available money. (explicit)
FR-16 — Heist team of up to 4. As a Heist Teammate, I should be able to team up with up to four players to rob a bank, so that we can attempt a high-value shared crime. (explicit)
FR-17 — Heist success and failure risk. As a Heist Teammate, I should face a low success percentage, and on failure a percentage chance of being sent to jail for double the amount compared to robbing someone, so that the heist is the highest-risk activity. (explicit)
FR-18 — Heist payout split. As a Heist Teammate, I should receive an equal share of the robbed banked money when the heist succeeds, so that teaming up pays out. (explicit)
FR-19 — Event announcements. As a Player, I should see announcements of game events such as a player being robbed or winning money, so that the shared world feels alive. (explicit)
FR-20 — Deposits and withdrawals are never announced. As a Player, I should never see deposits or withdrawals announced, so that my banking stays private. (explicit)
FR-21 — Discord or Google accounts. As a Player, I should be able to use Discord or Google for my account, so that I do not have to create and remember a separate game password. (explicit)
FR-22 — No separate login page from Discord. As a Player, I should be able to play from Discord without going to a separate login page, so that entry is frictionless. (explicit)
FR-23 — Provider identity establishes or returns the account. As a Player, I should have my Discord or Google identity establish my account on first use and return it on later use, so that my money and state persist across sessions and across both entry surfaces. (required_inference)
FR-24 — Durable game state. As a Player, I should have my balances, timers, jail state, lottery participation, blackjack outcomes, heist membership and event records persist, so that the game is continuous and shared. (required_inference)
FR-25 — Background automation of timed mechanics. As a Player, I should have the hourly work window, the 24-hour lottery draw, jail release and escape timing, and heist resolution resolved automatically, so that the game runs without me or anyone else triggering them. (required_inference)
Product context. The Player is the core human actor of multiplayer-game-discord. They arrive either from inside Discord — where the game opens using their already-logged-in Discord identity and no login page — or from a web browser, where they establish identity with Discord or Google. They are Discord-native and comfortable reading dense, flat, dark interfaces; they expect numbers, timers and odds to be legible at a glance.
Primary goal. Accumulate and protect cash: earn it hourly, keep it safe in the bank, take it from others, gamble it, and return to normal play after jail.
Distinct accepted responsibilities. The Player works the hourly claim for a random $100–$300; enters the 24-hour lottery for a $500–$750 payout; robs other players' on-hand cash with a probability of success and a probability of being caught and jailed on failure; deposits and withdraws at the bank to protect cash; plays blackjack wagering on-hand cash; and, while jailed, waits out a 1–2 hour sentence and attempts escape every 30 minutes.
Relevant inputs and decisions. How much to keep on hand versus banked; which target to rob and whether the success probability justifies the jail risk; whether to enter the current lottery round; how much to wager at blackjack; whether to attempt an escape now or wait for the next 30-minute gate.
Interactions with other accepted participants. The Player's robbery directly changes another Player's on-hand cash, and that other Player sees the change in their balances and the announcement in the ticker. The Player also reads the shared event ticker, which carries other players' robberies, lottery wins and heist outcomes.
Observable success. Balances update correctly and immediately; the work counter restarts after a claim; lottery entry is recorded and a win pays $500–$750; a successful robbery moves cash and is announced; a failed robbery may jail them; jail blocks work, robbery, lottery and other actions until release; deposits and withdrawals move money and are never announced.
Product context. The Heist Teammate is a Player acting in the distinct team-up workflow of a heist. This is a materially different activity from solo robbing: it requires assembling a group, carries a shared low success probability, and pays out a shared pool rather than a single target's cash.
Primary goal. Coordinate a team attempt on the bank and share the payout, while accepting the doubled jail risk if it fails.
Distinct accepted responsibilities. Forming or joining a team of up to four players; committing the team to the heist; accepting the low success percentage; accepting that on failure there is a percentage chance of jail for double the amount compared to robbing someone; and, on success, receiving an equal split of the value of all the players' banked money.
Relevant inputs and decisions. Who to team with, whether the roster is ready to commit, and whether the heist odds justify the doubled jail risk.
Interactions with other accepted participants. The Heist Teammate's outcome is bound to the other team members: the success or failure applies to the whole team, the jail risk applies to the whole team, and the payout is split between the players who robbed the bank. The result is announced to all Players through the event ticker.
Observable success. The roster shows up to four members; the commit is accepted or rejected at the four-member limit; on success each member's balances reflect their split and the heist is announced; on failure the jail chance resolves for members and the bust is announced.
Muse and headline. Dieter Rams — Less, but better: a Braun-panel crime economy you can read at a glance. The product must feel like an honest instrument: every number, timer and probability legible in one glance, nothing decorative competing with the ledger.
Palette (dark mode).
| Role | Hex | Use |
|---|---|---|
| Background | #1C1B18 | Warm graphite ground |
| Surface | #26241F | Panel surfaces, one step up from ground |
| Rule | #3A372F | 1px hairline rules — the dominant graphic element |
| Text | #F2EFE6 | Warm off-white body and headings |
| Primary | #E8551F | Signal orange — the ONLY action colour |
| Accent | #E3B23C | Amber — money numerals, lottery/odds readouts, ticker timestamps |
| Muted | #8C887C | Secondary labels and disabled states |
Proportion: 80% neutral ground/surfaces, 15% text, 5% signal. Signal orange is reserved for actions (Work, Rob, Heist, Blackjack deal buttons, the jail countdown, the active-tab underline). Amber is reserved for money numerals, lottery/odds readouts and event ticker timestamps — never for a button. Orange and amber never appear on the same button.
Typography. Headings: Archivo in 600/700, uppercase, letter-spacing 0.02em, tight leading (0.95) for the oversized hero and section titles. Label text: 11–12px uppercase Archivo 600 with 0.12em tracking, exactly like a Braun control panel silkscreen. Body: Archivo. Numerals always tabular (font-variant-numeric: tabular-nums) so balances, timers and odds align in columns. No display serif, no rounded face, no italic.
Type scale. 1.25 modular on a 4px baseline: 11 / 12 / 14 / 16 / 20 / 25 / 31 / 39 / 49 / 61 / 76. Hero display uses clamp(40px, 9vw, 76px) mobile→desktop; page titles clamp(25px, 4.5vw, 39px); body 16px/1.5; data rows 14px; labels 11px.
Shape language. Functional geometry only: 4px and 8px radii on buttons and panels (never pills, never blobs); 1px hairline rules as the dominant graphic element; square corners on data tables and the ticker. Controls are rectangles with a visible 1px border and a 2px inner highlight on press; every affordance looks like a switch you could physically flip. No shadows except a 0 1px 0 rgba(0,0,0,.4) seat under sticky bars; no gradients, no glass, no glow.
Layout. A fixed 12-column modular grid at 1280px (max-width 1120px, 32px gutters), collapsing to a single column at 375px with 16px gutters. Persistent left rail (240px) holds the player plate — avatar initial, handle, Cash / Bank / Net worth in three ruled rows with tabular numerals — plus the six action tabs (Work, Rob, Bank, Lottery, Blackjack, Heist) as a numbered vertical list 01–06. The main panel is a ruled ledger: label/value pairs aligned on a shared right edge, section headers with a full-width hairline and a small caps label, actions pinned to the bottom-right of each panel in a consistent 44px-tall button bar. On mobile the rail becomes a sticky top plate (balances in one 3-column row) with the action tabs as a horizontal scroll-snap strip of numbered chips. Every panel is the same width and rhythm; the grid never breaks, only the column count changes.
Imagery. No illustration, no photography, no characters, no icons beyond a 16px geometric glyph set drawn on the 4px grid (a clock, a dial, a lock, a card, a coin as a plain circle). The visual content is the data itself: ruled tables, probability readouts, timers, and the event ticker. Where a diagram is needed (heist success odds, blackjack table) it is drawn as line art in 1px strokes with the accent used only on the live value.
The public entry is a full-width instrument panel, not a marketing block.
Left — 7 columns. An oversized two-line headline in Archivo 700 uppercase at clamp(40px, 9vw, 76px) — "GET RICH / GET LOCKED UP" — set flush-left on the graphite ground, with the game's one-line rule set beneath it at 16px and two 44px rectangular buttons sitting under a hairline rule: signal-orange "Play in Discord" and outlined "Open in browser".
Right — 5 columns. A live "state of the city" plate: a bordered surface panel with four ruled rows — Cash in circulation, Players in jail, Next lottery, Heist success % — in tabular amber numerals, updating as a mock feed. Beneath it, the event ticker as a single-line marquee of timestamped events separated by 1px vertical rules.
Composition rules. No centred headline, no gradient, no blob: the composition is an asymmetric two-panel instrument with a hard vertical rule between them. The concept recomposes only accepted content, states and controls — the two accepted entry paths, the public aggregate readouts, and the event ticker — and introduces no new behaviour, page or destination.
Interaction Model: Static Motion Tempo: restrained Hero Dimensionality: flat
Landing Hero Motion Brief.
#1C1B18; flush-left two-line headline in warm off-white #F2EFE6; a hairline rule #3A372F beneath it; the signal-orange #E8551F "Play in Discord" button and the outlined "Open in browser" button side by side; a hard vertical rule; the bordered surface panel #26241F with four ruled label/value rows in amber #E3B23C tabular numerals; the single-line ticker beneath with amber timestamps separated by 1px vertical rules.NFR-1 — Flat, un-graphical presentation. The interface must be flat with only text and buttons and nothing too graphical. (explicit)
NFR-2 — Legibility at every viewport. Headlines, wordmarks, labels, numbers and controls must stay entirely inside the viewport and their container at 375px, 768px and 1280px, wrapping or scaling (for example font-size: clamp(...) with its mobile size) to fit, with no other element covering any part of them. (explicit, from the creative direction's readability rule)
NFR-3 — Tabular numerals everywhere numbers appear. Balances, timers, odds and payouts must use tabular numerals so they align in columns. (explicit, from the creative direction)
NFR-4 — Durable, shared state. Player balances, timers, jail state, lottery participation, blackjack outcomes, heist membership and event records must persist and be consistent between the Discord and browser entries. (required_inference)
NFR-5 — Timed mechanics resolve automatically. The hourly work window, the 24-hour lottery draw, jail release and escape timing, and heist resolution must resolve without a player or operator triggering them. (required_inference)
NFR-6 — Announcement privacy rule. Deposits and withdrawals must never be announced, enforced as a rule in the announcement component rather than by convention. (explicit)
NFR-7 — No separate login page from Discord. Playing from Discord must not require a separate login page. (explicit)
NFR-8 — Reduced-motion support. With prefers-reduced-motion, counts snap to final values and the ticker becomes a static, scrollable list in which every item can be brought fully into view. (explicit, from the creative direction)
Constraints (binding).
Assumptions (narrow, labeled).

multiplayer-game-discord
Hold cash on hand, bank what you can't risk, steal from the careless — work, rob, gamble and run heists where the take is everyone's banked money, split between the crew that gets out.
Discord or Google sign-in · no separate login from Discord

multiplayer-game-discord
Hold cash on hand, bank what you can't risk, steal from the careless — work, rob, gamble and run heists where the take is everyone's banked money, split between the crew that gets out.
Discord or Google sign-in · no separate login from Discord
No comments yet. Be the first!