RetroFrontier is moving toward a thin client that can receive UI documents, component recipes, slot updates, and named command bindings from the server. That does not mean the browser becomes dumb. It means the browser owns the primitive renderer and the server owns the semantics.

The admin editor should eventually let us build a radial action collection, inventory panel, faction event console, or seasonal mission terminal out of the same base parts.

The rule is not “never code UI.” The rule is “code the primitives; author the feature surfaces.”

The client still needs carefully written controls for hard interaction problems: dragging, adaptive panes, text editing, radial selection, tables, and focus management. Feature meaning belongs in repository-backed data and capability-limited runtime actions.

type RuntimeUiSurface = {
  documentId: string;
  slots: Record<string, RuntimeUiNode>;
  commands: RuntimeCommandBinding[];
};

That split is what lets a world event add a new command panel without deploying a new browser bundle.