Skip to main content
Amended by 0249, decision 6: the console is one member that also builds the PWA and desktop targets.
Supersedes 0052. Amends 0110 and 0112.

Context

0052 made the console a Vite and React single-page app with coded screens. The owner’s panel answers (mem L735–739, 2026-10-20) replace coded screens with resources that modules declare, and a generic renderer that draws them. The console stays a Vite single-page app on Safari 17 or later, as 0052 said (gap B29).

Decision

  1. Modules declare @Resource, @Page and @Widget.
    • A resource has form and infolist schemas built from model fields.
    • Tables have columns, filters, sorts and bulk actions, bound to @Action.
    • Relation panels and navigation are declared too.
  2. Gen and the registry publish these declarations. The generic @stackra/panel renderer, built on @stackra/ui, draws them on web and native.
  3. There are several panels: platform admin, product operator, tenant admin and customer portal.
  4. A tenant can override a level-2 page (0110). Custom pages are the escape hatch.
  5. Coded screens are replaced by this model.
  6. The web app is @figentra/console, a Vite single-page app on Safari 17 or later.

Consequences

  • A new admin screen is a declaration, not a new component.
  • The renderer is the one place to fix layout, accessibility and i18n for every panel.

Enforcement

planned — gen fails on a resource whose bound action does not exist, and the renderer’s accessibility checks run in the console app.

Alternatives

  • Coded screens per panel: superseded by this decision.

Supersedes and sources

Supersedes: 0052. Amends: 0110, 0112. Sources: owner panel answers (stackra-decisions-2026-10-19.md L735–739, 2026-10-20); gap B29.