The board
The board (/<workspace>) is the heart of the app. Each environment
shows as a section, each slot as a card. Cards reflect live state
from your GitHub activity.
What a slot card shows
┌────────────────────────────────────┐
│ staging-1 IN QA │ ← name + current status pill
│ Open ↗ │ ← URL (if set)
├────────────────────────────────────┤
│ QA-Bob owns this until Friday │ ← note (if set)
├────────────────────────────────────┤
│ Current ref │
│ feature/payments a1b2c3d │ ← current ref + sha
│ Updated 5m ago · via webhook │ ← last-update time + source
├────────────────────────────────────┤
│ Tracking │
│ branch · staging-1 │ ← what this slot follows
│ ● branch "staging-1" exists │
├────────────────────────────────────┤
│ Set status │
│ [Empty] [Deploying] [Available] │ ← quick-status pills
│ [In QA] [QA-OK] [Broken] │ current state ringed
├────────────────────────────────────┤
│ Manual override ▾ │ ← collapsed: ref + status
└────────────────────────────────────┘
The current status
The pill in the top-right shows the slot's current status. Colors are
derived from the status name — words like "fail", "broke", "down"
read as danger; "deploy", "pending", "queue" read as warn; "live",
"deployed", "ok", "ready" read as ok; anything else is neutral. The
list of statuses is configurable at Settings → Status workflow.
Quick-status buttons
The row of pills under Set status is the fastest way to change status. One click sets the slot to that status. The current state is highlighted with its tone color and a ring.
This only changes the status — it doesn't touch the current ref
or trigger any deploy. It writes the app's view of the slot; the next
webhook can overwrite it (e.g. a new push to the tracked branch will
set status back to Deploying).
Manual override
The Manual override ▾ <details> block lets you change both the
ref and the status together. Use it when you want to say "actually,
the live ref is X" — e.g. a manual deploy outside the normal pipeline.
Same caveat: the next webhook can overwrite it.
URL and note
If you set a URL on a slot (in Settings → Environments), the card
shows an Open ↗ link directly under the slot name. Useful for
"the QA team can hit this directly".
A note is freeform short text — flag who has the slot, what's being tested, what's broken. Renders as italicized muted text below the slot name.
Both fields are optional and per-slot.
Reading the "Tracking" section
This section appears once a slot is bound to a repo. It tells you:
- The trigger type and pattern (
branch · staging-1,tag · v*,deployment · production). - Whether the matching ref currently exists on GitHub (green dot) or doesn't (warn dot).
- If it doesn't, a
+ Create branch / tagbutton lets you create it on the spot — your CI will react and deploy.mainanddevelopare protected and can never be created or deleted from the app, even withContents: write.
"Updated X ago · via Y"
Every slot tracks lastUpdatedAt and lastUpdatedSource. Source is
one of:
webhook— set by a GitHub push / create / deployment event.ui— set by a human via quick-status pills or manual override.api— reserved for the public REST API (not shipped yet).
This is the cheap audit line. Full history per slot is in the audit log (also coming soon).