The ohmyho.st
design system.

Everything needed to build a page, a deck, a thumbnail or a post that looks like it came from the same company. Copy the tokens, use the components, fill the templates.

01 — brand

What we are

Hosting for vibe-coded apps: managed Postgres, transactional email, custom domain connections and on-demand SQL exports. One shared credit balance, with agent-led deployment and a portal for projects, credits and budgets.

The one idea

One balance across your projects. Usage is metered, with no per-project base subscription. Competitor comparisons must distinguish their actual plans, seats, compute and usage charges.

Positioning statement

For people who build several apps with coding agents, ohmyho.st brings hosting, Postgres and transactional email onto one credit balance. Paid starts at $10 a month for 1,000 credits; usage consumes credits and applicable taxes are extra.

Personality

02 — voice

Say this
  • One balance. All your projects.
  • One balance. No per-project base fee.
  • Unhappy? Take your database and go.
  • Your agent deploys. Your portal reports.
  • On demand. Portable SQL. Your data.
Never this
  • Seamlessly orchestrate your cloud-native workflow
  • Empowering developers to unlock their potential
  • Best-in-class, enterprise-grade, next-generation
  • Any sentence that survives being deleted
  • Exclamation marks

The test

Read it out loud. If it sounds like a person who got an invoice they didn't like, it's right. If it sounds like a conference booth, rewrite it.

The Ω mark and ohmyho.st wordmark are one identity. The wordmark uses JetBrains Mono at weight 400; the mark works on its own at small sizes. Always spell the brand ohmyho.st. The short forms are omh and omh.st.

ohmyho.st omega mark ohmyho.st

Construction, space and size

Light omega on black
Dark omega on white

Downloads

Every file is served from /brand/assets/. Use the light mark on dark surfaces and the dark mark on light surfaces.

Logo and wordmark

Social images

Each format exists on black and on white. Sizes are the platforms' recommended pixel sizes.

FormatSizeBlackWhite
Open Graph, link previews1200 × 630PNGPNG
X / Twitter card1200 × 675PNGPNG
LinkedIn post1200 × 627PNGPNG
Square post1080 × 1080PNGPNG
GitHub social preview1280 × 640PNGPNG
X header1500 × 500PNGPNG

The social files are PNG because their type is set in the brand fonts. Regenerate them with node scripts/brand-assets.mjs.

Motion

The mark stays recognizable throughout movement. Finish the homepage's finite introduction before revealing its primary action, keep ambient particles independent, and respect reduced-motion preferences.

04 — color

The palette is monochrome on purpose. Colour carries meaning, never decoration: green means it worked, amber means look, red means it broke. If a colour isn't saying one of those three things, it's grey.

Dark (default)

--background#000000
--card#0A0B0D
--muted#0C0D10
--border#17181A
--border-strong#26282C
--subtle#3E4247
--muted-foreground#83878D
--foreground#F0F1F2
--ok#4CAF8F

Light

--background#FFFFFF
--muted#F4F4F5
--border#E4E4E7
--subtle#A1A1AA
--muted-foreground#71717A
--foreground#09090B

Semantic only

oklive · connected · copied
warnlow credits · degraded
badfailed · over cap

Partner brand colours (Zapier orange, n8n pink, Postgres blue) appear only inside logo tiles. They never leak into UI.

:root{
  --background:#FFF; --foreground:#09090B; --card:#FFF;
  --muted:#F4F4F5; --muted-foreground:#71717A; --subtle:#A1A1AA;
  --border:#E4E4E7; --border-strong:#D4D4D8;
  --primary:#18181B; --primary-foreground:#FAFAFA;
  --ok:#16A34A; --warn:#B45309; --bad:#B91C1C;
}
:root[data-theme="dark"]{
  --background:#000; --foreground:#F0F1F2; --card:#0A0B0D;
  --muted:#0C0D10; --muted-foreground:#83878D; --subtle:#3E4247;
  --border:#17181A; --border-strong:#26282C;
  --primary:#F0F1F2; --primary-foreground:#000;
  --ok:#4CAF8F; --warn:#D9A441; --bad:#E06C63;
}

05 — typography

Two families, no exceptions. Space Grotesk for everything human. JetBrains Mono for anything a machine produced: the wordmark, commands, prices in tables, labels, timestamps, units.

One balance.
display 1
64/1.02 · 700 · −.05em
gradient allowed
Hosting for your apps.
display 2
40/1.10 · 600 · −.042em
Database exports you control.
display 3
26/1.2 · 600 · −.03em
Hosting, Postgres, mail and linked domains. Usage is metered.
body large
17/1.5 · 400
Monthly credits reset. Retained resources still use credits.
body
15/1.55 · 400
More runtimes later. Right now: pick one of these and deploy.
body small
13.5 · muted-foreground
Copy the homepage prompt
mono
13/1.95 · 400
your agent
mono label
10–11 · +.07em · subtle

The gradient rule

Headlines may fade from --foreground at 42% to --muted-foreground at 100%. Only on display sizes, only on one heading per view, and always with extra line-height — a tight leading clips descenders.

.fade{
  line-height:1.06; padding-bottom:.12em;
  background:linear-gradient(180deg,var(--foreground) 42%,var(--muted-foreground) 100%);
  -webkit-background-clip:text; background-clip:text; color:transparent;
}

06 — space & shape

Spacing scale

4
8
12
16
24
32
48
64
96

Section rhythm on the site: 112px desktop, 80px mobile. Card padding: 26px. Never invent a value between steps.

Radius — three values, that's all

22 surfaces
12 controls
999 pills

Borders, not shadows

Depth comes from a 1px hairline and a change in surface brightness. The only shadow in the system is under a floating element (toast). Cards never drop shadows.

07 — motion

.up{opacity:0;transform:translateY(18px);
  transition:opacity .8s cubic-bezier(.2,.7,.3,1),transform .8s cubic-bezier(.2,.7,.3,1)}
.up.in{opacity:1;transform:none}

@media (prefers-reduced-motion:reduce){
  .up{opacity:1;transform:none;transition:none}
}

Every animation must have a reduced-motion fallback that shows the end state. Non-negotiable.

08 — buttons

Dark pill, hairline border, chevron for navigation. Primary prompt actions may use a high-contrast pill; secondary controls use hairline borders.

.btn{display:inline-flex;align-items:center;gap:8px;
  background:var(--muted);color:var(--foreground);
  border:1px solid var(--border-strong);padding:11px 20px;
  border-radius:999px;font-size:14px;font-weight:500;cursor:pointer;
  transition:background .2s,border-color .2s}
.btn::after{content:"›";color:var(--muted-foreground)}
.btn:hover{background:var(--background);border-color:var(--muted-foreground)}

09 — badges

Built in the EU DPA available plannedISO 27001 connected

Certification goals must be labelled planned and must not appear as attained credentials. A roadmap label is not a certification.

10 — cards

Buy it separately
Vercel Pro$20
Supabase Pro$25
Resend Pro$20
3 accounts, one project $65/mo
ohmyho.st
Hostinguses credits
Databaseuses credits
Emailuses credits
1,000 credits, shared $10/mo

The featured card gets a foreground border plus a 3px muted ring — permanently, not on hover. One highlighted card per comparison. Example base plans: Vercel Pro, Supabase Pro and Resend Pro; list prices checked 2026-09-28. Vercel · Supabase · Resend. ohmyho.st: $10 per month for 1,000 shared credits; usage consumes credits and applicable taxes are extra.

11 — cell grid

The default way to show a set of peers: logos, destinations, supported runtimes. One outer frame, hairline dividers, no gaps, no individual boxes. This is what keeps a long page from looking like a pile of components.

Next.jsViteTanStackReactPostgres
.cells{display:grid;gap:1px;background:var(--border);
  border:1px solid var(--border);border-radius:22px;overflow:hidden}
.cells > *{background:var(--background);padding:22px 14px;
  transition:background .22s}
.cells > *:hover{background:var(--muted)}

12 — terminal

Our signature object. Used whenever we show what the agent does. Zones separated by hairlines, each with a mono label. Never fake output that the product can't produce.

your agent
$ohmyhost login
$ohmyhost init --dry-run
$ohmyhost deploy --help
deployment guide
✓https://docs.ohmyho.st/quickstart

13 — controls

Auto top-up
$10$100$1000

Sliders use a 3px track in --border-strong and a 17px foreground thumb. Toggles turn --ok when on, never blue.

14 — diagrams

One visual language for every system drawing: sources on the left, the hub in the middle, outputs fanning right. Hairline bezier curves, 2.5px dot nodes, boxed labels for named things, particles travelling along the paths.

codex claude any harness hosting postgres email mcp ohmyho.st

Diagram rules: no arrowheads, no drop shadows, no colour except the hub glow. Labels always lowercase mono.

15 — icons

Outline only, 24×24 grid, 1.6–1.7 stroke, round caps and joins, currentColor. Rendered at 16–20px. No filled shapes or duotone. Use outline icons for controls; retain the existing roadmap vote symbols.

16 — slides 16:9

Canvas is 1920×1080. Safe margin 120px. One idea per slide. Four layouts cover almost everything.

title · 1920×1080
ohmyho.st
One balance.
All your projects.
Hosting, Postgres, mail and linked domains.
ohmyho.st
statement
the problem
One balance.
Every project.
Usage-based.
ohmyho.st
comparison
Compare plans and credits.
Base plans · 2026-09-28
$65/mo
3 accounts · one project
ohmyho.st · metered
$10/mo
1,000 shared credits
demo
Start with your agent.
$ ohmyhost login
$ ohmyhost init --dry-run
$ ohmyhost deploy --help
✓ https://docs.ohmyho.st/quickstart
ohmyho.st

Slide rules

17 — YouTube

Thumbnail 1280×720. Readable at 210px wide — that's the only test that matters. Max five words, minimum 90px type.

thumbnail · 1280×720
$65 → $10
Base plans vs credits · 2026-09-28
ohmyho.st
thumbnail · question
Why do you
manage 3 bills
for 1 app?
Copy the homepage prompt

Thumbnail rules

18 — LinkedIn

Link image 1200×627, square post 1080×1080. Assume it's read at 400px on a phone in a grey feed — the black frame does the work.

link · 1200×627
hosting for vibe-coded apps
One balance.
All your projects.
One balance. No per-project base fee. ohmyho.st
square · 1080×1080
ohmyho.st
Agent deploys.
Portal reports.
your agent deploys · your portal reports

Carousel

Square, 6–8 slides. Slide 1 is the claim, slides 2–6 one fact each, last slide is the command and the wordmark. Same margins as the deck, scaled: 90px on 1080.

19 — Instagram

Feed 1080×1080 or 1080×1350. Same system, more air, fewer words. The mono label at the top acts as the visual signature.

feed · 1080×1080
paid credits
$10
a month · 1,000 shared credits
ohmyho.st
portrait · 1080×1350
ohmyho.st
Database exports you control.
Request export
Download encrypted ZIP
Restore PostgreSQL
On demand. Portable SQL. Your data.

20 — story / reel

1080×1920. Keep everything inside the middle 1080×1420 — the top 250px and bottom 250px are covered by the platform UI.

9:16
one balance across projects
One balance.
All your projects.
Hosting, Postgres and mail. One credit balance.
Copy the homepage prompt
ohmyho.st

21 — exporting

Every template above is real HTML at real pixel size, scaled down with transform: scale(). To export:

<!-- swap the scale factor to 1 before exporting -->
<div class="canvas" style="width:1280px;height:720px;transform:scale(1)">
  …
</div>

22 — writing rules

23 — don'ts

Visual
  • No blue accent, no gradient buttons, no glassmorphism.
  • No drop shadows on cards. Hairlines only.
  • No stock photography, no 3D blobs, no AI illustration.
  • No borrowed typefaces from competitors (Geist is Vercel's, the serif is Resend's).
  • No fake logos. If we don't have the asset, we show a coloured tile.
  • No hover animations that move things.
Content
  • No invented testimonials or customer logos.
  • Never present planned certification as an attained credential.
  • No competitor pricing without a date and a source.
  • Show the real portal for projects, credits and budgets; deployment is agent-led.
  • No decorative emoji or exclamation marks.

ohmyho.st design system v1 · Space Grotesk + JetBrains Mono, both open source · tokens follow the shadcn/ui naming convention so any component from that ecosystem drops in unchanged.