Goldie Blocks

Container Screen

The Workspace and Project screen — a container's own card with its children filed beneath it.

The Container Screen shows one folio that holds others: its own card at the top, and its children listed beneath. Workspace and Project are the same screen — one page that prints each tier's own words.

In plain terms: a file with the files inside it. Opening a drawer and opening a folder look the same, because they are the same act.

This page was document-home until 2026-09-20. There is no separate home screen: /app/canvas provisions your Workspace and sends you to it.

Route

/app/canvas/$routeKey, the same address the Document Work Screen uses. The folio's kind picks the screen; see Canvas Frame.

ContainerChildren it listsCode
WorkspaceProjectssrc/pages/folio-container/
ProjectDocumentssrc/pages/folio-container/

Which children a tier files comes from the domain's containment table, not from a check on the kind — a new tier joins by adding a row there.

What's on screen

Container Screen
├── Location line     ← "In Workspace: …", where there is a parent
├── Container card    ← this folio's own card: name, guide, tags, contents count
└── Children
    ├── List toolbar  ← Insert + at the left, Filter at the right
    └── Child cards   ← one per child, newest first, each openable and selectable

The container's card and every child card are the same furniture as the document canvas — see The Stack. The list is a navigation surface, so it sits on the canvas ground rather than on paper.

Clicking a row

Where you click is what it means. Bare card paint opens the folio. The mark menu, the editable heading and Goldie's glyph select the row instead. Keyboard users open through the card's own Open button.

Nothing arrives selected, and a click on empty surface or Escape puts a row back down — the frame owns that, not the screen.

Goldie is per row: one row's panel is open at a time, and it carries that folio's own conversation. Selecting a row is what brings its About rows with it.

The list toolbar

Every list page carries the same toolbar between its header card and its list (owner, 2026-10-01):

  [ Insert + ]                               [ ≡ Filter ]
                              ‹this page's filter chips›
  • Insert + (left) opens the insert search card. It always inserts the page's child kind, one level down. It replaced the "Add a library / project / document / module" rows.
  • Insert is the canvas's own insert row, on the same geometry: the plus in the gutter where every card's mark sits, the words starting where every card's title starts, on the card rail. It reads as one button defined by its background: a single pill whose fill spans the plus and the words, in the folio menu's "Insert…" colours — pale gold at rest, a shade deeper on hover, and while its search is open the deeper shade with the plus on an ink tile inside it. The button itself is that one shape: it reaches left past the gutter's plus, and its padding puts the words back at the text column. Nothing draws a background behind the words alone. A "Blank …" result row has no gutter mark; its plus is at the right. No border, and no card behind the row; the pill's padding never moves the plus or the words. The bottom insert rows stay plain (owner, 2026-10-01).
  • Every list page uses the one ListToolbar component (src/shared/ui/molecules/list-toolbar/) and passes props only — the Insert's words and search, the filter groups, the position. No screen styles its own toolbar (owner, 2026-10-01). Its stories show every state.
  • Filter (right) stands apart from Insert — never in one card with it — on the same line, its right edge on the list cards' own. Its chips sit on their own line below, right-aligned to the same edge. It the page's chip row below it and counts the chips that are on, so a filter left on is never hidden.
PageInsertFilter chipsOrder
Librariestop; adds a LibraryShow: Mine · Shared with me · Marketplace; Price: Free · Paid (greyed, coming soon), shown only while Marketplace is chosen and cleared when it is notnewest at top
Workspacetop; adds a ProjectShow: Mine · Shared with me, one at a timenewest at top (last edit, else creation)
Projecttop; adds a Documentas Workspaceas Workspace
Document canvastop and bottom; adds a ModuleShow: All · Modules · Data · Content, one at a time, All by defaultclause order
A Library's own WorkspaceInsert into… only: ticks the Library on or off a Workspace's search listnoneunchanged

On the document canvas the two Inserts differ by where they land: the top one inserts at the top of the module list, the bottom one at the true end, even while a filter hides rows. The filter only hides rows that do not match: Modules hides every block and keeps the module cards; Content or Data hides the other kind's blocks. A filter group may depend on another (showWhen): it shows only while that group's answer is chosen, and is cleared when hidden. The left-margin plus and the row menu's Insert are unchanged.

On Library pages the left end is still the page's main action, turned round (owner, 2026-10-01). A working copy's Insert + inserts one level below, into this folio. A Library master's Insert into… inserts this item one level above: it copies it into a chosen existing destination — a Library into a Workspace, a Project into a Workspace, a Document into a Project, a Module into a Document. It replaced the separate "Use this …" card, and its search card is headed with the item's name so it reads as a sentence: "Insert Cooking With Gas into…". A Library Document, Module or Block page puts it at the left of the document's toolbar the same way. A Library's own page (its Workspace) gets the toolbar with Insert into… alone and no Filter (owner, 2026-10-01, revising 2026-09-26): its destinations are the account's Workspaces, each a checkbox: ticked where the Workspace already searches this Library. Choosing one toggles it — added to, or taken off, that Workspace's search list through the search card's own Keep selection (library/searchScope.keepSelection), every other Library on the list kept. No confirmation: unticking removes only a search link.

How work moves between a working copy and a Library (owner, 2026-10-01):

DirectionHowWhere
Working copy → LibraryPublish a Document, Module or Block from the Document's menu (src/features/publish-to-library); never a Project (owner, 2026-10-01)Working copy
Library → working copyInsert into…, one level aboveLibrary pages
Library item → hereInsert +, through the library search card, one level belowWorking copy

Nothing is made in a Library: masters arrive only by publishing from a working copy (Libraries, owner ruling 2026-09-26).

In plain terms: a Library is a precedent bank. You file finished precedents in, you take copies out, and you never draft inside it.

Workspace and Project cards carry whose they are (viewerHolds on the list data, owner 2026-10-01): Mine keeps the cards the viewer holds, Shared with me the cards someone else holds and the viewer was let into. The Tags, Edited, When and Owner chips were dropped the same day.

In plain terms: every drawer has the same strip across its top. "New" on the left, "Show only…" on the right. What "new" makes is always the next thing down: a Library in Libraries, a Project in a Workspace, a Document in a Project, a Module in a Document.

Adding a child

  • Workspace → Insert a project creates the Project and stays put. A new Project is empty, so opening it would show nothing.
  • Project → Insert a document creates the document and opens it, because the document is what was asked for.

An add in flight refuses a second one.

Reads and writes

Arriving reads api.folio.home.container — the folio, its children, and its parent for the trail — and records a visit, which moves the folio up the recent list. A failed visit is bookkeeping: it is logged, and the screen carries on.

Writes are per row, each through its own mutation: rename, guide, tags, duplicate, and delete. Delete is reversible list visibility, not destruction; the confirmation names what goes with it. See Folio operations.

On this page