Skip to content

Design system

Roost design system

Every token and component the site is built from. Components on this page are rendered with the same live data as the real pages, so this is what ships.

Rules

  1. Pages only compose macros from templates/partials/ui.html. A new visual element becomes a macro first, then appears here.
  2. Colours come from theme tokens. No hex values and no Tailwind palette colours in templates.
  3. Type sizes come from the scale (text-2xs to text-5xl), radii from rounded-sm, -md, -xl and -full.
  4. No inline styles, except view-transition-name for the bird that flies between pages.
  5. In Roost's own UI, blue means Bowerbird and nothing else. Provider logos keep their brand colours on a light tile.
  6. Numbers: tabular figures, right-aligned, always with a source footnote. Unknown is written out with its reason, never left blank.
  7. Personality lives around the data (birds, branches, microcopy), never in labels, headings or numbers.
  8. Data first: a page leads with numbers (stats, the wire, tables). Copy is one short line per section at most; method details go in a method_note with a link, not in paragraphs.
  9. tests/design.rs fails the build when a template breaks rules 2–4.

Colour

Tokens from styles/app.css. Each swatch shows light | dark; the page itself follows your system theme.

Surfaces

Ink

Accents

Bowerbird (reserved)

Sky

Plumage

Type

Fraunces for display, the system sans for text, tabular figures everywhere.

text-2xs

0.66rem · Plate labels, table headers

One 5-minute job costs $0.03

text-xs

0.72rem · Badges, captions, sublines

One 5-minute job costs $0.03

text-sm

0.8125rem · Secondary text, facts, sources

One 5-minute job costs $0.03

text-base

0.9375rem · Body text and table numbers

One 5-minute job costs $0.03

text-lg

1.0625rem · Lead text, card titles

One 5-minute job costs $0.03

text-xl

1.25rem · Section titles

One 5-minute job costs $0.03

text-2xl

1.5rem · Stats

One 5-minute job costs $0.03

text-3xl

1.9rem · Page titles (mobile)

One 5-minute job costs $0.03

text-4xl

2.3rem · Page titles

One 5-minute job costs $0.03

text-5xl

2.8rem · Home hero

One 5-minute job costs $0.03

plate

Small caps label

Plate 1 · CI runners

Shape

Radius tokens. Pills are rounded-full; inline marks rounded-sm; swatches rounded-md; every frame (cards, tables, figures) rounded-xl.

Spacing follows Tailwind's 4 px steps. Inside components: 1–3. Between blocks: 4. Between sections: 8–12. Page header: pt-8 pb-4.

Brand

logo

partials/logo.html · header, footer

roost roost

icons

favicon.svg (follows theme), favicon.ico, apple-touch-icon, manifest icons

SVG favicon Apple touch icon Manifest icon

og.png

Social share image, 1200×630

Roost share image

birds

Generated per provider (src/birds.rs): plumage, wing, crest, tail and beak follow from the slug. Personality, and the fallback mark when Roost has no logo for a provider.

  • kestrel
  • wren
  • heron
  • finch
  • robin
  • starling
  • magpie
  • swift
  • bowerbird (reserved)

branch

Section divider

Icons

24 px line icons in partials/icons.html, stroke 1.8, drawn in currentColor. ui.icon(name, class).

Badges

badge(label, tone, icon)

The primitive: neutral, caveat, warn, bower, muted

Neutral Caveat Discontinued Runs Roost Muted

caveat(c)

One per BWB-484 term; the icon follows the key, the tooltip carries the detail

Shared vCPU Setup billed +30 s $20/mo plan Prepaid Max job 2 h Max session 1 h Max 10 jobs Active-CPU billing Legacy tier

caveat_list(list)

Caveats with their full explanation (provider pages: What to know)

  • $150/mo planThis price only applies on a plan of at least $150 a month.

unpublished(notes)

A cost built on unknown terms (shown with ≥)

Not published: setup, minimum

status_badge(p) · bower_badge() · provider_badges(p)

Status only shows when not active; Bowerbird's badge is blue

Runs Roost Discontinued since 31 Mar 2026 Runs Roost

mark(m)

Yes / no / unknown in comparison tables; unknown carries its reason as a tooltip

YesNo?

fn(n)

Footnote marker, links to the sources list

$0.006 /min[1]

Layout

page_header(plate, title, intro)

size: page | hero

Plate 1 · CI runners

CI runner prices: Linux x64, 2 vCPU

Across 15 providers, one 5-minute job on a Linux x64, 2 vCPU runner costs between ≥ $0.0015 (boat) and ≥ $0.05 (GitLab.com), with prices checked 31 Oct 2026.

section_title(id, title, sub, action)

Price board

Every ranking on Roost.

Full table

arrow_link(href, text)

stats(items, fill)

label, value, optional sub and link; fill stretches cells (provider glance)

Providers
23
Lowest price
$0.006 /min
ubuntu-latest
Checked
31 Oct 2026

method_note(text, href, link)

One muted line under a table: how the numbers were made, plus a link

Cost = price per minute × (run time + billed setup), rounded up to the billing increment. Method

card() · callout(title)

callout is for rare asides; data pages use method_note

Card

A bordered surface for grouped content.

provider_mark(p, size)

The provider's own logo on a light tile (sm, lg); its bird when there's no logo

provider_cell(p, vt, sub)

Mark + name + subline, links to the provider

empty(text)

No birds here yet.

Data

ci_table(rows, minutes, caption)

Live rows from /ci-runners/

Example CI ranking
Provider and size 5-min job
boatboat-small
$0.018 /h[1] · 4 GB RAM $20/mo plan Not published: setup, minimum
≥ $0.0015
Celestocelesto-standard
$0.03 /h[2] · 4 GB RAM Setup billed Prepaid Max job 2 h Max 10 jobs Not published: setup, rounding, minimum
≥ $0.0025
Celestocelesto-memory
$0.04 /h[2] · 8 GB RAM Setup billed Prepaid Max job 2 h Max 10 jobs Not published: setup, rounding, minimum
≥ $0.00333
Jogjog
$0.0012 /min[3] · 8 GB RAM Prepaid
$0.006
Ubicloudubicloud-standard-2
$0.00125 /min[4] · 8 GB RAM Not published: setup, minimum
≥ $0.00625
Ubicloudubicloud-standard-2 (premium runners enabled)
$0.002 /min[4] · 8 GB RAM Not published: setup, minimum
≥ $0.01
Jogjog-max
$0.0024 /min[3] · 8 GB RAM Prepaid
$0.012
Latchkeylatchkey-small
$0.0025 /min[5] · 8 GB RAM $5/mo plan Max job 4 h
$0.0125
Namespacenscloud-ubuntu-24.04-amd64-2x4
$0.003 /min[6] · 4 GB RAM Max job 3 h
$0.015
Blacksmithblacksmith-2vcpu-ubuntu-2404
$0.004 /min[7] · 8 GB RAM Not published: setup, rounding, minimum
≥ $0.02
CRACIcraci
$0.004 /min[8] · 6 GB RAM Not published: minimum
≥ $0.02
Tenkitenki-standard-small-2c-4g
$0.004 /min[9] · 4 GB RAM Prepaid Max 5 jobs
$0.02
WarpBuildwarp-ubuntu-latest-x64-2x
$0.004 /min[10] · 8 GB RAM
$0.02
Depotdepot-ubuntu-24.04
$0.006 /min[11] · 8 GB RAM $20/mo plan
$0.03
GitHub Actionsubuntu-latest
$0.006 /min[12] · 8 GB RAM
$0.03
GitHub Actionslinux_2_core_advanced (larger runner)
$0.006 /min[12] · 8 GB RAM Team plan
$0.03
Namespacenscloud-ubuntu-24.04-amd64-2x8
$0.006 /min[6] · 8 GB RAM Max job 3 h
$0.03
Shipfoxshipfox-2cpu (alias shipfox)
$0.006 /min[13] · 8 GB RAM Not published: setup, rounding, minimum
≥ $0.03
BuildkiteLINUX_AMD64_2X4 (Small)
$0.008 /min[14] · 4 GB RAM $30/mo plan
$0.04
GitLab.comsaas-linux-small-amd64
$0.01 /min[15] · 8 GB RAM Prepaid Max job 3 h Not published: rounding, minimum
≥ $0.05

table(caption)

The frame every table uses; .num right-aligns tabular figures

Example table
SizevCPUPrice
small2$0.018 /h[1]
unknown price2unknown[2]Not published

hero(plate, title, intro)

Home only; caller() fills the aside

A field guide to build compute

Honest, dated prices.

Every number links to its source.

aside

facts(list) · fact(f)

Key/value rows flowing into columns; unknown says why

Payment
Monthly plan with included usage[1]
Plan minimum
$150 a month[1]
Billing increment
unknown[1]Not time-metered: a flat monthly fee per server, with unlimited build minutes
Minimum charge
unknown[1]Not time-metered: a flat monthly fee per server
Per-job fee
None[1]

fact_groups(groups)

Terms in titled groups, as in the provider page sidebar

Billing

Payment
Monthly plan with included usage[1]
Plan minimum
$150 a month[1]
Billing increment
unknown[1]Not time-metered: a flat monthly fee per server, with unlimited build minutes

Limits

Minimum charge
unknown[1]Not time-metered: a flat monthly fee per server
Per-job fee
None[1]

notes(list)

  • Plain, sourced remarks that don't fit a field yet.
  • Shown under the table they belong to.

sources(list)

Numbered, deduplicated per page