v1.0 · MIT licensed assets

Termbay Brand Guidelines

Everything needed to write, design, and build with Termbay consistently — the story behind the harbor metaphor, the full color and type system, logo construction and misuse rules, the Buoy mascot, illustration style, and downloadable source files.

Brand story & positioning

A coding agent CLI is a boat — it goes out, does work, comes back with something to report. Run several at once and you need a place to dock them where you can see all of them at a glance, without losing track of which one needs you. That place is the bay.

Every terminal column in Termbay is a docked vessel: given its own berth, resizable, movable between rows, but never lost in a sea of tabs. The beacon — the amber dot at the top of the mark — is the thing that calls your attention across the whole harbor: an agent waiting on you, a finding that needs a decision, a run that just finished. The water line underneath is the tide: agents working, always some quiet motion even when nothing demands your attention yet.

Mission

Make running many AI coding agents at once feel like commanding a small, orderly harbor instead of wrangling a pile of terminal tabs — provider-agnostic, transparent about what each agent can and can't do, and honest when it doesn't know something (a cost number, a context window) rather than guessing.

Audience

Developers already running more than one coding-agent CLI, or curious to — people comfortable in a terminal, who want real control (permission modes, worktree isolation, headless runs) rather than a simplified chat wrapper.

Personality & values

  • Orderly, not sterile. A harbor has structure — berths, a beacon, a tide — but it's alive, not a spreadsheet.
  • Provider-agnostic. No CLI is the hero; Termbay never plays favorites in copy, iconography, or default sort order.
  • Honest about uncertainty. "Not available" beats a fabricated number. Uncertain capabilities are labeled, not hidden.
  • Quietly capable. Confidence without hype — the product argues for itself through what it actually does.

Voice & tone

Termbay's voice is direct, technically precise, and dry rather than exclamatory. It talks to developers like a competent colleague — never a hype machine, never cute at the expense of clarity.

Do

  • "Claude Code's 5h/weekly windows are estimated — no real rate-limit API exists."
  • "Kill the column, or resume it later — the session id stays valid."
  • "This adapter doesn't expose cost data. We show that honestly instead of guessing."

Don't

  • "Supercharge your workflow with AI-powered productivity!"
  • "Oops! Something went wonky 🙈" (never fabricate cheerfulness around an error)
  • "Termbay just knows what you need." (it doesn't guess — it reports)

Microcopy rules

  • Buttons are verbs: "Spawn", "Kill", "Resume" — never "OK" alone on a destructive action.
  • Errors state what happened and, where known, why — never a bare error code with no next step.
  • Numbers that aren't real (estimated usage windows) are always labeled estimated, inline, not in a tooltip only.
  • Empty states explain the action that fills them, not just "Nothing here."

Terminology

Column
One live agent session in the grid — one PTY, one provider adapter.
Row
A horizontal band of columns; a project can have several.
Bay
The whole terminal grid for a project — every row and column together.
Workspace
A named, independently-laid-out sub-partition of a project (e.g. one per feature branch).
Spawn
Start a new column — never "create a terminal" or "open a session."
Kill
Terminate a column's process. Not "close" (closing a column vs. killing its process are different actions).
Respawn
Start a fresh column using the same provider/model/settings as one just killed.

Naming

The product name is Termbay — one word, capital T, everything else lowercase. In prose, always "Termbay," never "TermBay," "termbay," or "Term Bay." In the wordmark and lockup artwork specifically, the mark is set in lowercase-styled display type as a deliberate visual choice (see Logo) — that stylization never overrides the capitalized "Termbay" used in running text, headings, or code identifiers.

Color

Every color in the product traces back to a token in brand/tokens.json — never a one-off hex value in a component.

#070C16

--harbor-950

rgb(7, 12, 22) · hsl(220, 52%, 6%)

Deepest background — raised surfaces, code blocks

#0B1220

--harbor-900

rgb(11, 18, 32) · hsl(220, 49%, 8%)

App background (dark theme default)

#111A2E

--harbor-800

rgb(17, 26, 46) · hsl(221, 46%, 12%)

Surface — cards, panels (dark)

#1B2740

--harbor-700

rgb(27, 39, 64) · hsl(221, 41%, 18%)

Borders (dark)

#2A3957

--harbor-600

rgb(42, 57, 87) · hsl(220, 35%, 25%)

Strong borders, dividers (dark)

#8A97B0

--slate-400

rgb(138, 151, 176) · hsl(219, 19%, 62%)

Muted / secondary text

#C9D2E3

--slate-200

rgb(201, 210, 227) · hsl(219, 32%, 84%)

Secondary body text (dark)

#F2F8F7

--foam-50

rgb(242, 248, 247) · hsl(170, 30%, 96%)

Primary text (dark) / page background (light)

#E3F1EE

--foam-100

rgb(227, 241, 238) · hsl(167, 33%, 92%)

Surface tint (light theme)

#5EEAD4

--tide-300

rgb(94, 234, 212) · hsl(171, 77%, 64%)

Primary — strong / links on dark

#14B8A6

--tide-500

rgb(20, 184, 166) · hsl(173, 80%, 40%)

Primary — the tide, main brand color

#0F766E

--tide-700

rgb(15, 118, 110) · hsl(175, 77%, 26%)

Primary (light theme), gradient base

#FCD34D

--beacon-300

rgb(252, 211, 77) · hsl(46, 97%, 65%)

Accent — strong, hover states

#F5A524

--beacon-500

rgb(245, 165, 36) · hsl(37, 91%, 55%)

Accent — the beacon, sparingly

#B45309

--beacon-700

rgb(180, 83, 9) · hsl(26, 90%, 37%)

Accent (light theme)

#F43F5E

--signal-red

rgb(244, 63, 94) · hsl(350, 89%, 60%)

Danger, destructive actions, alert Buoy

#22C55E

--signal-green

rgb(34, 197, 94) · hsl(142, 71%, 45%)

Success, connected states

Semantic roles

bg → harbor-900
surface → harbor-800
border → harbor-700
text → foam-50
text-muted → slate-400
primary → tide-500
accent → beacon-500
danger → signal-red
success → signal-green

Provider palette

claude-code #D97757
codex #10A37F
gemini-cli #4E8CF7
opencode #A78BFA
aider #22C55E
cursor-agent #E5E7EB
copilot-cli #8B5CF6
amp #F43F5E
custom #8A97B0

Contrast (WCAG 2.1)

Computed from actual token values — not estimated.

PairRatioNormal textLarge text / UI
Aa Body text on dark background
17.43:1 AAA AAA
Aa Secondary text on dark surface
11.40:1 AAA AAA
Aa Muted text on dark background
6.36:1 AA AAA
Aa Primary-strong on dark background
12.66:1 AAA AAA
Aa Accent on dark background
9.17:1 AAA AAA
Aa Danger on dark background
5.10:1 AA AAA
Aa Success on dark background
8.22:1 AAA AAA
Aa Primary button label
7.68:1 AAA AAA
Aa Body text on light background
17.43:1 AAA AAA
Aa Primary on light background
5.09:1 AA AAA
Aa Secondary text on white surface
14.88:1 AAA AAA
Aa Accent on light background
4.67:1 AA AAA

Typography

Display

Space Grotesk

Headlines, the wordmark, section titles. Weights 500/600/700.

Body / UI

Inter

Body copy, UI labels, buttons. Weights 400/500/600.

Code / mono

JetBrains Mono

Terminal output, code, the eyebrow labels, keyboard shortcuts.

Type scale

Aa 64

Aa 44

Aa 28

Aa 18 — lead paragraph

Aa 16 — body text

Aa 13.6 — mono / code

Pairing rules

  • Space Grotesk for headings only — never body copy, never longer than ~8 words on a line.
  • Inter for everything a user reads at length: paragraphs, form labels, table cells.
  • JetBrains Mono for anything that is, or resembles, literal output: file paths, flags, keyboard keys, terminal text.

Iconography

UI icons come from Lucide, drawn at a consistent 1.5px stroke (2px is acceptable at 16px and below, where 1.5px under-renders). Never mix filled and outline icons in the same view.

16px
20px
24px
32px

Layout & spacing

Spacing is a 4/8/12/16/24 base scale; radii are 6/10/16/22.

4px
8px
12px
16px
24px
6px
10px
16px
22px

UI components

A few core primitives, rendered live with brand tokens.

Buttons

Pills / status chips

Claude Code Connected Disconnected

Column header

codex · feature/grid-resize 62% ctx

Context meter

Status bar

Termbay v0.9.0 • 3 projects • 6 columns live

Mascot — Buoy

Buoy is the small companion that lives on every column, reflecting what its agent is actually doing. Buoy never speaks for the agent and never invents status — its state is driven by real Claude Code hook events, or a per-provider output heuristic for every other CLI. Personality: quiet, competent, a little nautical — never cutesy commentary, never an "AI assistant" voice of its own.

Buoy — Idle state

Idle

When: Column is quiet, no active turn

Don't use for a column that's actually mid-task.

Buoy — Thinking state

Thinking

When: The agent is reasoning before it acts

Don't hold this state past the first token of output.

Buoy — Working state

Working

When: Actively editing, running tools, streaming output

Don't confuse with Thinking — Working implies visible progress.

Buoy — Waiting state

Waiting

When: Needs input or a permission decision

Don't use for a column that's simply idle.

Buoy — Alert state

Alert

When: An error occurred or a finding needs attention

Don't overuse for routine warnings — reserve it.

Buoy — Sleeping state

Sleeping

When: It's been quiet in this column for a while

Don't apply immediately on idle — give it a grace period.

Buoy — Disconnected state

Disconnected

When: The CLI process exited or the PTY link dropped

Don't reuse for a column that was deliberately killed by the user.

Illustration style

Feature illustrations are flat-isometric, palette-locked to the harbor tokens, and text-free — the illustration sets the scene, copy carries the message.

Prompt style guide

The recipe used for every illustration in this system:

Flat isometric illustration, harbor / dock theme, [subject].
Palette strictly limited to: harbor-900 #0B1220, harbor-800 #111A2E,
tide-500 #14B8A6, tide-300 #5EEAD4, beacon-500 #F5A524, foam-50 #F2F8F7.
Soft ambient lighting, subtle grain, no text or lettering anywhere in
the image, no logos, generous negative space for copy overlay,
rounded geometric shapes matching a 16–22px corner radius language.

Screenshot guidance

Every screenshot used publicly is captured from Termbay's own scripted demo mode (termbay --demo), never a real user's session. Always frame screenshots in the standard three-dot window chrome (see UI components), capture at 1600×1000 for feature shots and 2400×1500 for the hero, and prefer the dark theme unless the shot's purpose is specifically to show theming.

Motion

Motion is restrained — a "quiet tide," not a bouncy mascot show.

  • Buoy bob — a 2.4s ease-in-out vertical drift of ±3px, looping, paused entirely under prefers-reduced-motion.
  • Hover / press — 150ms ease for color and shadow changes; a 1px translateY on press, never a bounce or overshoot.
  • Panel transitions — 200–250ms ease-out; nothing in the product animates longer than 300ms.

Social & OG templates

The default Open Graph image (1200×630) composites the og-bg illustration with the on-dark lockup and the tagline, rendered with outlined font paths so it never depends on a system font being present on the sharing platform's renderer.

Termbay Open Graph preview image

Downloads

Everything on this page, packaged — or grab individual files.

Download full brand kit (.zip)

Logo SVGs, PNG/ICO exports, mascot PNGs, tokens.json, and a generated tokens.css.

Individual files