Skip to content

NarrowShell

A centred column for one-off pages (sign-in, consent, the OAuth popup result, connect-a-server), with AuthCard for the card.

LayoutServer-rendered

Examples

Consent page (md)

Wordmark banner, one main, a small-print footer. viewport={false} keeps the preview short.

Light
Switchboard

Allow Claude Code to use Switchboard?

It will see every enabled server and skill in Personal.

Signed in as wren@example.com

Small print goes here.
Dark
Switchboard

Allow Claude Code to use Switchboard?

It will see every enabled server and skill in Personal.

Signed in as wren@example.com

Small print goes here.
Example
<NarrowShell width="md" backdrop footer="…">
  <AuthCard lead={<ConnectionPlate … />} heading="Allow Claude Code to use Switchboard?" description="…" footer={…}>
    <form method="post">…</form>
  </AuthCard>
</NarrowShell>

Usage

Usage
import { NarrowShell, AuthCard } from '@switchboard/ui'

<Document title="Allow access · Switchboard">
  <NarrowShell width="md">
    <AuthCard heading="…">…</AuthCard>
  </NarrowShell>
</Document>

Props

Every component also takes mix, for css() and mixins applied after its own style.

NarrowShell

NarrowShell props
PropTypeDefaultDescription
width'sm' | 'md''sm'400px (auth, popup) or 560px (consent, connect).
brandbooleantrueWordmark banner above the column.
footerRemixNode–Small print under the column.
viewportbooleantrueFill the viewport and centre vertically.
homeHrefstring'/'Where the wordmark links.
backdropbooleanfalseA faint jack field behind the column (auth and OAuth pages).

Also accepts every <div> attribute.

AuthCard

AuthCard props
PropTypeDefaultDescription
heading*RemixNode–The page h1.
descriptionRemixNode–One line under the heading.
leadRemixNode–Above the heading: a ConnectionPlate.
footerRemixNode–Card footer: the link to the other auth page.
focusHeadingboolean–The h1 takes the initial focus (consent).

Also accepts every <section> attribute.

Accessibility

  • Renders a <header> banner (wordmark), one <main>, and an optional <footer>.
  • AuthCard’s heading is the only h1.

Guidance

Do

  • Use one card per page.

Don’t

  • Put a sidebar or AppHeader around it.