s-m-r-t
Open the s-m-r-t source on GitHub Switch to dark color scheme
← Capabilities

New capability

The admin app shell is already designed

AppShell composes Provider, ThemeProvider, and AdminShell into one root layout. AdminShell gives s-m-r-t applications a responsive four-edge workspace with tenant navigation, settings, focus tools, status, and live activity feeds.

AdminShell
TopTenant navFocus toolsActivitySettings
One responsive workspace separates application, tenant, focus, and system scope.

AppShell is the composed entry

The template root layout is AppShell from @happyvertical/smrt-svelte/app. It wraps Provider, ThemeProvider, the theme CSS, and AdminShell, takes a small explicit nav, and exposes nav and dock slots. Its Provider registers the generated read-only WebMCP tools when the browser exposes modelContext. The same subpath holds OwnerSetupForm, ShellSettingsPage, and RuntimeDiagnosticsWebMcp, which the template mounts on its setup and settings routes. The subpath is browser-only and imports nothing from the server or from $app.

  • runtimeDiagnostics, on for signed-in sessions, owns exactly one additional read-only tool, smrt.runtime.diagnostics.read, which fetches the mounted diagnostics route as the page user.
  • Generated REST routes do not create pages. Add each human-facing route to nav explicitly.
src/routes/+layout.svelte
svelte
<script lang="ts">
  import { page } from '$app/state';
  import { webMcpToolDefinitions } from '@happyvertical/smrt-virt-web';
  import { AppShell } from '@happyvertical/smrt-svelte/app';
  import type { ShellNavItem } from '@happyvertical/smrt-svelte/workspace';

  let { data, children } = $props();

  const settingsHref = '/settings';

  const nav: ShellNavItem[] = [
    { href: '/', label: 'Items', description: 'The example s-m-r-t object' },
    { href: settingsHref, label: 'Settings', description: 'Workspace layout and shortcuts' }
  ];

  const webmcp = $derived(
    typeof document !== 'undefined' && 'modelContext' in document
      ? { definitions: webMcpToolDefinitions, basePath: '/api', effects: ['read'] as const }
      : false
  );
</script>

<AppShell
  title="s-m-r-t app"
  {webmcp}
  {nav}
  currentHref={page.url.pathname}
  runtimeDiagnostics={data.session.authenticated}
  {settingsHref}
>
  {@render children()}
</AppShell>

Four edges, four scopes

Top, left, right, and bottom panels have explicit geometry and responsive presentation. App, tenant, focus, and system scopes make ownership legible instead of accumulating one giant sidebar.

Activities accept any transport

Jobs, polling, SSE, WebSockets, and application events all adapt into one activity registry. The shell itself stays transport-agnostic and SSR-safe.

AdminShell is the surface to build on

Earlier releases shipped a sidebar-and-inspector WorkspaceShell and a role-driven RoleShell. The four-edge AdminShell replaced both, and those primitives are no longer exported. Focus tools now live on the shell. The previous dock stays available on a separate legacy subpath. An existing application can migrate one screen at a time.