UI Toolkit

Every piece the dashboard is built from, in one place. Plain Tailwind utilities, light and dark.

Tokens

Colors, radius and spacing. Each color has a light and a dark value.

canvas
surface
panel
line
ink
muted
accent
accent-soft
danger
danger-soft
warning
warning-soft
success
success-soft
rounded-md
rounded-lg
rounded-xl
rounded-full
1
2
3
4
6
8
12

Typography

Inter for interface text, JetBrains Mono for hashes, tokens and code.

Page title 28 · 600
Commits with their AI sessions
Section title 16 · 600
Flags waiting for review
Body 14 · 400
Ana's session produced 3 commits and spent 41,200 tokens on Claude Code.
Small 13 · 400
Last synced with GitHub 2 minutes ago
Caption 12 · 500
RESETS IN 2H 14M
Mono 13 · 400
a91f3c2 · 12,480 in / 3,912 out

Buttons

One primary action per screen. Destructive actions are red and always confirm.

Variants
Sizes
States

Forms

Labels above fields, help text below. Errors say what to do next.

  • Claude Code
  • Codex
  • Grok
Block flagged requests Email weekly report
Redact secrets in transcripts Share transcripts with members

Selects

One select everywhere, in the toolkit's type and colors. The list opens in the browser's top layer, so no sidebar or overflow clips it, and flips up near the bottom. Arrows, Home, End, letters, Enter, Escape and Tab work as in a native select; the form still submits a plain select.

Plain
  • Manhã
  • Tarde
  • Noite
  • 5º ano A
  • 5º ano B
  • 6º ano A
  • Motivo…
  • Atestado médico
  • Viagem
  • Outro
Label inside
  • E.M. Vila Galvão
  • E.M. Jardim das Oliveiras
  • E.M. Santa Rita
  • E.M. Parque Alvorada
  • E.M. Morada do Sol
  • E.M. Boa Vista
  • E.M. Lago Azul
  • E.M. Conjunto Uirapuru
  • E.M. Residencial Alvorada II
  • E.M. Jardim Canedo
  • E.M. São Francisco
  • E.M. Setor Sul
  • Hoje
  • 7 dias
  • 30 dias
Search (> 8)
  • E.M. Vila Galvão
  • E.M. Jardim das Oliveiras
  • E.M. Santa Rita
  • E.M. Parque Alvorada
  • E.M. Morada do Sol
  • E.M. Boa Vista
  • E.M. Lago Azul
  • E.M. Conjunto Uirapuru
  • E.M. Residencial Alvorada II
  • E.M. Jardim Canedo
  • E.M. São Francisco
  • E.M. Setor Sul
Groups
  • Escolha uma área
  • Portaria principal
  • Pátio
  • Biblioteca
  • Portaria de serviço
  • Quadra
  • Laboratório
Disabled
  • Administrador
  • Porteiro
  • Encarregado de dados
  • Diretor (em breve)
  • Administrador
  • Porteiro
  • Encarregado de dados
  • Diretor (em breve)
Inside a LiveView form: phx-change follows each choice, submit sends the same params a native select would.
  • E.M. Vila Galvão
  • E.M. Jardim das Oliveiras
  • E.M. Santa Rita
  • E.M. Parque Alvorada
  • E.M. Morada do Sol
  • E.M. Boa Vista
  • E.M. Lago Azul
  • E.M. Conjunto Uirapuru
  • E.M. Residencial Alvorada II
  • E.M. Jardim Canedo
  • E.M. São Francisco
  • E.M. Setor Sul
  • Manhã
  • Tarde
  • Noite
phx-change: escola= turno=manha

Status

Verdicts, states, providers and roles. Color always comes with a word.

Judge verdict
Clean Needs review Flagged Blocked
Session
Live Linked to a91f3c2 Not linked yet
Provider
Claude Code Codex Grok
Role
Owner Admin Developer Member Viewer
Commit quality
Quality: solid Quality: check tests Quality: look closer
Account state
OK Limited Error · sign in again Disabled Disabled by admin
Plan and billing
Max 20x Pro Free plan Limit reached · resets Nov 30 No credits
Sharing
Team Pool Private Not in your access
Remaining quota
5h · 62% left
Week · 22% left
Week · Opus · 6% left

Data

Numbers first. Every number says what it counts and over which period.

Tokens this week 18.4M +12% vs last week
Est. API cost this month $1,284 Estimate at API list prices
Sessions this week 342 +28 vs last week
Open flags 3 2 need review today
Shared pool · remaining
Claude Code 38% left
resets in 2h 14m
Codex 62% left
resets in 5h 40m
Grok No usage signal
Grok doesn't report quota. Watch for billing holds instead.
Member Role Sessions Tokens Est. cost Last active
AS Ana Souza ana@softforge.dev Admin 128 6.2M $412 2 min ago
BR Bruno Reis bruno@softforge.dev Developer 96 5.1M $348 12 min ago
CM Carla Mendes carla@softforge.dev Developer 74 3.9M $266 1 h ago
DP Diego Prado diego@softforge.dev Member 31 2.4M $171 Yesterday

Distribution

Stacked bars per interval. Pick what to group by, then select a bar to see who made it up.

Group by
ATTRIBUTED USAGE

Where usage happens

Estimates at API prices

6,980 requests in the period · demo data

4352180
Yesterday 3 PMToday 3 AMToday 3 PM
Ana Souza Bruno Reis Carla Mendes Diego Prado Elisa Nunes
Today, 09:00–09:30 85 requests
Bruno Reis 35 41%
Ana Souza 21 25%
Carla Mendes 14 17%
Diego Prado 10 11%
Elisa Nunes 5 6%

Select an interval to see its distribution. Times use this browser's time zone.

Compositions

The product's own building blocks: a commit with its AI session, and a judge flag.

softforgebr/ai-gateway main Today · 3 commits
AS
Retry GitHub webhooks with exponential backoff a91f3c2 · Ana Souza · 14 min ago
Claude Code 41.2K tokens Clean
BR
Read provider keys from the encrypted vault 7c0e9b1 · Bruno Reis · 14 min ago
Codex 18.7K tokens Needs review
CM
Fix flaky pool reset test e42d118 · Carla Mendes · 14 min ago
Not linked yet
Possible secret sent to a provider

Bruno's prompt to Codex included a value that looks like a live Stripe key. The judge redacted it before storing the transcript.

STRIPE_KEY=sk_live_••••••••••3f9a

Clickable cards

A card or row with a page of its own opens from anywhere on it. Its main link is a stretched_link: the card is relative group/card, every other control inside is relative z-10, and middle-click still opens a new tab.

Ana Souza Professora
Bruno Reis Aluno

Feedback

Every action answers. Every data surface has an empty, loading, error and no-access state.

Provider connected Claude Code is now shared with 12 members.
Key revoked Bruno's MacBook Pro key stopped working.
Undo
Couldn't reach GitHub Webhook delivery failed. We'll retry in 2 minutes.
Retry now
No commits with AI sessions yet Sessions appear here once a member commits code they wrote through the gateway. Set up a member
Couldn't load usage The usage service didn't answer. Your data is safe. Try again
Admins only Ask an admin to give you access to spend and productivity reports.

Scrollbars

One quiet scrollbar everywhere: thin, rounded, no arrows, no track. The root layout sets it once on <html>; components add nothing.

Vertical, gutter kept stable
  • Catraca 2 · Bloco B 07:02
  • Catraca 3 · Bloco C 07:04
  • Catraca 4 · Bloco A 07:06
  • Catraca 1 · Bloco B 07:08
  • Catraca 2 · Bloco C 07:10
  • Catraca 3 · Bloco A 07:12
  • Catraca 4 · Bloco B 07:14
  • Catraca 1 · Bloco C 07:16
  • Catraca 2 · Bloco A 07:18
  • Catraca 3 · Bloco B 07:20
  • Catraca 4 · Bloco C 07:22
  • Catraca 1 · Bloco A 07:24
  • Catraca 2 · Bloco B 07:26
  • Catraca 3 · Bloco C 07:28
  • Catraca 4 · Bloco A 07:30
  • Catraca 1 · Bloco B 07:32
  • Catraca 2 · Bloco C 07:34
  • Catraca 3 · Bloco A 07:36
  • Catraca 4 · Bloco B 07:38
  • Catraca 1 · Bloco C 07:40
  • Catraca 2 · Bloco A 07:42
  • Catraca 3 · Bloco B 07:44
  • Catraca 4 · Bloco C 07:46
  • Catraca 1 · Bloco A 07:48
Horizontal
6h 7h 8h 9h 10h 11h 12h 13h 14h 15h 16h 17h 18h 19h 20h 21h 22h
Recipe

Scroll with overflow-y-auto and stop there. Add [scrollbar-gutter:stable] when the bar comes and goes and would shift the content.

Never set scrollbar-width, scrollbar-color or ::-webkit-scrollbar on a component: Chromium then drops the shared look for that element.

Chromium and Safari draw the bar from the scrollbar* variants; Firefox gets scrollbar-width: thin and the scrollbar color token. Only a carousel hides it.

Tips

Tooltips drawn in the browser's top layer, so nothing clips them: not the sidebar, not a dialog, not a scrolling list. Hover, focus or tap the trigger. The native title attribute stays only on truncated text, where it repeats what is cut.

Text
Title + text
Hash confere Bloqueado
Tones
Placement
Rich content
Near the edges: the left tip opens over the sidebar, the right one flips to the left because the viewport ends there.