server-prepBrand guidelines
Brand guidelines

One keyhole, one colour, black or white.

How to use the server-prep logo, colours, type and voice. Everything here comes from the repository: the logo files in .github/assets and the design tokens in site/tokens.css, which the setup console uses too.

logo-dark.svg · #F4F7FA
MarkKeyhole tileOne path, the keyhole cut out
Colour#0B1117 / #F4F7FABlack on light, white on dark
TypeBarlow Condensed, IBM PlexHeadlines, text and mono
Smallest size16 pxThe favicon. Mark plus name: 20 px tall
02

Colour

A black-and-white brand on cool greys. Colour only carries meaning: a result in the audit or an LED on the rack, never decoration. Click a value to copy it.

2.1

Brand pair

These two are the whole brand palette. A mark, a primary button or a headline highlight uses one of them, picked by the background.

Ink
--brand · --accent16.7:1 on --bg
The mark, primary buttons, links and focus rings on light surfaces.
Paper
--brand (dark) · --rack-hi17.9:1 on dark --bg
The same roles on dark surfaces and on the rack band.
2.2

Neutrals

Greys with a slight blue cast, from page background to text. Each theme has its own ramp; the token names stay the same.

Light theme
--bg
--panel
--panel-2
--sunken
--rule-2
--rule
--ink-3
--ink-2
--ink
Dark theme
--bg
--panel
--panel-2
--sunken
--rule-2
--rule
--ink-3
--ink-2
--ink

--ink-3 reaches 4.9:1 on a panel but only 4.3:1 on the light page background. Put small text on --bg in --ink-2 (6.6:1) instead.

2.3

Status

The audit's four results. Status colour always comes with the word and an icon, so colour is never the only signal.

Pass
Pass
--ok#186C3B on #E0F1E6 · 5.5:1#55C78C on #11281C · 7.4:1
Warn
Warn
--warn#8A5409 on #F7EBD5 · 5.3:1#E3A64E on #2D2212 · 7.3:1
Fail
Fail
--bad#A93224 on #F7E0DB · 5.3:1#FF8069 on #33170F · 6.7:1
Info
Info
--ink-2 on --sunken#4A5664 on #F2F5F8 · 6.8:1#A0ACB9 on #0E141A · 8.0:1
2.4

Rack and LEDs

The rack palette draws hardware: the cover band, faceplates and terminals. It stays dark in both themes. LEDs appear only here, as small lit dots.

Surfaces and ink

--rack
--rack-2
--rack-edge
--rack-dim
--rack-mid
--rack-ink
--rack-hi

LEDs: what a port accepts

Open to all · #3BD17F
Only from listed sources · #6FA4FF
Anyone, slowed down · #F2B13B
This machine only · ring
Closed · #4D5967 + ring

In the dark theme the rack goes one step darker: #070B0F, #0E151C, #1F2B37. The closed LED is only 2.4:1 against the plate (2.2:1 in the dark theme), which is why it always has a ring.

2.5

Severity in charts

Charts that count findings rank them by lightness, not hue. Badges that state one result use the status colours above.

--sev-info#7D8794 · dark #6E79873.6:1: bars and marks, never text
--sev-warn#4B5563 · dark #A9B3BF7.6:1 light, 8.3:1 dark
--sev-fail#111820 · dark #F4F7FAThe most severe has the most contrast
03

Typography

Three faces, one job each: Barlow Condensed for headlines and labels, IBM Plex Sans for reading, IBM Plex Mono for anything you type. All three are free on Google Fonts.

3.1

Typefaces

Keep the roles apart. A condensed face in a paragraph is hard to read, and a command set in the text face is easy to mistype.

Display500 · 600 · 700
Aa
Barlow Condensed

Headlines in Bold, uppercase labels and pills in SemiBold. Short lines only.

Text400 · 500 · 600 · 700
Aa
IBM Plex Sans

Body copy, leads, buttons and the big numbers in stat tiles.

Code400 · 500 · 600
Aa
IBM Plex Mono

Commands, file paths, settings, chips and the name in the logo.

3.2

Type scale

The sizes the setup console uses. Pick from this list before adding a new size.

Cover headlineBarlow Condensed 700 · 42–76 px / 1.06
From a fresh server
Section headingBarlow Condensed 700 · 30–42 px / 1.02
What the audit checks
SubheadingPlex Sans 600 · 18 / 1.3
Firewall and Docker
LeadPlex Sans 400 · 17 / 1.6 · --ink-2
Run one script and the server comes out locked down and ready for a panel.
BodyPlex Sans 400 · 15 / 1.6
Every change is backed up first, and a dry run shows what would change without touching anything.
StatPlex Sans 600 · 30 px · −0.02em · tabular
43 PASS
EyebrowBarlow Condensed 600 · 13 px · caps · +0.12em
What runs, in order
LabelBarlow Condensed 600 · 12 px · caps · +0.10em
Smallest size
CodePlex Mono 400 · 13 / 1.5 · inline 0.86em
sudo ./server-prep.sh --dry-run
3.3

Emphasis

To stress words in a headline, brighten them and underline them in the same colour: 0.07em thick, 0.14em below. No highlighter blocks, no second hue.

From a fresh server to a panel-ready one, with proof.

04

Interface

The parts the setup console is built from. Reuse them before you design new ones.

4.1

Buttons and links

One primary button per view. On the rack band the primary button turns white.

44 px tall · radius 10 · Plex Sans 600 15 px
On the rack: --rack-hi fill, --rack text
4.2

Pills, chips and labels

Pills state a result. Chips name a value you could type. Eyebrows introduce a block, with the short dash in the accent colour.

PassWarnFailInfo
Pills: Barlow Condensed 600 12 px, caps, fully round
debian-13ubuntu-26.04--dry-runAudit, before and after
Chips: Plex Mono 500 12 px on --sunken
4.3

Terminal

Commands and their output sit in a dark terminal in both themes. The bar names the host with a green LED. Results use the rack status colours.

root@web-01example output
$ sudo ./server-audit.sh
PASS  SSH: password login disabled
PASS  Firewall: UFW on, incoming denied by default
WARN  Updates: 3 regular updates pending
FAIL  Docker vs firewall: ports 80 and 443 bypass UFW
43 PASS · 1 WARN · 1 FAIL
4.4

Faceplate

The signature surface: a 1U rack unit with screw ears. Use it to show what a server exposes, port by port, with the LED code from 2.4.

4.5

Shape and space

Three radii and an 8-step spacing scale. The logo's corner (18 on 64) is much rounder than any interface radius, so never copy it onto UI.

Radius

14 · --r-lg
cards, terminal
10 · --r
buttons, tiles
6 · --r-sm
tags
999
pills, chips

Spacing

--s14 px
--s28 px
--s312 px
--s416 px
--s524 px
--s632 px
--s748 px
--s872 px
05

Voice

Write for someone who has never hardened a server. Simple words, short sentences, and proof instead of promises.

5.1

Principles

The same rules apply to the README, the wiki, script output and issues.

Say what happens

Name the change and its effect, in the active voice. "Disables password login", not "password login will be disabled".

Keep it short

One idea per sentence. Plain words over jargon; explain a term the first time it appears.

Show the proof

Point to the audit, the test run or the exact command. Never claim "secure" without saying what was checked.

5.2

Write this, not that

Examples from the kind of text the project writes every day.

WriteNotWhy
Disables password login. Use an SSH key instead.Password-based authentication mechanisms will be deactivated.Active voice, plain words, the next step.
2 checks failed. Run these commands to fix them.Oops! Something went wrong with your server!!An error names the problem and the fix.
Tested on Ubuntu 22.04, 24.04 and 26.04, and Debian 12 and 13.Military-grade, bulletproof security.Facts you can check beat adjectives.
server-prep sets up the firewall.Server Prep / ServerPrep / SP sets up the firewall.The name never changes form.
5.3

Names and examples

Public text is read by strangers. Examples must work for anyone and expose no one.

The project
server-prep: lowercase, with the hyphen, even at the start of a sentence. Scripts in mono: server-prep.sh, server-audit.sh, server-preconfig.sh.
Results
PASS, WARN, FAIL and INFO in capitals, as the audit prints them.
Panels
By their own names: Coolify, Dokploy, Openship.
Examples
Host web-01, domain example.com, addresses from 203.0.113.0/24. Never a real client name, domain, address, token or key, in text or in screenshots.
06

Assets

The logo files, the icons and where the tokens live. Copy the SVG from here, or take the files from the repository.

6.1

Logo files

Five SVG files, one shape. Use them as they are. The README and the browser tab load these files; the setup console and this page draw the same path inline. When the mark changes, update those copies and the renders in 6.2 too.

.github/assets/logo.svgfill #0B1117
Light backgrounds: README, docs, slides.
GitHub
.github/assets/logo-dark.svgfill #F4F7FA
Dark backgrounds; the README picks it in dark mode.
GitHub
SVG source
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" role="img" aria-label="server-prep">
  <path fill="#F4F7FA" fill-rule="evenodd" d="M18 0H46A18 18 0 0 1 64 18V46A18 18 0 0 1 46 64H18A18 18 0 0 1 0 46V18A18 18 0 0 1 18 0Z M32 18A9 9 0 0 1 36.2 35L38.3 42.6A2.6 2.6 0 0 1 35.8 46H28.2A2.6 2.6 0 0 1 25.7 42.6L27.8 35A9 9 0 0 1 32 18Z"/>
</svg>
.github/assets/logo-mono.svgfill currentColor
Keyhole only, in the colour of the text around it.
GitHub
SVG source
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" role="img" aria-label="server-prep">
  <path fill="currentColor" d="M32 18A9 9 0 0 1 36.2 35L38.3 42.6A2.6 2.6 0 0 1 35.8 46H28.2A2.6 2.6 0 0 1 25.7 42.6L27.8 35A9 9 0 0 1 32 18Z"/>
</svg>
.github/assets/logo-wordmark.svg#0B1117, #F4F7FA in dark mode
Mark and name together; follows the system theme.
GitHub
SVG source
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 360 64" role="img" aria-label="server-prep">
  <style>path, text { fill: #0B1117; } text { font: 600 34px "IBM Plex Mono", ui-monospace, SFMono-Regular, Menlo, Consolas, "DejaVu Sans Mono", monospace; letter-spacing: -1.2px; } @media (prefers-color-scheme: dark) { path, text { fill: #F4F7FA; } }</style>
  <path fill-rule="evenodd" d="M18 0H46A18 18 0 0 1 64 18V46A18 18 0 0 1 46 64H18A18 18 0 0 1 0 46V18A18 18 0 0 1 18 0Z M32 18A9 9 0 0 1 36.2 35L38.3 42.6A2.6 2.6 0 0 1 35.8 46H28.2A2.6 2.6 0 0 1 25.7 42.6L27.8 35A9 9 0 0 1 32 18Z"/>
  <text x="80" y="44">server-prep</text>
</svg>
site/favicon.svg#0B1117, #F4F7FA in dark mode
Browser tab of the setup console and of this page.
GitHub
SVG source
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" role="img" aria-label="server-prep">
  <style>path { fill: #0B1117; } @media (prefers-color-scheme: dark) { path { fill: #F4F7FA; } }</style>
  <path fill-rule="evenodd" d="M18 0H46A18 18 0 0 1 64 18V46A18 18 0 0 1 46 64H18A18 18 0 0 1 0 46V18A18 18 0 0 1 18 0Z M32 18A9 9 0 0 1 36.2 35L38.3 42.6A2.6 2.6 0 0 1 35.8 46H28.2A2.6 2.6 0 0 1 25.7 42.6L27.8 35A9 9 0 0 1 32 18Z"/>
</svg>
6.2

Icons and link previews

PNG renders for the places that can't use SVG. Render them again from the SVG when the mark or the tagline changes, at exactly these sizes.

The social preview: the white tile and the name server-prep on the dark rack band, with the tagline: harden a fresh Debian or Ubuntu server for your PaaS panel, and prove it with an audit.
social-preview.png · 1280 × 640 · the card shown when a link to the repository or the site is shared
site/social-preview.png1280 × 640 · source .github/assets/social-preview.svg
The og:image of the setup console and this page, and the repository's social preview. A maintainer uploads it by hand: Settings → General → Social preview.
site/apple-touch-icon.png180 × 180 · #F4F7FA keyhole on #0B1117
Home-screen icon on iPhone and iPad. A full square with no rounded corners: iOS rounds them itself.
site/favicon-32.png32 × 32 · logo.svg as it is
Browser tab where an SVG favicon doesn't work. Listed before favicon.svg with sizes="32x32", so other browsers keep the SVG.
6.3

Retired mark

Replace it wherever you still see it.

Until October 2026 the keyhole stood on a terminal cursor. The cursor line is gone and the keyhole moved down 5 units to the centre of the tile. Same tile, same colours.

6.4

Source of truth

If this page and the repository disagree, the repository wins.

Colour and type tokens
site/tokens.css, light and dark, loaded by the setup console and this page. A page that must work on its own, like the e2e report, keeps a copy, and scripts/check-tokens.sh fails CI when the copy drifts.
Logo files
.github/assets/ and site/favicon.svg. The setup console and this page carry the same path inline.
Icons and previews
The PNG files in site/, rendered from the SVG.
Live example
The setup console on GitHub Pages uses every part of this page.