Sangria DS

Wireframes

Screens at both widths

Composition, plus one styling claim: shell screens sit on a single themed frame, with content as rounded panels floating on it. The outer ground is the frame, the translucent panel is the channel list and the solid one is the content panel. Dashed boxes appear conditionally and the tinted one is the composer. Every label names a real component.

Workspace shell

/workspace/[workspaceId]/channel/[channelId]

One themed frame behind the toolbar, rail and gutters; the list, main and thread are rounded-xl panels floating on it with 6px gaps. From md up every pane header is 54px, and the toolbar's search pill shows ⌘J (Ctrl + J off Mac) for the quick switcher. On mobile the toolbar is dropped, a MobileBackBar (min 56px) sits on the frame, and the messages are one rounded-top panel.

md and up

Toolbartransparent on the frame
Searchcentred translucent pill · ⌘J
Rail72px · on the frame
Channels · DMsWorkspaceSidebar
Huddle cardwhile live
Header54px · channel name · members
MessageTabs34px · accent underline
MessageListvirtual scroll container
Editorcomposer + ComposeUnfurls
ThreadResizablePanel · 54px header

< md

MobileBackBarmin 56px + safe area · back · title · actions, on the frame
MessageList
Editorsingle row
Sheetthread / profile, overlaid

Workspace home

/workspace/[workspaceId]

On desktop the canvas stays empty until a channel is picked. On mobile the bare route promotes the channel list into the canvas — the list is the screen, not a sidebar.

md and up

Toolbartransparent on the frame
Searchcentred translucent pill · ⌘J
Rail72px · on the frame
Channels · DMsWorkspaceSidebar
Empty statepick a conversation

< md

Workspace · avatar
Jump to…
Channels · DMspromoted to canvas
Huddle card
BottomNavon the frame · active pill

Sign in

/auth

A branded aside beside the form. Under md the aside is dropped and the form panel grows its own compact header, carrying the sign-in / sign-up toggle with it.

md and up

AuthBrandPanelgradient · feature tiles
Mode toggletop-right
Heading
Password formemail · password
Passkey
OAuth rowicon buttons

< md

Compact headerlogo + mode toggle
Heading
Password form
OAuth row
Remembered workspaces

Email confirmation

/auth · VerifyEmailStep

Replaces the form in place rather than routing away, so the entered email stays in state. The mode toggle is hidden here — switching would strand the code already sent.

md and up

AuthBrandPanel
Check your emailaddress echoed back
InputOTP6 slots
Send another
Use a different email

< md

Compact headertoggle hidden
Check your email
InputOTP
Send another

Workspace settings

/customize-workspace/[workspaceId]/*

Twelve sub-routes behind one nav: settings, members, channels, permissions, invitations, user-groups, emoji, integrations, app-directory, analytics, audit, account. The nav collapses into a Sheet under md.

md and up

Headerworkspace name · Docs link
Settings nav12 sections
Section title
Table / formmembers · permissions · audit

< md

Header + nav trigger
Section title
Stacked cardsthe table becomes cards
Sheetsettings nav

Canvas variants

/threads · /drafts · /search

These reuse the shell and replace only the canvas column, so the rail and list stay mounted. Each is a list surface with its own empty state. Activity, Saved and DMs are different: they drop the channel list for their own list-and-detail split.

md and up

Toolbartransparent on the frame
Searchcentred translucent pill · ⌘J
Rail72px · on the frame
Channels · DMsWorkspaceSidebar
Header54px · Threads · Drafts
Rowsmessage previews

< md

MobileBackBarmin 56px
Rows
BottomNav

Join and invite

/join/[workspaceId] · /invite/[token]

Full-screen single column at every width — no shell, because the caller may not be a member yet. Both dead-end into either the workspace or an explanation.

md and up

Workspace identityicon + name
Join code / invite state
Primary action

< md

Workspace identity
Join code / invite state
Primary action

Rules these encode

One frame, floating panelsThe toolbar, rail and gutters share the theme's frame; content is rounded-xl panels 6px apart, never flush columns split by borders.
One column at a time under mdNever a squeezed three-column shell on a phone.
Secondary panes become SheetsThread and profile overlay rather than compress the canvas.
The toolbar is desktop-onlyIts actions move into the header and the bottom nav, both sitting on the frame.
Pane headers are 54px from md upChannel, DM, group DM, thread, profile, drafts, threads, user group panel and new message share one height. Under md the shell's MobileTopBar / MobileBackBar (min 56px) take over.
Tables become cardsHorizontal scroll is a last resort, not a mobile layout.
Pre-membership screens have no shellJoin, invite and auth can't assume a workspace.