Clear boundaries
001Rules and shared edges give every region a deliberate place on the page.
The working collection
Colors come from Regent's shared design kit. Platform uses charcoal, Autolaunch tangerine, Patchbay platinum and Techtree powder blue. Changes you make here stay in this browser. Changes to the shared kit reach each site the next time it is built.
Regent.Primitives.button/1
Aa / 0123
Geist Sans · body copy and interface.
0x71C7..976FTitles and subtitles: Geist Pixel Square, weight 400. Body text and controls: Geist Sans. Addresses and code: Geist Mono. Space: 8 / 16 / 24 / 32 / 40 / 48 / 64 px.
Regent.Primitives.field/1
The shared pieces decide how things look. Each site decides what they do and who can use them.
A closed section still holds its text, so search and screen readers can find it.
Regent.Primitives.disclosure/1
Rules and shared edges give every region a deliberate place on the page.
One set of components, put together to suit each product. Change the words and picture without rebuilding the card.
Use an image with a short description for screen readers, or your own artwork. Buttons on the card are optional.
Hover or focus a card for the slower sweep. The color control above applies to cards and primary buttons.
Regent.Structure.capability_card/1
Regent.Primitives.status/1
Regent.Primitives.notice/1
Nothing here yet.
Items live only on this page. Reloading clears them.
Regent.Primitives.empty_state/1
Choose the slow wallet, then another before it answers: the slow answer is thrown away and never replaces the wallet you chose. Disconnect does the same. Tick the failure box and refresh to keep the last reading marked as old; choose a new wallet with it ticked to see a failed read shown as a failure, never as zero.
Edits stay on this page.
Each site fills these in from its own records.
This preview shows the frame around every signed-in page: the menu, the account button and the light and dark switch.
Disconnected
These practice pieces never touch a real wallet or network. Each press starts its own request, even while an earlier one is still waiting. Disconnect here only affects the practice wallet.
These buttons use this site's real sign-in. You only see the button that fits where you are now. Signing in may open Privy. Signing out ends your visit on this site. The practice wallet is separate.
These pages use real sign-in and check your wallet. Anything sent from your wallet asks you to approve it there first. This page never sends anything for you.
Practice only. Nothing is linked for real.
Built with Ash. The title needs 2 to 80 characters and the quantity must be from 1 to 100. Items live only on this page and are never saved.
Each example makes a practice sign-in and runs it through the same check the real site uses: one valid, one expired and one made for a different app. Practice sign-ins never sign anyone in, and they never touch a real wallet or network.
20 components · 1 Ash data groups
Regent.Primitives.button/1Settings: class, rest, type, variant · Parts: inner_block
Regent.Primitives.field/1Settings: class, errors, id, label, rest · Parts: hint, inner_block
Regent.Primitives.status/1Settings: class, rest, tone · Parts: inner_block
Regent.Primitives.notice/1Settings: class, rest, tone · Parts: inner_block
Regent.Primitives.empty_state/1Settings: class, rest, title · Parts: action, inner_block
Regent.Primitives.disclosure/1Settings: class, id, index, open, rest, summary · Parts: inner_block
Regent.Structure.frame/1Settings: class, rest · Parts: inner_block
Regent.Structure.row/1Settings: class, rail, rest · Parts: inner_block, rail_content
Regent.Structure.section_bar/1Settings: class, rest · Parts: inner_block
Regent.Structure.panel/1Settings: class, rest, tone · Parts: inner_block
Regent.Structure.technical_figure/1Settings: class, rest · Parts: caption, inner_block
Regent.Structure.capability_card/1Settings: class, description, image_alt, image_src, index, rest, title, tone · Parts: actions, foil, media
Regent.Structure.ratio_card/1Settings: change, class, eyebrow, footer_label, id, label, remainder_label, rest, title, value_bps · Parts: footer, footer_badge
Regent.ThemeToggle.button/1Settings: class, id, rest, theme · Parts:
AshTemplateWeb.Components.Shell.shell/1Settings: account_control, route_spec, shell_instance, theme · Parts: content
AshTemplateWeb.Components.Shell.account_control/1Settings: account_control, enabled · Parts:
AshTemplateWeb.Components.Shell.theme_toggle/1Settings: id, theme · Parts:
AshTemplateWeb.Components.VerifiedConnections.verified_connections/1Settings: authenticated, class, description, id, identities, notice, read_state, title · Parts:
AshTemplateWeb.Layouts.app/1Settings: flash, inner_content · Parts:
AshTemplateWeb.Layouts.root/1Settings: · Parts:
AshTemplate.Accounts.HumanAccountWhat it can do: by_privy_did (read), read_self (read), register_verified (create), refresh_verified (update)
Fields: id, privy_user_id (private), wallet_address (private), wallet_addresses (private), display_name, avatar (private), created_at (private), updated_at (private)AshTemplate.Accounts.SessionAuthorityWhat it can do: read (read), by_lineage_digest (read), mint (create), bind (update), advance (update), revoke (update)
Fields: id, lineage_digest (private), generation (private), revoked_at (private), inserted_at (private), updated_at (private), human_account_id (private)AshTemplate.Accounts.LinkedIdentityWhat it can do: upsert_verified (create), read_mine (read), for_account (read), by_provider_subject (read), remove_verified (destroy)
Fields: id, provider, subject (private), username, display_name, verified_at, metadata (private), inserted_at (private), updated_at (private), human_account_id (private)AshTemplate.DatabaseConfigThis site onlyrelease_config!/0 · release_config!/1 · runtime_config!/1 · runtime_config!/2
RegentPrivyShared by every siteverify_token/2
RegentPrivy.SessionShared by every siteverify/2
This list covers every shared design component and the ones this site adds. Product pages are built from these pieces and keep their own behavior. The Ash groups show how the data is shaped, never the data itself. The shared tools are the libraries every site uses, plus this site's database settings.