brand guide · v1

your dev environment, in your pocket.

Appostle is a mobile app for monitoring and controlling local AI coding agents from anywhere. This is the brand system that surrounds it — dark-mode-first, card-native, written for builders who already know what they're doing.

view on github
voice

Speaks developer-to-developer.

Direct, confident, technical but accessible. Action-oriented verbs — ship, orchestrate, assign, hand off. No marketing jargon, no AI hype, no "elevate / seamless / revolutionize".

tagline voice.tagline

Your dev environment, in your pocket.

Short declarative sentences. Technical precision without jargon. The user is a professional who ships — the voice respects that.

audience

Software developers using AI coding agents (Claude Code, Codex, OpenCode) who want to monitor and control them from anywhere — phone, tablet, desktop.

pillars
  • Freedom — self-hosted, BYOK, no forced cloud.
  • Control — orchestrate agents across projects.
  • Mobility — your dev environment from anywhere.
  • Transparency — no telemetry, code stays on your machine.
art direction · intent

A contemporary visual system built entirely around dynamic card compositions. Each card is a responsive, interactive building block that scales from mobile to desktop without compromise. Visual breathing room (320px desktop section spacing), intentional scale variation through asymmetric bento grids, micro-interactions that reveal depth and hierarchy. Minimalist, performance-conscious, grid-native.

hero · split layout · bento rhythm · varied density · airy treatment · raw cta · one per section dividers · none texture · none
color

Charcoal surfaces, pink accent.

Dark-mode-first. Deep charcoal #181818 → #262626 with pink accent #C52669. Foreground is near-white. Status colors are standard semantic.

primary#c52669
secondary · base#181818
accent subtle#e04f8b
whites#fafafa
blacks#121212
surfaces · foreground
bg.base#181818
bg.surface#1f1f1f
bg.elevated#262626
bg.inverted#fafafa
fg.primary#fafafa
fg.secondary#a0a0a0
fg.muted#6b6b6b
fg.subtle#525252
accent · borders · status
accent.base#c52669
accent.hover#d03d7e
accent.active#a52158
accent.subtle#e04f8b
border.default#2a2a2a
status.success#16a34a
status.warning#f59e0b
status.danger#dc2626
status.info#3886e5
typography

Hero, body, alt.

Three families. Inter for hero and body, Source Code Pro for alt. Captions and buttons are lowercase. Scale runs from 64px (h1) down to 10px (label).

h1Build the system.hero · 700 · 64
h2Cards are the unit of composition.hero · 700 · 26
h3Whitespace is an active design material.hero · 600 · 22
h4Sharp 4–8px radius, never more.hero · 600 · 20
h5Light editorial display, used sparingly.body · 100 · 24
h6A small heading for dense regions.body · 500 · 16
bodyDirect, confident, technical but accessible. Action-oriented verbs — ship, orchestrate, assign, hand off. The user is a professional who ships, and the voice respects that.body · 400 · 14
smallSubtle metadata, captions on cards, helper text under inputs.body · 400 · 12
captiona quiet line of code-flavoured textalt · 100 · 20 · lowercase
labelsection labelbody · 500 · 10 · 0.4 track
components

Buttons, pills, icons.

Primary on accent, secondary on surface, ghost text, pill toggle. Pressed: opacity 0.85. Disabled: opacity 0.5. All button text lowercase.

buttons
icons · lucide · stroke 2
clock
search
check
code
spinner
settings
status
success — agent ready
warning — diff conflict
danger — daemon offline
info — handoff queued
card · pattern

Every card has a clear boundary.

1px border, surface fill, 8px radius. Hover lifts the elevation and shifts the border — never colour alone. Padding is 16px on mobile, 32px on desktop. Internal gaps follow 12 / 24.

interactive elevated
spacing · motion

A 4px base. Three core durations.

Section gap scales from 48px on mobile to 320px on desktop — whitespace is treated as material, not absence. Motion is functional: animate only opacity and transform.

spacing scale · px
4base unit
8tight
12element gap · m
16card pad · m
24element gap · d
32card pad · d
48section · m
64large rhythm
96extra wide
320section · d
motion · easings + durations
fast · 160ms
ease default
normal · 240ms
ease default
slow · 500ms
ease default
expressive · 500ms
ease expressive
defaultcubic-bezier(0.7, 0, 0.3, 1)
enter / exitcubic-bezier(0.45, 0.05, 0.55, 0.95)
expressivecubic-bezier(0.16, 1, 0.3, 1)
shadows · three tiers, never coloured
primary · 0 2 4 / 0.25
elevated · 0 4 8 / 0.20
glow · 0 12 24 / 0.40
bans

What we don't do.

From art-direction.bans — the constraints that keep the system honest. Read these before designing anything new.

×

No static card layouts — every card surface must support hover states, focus rings, or animated transitions.

×

No rectangular card grids with uniform aspect ratios — vary card sizes using CSS Grid fr units.

×

No card shadows with fixed blur-radius and spread values — use layered rgba() borders or background-clip.

×

No cards with rounded corners exceeding 8px — maintain sharp, modern 4–8px border-radius only.

×

No stacked cards using margin-top for spacing — use grid gap or flexbox gap exclusively.

×

No cards without a clear visual boundary — every card has a 1px border, background differentiation, or layered background.

×

No hardcoded card widths — use minmax(), auto-fit, or auto-fill.

×

No cards that don't respond to viewport changes.

×

No card content with vertical padding exceeding 32px — keep 16px (mobile) / 32px (desktop).

×

No mix of filled and outlined card styles in the same section — choose one pattern per layout zone.

×

No cards with centered text alignment — left-aligned or grid-aligned only.

×

No decorative card elements that don't inform the content hierarchy.

×

No card hover states with colour changes alone — also require shadow elevation, border shift, or background highlight.

×

No generic card titles without supporting metadata, tags, or visual indicators.

×

No cards with more than one primary CTA — secondary actions are buttons / links.

×

No skeuomorphic textures or faux-3D bevels — depth is communicated through z-axis layering only.

×

No card animations exceeding 300ms duration on hover or focus.

×

No cards without sufficient whitespace — at least 12px (mobile) / 24px (desktop) gaps within cards.

×

No drop shadows with opacity > 0.2 and blur > 8px — keep shadows subtle and structural.

×

No cards with font-weight exceeding 600 for body content — readability over weight.