$ file://design-md-library/ _
$ cat ./design-md-library/ african-mobile-first _
$ cat ./design-md/african-mobile-first/metadata.yaml

African Mobile-First

A mobile-first design system for African SMEs focused on readability in bright outdoor conditions, low-bandwidth resilience, and clear touch-first interaction patterns.

Tags
african-marketmobile-firstlow-bandwidthsmesunlight-readabletouch-ui

Live Preview

View Live
Tokens: COLOR
Items: 21

primary

Hex: #005F8E

primary hover

Hex: #004D73

primary light

Hex: #E8F4F8

primary dark

Hex: #003D5C

accent

Hex: #FFB703

accent dark

Hex: #CC9200

accent light

Hex: #FFF8E1

background

Hex: #FAFAFA

surface

Hex: #FFFFFF

surface warm

Hex: #F8F7F4

border

Hex: #E5E5E5

text primary

Hex: #1A1A1A

text secondary

Hex: #555555

text muted

Hex: #888888

success

Hex: #16A34A

success light

Hex: #F0FDF4

warning

Hex: #CA8A04

warning light

Hex: #FEFCE8

error

Hex: #DC2626

error light

Hex: #FEF2F2

whatsapp

Hex: #25D366
Tokens: SPACING
Items: 13
base
4px
space-1
4px
space-2
8px
space-3
12px
space-4
16px
space-5
20px
space-6
24px
space-8
32px
space-10
40px
page-margin-mobile
16px
page-margin-tablet
24px
max-content-width-mobile
480px
max-content-width-desktop
960px
Tokens: ROUNDED
Items: 5
sm
6px
md
10px
lg
12px
xl
16px
full
9999px
Tokens: TYPOGRAPHY
Items: 8

display

The quick brown fox jumps over the lazy dog

Family: Plus Jakarta Sans
Size: 28px
Weight: 700
Letter Spacing: -0.3px

h1

The quick brown fox jumps over the lazy dog

Family: Plus Jakarta Sans
Size: 22px
Weight: 700
Letter Spacing: -0.2px

h2

The quick brown fox jumps over the lazy dog

Family: Plus Jakarta Sans
Size: 18px
Weight: 600
Letter Spacing: 0px

h3

The quick brown fox jumps over the lazy dog

Family: Plus Jakarta Sans
Size: 16px
Weight: 600
Letter Spacing: 0px

body

The quick brown fox jumps over the lazy dog

Family: Plus Jakarta Sans
Size: 15px
Weight: 400
Letter Spacing: 0px

small

The quick brown fox jumps over the lazy dog

Family: Plus Jakarta Sans
Size: 13px
Weight: 400
Letter Spacing: 0px

tiny

The quick brown fox jumps over the lazy dog

Family: Plus Jakarta Sans
Size: 11px
Weight: 600
Letter Spacing: 0.3px

mono

The quick brown fox jumps over the lazy dog

Family: JetBrains Mono
Size: 14px
Weight: 500
Letter Spacing: 0.5px

Tailwind v3 Config

{
  "theme": {
    "extend": {
      "colors": {
        "primary": "#005f8e",
        "primary-hover": "#004d73",
        "primary-light": "#e8f4f8",
        "primary-dark": "#003d5c",
        "accent": "#ffb703",
        "accent-dark": "#cc9200",
        "accent-light": "#fff8e1",
        "background": "#fafafa",
        "surface": "#ffffff",
        "surface-warm": "#f8f7f4",
        "border": "#e5e5e5",
        "text-primary": "#1a1a1a",
        "text-secondary": "#555555",
        "text-muted": "#888888",
        "success": "#16a34a",
        "success-light": "#f0fdf4",
        "warning": "#ca8a04",
        "warning-light": "#fefce8",
        "error": "#dc2626",
        "error-light": "#fef2f2",
        "whatsapp": "#25d366"
      },
      "fontFamily": {
        "display": [
          "Plus Jakarta Sans"
        ],
        "h1": [
          "Plus Jakarta Sans"
        ],
        "h2": [
          "Plus Jakarta Sans"
        ],
        "h3": [
          "Plus Jakarta Sans"
        ],
        "body": [
          "Plus Jakarta Sans"
        ],
        "small": [
          "Plus Jakarta Sans"
        ],
        "tiny": [
          "Plus Jakarta Sans"
        ],
        "mono": [
          "JetBrains Mono"
        ]
      },
      "fontSize": {
        "display": [
          "28px",
          {
            "letterSpacing": "-0.3px",
            "fontWeight": "700"
          }
        ],
        "h1": [
          "22px",
          {
            "letterSpacing": "-0.2px",
            "fontWeight": "700"
          }
        ],
        "h2": [
          "18px",
          {
            "letterSpacing": "0px",
            "fontWeight": "600"
          }
        ],
        "h3": [
          "16px",
          {
            "letterSpacing": "0px",
            "fontWeight": "600"
          }
        ],
        "body": [
          "15px",
          {
            "letterSpacing": "0px",
            "fontWeight": "400"
          }
        ],
        "small": [
          "13px",
          {
            "letterSpacing": "0px",
            "fontWeight": "400"
          }
        ],
        "tiny": [
          "11px",
          {
            "letterSpacing": "0.3px",
            "fontWeight": "600"
          }
        ],
        "mono": [
          "14px",
          {
            "letterSpacing": "0.5px",
            "fontWeight": "500"
          }
        ]
      },
      "borderRadius": {
        "sm": "6px",
        "md": "10px",
        "lg": "12px",
        "xl": "16px",
        "full": "9999px"
      },
      "spacing": {
        "base": "4px",
        "space-1": "4px",
        "space-2": "8px",
        "space-3": "12px",
        "space-4": "16px",
        "space-5": "20px",
        "space-6": "24px",
        "space-8": "32px",
        "space-10": "40px",
        "page-margin-mobile": "16px",
        "page-margin-tablet": "24px",
        "max-content-width-mobile": "480px",
        "max-content-width-desktop": "960px"
      }
    }
  }
}

Tailwind v4 @theme

// No content available

DESIGN.md

---
version: alpha
name: African Mobile-First
description: A mobile-first design system for African SMEs built for low bandwidth, bright sunlight readability, and first-time SaaS users.
colors:
  primary: "#005F8E"
  primary-hover: "#004D73"
  primary-light: "#E8F4F8"
  primary-dark: "#003D5C"
  accent: "#FFB703"
  accent-dark: "#CC9200"
  accent-light: "#FFF8E1"
  background: "#FAFAFA"
  surface: "#FFFFFF"
  surface-warm: "#F8F7F4"
  border: "#E5E5E5"
  text-primary: "#1A1A1A"
  text-secondary: "#555555"
  text-muted: "#888888"
  success: "#16A34A"
  success-light: "#F0FDF4"
  warning: "#CA8A04"
  warning-light: "#FEFCE8"
  error: "#DC2626"
  error-light: "#FEF2F2"
  whatsapp: "#25D366"
typography:
  display:
    fontFamily: Plus Jakarta Sans
    fontSize: 28px
    fontWeight: 700
    lineHeight: 1.2
    letterSpacing: -0.3px
  h1:
    fontFamily: Plus Jakarta Sans
    fontSize: 22px
    fontWeight: 700
    lineHeight: 1.25
    letterSpacing: -0.2px
  h2:
    fontFamily: Plus Jakarta Sans
    fontSize: 18px
    fontWeight: 600
    lineHeight: 1.3
    letterSpacing: 0px
  h3:
    fontFamily: Plus Jakarta Sans
    fontSize: 16px
    fontWeight: 600
    lineHeight: 1.35
    letterSpacing: 0px
  body:
    fontFamily: Plus Jakarta Sans
    fontSize: 15px
    fontWeight: 400
    lineHeight: 1.6
    letterSpacing: 0px
  small:
    fontFamily: Plus Jakarta Sans
    fontSize: 13px
    fontWeight: 400
    lineHeight: 1.5
    letterSpacing: 0px
  tiny:
    fontFamily: Plus Jakarta Sans
    fontSize: 11px
    fontWeight: 600
    lineHeight: 1.4
    letterSpacing: 0.3px
  mono:
    fontFamily: JetBrains Mono
    fontSize: 14px
    fontWeight: 500
    lineHeight: 1.4
    letterSpacing: 0.5px
rounded:
  sm: 6px
  md: 10px
  lg: 12px
  xl: 16px
  full: 9999px
spacing:
  base: 4px
  space-1: 4px
  space-2: 8px
  space-3: 12px
  space-4: 16px
  space-5: 20px
  space-6: 24px
  space-8: 32px
  space-10: 40px
  page-margin-mobile: 16px
  page-margin-tablet: 24px
  max-content-width-mobile: 480px
  max-content-width-desktop: 960px
components:
  button-primary:
    backgroundColor: "{colors.primary}"
    textColor: "{colors.surface}"
    typography: "{typography.body}"
    rounded: "{rounded.md}"
    padding: 14px 24px
    height: 48px
    width: 100%
  button-primary-hover:
    backgroundColor: "{colors.primary-hover}"
  button-primary-active:
    backgroundColor: "{colors.primary-dark}"
  button-secondary:
    backgroundColor: "{colors.surface}"
    textColor: "{colors.text-primary}"
    rounded: "{rounded.md}"
    borderColor: "{colors.border}"
    height: 48px
  button-accent:
    backgroundColor: "{colors.accent}"
    textColor: "{colors.text-primary}"
    rounded: "{rounded.md}"
    height: 48px
  button-whatsapp:
    backgroundColor: "{colors.whatsapp}"
    textColor: "{colors.surface}"
    rounded: "{rounded.md}"
    height: 48px
  input-field:
    backgroundColor: "{colors.surface}"
    textColor: "{colors.text-primary}"
    typography: "{typography.body}"
    rounded: "{rounded.md}"
    borderColor: "{colors.border}"
    padding: 14px 16px
    height: 48px
  card-order:
    backgroundColor: "{colors.surface}"
    rounded: "{rounded.lg}"
    borderColor: "{colors.border}"
    padding: 16px
  card-metric:
    backgroundColor: "{colors.surface}"
    rounded: "{rounded.lg}"
    borderColor: "{colors.border}"
    padding: 16px
  badge-status:
    rounded: "{rounded.sm}"
    padding: 4px 10px
    typography: "{typography.tiny}"
  sheet-bottom:
    backgroundColor: "{colors.surface}"
    rounded: "{rounded.xl}"
    padding: 24px 16px
  nav-tab-bar:
    backgroundColor: "{colors.surface}"
    borderColor: "{colors.border}"
    height: 64px
---

## Brand & Style

Built for the 90%. This system targets SME owners and their customers across Africa who are smartphone-first, data-conscious, and often first-time SaaS users. The interface should feel approachable, trustworthy, fast, clear, and empowering.

Design decisions prioritize worst-case conditions: 5-inch Android screens, bright outdoor sunlight, and unstable 3G connections. The voice is warm and direct, with simple language and reassuring microcopy that confirms actions clearly.

## Colors

The palette combines a confidence-driving primary blue with a high-visibility accent yellow, supported by warm neutral surfaces and explicit semantic states.

- Primary blue drives actions and active navigation.
- Accent yellow is used for highlights and badges, never for text.
- Semantic colors must always include text labels; color-only status is not acceptable.
- Backgrounds stay white or near-white to preserve contrast in daylight.

## Typography

Typography uses **Plus Jakarta Sans** for UI text and **JetBrains Mono** for IDs and tracking-like data. Body text minimum is `15px` to improve readability on lower-quality screens and in sunlight.

- Headlines are clear and compact; monetary values should use `display` or `h1` weight.
- Long labels should be rewritten for brevity (prefer 2-3 words).
- All caps are reserved for tiny badges and overline labels.

## Layout & Spacing

This is a strict mobile-first system. Layouts are single-column on phone screens, with progressive enhancement at larger breakpoints.

- Max content width is `480px` on mobile and `960px` on desktop.
- Horizontal margins are `16px` on mobile and `24px` on tablet+.
- The spacing system follows a `4px` base scale.
- Primary actions are often sticky near the bottom to optimize thumb reach.

## Elevation & Depth

Depth is intentionally minimal. Hierarchy is communicated primarily through borders and tonal separation, with shadows used sparingly.

- Resting cards typically use borders with no shadow.
- Bottom sheets and anchored bottom navigation use upward-biased shadows.
- Overlays remain light enough to preserve context behind mobile sheets.

## Shapes

The shape language is rounded and practical to support touch-heavy interaction patterns.

- Inputs and buttons use medium rounding.
- Cards use larger rounding for grouping and scanability.
- Pills and badges use full rounding only when semantically appropriate.

## Components

### Buttons

Primary, secondary, accent, and WhatsApp CTA variants all maintain a minimum `48px` height and mobile-first full-width behavior. Primary actions use brand blue, promotional actions use accent yellow with dark text, and WhatsApp actions use the dedicated green token.

### Inputs

Inputs use high-contrast borders, visible labels, and clear error treatment. Numeric-heavy fields should use numeric keyboard input modes, while validation appears on blur with human-readable messages.

### Cards and Status

Order and metric cards use surface backgrounds, border-led hierarchy, and concise metadata structure. Status badges use tiny uppercase text with explicit labels and semantic backgrounds.

### Mobile Surfaces and Navigation

Bottom sheets replace modal dialogs on phones and use sticky action placement. Bottom tab navigation supports up to five labeled items with clear active/inactive contrast.

## Do's and Don'ts

### Do

- Do design for thumb reach with key actions in the lower screen region.
- Do keep all tap targets at least `48px`.
- Do confirm important actions (save, send, pay) with reassuring feedback.
- Do format currency and dates in locale-aware forms.
- Do support poor connectivity with retry and offline-aware states.

### Don't

- Don't assume stable internet or high-end devices.
- Don't rely on hover-only interactions or hidden swipe-only actions.
- Don't use pagination-heavy mobile patterns for long operational lists.
- Don't use modal-first patterns on mobile where bottom sheets are expected.
- Don't depend on subtle color differences for critical state communication.