The Studio's layout, second pass: the game in the middle
Designed 2026-10-06, after the owner installed 0.1.0 on a Mac ("the ui/ux is completely fucked and not resizable … nowhere near close to being done") and after driving every screen at a laptop's size and a Retina Mac's. ADR-0012 sets the bar; this replaces S4's arrangement of the panels (design/m11-studio.md), not its habits (fold, drag, remember, shortcuts).
What is wrong with 0.1.0
- The game is a tab. Play is one tab among the Overview and every open document. Editing a document hides the game, so a change is never seen beside its cause, and at 1280×720 the game draws in about 460×260 with nothing to drive it: no pause, restart, speed, level, or window of its own.
- Two columns to find one document. A rail of sections (190) and a list of that section's documents (250) take 440 of 1280 points, and the list repeats the rail ("Game → Game (1) → Tideline"). The rail's counts sit high, out of line with their names.
- No menus. Every command is a button, a shortcut or Ctrl+K. A Mac app without File, Edit, View and Help in the menu bar feels broken; on Windows and Linux every tool of this kind has a menu bar too (Godot's editor, Blender, Unity).
- Four buttons that read alike. Check, Build, Playtest and Play, with Play greyed until Build ran. A person presses Play; the Studio should build first when it must.
- Forms that read as an admin page. Inputs stretch to 1200 points on a wide window; labels float beside tall fields; groups say "Not set (add it in JSON)" and stop; a document's provenance shows as fields; nothing says what a field means, though every schema field has a description.
- A thin Director. A one-line input with no send button; nothing suggests what to ask; the key card holds the top of the panel even after it is no longer the next thing to do.
- Checks take 190 points to say one line.
- A bare welcome. A narrow column in an empty window; the nine samples have posters (web/public/posters) and none show.
The layout
┌ menu bar (native on a Mac; File Edit View Game Help in the window elsewhere) ─────────────────┐
│ ◆ Gamewright Tideline ▾ [▶ Play] [⏸] [↺] level ▾ Build ✓ Playtest ⚙ │
├──────────────┬──────────────────────────────────────────────────┬────────────────────────────┤
│ Project │ │ Director │ Inspector │
│ 🔍 filter │ │ │
│ ▾ Game │ the game │ (the chat, proposals, │
│ Tideline │ (always here; its empty state is the │ a composer at the foot) │
│ Brief │ next steps; a document's preview shows │ or │
│ ▾ World │ here when the game is not built) │ (the chosen document: │
│ ▾ Characters │ │ its preview, its fields, │
│ ▸ Items 7 │ │ JSON, open in a tab) │
│ … ├──────────────────────────────────────────────────┤ │
│ │ Checks │ Problems │ Playtests (folds to the status bar) │
├──────────────┴──────────────────────────────────────────────────┴────────────────────────────┤
│ status: ● core ready · built 2 min ago · 13 playtests passed · 1 proposal waiting │
└────────────────────────────────────────────────────────────────────────────────────────────────┘
- Project, left (240, 180 to 420, folds to nothing with Ctrl+B). One tree: the sections are its top rows (icon, name, count in line), their documents under them, a filter at the top that matches names, kinds and words in documents. A document's state shows on its row: a dot for a proposal waiting, red for one that does not build. Right-click: open, open in a tab, show its JSON, ask the Director about it, reveal the file.
- The game, centre, always. The play view fills the middle; its toolbar is in the window's header: Play (F5; builds first when the documents changed, one button, never greyed), Pause (F7), Restart (Ctrl+R), a level or place to start from, Open in a window (F8, the game in its own window, already built: research/studio-architecture.md risk 2). Before the first build the middle is the game's start page: its title, its poster or a frame of it when there is one, and the next steps. Opening a document as a tab (double-click, or Open in a tab) puts tabs over the middle, with the game always the first one.
- The right dock: Director and Inspector (380, 320 to 640). Two tabs. Choosing a document in the tree shows it in the Inspector: its preview on top (design/studio-previews.md), then its fields, with Fields and JSON as now. Asking the Director, or a proposal arriving, shows the Director; its tab carries a count of proposals waiting. Ctrl+L goes to the Director and its composer, Ctrl+I to the Inspector.
- The console, bottom of the middle (folds to the status bar, Ctrl+J). Tabs for Checks (what ran, as now), Problems (each problem a row that opens its document at the field) and Playtests (each with its last result, run one, watch one). Folded, the status bar says the latest result; a failure unfolds it once.
- The status bar. The core's state, the last build, the last check, proposals waiting, the Director's spend this session; each part clickable.
The pieces
- Menus. File (New game ⌘N, Open ⌘O, Open recent ▸, Close game, Export ⌘E, Quit), Edit (Undo, Redo, Find ⌘K), View (Project ⌘B, Director ⌘L, Inspector ⌘I, Console ⌘J, Bigger, Smaller, Actual size, Full screen), Game (Play F5, Pause F7, Restart ⌘R, Build ⇧⌘B, Playtest F6, Open in a window F8, See it as ▸ everyone's, red-blind, green-blind or blue-blind eyes, I've played it), Director (Ask, New conversation, Connect Claude Code, Your key), Help (Shortcuts, Docs, Report a problem, Check for updates, About). On a Mac they are the menu bar's (NativeMenu: the app menu holds About, Settings and Quit, as every Mac app); elsewhere a MenuBar in the header. Each item is the shortcut registry's (GwStudioShortcuts), so menus, shortcuts, the palette and the sheet never drift.
- The composer. A multi-line field that grows to six lines, Enter to send and Shift+Enter for a new line (said under it), a send button, Esc to stop a turn. Empty, the Director shows three suggestions from the game ("Make the nights darker", "Add a level", "Why is the sentry hard?"). The key card shows only until a key or Claude Code is connected, then lives in Director ▸ Your key.
- The Inspector's form. Fields at most 560 wide, labels above their field when the dock is narrow and beside it when wide, each field's schema description in a tooltip and a muted line for the first field of a group; a group that is not set offers "Add" with its defaults, not JSON; provenance and status fold into an "About this document" section, closed.
- The welcome. The width of the window: on the left, recent games as rows with their poster and when they were opened; on the right, New game and the nine samples as cards with their posters (web/public/posters, copied into the Studio's resources by its export), each opening a copy with one click.
- Type and density. One step denser than 0.1.0 for lists and forms (rows 28, not 36), headers and the game's title larger; the night-coast palette stays.
What does not change
The core, the session, the shortcuts' keys, the plain words (S2), the theme's tokens, folding and remembering, and every scenario's proof: each scenario moves to the new layout's controls by name (GAMEWRIGHT_STUDIO_LAYOUT), and its frames are Read again.
Proof
- The layout tests at 1100×680 (GwStudioWindow.DESIGN), 1280×720, 1920×1080 and 2560×1440 at 2×: every panel inside the window, the game at least 640×360 at 1280×720 with every panel open, the status bar always shown.
- Menus: every menu item names a command the registry knows, every command with a menu has the same shortcut in both; on a Mac build, the native menu is used (a test on the Mac runner).
- Play builds first: from a fresh copy of a sample, Play alone gets to a playing game.
- Every scenario's frames at 1280×720 and at 2×, Read, with no id or path on screen.