Standout Builder Studio · planningIndex / The walkthroughreviewUpdated 12 Jun 2026
The walkthrough: idea → playable on the edge
This page walks through the canonical eight-step flow for building a game in Builder Studio — from choosing a build path to promoting a build toward operator handoff. Each step explains what you are trying to do, shows an inline mock of the relevant screen, and tells you what already exists versus what this suite proposes. Background agents handle the engineering work at each step; humans approve at gates. The target end-state is a playable game session on Cloudflare's edge with little to no engineering engagement per title.
1 Choose build path2 Define the game package3 Configure mechanics4 Attach assets & theme5 Run validation6 Generate playable sandbox7 Iterate8 Promote toward handoff
Step 1 · Choose build path
1 Choose build path2 Define the game package3 Configure mechanics4 Attach assets & theme5 Run validation6 Generate playable sandbox7 Iterate8 Promote toward handoff
Before any configuration can happen, the builder must decide what kind of game they are making. The five build paths are: new game from scratch, config-only variant of an existing title, theme-only reskin, mechanic prototype, or import of an existing third-party game. Each path determines which subsequent steps are required and which can be skipped — a reskin, for example, inherits all config and jumps straight to assets and theming, while a new game traverses every step. One "Add a game" entry point funnels every path through this screen.
Template gallery in builder-hub.tsx showing three certified templates: Crash (real-time shared-world, 97% default RTP), Trunk Raider (turn-based pick'em, 96% default RTP), and Silk Road (turn-based press-your-luck, 97% default RTP) — values from packages/shared/src/templates.ts.
"Your builds" panel listing saved GameSpec records persisted via /api/specs to D1.
A "Certified bases" shortcut that maps live pipeline games by format to a template, letting a user start a new build branching from a shipped title.
Proposed
The path-picker delta
Replace the implicit "pick a template and go" model with an explicit five-path picker that surfaces upfront what each path enables, limits, and costs in time-to-playable.
A single "Add a game" entry point everywhere in the dashboard funnels to this screen — not spread across Builder Studio, the games table, and the template gallery.
On choosing "Import", the Info-Sheet agent is dispatched immediately to begin extraction while the user fills in context.
Agents at this step
The Scaffolder is primed at this step: once a path and template are confirmed it will generate the variant folder skeleton into standout-games. For the Import path, the Info-Sheet agent begins extracting manifest fields, math targets, and paytable structure from uploaded screenshots and PDF documents before the builder proceeds.
Open questions — Step 1
Should the Import path accept only PDF info sheets, or also screenshots + a free-form "describe the game" prompt? The extraction quality difference needs a usability study.
Where does the mechanic prototype path land if the mechanic does not exist in the library yet? Does the builder fall back to "new game" or is there a separate "propose a mechanic" branch?
Path-to-playable estimates (shown on each card) — who maintains these as the pipeline matures? Are they per-mechanic medians or per-path medians?
Step 2 · Define the game package
1 Choose build path2 Define the game package3 Configure mechanics4 Attach assets & theme5 Run validation6 Generate playable sandbox7 Iterate8 Promote toward handoff
The game package definition is the identity contract for a build: the variant name, mechanic type, format, target devices, jurisdiction scope, RTP/volatility/max-win targets, and whether the initial intent is an operator sandbox or a full handoff. The package also records who the build is for — an operator handoff or an internal demo — so downstream steps and collaborators know the delivery context from the outset. This information seeds the GameSpec and drives everything downstream — particularly the asset checklist thresholds (step 4) and the jurisdiction gate in validation (step 5). Getting these values right early avoids rework; the Math-Sim agent will later verify that configured mechanics can actually hit the stated targets.
Define game package — setup form
CONCEPT · proposed
Identity
Variant name
e.g. Trunk Raider: High Voltage
Mechanic type
turn-based · single-player
Format
pick'em / crash / slot / …
Targets
Target RTP
e.g. 96.00%
Volatility
low / medium / high / very-high
Max win
e.g. 5,000x
Scope
Device targets
mobile web, desktop web
Jurisdiction assumptions
UK, Malta, Ontario …
Intent
Initial goal
Operator sandbox
Operator / demo context
e.g. Operator Demo EU
On main today
What exists at /builder/new
A variant name field ("Name") and a theme picker in builder-editor.tsx.
The GameSpec captures templateId, name, config (overrides only), and theme — saved via /api/specs.
No explicit RTP target, volatility, max-win, jurisdiction, or device target fields exist today — these are implicit in the template defaults or in the mechanic config form.
Proposed
Package definition delta
Add explicit rtpTarget, volatilityClass, maxWin, jurisdictions[], deviceTargets[], and intent fields to GameSpec.
These fields feed the asset checklist thresholds and the Math-Sim gate — a build that states "96% RTP, high volatility" will fail validation if the configured mechanics produce a different outcome.
The Info-Sheet agent can pre-fill this form from an uploaded game description document (reverse direction from step 1).
Agents at this step
The Info-Sheet agent can pre-populate this form if the Import path was chosen — it extracts name, mechanic, RTP targets, and jurisdiction scope from a PDF or screenshot set. For all paths, the Math-Sim agent is scheduled to run a preliminary feasibility check once the mechanic config is complete in step 3.
Open questions — Step 2
Should jurisdiction assumptions here be binding (affecting the cert checklist) or advisory (a default for the sandbox composer)? These are different use cases.
The existing GameSpec in D1 has no buildPath or baseGameRef — what is the migration path for existing saved specs when these fields are added?
Step 3 · Configure mechanics
1 Choose build path2 Define the game package3 Configure mechanics4 Attach assets & theme5 Run validation6 Generate playable sandbox7 Iterate8 Promote toward handoff
Each template exposes a schema-driven set of configuration fields grouped by concern: betting limits, math and RTP levers, timing parameters, and bonus thresholds. For a variant or reskin, only fields that differ from the base are stored — the rest inherit. The key distinction here is that some fields directly affect the RTP, volatility class, or max-win outcome, and the builder needs to know that when they touch them. An inline note on each math-touching field states "changes RTP", "affects volatility", or "shifts max-win" so intent is clear.
Configure mechanics — grouped config panels
GROUNDED · matches main
Betting
Minimum bet
0.25
Maximum bet
1,000
Math & RTP
RTP affects RTP
96.00%
Base win multiplier range affects RTP / volatility / max win
0.1× – 5.1×
Bonuses
Silent Pick threshold
15 rounds
Informant threshold
32 rounds
Cheat Code threshold affects volatility
65 rounds
Inherited from base
All fields at default. Fields changed from the base game's DEFAULT_CONFIG will appear highlighted here with before / after values.
Math impact note
Fields tagged "affects RTP / volatility / max win" will require a Math-Sim proof run before validation can pass.
On main today
What exists at /builder/new
A full config form generated from tpl.fields in builder-editor.tsx, fields grouped by field.group into cards (Betting, Math & RTP, Timing, Bonuses per template).
A live "Spec at a glance" summary sidebar showing overridden field count, plus a diff list of changed-from-default values with before/after display.
No inline "affects RTP/volatility/max win" annotation on fields today.
Proposed
Config delta
Annotate math-touching fields in the ConfigField schema with a affects property (e.g. ["rtp","volatility","maxWin"]) and surface it inline in the form.
For variant builds, show a "Diff from base" panel highlighting fields changed from the base game's DEFAULT_CONFIG, not just from template defaults.
Auto-schedule a Math-Sim agent run whenever a math-touching field is saved — queued, not blocking, with the result appearing in step 5.
Agents at this step
The Math-Sim agent is the primary actor: it consumes the saved config and produces an RTP/volatility simulation report as a proof artefact. Changes to math-touching fields trigger a new queued sim run. The Scaffolder is also watching: it will regenerate the variant scaffold if the template or base-game reference changes.
Open questions — Step 3
Can Math-Sim proof runs execute against the certified RNG without recertification implications? This needs a compliance answer before Math-Sim is built.
For variant builds, "diff from base" requires knowing the base game's exact DEFAULT_CONFIG at build time — should the Scaffolder snapshot this into the spec, or should the diff always be computed live from the source repo?
How does the config form handle mechanics that don't yet exist in the library (new-game path)? Is there a "freeform config" fallback or does the mechanic have to be in the library first?
Step 4 · Attach assets & theme
1 Choose build path2 Define the game package3 Configure mechanics4 Attach assets & theme5 Run validation6 Generate playable sandbox7 Iterate8 Promote toward handoff
Not every asset is required to reach a playable sandbox — the distinction between "good enough for sandbox" and "required for operator handoff" is critical and must be explicit. A lobby tile placeholder allows a sandbox session to launch; the real operator lobby tile is only blocking at the handoff stage. This step renders a checklist with two columns: what clears the sandbox gate and what must be complete before a build can be promoted to operator demo or certification.
Asset checklist — sandbox vs handoff thresholds
CONCEPT · proposed
Asset
Status
Sandbox gate
Operator handoff gate
Game shell (HTML5 bundle)
Attached
Required
Required
Lobby tile (operator art)
Missing
Placeholder OK
Required
Paytable copy
Draft
Not required
Required
Sound pack
Not uploaded
Not required
Recommended
Help text / game rules
Not uploaded
Not required
Required
Safe-area check note
Asset agent will run a safe-area check on any uploaded lobby tile and flag crops that will be clipped on mobile operator lobby grids.
On main today
What exists in GameWorkspace
An Assets tab in GameWorkspace.tsx listing per-game assets from builderMockData.ts with name, type, and a status chip (Complete / Needs review).
A Manifest tab showing a checklist of release packet items (game manifest, math report, replay bundle, jurisdiction matrix) with complete / warning / missing status from mock data.
No sandbox-vs-handoff threshold distinction exists today — the checklist is a flat list of items.
Proposed
Asset checklist delta
Replace the flat asset list with a two-column checklist: "Required for sandbox" and "Required for operator handoff", so a builder can launch a sandbox session without completing every final deliverable.
The Asset agent resizes and derives assets (lobby tile crops, safe-area checks), queued on upload.
The Copy/Localisation agent generates a draft paytable help text from the spec and mechanic config, available to attach or replace.
Agents at this step
The Asset agent processes uploaded files: it resizes lobby tiles, runs safe-area checks against mobile operator lobby grids, and produces derived outputs for human art-owner approval. The Copy/Localisation agent generates draft help text and operator copy from the spec and paytable, producing locale variants where jurisdiction scope includes multiple languages. The full prompt-to-artefact flows are mapped in the generative AI map.
Open questions — Step 4
Who defines the "sandbox OK / handoff required" thresholds per asset type — is this a platform-level default, a per-operator negotiation, or a per-jurisdiction rule?
Does the Asset agent store processed outputs in R2 immediately, or only after human art-owner approval? Early storage avoids re-processing but complicates approvals.
Step 5 · Run validation
1 Choose build path2 Define the game package3 Configure mechanics4 Attach assets & theme5 Run validation6 Generate playable sandbox7 Iterate8 Promote toward handoff
Validation runs a set of gates against the current build state and returns a pass / warn / fail result for each. Blockers must be resolved before the build can proceed to sandbox launch or promotion. The key affordance here is "Do it for me": non-pass gates include a button that dispatches the appropriate background agent to fix the issue, with a parallel "Explain" button that gives the builder the reasoning in plain language. This transforms validation from a report into an action surface.
A ValidationCard component in BuilderStudioDashboard.tsx showing a ring chart (coverage %) plus aggregate counts: 42 passed, 5 warnings, 1 failed across math config, manifest, assets, localisation, and sandbox launch gates — all from builderMockData.ts.
No per-gate detail view, no "Do it for me" dispatch, no individual gate status rows — only the aggregate ring and counts exist today.
The validation data is entirely mocked local data from lib/builderMockData.ts; no real validation logic runs.
Proposed
Per-gate validation panel
Replace the aggregate ring with a per-gate detail panel showing gate name, status chip, note, and — for non-pass gates — "Do it for me" and "Explain" buttons.
"Do it for me" dispatches the relevant agent (Math-Sim for RTP proof, Asset for missing tiles, Copy/Localisation for help text, Validation for re-run).
The Validation agent is a read-only reporter — it runs gates and surfaces results but does not itself fix anything; it dispatches to specialists.
Agents at this step
The Validation agent runs gates and produces fix-next recommendations — it is the only read-only agent in the roster. "Do it for me" buttons route to the correct specialist: Math-Sim for RTP proof, Asset for missing or failing art, and Copy/Localisation for missing help text or locale gaps.
Open questions — Step 5
Which gates are sandbox blockers vs handoff blockers? The mock above treats all Fail-status gates as blockers, but in practice asset completeness at the sandbox threshold is lower than at handoff. The gate list needs a "blocks what" column.
How does "Do it for me" communicate progress back — does the gate row update in real time via a polling loop, a webhook, or a page refresh? The UX depends heavily on agent latency.
Should Warn-status gates block sandbox launch or only block promotion? Current thinking is Warns are advisory only, but this needs a product decision.
Step 6 · Generate playable sandbox
1 Choose build path2 Define the game package3 Configure mechanics4 Attach assets & theme5 Run validation6 Generate playable sandbox7 Iterate8 Promote toward handoff
The sandbox session composer lets the builder specify the parameters of a test session — operator, player profile, currency, device, jurisdiction, wallet behaviour, and expiry — and launch a real signed URL into the sandbox dispatch namespace on Cloudflare (the routing layer that runs each game's Worker at the edge). The resulting session is live: events stream in, logs are captured, and a replay bundle is available afterward. This is the moment where the build transitions from specification to running software.
Sandbox composer + live session
GROUNDED · matches main
A fully mocked session composer in SandboxLaunchLab.tsx with all fields: game version, operator (4 options), player (4 profiles), currency (EUR/GBP/CAD/SEK/RON), device, jurisdiction, wallet behaviour (4 modes), and session expiry.
Five wallet fault injection toggles: WALLET_INSUFFICIENT_FUNDS, WALLET_TIMEOUT, WALLET_DUPLICATE_TXN, WALLET_ROLLBACK_FAILED, SESSION_STALE.
A fake signed URL generated by a local FNV hash (fakeSignature()) pointing at sandbox-launch.mock.standout.games — explicitly not a real HMAC.
A mock transcript of what the launch runner would log, and an iframe placeholder. No real HMAC signing, no real Worker deployment, no real session events.
Proposed
Real sandbox delta
Replace the fake signed URL with a real HMAC-signed launch URL into the sandbox Cloudflare Workers for Platforms dispatch namespace.
The Deploy agent deploys (or re-deploys) the game Worker to the namespace before the launch URL is issued — smoke-testing in parallel.
Stream real session events into the live session feed panel; capture a replay bundle on session close for debugging and cert evidence.
Agents at this step
Deployment is owned by the Deploy agent: it deploys the merged build to the sandbox dispatch namespace and runs a smoke test, with automatic rollback on failure and a human gate only on promotion. The Validation agent runs a post-launch sanity check once the first session events arrive.
Open questions — Step 6
The Deploy agent needs the Scaffolder to have already merged the variant PR into standout-games before a deployable bundle exists — what is the sequencing when the Scaffolder is still waiting for an engineer merge?
Session event streaming: push (WebSocket / SSE from the Worker) or pull (polling the audit log)? The architecture choice affects both the Worker API and the UI.
Should external builders be able to share a sandbox session link with their own team? Access control on the signed URL is not yet defined.
Step 7 · Iterate
1 Choose build path2 Define the game package3 Configure mechanics4 Attach assets & theme5 Run validation6 Generate playable sandbox7 Iterate8 Promote toward handoff
Real game tuning is cyclical: run a sandbox session, observe the behaviour, adjust config, re-validate, re-launch. Builder Studio tracks every version of a build so the builder can see what changed between v0.1.9 and v0.2.1, why validation moved from Warn to Pass on one gate, and how sandbox session outcomes shifted. The version timeline and compare drawer are the primary tools here — they turn an otherwise invisible tuning loop into a traceable record.
Version timeline + config compare drawer
CONCEPT · proposed
Version timeline
v0.2.1TodayRTP sim re-run · lobby tile uploaded
v0.2.0YesterdaywinMultiplier raised to 0.1×–6.0×
v0.1.92 days agoBaseline — template defaults
Compare v0.1.9 → v0.2.1
Config diff (v0.1.9 → v0.2.1)
Field
v0.1.9
v0.2.1
winMultiplier max
5.1×
6.0×
cheatCodeThreshold
65
55
Lobby tile
—
Uploaded
RTP delta: +0.31% · Volatility: unchanged (High)
On main today
What exists in GameWorkspace
A versions array in the mock game data (e.g. crash-cartel has v0.7.4, v0.7.2, v0.6.9) visible in the Overview tab of GameWorkspace.tsx.
A version selector in SandboxLaunchLab.tsx to pick which version to launch against.
No config diff between versions, no validation delta tracking, no sandbox session history linked to specific versions.
Proposed
Iteration tooling delta
A version timeline panel showing what changed at each version, linked to the relevant sandbox sessions and validation runs.
A config compare drawer that diffs any two versions field-by-field, with RTP delta and volatility class annotated by Math-Sim data where available.
Sandbox session history linked to the version that generated it, so "does this change improve session feel?" has an evidence trail.
Agents at this step
The Math-Sim agent is re-triggered on every config save, so each new version has an associated sim result for comparison. The Validation agent maintains a per-version gate run history so the builder can see exactly when and why a gate moved from Warn to Pass or vice versa.
Open questions — Step 7
How many versions should the system retain in detail? After 10+ iterations the timeline may become unwieldy — does it need a "squash to baseline" action?
Should the config diff be computed at save time (snapshot each version's full config) or at view time (diff against D1 history)? Snapshot is simpler but costs more storage per version.
Step 8 · Promote toward handoff
1 Choose build path2 Define the game package3 Configure mechanics4 Attach assets & theme5 Run validation6 Generate playable sandbox7 Iterate8 Promote toward handoff
Promotion is the controlled movement of a build up a stage ladder: prototype → internal → review candidate → operator demo → certification package. Each stage transition requires the relevant blockers to be cleared. The goal is that only real blockers gate promotion — not paperwork bureaucracy. The Cert-Pack agent assembles the certification evidence bundle once the build reaches the certification package stage.
Promote to internal review1 blocker must be resolved first · see Step 5
On main today
What exists in BuilderStudioDashboard
A stage column in the games table of BuilderStudioDashboard.tsx showing stage labels like "Prototype tuning", "Art integration", "Compliance pass" — from mock data, not a real state machine.
A review queue card listing tasks that block handoff (e.g. "Volatility notes" — High — Today) with urgency chips, also from mock data.
No explicit promotion action, no gate requirements per stage, no Cert-Pack agent.
Proposed
Stage ladder delta
A formal five-stage ladder (prototype → internal → review candidate → operator demo → certification package) with explicit per-stage gate requirements and a "Promote" action that checks blockers before allowing the transition.
The stage field in GameSpec becomes a first-class state machine value, audited on every transition via the existing append-only audit_log.
The Cert-Pack agent is triggered on promotion to "certification package" — it assembles the evidence bundle (math proof, replay bundle, jurisdiction matrix, operator copy) for compliance submission.
Agents at this step
The Cert-Pack agent assembles the certification evidence bundle on promotion to the certification package stage, requiring compliance-owner approval before the bundle is finalised. The Deploy agent handles the operator demo deployment with a human gate on promote — it auto-rolls back on smoke test failure.
Open questions — Step 8
Does "operator demo" require a separate Workers for Platforms dispatch namespace (demo) distinct from sandbox? If so, who provisions the operator's namespace entry — platform ops or the Deploy agent?
How are "Warns resolved or accepted" tracked? A human decision to accept a warning needs an audit record — the comment-as-channel model on the existing MCP rails may be sufficient but needs confirmation.
Should external Game Builders be able to self-promote to operator demo, or does promotion above "internal review" always require a Standout team member to approve?
Where Builder Validation went
The navigation sidebar in apps/web/src/components/ui.tsx at line 241 contains the entry:
This sidebar item points at the route /builder-validation, a page that does not exist. No view, component, or route handler for builderValidation exists in apps/web/src/. The decision taken in this planning suite is: do not create a standalone Builder Validation page. Instead, validation is folded into Builder Studio as the Step 5 panel (described above), surfaced per-build inside the GameWorkspace, and summarised in the aggregate validation ring on the studio dashboard. Validation is not a separate destination — it is a state of a build.
Sidebar cleanup implication
Removing the builderValidation sidebar entry (or redirecting it to /builder) would free a menu slot and eliminate a dead link. This branch makes no app code changes — the cleanup is flagged here as a one-line change in apps/web/src/components/ui.tsx:241 to be done on a feature branch. No user-facing behaviour changes on main today since the route never resolved.
How a build becomes a pipeline game
Builder Studio is the zoomed-in view of the build stage of the existing Standout pipeline. The pipeline has four macro stages: concept → build → cert → live. Builder Studio owns the entire "build" stage — from path-picker through to a certification package that the cert stage consumes. Once a build is promoted to the certification package stage and the Cert-Pack agent produces the evidence bundle, the record joins the main pipeline view as a normal game entry moving toward cert and live.
Build card crossing into pipeline view
CONCEPT · proposed
Builder Studio · build stage
Trunk Raider: Overdrive v0.2.1
Cert-Pack complete
Promoted by: Math owner · 12 Jun 2026
→
Pipeline · cert stage
Trunk Raider: Overdrive
Cert in progress
Joined pipeline: 12 Jun 2026
The join point is the stage field on the build record. When Builder Studio promotes a build to "certification package", a new entry appears in the main pipeline games table at the "cert" stage. The game's GameSpec provides the source of truth for config, assets, and math proof; the pipeline view adds the operator and jurisdiction deployment records that Builder Studio does not manage.