Apache Brand Design System Deep Dive
1. Brand Overview
Apache Software Foundation (ASF) wears its history on its sleeve. This is a brand built around open-source credibility, technical trust, and a sprawling ecosystem of projects. The design feels like it’s speaking to developers, contributors, and technical decision-makers rather than consumers. It’s not chasing flashy trends — it’s grounded, functional, and a little formal.
The vibe: mature, authoritative, but with a touch of personality. The feather logo and purple accents soften what could otherwise be a very corporate aesthetic. It’s a reminder — Apache isn’t a faceless enterprise; it’s a community-driven foundation.
Philosophically, the site leans into clarity over ornamentation. Colors are purposeful. Typography is chosen for readability and hierarchy rather than whimsy. You’ll see Montserrat for big statements and Open Sans for body copy — both safe, cross-platform, web-friendly typefaces that don’t fight the content. The grid is straightforward. Spacing is predictable. Buttons are pill-shaped, which is an interesting choice given the otherwise square-ish foundations of the layout.
The audience is technical but broad: project maintainers, corporate partners, and curious newcomers. Apache’s design system needs to handle everything from dense documentation to event promotions. That’s why you’ll see a wide palette of grays and whites for neutral surfaces, with pops of brand purple and occasional red for emphasis.
It’s not trying to emulate Silicon Valley startup minimalism. It’s more like: “We’ve been here for decades. We know what works. Here’s the information you need, clearly presented.” And that works, because the ASF brand is built on trust and longevity, not novelty.
2. Color System
2.1 Primary Colors
The primary semantic color is rgb(40, 38, 97) — normalized as #282661. This deep, muted indigo is serious but not cold. It feels authoritative without being black, and it’s less aggressive than pure blue. In UI terms, it’s a solid choice for primary backgrounds and event info blocks (as the data shows).
Compared to other open-source brands (think Python’s bright blues or Node.js’s greens), Apache’s primary is darker and richer. It signals stability and maturity. It’s not screaming for your attention; it’s holding the frame.
2.2 Complete Palette
| Color Name | Hex | Role | Usage |
|---|---|---|---|
| Dark Gray | #333333 | Neutral text/background | Logo row, lower header, navbar header |
| White | #ffffff | Background, text | Header banner, buttons, hero sections |
| Brand Purple | #7c297d | Accent, CTA backgrounds | Header banner, logo, buttons |
| Light Gray | #dddddd | Neutral surfaces | Generic backgrounds |
| Medium Gray | #555555 | Secondary text | Generic elements |
| Primary Indigo | #282661 | Primary brand color | Event info, bg-primary |
| Accent Red | #d22128 | Alert/accent | Not specified |
| Deep Indigo | #302d73 | Hover/focus state | Hover/focus elements |
| CSS Orange Var | #DD552C | Functional accent | Defined in CSS variables |
2.3 Color Relationships
The white (#ffffff) against primary indigo (#282661) gives strong contrast — comfortably above WCAG AA for normal text. Purple (#7c297d) against white is also high-contrast, but purple against dark gray (#333333) could dip in accessibility, depending on font weight and size.
Apache’s palette is not built for dark mode by default — too many elements assume white backgrounds. But the dark indigo could form the basis of a dark variant if needed.
2.4 Usage Guide
- Works well: White text on primary indigo, white text on brand purple, brand purple buttons on white backgrounds.
- Avoid: Brand purple text on dark gray — low contrast.
- Accent red (#d22128) should be reserved for alerts or urgent CTAs; overuse would dilute its impact.
- Keep grays (#333333, #555555, #dddddd) for text and neutral surfaces; don’t mix them arbitrarily.
3. Typography
3.1 Font Families
Two main families:
- Montserrat: Headings, large display text, some captions. Fallbacks:
"Source Sans Pro, Helvetica Neue, Helvetica, Arial". No variable fonts detected. - Open Sans: Body text, buttons, smaller headings. Same fallback stack.
No Google Fonts or Adobe Fonts are loaded dynamically (per data). Likely self-hosted or CDN-based.
3.2 Type Scale
| Element | Font | Size | Weight | Line Height |
|---|---|---|---|---|
| H1 (large) | Montserrat | 72px (4.50rem) | 700 | 1.10 |
| Link (large) | Montserrat | 63px (3.94rem) | 700 | 1.00 |
| H1 | Montserrat | 46.8px (2.92rem) | 700 | 1.10 |
| H1 | Montserrat | 46.8px (2.92rem) | 600 | 1.10 |
| H1 | Montserrat | 27px (1.69rem) | 600 | 1.10 |
| H1 | Open Sans | 20px (1.25rem) | 700 | 1.35 |
| H1 | Montserrat | 19.8px (1.24rem) | 400 | 1.20 |
| H1 | Open Sans | 18px (1.13rem) | 400 | 1.50 |
| Link | Open Sans | 18px (1.13rem) | 400 | 1.50 |
| H1 | Montserrat | 18px (1.13rem) | 600 | 1.10 |
| Link | Open Sans | 18px (1.13rem) | 700 | 1.50 |
| Button | Open Sans | 16px (1.00rem) | 700 | 1.43 |
| H1 | Open Sans | 14.4px (0.90rem) | 700 | 1.88 |
| Link | Open Sans | 14.4px (0.90rem) | 700 | 1.88 |
| Button | Open Sans | 14.4px (0.90rem) | 600 | 1.39 |
| H1 | Open Sans | 14.4px (0.90rem) | 600 | 1.39 |
| H1 | Glyphicons Halflings | 14.4px (0.90rem) | 400 | 1.00 |
| Link | Open Sans | 14px (0.88rem) | 400 | 1.43 |
| Button | Open Sans | 14px (0.88rem) | 700 | 1.43 |
| Caption | Montserrat | 14px (0.88rem) | 700 | 1.10 |
| Button | system | 11.2px (0.70rem) | 400 | 2.41 |
3.3 Hierarchy
Montserrat’s bold weights at large sizes create strong anchors — section titles, hero headlines. Open Sans fills in for body copy and functional UI text. The scale steps are tight at small sizes (14px, 14.4px, 16px, 18px) to maintain legibility, especially in dense content areas.
4. Spacing & Layout
4.1 Spacing Scale
Base: 8px scale, but with 4px and 5px increments for micro-adjustments.
| Value | Rem | Count | Use |
|---|---|---|---|
| 4px | 0.25rem | 2 | Micro gaps |
| 4.5px | 0.28rem | 4 | Fine-tuning |
| 5px | 0.31rem | 67 | Common inline spacing |
| 8px | 0.50rem | 2 | Small component padding |
| 9px | 0.56rem | 2 | Rare adjustments |
| 10px | 0.63rem | 178 | Button padding, small gaps |
| 15px | 0.94rem | 60 | Button horizontal padding |
| 16px | 1.00rem | 4 | Standard gap |
| 18px | 1.13rem | 22 | Medium gaps |
| 20px | 1.25rem | 30 | Section gaps |
| 36px | 2.25rem | 1 | Large spacing |
| 40px | 2.50rem | 3 | Section padding |
| 50px | 3.13rem | 9 | Hero spacing |
| 60px | 3.75rem | 19 | Large section padding |
| 63.6px | 3.98rem | 2 | Specific layout |
| 83.4px | 5.21rem | 5 | Large vertical rhythm |
| 100px | 6.25rem | 12 | Hero/banner spacing |
| 103.2px | 6.45rem | 2 | Specific hero layout |
4.2 Layout
Breakpoints are set for typical responsive tiers:
- 414px, 480px — small mobile
- 600px — large mobile
- 767px, 768px — tablet
- 800px — small desktop
- 991px, 992px — mid desktop
- 1199px, 1200px — large desktop
5. Visual Elements
Border Radius
| Value | Count | Components |
|---|---|---|
| 0px 0px 10px 10px | 7 | Menu, search |
| 0px 3px 3px 0px | 2 | Anchors |
| 1px | 3 | Span |
| 5px | 7 | Buttons |
| 8px | 49 | Inputs, buttons, divs, cards, images |
| 30px | 10 | Buttons |
| 50% | 1 | Span |
The 30px radius on buttons gives a pill shape — consistent across primary and secondary buttons.
Shadows
rgba(0, 0, 0, 0.2) 0px 5px 15px 0px— common card/container shadowrgba(0, 0, 0, 0.176) 0px 6px 12px 0px— subtler elevationrgba(0, 0, 0, 0.2) 0px 3px 10px 0px— rare usage
Borders
- White 1px solid — cards
- Gray 1px solid (#808080) — menu/search
- Mixed dashed/solid — spans
- Light gray 2px solid (#eeeeee) — inputs
6. Components
6.1 Buttons
Primary (.btn)
Default:
- Background: #7c297d
- Color: #ffffff
- Padding: 8px 15px
- Radius: 30px
- Border: none
- Font weight: 700, size: 14px
Hover:
- Color:
var(--pagefind-ui-primary) - Background:
var(--color-purple) - Opacity: 0.7
Active:
- Background: transparent
- Color: #ffffff
Focus:
- Color:
var(--color-purple) - Box shadow: inset 0 1px 1px rgba(0,0,0,0.075), 0 0 6px rgb(231,107,124)
- Opacity: 0.9
Secondary (.btn.btn--white)
Default:
- Background: #ffffff
- Color: #7c297d
- Padding: 10px 20px
- Radius: 30px
- Font weight: 700, size: 16px
States mirror primary.
6.2 Links
Four variants with different default/hover behaviors:
- White text, underline → hover removes underline
- Purple text, underline → hover white text
- Dark gray text, no underline → hover white text
- Light gray text, underline → hover white text
6.3 Forms
Minimal input styles detected. One 2px solid #eeeeee border example. Radius often 8px.
6.4 Cards
White borders (1px) and shadows (rgba(0,0,0,0.2) 0px 5px 15px 0px). Padding values not explicitly in data but likely from spacing scale (15px, 20px).
7. Design Tokens (CSS Custom Properties)
:root {
/* Colors */
--color-dark-gray: #333333;
--color-white: #ffffff;
--color-purple: #7c297d;
--color-light-gray: #dddddd;
--color-medium-gray: #555555;
--color-primary-indigo: #282661;
--color-accent-red: #d22128;
--color-deep-indigo: #302d73;
--color-orange: #DD552C;
/* Typography */
--font-montserrat: "Montserrat", "Source Sans Pro", "Helvetica Neue", Helvetica, Arial;
--font-open-sans: "Open Sans", "Source Sans Pro", "Helvetica Neue", Helvetica, Arial;
--font-glyphicons: "Glyphicons Halflings";
/* Spacing */
--space-4: 4px;
--space-4-5: 4.5px;
--space-5: 5px;
--space-8: 8px;
--space-9: 9px;
--space-10: 10px;
--space-15: 15px;
--space-16: 16px;
--space-18: 18px;
--space-20: 20px;
--space-36: 36px;
--space-40: 40px;
--space-50: 50px;
--space-60: 60px;
--space-63-6: 63.6094px;
--space-83-4: 83.4062px;
--space-100: 100px;
--space-103-2: 103.203px;
/* Border Radius */
--radius-none: 0;
--radius-sm: 1px;
--radius-md: 5px;
--radius-lg: 8px;
--radius-xl: 30px;
--radius-round: 50%;
/* Shadows */
--shadow-lg: rgba(0,0,0,0.2) 0px 5px 15px 0px;
--shadow-md: rgba(0,0,0,0.176) 0px 6px 12px 0px;
--shadow-sm: rgba(0,0,0,0.2) 0px 3px 10px 0px;
}8. AI Coding Assistant Prompt
# Apache Design System Specification
You are an Apache design expert. Build UIs matching their visual language exactly.
## Brand Context
Apache Software Foundation's visual identity is mature, community-driven, and functional. Colors are purposeful, typography is clear, and components are built for both technical and promotional contexts. The design balances authority with a touch of warmth via purple accents.
## Color Palette
- Dark Gray: #333333 — Neutral text/background in headers and navigation
- White: #ffffff — Page backgrounds, text on dark surfaces
- Brand Purple: #7c297d — CTA backgrounds, logo, accents
- Light Gray: #dddddd — Neutral surfaces
- Medium Gray: #555555 — Secondary text
- Primary Indigo: #282661 — Event info blocks, primary brand areas
- Accent Red: #d22128 — Alerts, urgent CTAs
- Deep Indigo: #302d73 — Hover/focus states
- Orange: #DD552C — Functional accent in CSS variable
## Typography
Font families:
- Headings: "Montserrat", "Source Sans Pro", "Helvetica Neue", Helvetica, Arial
- Body/UI: "Open Sans", "Source Sans Pro", "Helvetica Neue", Helvetica, Arial
- Icons: "Glyphicons Halflings"
Type scale:
| Element | Size | Weight | Line Height | Use |
|---------|------|--------|-------------|-----|
| H1 Large | 72px | 700 | 1.10 | Hero titles |
| Link Large | 63px | 700 | 1.00 | Hero links |
| H1 | 46.8px | 600-700 | 1.10 | Section titles |
| Subhead | 27px | 600 | 1.10 | Subsection titles |
| Body L | 20px | 700 | 1.35 | Emphasized body |
| Body M | 18px | 400-700 | 1.50 | General body |
| Caption | 14px | 700 | 1.10 | Labels/captions |
| Button | 14-16px | 600-700 | 1.39-1.43 | CTAs |
## Spacing & Grid
Base: 8px grid, with micro-steps (4px, 5px).
Tokens: 4px, 4.5px, 5px, 8px, 9px, 10px, 15px, 16px, 18px, 20px, 36px, 40px, 50px, 60px, 63.6px, 83.4px, 100px, 103.2px.
Map:
- Button padding: 8px/15px or 10px/20px
- Card padding: 15px or 20px
- Section gaps: 40px, 60px, 100px
## Border Radius
- none: 0 — menus, search boxes
- sm: 1px — spans
- md: 5px — small buttons
- lg: 8px — inputs, cards
- pill: 30px — buttons
- full: 50% — round icons
## Shadows & Depth
- Large: rgba(0,0,0,0.2) 0px 5px 15px 0px — cards
- Medium: rgba(0,0,0,0.176) 0px 6px 12px 0px — subtle elevation
- Small: rgba(0,0,0,0.2) 0px 3px 10px 0px — rare
## Component Specifications
### Primary Button (.btn)
Default:
- background: #7c297d
- color: #ffffff
- padding: 8px 15px
- border-radius: 30px
- font-weight: 700
- font-size: 14px
Hover:
- background: var(--color-purple)
- color: var(--pagefind-ui-primary)
- opacity: 0.7
Active:
- background: transparent
- color: #ffffff
Focus:
- color: var(--color-purple)
- box-shadow: inset 0 1px 1px rgba(0,0,0,0.075), 0 0 6px rgb(231,107,124)
- opacity: 0.9
### Secondary Button (.btn.btn--white)
Default:
- background: #ffffff
- color: #7c297d
- padding: 10px 20px
- border-radius: 30px
- font-weight: 700
- font-size: 16px
States: same as primary.
### Navigation Links
Variant behaviors:
- White text + underline → hover removes underline
- Purple text + underline → hover switches to white text
- Dark gray text, no underline → hover white text
- Light gray text + underline → hover white text
### Input Fields
- Border: 2px solid #eeeeee
- Radius: 8px
- Background: white
- Focus: change border color to brand accent (not specified), remove outline
### Cards
- Border: 1px solid #ffffff
- Shadow: rgba(0,0,0,0.2) 0px 5px 15px 0px
- Radius: 8px
- Padding: 15px or 20px
## Layout & Responsive Rules
Breakpoints:
- 414px, 480px — mobile
- 600px — large mobile
- 767px, 768px — tablet
- 800px — small desktop
- 991px, 992px — desktop
- 1199px, 1200px — large desktop
## Interaction Rules
- Transition: 150ms ease for state changes
- Focus indicators: visible color change + shadow
- Loading states: maintain button size, swap label with spinner
## DO List
- Use only defined palette colors
- Maintain 8px grid with allowed micro-steps
- Use Montserrat for headings, Open Sans for body
- Keep button radius consistent at 30px
- Reserve accent red for alerts
- Ensure text contrast meets WCAG AA
## DON'T List
- Don’t invent new colors
- Don’t mix sharp and rounded corners in same component
- Don’t overload pages with shadows
- Don’t reduce button padding below 8px vertically
- Don’t use brand purple for large text on dark backgrounds
## Code Examples
### Primary Button
```css
.btn {
background: #7c297d;
color: #ffffff;
padding: 8px 15px;
border-radius: 30px;
font-weight: 700;
font-size: 14px;
border: none;
transition: background 150ms ease;
}
.btn:hover {
background: var(--color-purple);
color: var(--pagefind-ui-primary);
opacity: 0.7;
}
.btn:focus {
color: var(--color-purple);
box-shadow: inset 0 1px 1px rgba(0,0,0,0.075), 0 0 6px rgb(231,107,124);
opacity: 0.9;
}
```
### Secondary Button
```css
.btn--white {
background: #ffffff;
color: #7c297d;
padding: 10px 20px;
border-radius: 30px;
font-weight: 700;
font-size: 16px;
}
.btn--white:hover {
background: var(--color-purple);
color: var(--pagefind-ui-primary);
opacity: 0.7;
}
```
### Card
```css
.card {
background: #ffffff;
border: 1px solid #ffffff;
border-radius: 8px;
box-shadow: rgba(0,0,0,0.2) 0px 5px 15px 0px;
padding: 15px;
}
```9. Summary
TL;DR: Apache’s design system is grounded, technical, and community-oriented. Strong indigo and purple anchor the brand, Montserrat and Open Sans deliver hierarchy and clarity, and pill-shaped buttons add a friendly touch to an otherwise serious layout.
Brand Keywords:
- mature-technical
- purple-accented
- community-trust
- grid-disciplined
- developer-friendly