PostgreSQL 17 runners are live

Brand

The pieces that make ShadowDB look like ShadowDB.

Logos, colours, type and words, for writing about us, linking to us or building with us. Please keep the logo as it is and don't imply a partnership we don't have.

Usage

Give it room. Leave it alone.

Keep clear space around the logo equal to the height of the mark's knob, and never show the full logo smaller than 96 px wide (the mark: 16 px).

xx
Clear space: x on every side
  • Don't stretch or squash it

  • Don't rotate it

  • Don't use off-palette colours

  • Don't add effects

Colour

Mostly ink, one green.

Interfaces are near-black and near-white; ShadowDB Green is the one brand colour. Signal colours carry meaning (a verdict, a severity), so never use them for decoration.

Brand

  • ShadowDB Green

    Light

    Dark

  • Green text

    Light

    Dark

  • Green tint

    Light

    Dark

Neutrals

  • Ink

    Light

    Dark

  • Muted

    Light

    Dark

  • Hairline

    Light

    Dark

  • Surface

    Light

    Dark

  • Canvas

    Light

    Dark

Signals

  • Safe

    Light

    Dark

  • Warning

    Light

    Dark

  • Blocked

    Light

    Dark

  • Critical

    Light

    Dark

  • Info

    Light

    Dark

Typography

Geist, sans and mono.

Geist Sans for everything people read, Geist Mono for code, SQL, identifiers and labels. Both are free under the SIL Open Font License.

Geist Sans

Aa

ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz 0123456789

Geist Mono

Aa

CREATE INDEX CONCURRENTLY orders_status_idx ON orders (status);

  • heading-32Rehearse every migration
  • heading-20Index built without CONCURRENTLY
  • copy-16Writes to orders were blocked for 3.9 s at 100k rows.
  • label-13Seeded rows · PostgreSQL 16

Name & voice

Calm, exact, on your side.

We write like a senior engineer reviewing your PR: specific, measured, and never alarmist.

Writing the name

  • ShadowDB
  • Shadow DB
  • Shadowdb
  • SHADOWDB
  • Shadow Database

One word, capital S, capital DB. It doesn't change in titles or at the start of a sentence.

  • Lead with what happened

    Then why it matters, then what to do. “Index built without CONCURRENTLY. Writes to orders were blocked for 3.9 s at 100k rows. Use CREATE INDEX CONCURRENTLY.”

  • Qualify every number

    Timings always come with the row count they were measured at. We report what happened in the rehearsal, never a production prediction.

  • Same words everywhere

    Verdicts are Safe, Warnings, Blocked or Couldn't verify, in the check, the report and the badges alike.

  • Never blame the developer

    When a run fails for a reason that isn't the pull request, we say so plainly.

Boilerplate
ShadowDB catches risky PostgreSQL migrations before they reach production. A GitHub App, it replays every migration in a pull request on a throwaway PostgreSQL seeded with rows, measures the locks, rewrites and timings each statement causes, and reports a verdict as a GitHub check before anyone merges.

Need something else?

Press, partnerships or a format that isn't here, get in touch.

Contact us