duply
Preview of Factory.ai

Factory.ai

A near-black, terminal-native developer interface for an AI software-engineering agent ("Droid"). The system is almost entirely monochrome — a

---
version: alpha
name: Factory.ai-design-analysis
description: A near-black, terminal-native developer interface for an AI software-engineering agent ("Droid"). The system is almost entirely monochrome — a #020202 canvas with light #eeeeee ink — punctured by a single hot-orange accent (#ef6f2e) that drives progress bars and active states. The brand voltage comes not from color but from the product itself shown as a live terminal "Mission Control" card embedded in the hero, Geist for display headlines paired with Geist Mono for nearly all UI text, and squared-off zero-radius buttons that read as CLI tooling rather than consumer SaaS.

colors:
  accent: "#ef6f2e"
  accent-deep: "#ee6018"
  accent-blue: "#7db5e8"
  ink: "#eeeeee"
  canvas: "#020202"
  canvas-soft: "#101010"
  surface: "#1f1d1c"
  surface-elevated: "#2e2c2b"
  surface-deep: "#0a0908"
  hairline: "#3d3a39"
  neutral-warm: "#4d4947"
  body: "#8a8380"
  muted: "#908a86"
  muted-cool: "#858b97"
  slate: "#62666d"
  white: "#ffffff"
  off-white: "#fafafa"
  cream: "#f0eee8"
  terminal-red: "#ff5f57"
  terminal-yellow: "#febc2e"

typography:
  display:
    fontFamily: "Geist, sans-serif"
    fontSize: 51.84px
    fontWeight: 400
    lineHeight: 1.0
    letterSpacing: -2.88px
  heading:
    fontFamily: "Geist, sans-serif"
    fontSize: 36px
    fontWeight: 400
    lineHeight: 1.1
    letterSpacing: -1.12px
  mono-body:
    fontFamily: "Geist Mono, ui-monospace, monospace"
    fontSize: 12px
    fontWeight: 400
    lineHeight: 1.0
    letterSpacing: -0.24px
  button:
    fontFamily: "Geist, sans-serif"
    fontSize: 16px
    fontWeight: 400
    lineHeight: 1.5
    letterSpacing: normal

rounded:
  none: 0px
  xs: 3px
  sm: 6px
  md: 8px
  lg: 10px
  xl: 12px

spacing:
  xxs: 4px
  xs: 8px
  sm: 12px
  md: 16px
  lg: 24px
  xl: 36px
  xxl: 48px
  huge: 64px
  section: 80px

components:
  top-nav:
    backgroundColor: "{colors.canvas}"
    textColor: "{colors.ink}"
    typography: "{typography.mono-body}"
  logo-wordmark:
    backgroundColor: transparent
    textColor: "{colors.ink}"
    typography: "{typography.mono-body}"
  nav-link:
    backgroundColor: transparent
    textColor: "{colors.ink}"
    typography: "{typography.mono-body}"
  button-primary:
    backgroundColor: transparent
    textColor: "{colors.ink}"
    typography: "{typography.button}"
    rounded: "{rounded.none}"
    padding: 24px 0px
  button-solid:
    backgroundColor: "{colors.white}"
    textColor: "{colors.canvas}"
    typography: "{typography.button}"
    rounded: "{rounded.none}"
    padding: 24px 0px
  button-outline:
    backgroundColor: transparent
    textColor: "{colors.ink}"
    typography: "{typography.button}"
    rounded: "{rounded.none}"
    padding: 24px 0px
  install-command:
    backgroundColor: "{colors.surface}"
    textColor: "{colors.ink}"
    typography: "{typography.mono-body}"
    rounded: "{rounded.xs}"
    padding: 16px
  hero-band:
    backgroundColor: "{colors.canvas}"
    textColor: "{colors.ink}"
    typography: "{typography.display}"
    padding: 80px
  terminal-card:
    backgroundColor: "{colors.surface-deep}"
    textColor: "{colors.ink}"
    typography: "{typography.mono-body}"
    rounded: "{rounded.sm}"
    padding: 24px
  terminal-titlebar:
    backgroundColor: "{colors.surface}"
    textColor: "{colors.muted}"
    typography: "{typography.mono-body}"
  progress-bar:
    backgroundColor: "{colors.neutral-warm}"
    textColor: "{colors.accent}"
    rounded: "{rounded.none}"
  card:
    backgroundColor: "{colors.surface}"
    textColor: "{colors.ink}"
    rounded: "{rounded.sm}"
    padding: 24px
  logo-cloud:
    backgroundColor: "{colors.canvas}"
    textColor: "{colors.muted}"
    typography: "{typography.mono-body}"
    padding: 36px

---

## Overview

Factory.ai is a near-black, terminal-native developer interface for an AI software-engineering agent the brand calls "Droid." The page floor is `{colors.canvas}` (#020202) — a true near-black, not a soft charcoal — with light `{colors.ink}` (#eeeeee) text. The system is almost entirely monochrome; the only chromatic voltage is a single hot orange (`{colors.accent}`#ef6f2e) used on the live progress bar, the "RUNNING" status dot, and active-state highlights.

The defining move is that **the product is the hero artifact**. Rather than illustrate the agent, Factory drops a live terminal-style "Mission Control" card directly into the hero — complete with macOS traffic-light dots, a feature checklist, a progress log streaming worker events, and an orange progress bar at "3/13." The marketing surface is, quite literally, a screenshot of the CLI doing work.

Type voice splits into two roles: **Geist** for display headlines (large, weight 400, heavily negative letter-spacing down to -2.88px) and **Geist Mono** for nearly everything else — nav links, body copy, the install command, and all the terminal chrome. The mono-everywhere choice is the brand's signature: this is a tool built by engineers for engineers, and the UI wears that on its sleeve.

**Key Characteristics:**
- Near-black canvas (`{colors.canvas}`#020202) with light ink (`{colors.ink}`#eeeeee). The entire site is dark — there is no light mode in the captured pages.
- A single hot-orange accent (`{colors.accent}`#ef6f2e, with a deeper `{colors.accent-deep}`#ee6018) driving the progress bar and active/running states. Color is scarce and load-bearing.
- Geist for display, Geist Mono for UI and body — both open-source Vercel typefaces, shipped as measured. Display headlines run weight 400 with aggressive negative tracking.
- Zero-radius buttons (`{rounded.none}`) with tall 24px vertical padding — squared CLI-tool aesthetic rather than soft consumer pills.
- The hero "Mission Control" terminal card (`{component.terminal-card}`) sits on `{colors.surface-deep}` (#0a0908) with a 6px radius and a single soft glow shadow — the marquee component.
- Spacing rhythm is dominated by `{spacing.lg}` (24px) — by far the most-measured value (freq 75) — with `{spacing.section}` (80px) reserved for the largest band gaps.
- A muted, grayscale logo cloud ("Trusted by leading engineering teams") sits below the hero, logos rendered in low-contrast `{colors.muted}`.

## Colors

### Accent
- **Accent** (`{colors.accent}`#ef6f2e): The single brand accent. Drives the hero progress bar, the "RUNNING" status dot, and the brand snowflake glyph. Used sparingly and deliberately.
- **Accent Deep** (`{colors.accent-deep}`#ee6018): A slightly deeper orange used on the progress-bar fill / hotter portions of the gradient.
- **Accent Blue** (`{colors.accent-blue}`#7db5e8): A cool blue measured at low frequency — appears in syntax-highlight fragments inside the terminal card. Secondary, never on CTAs.

### Surface
- **Canvas** (`{colors.canvas}`#020202): The default page floor — a true near-black.
- **Canvas Soft** (`{colors.canvas-soft}`#101010): A marginally lighter black used for large background sections.
- **Surface** (`{colors.surface}`#1f1d1c): The first elevation step — terminal title bar, install-command box, content cards.
- **Surface Elevated** (`{colors.surface-elevated}`#2e2c2b): A second elevation step for nested panels and active row highlights inside the terminal.
- **Surface Deep** (`{colors.surface-deep}`#0a0908): The terminal card body — slightly off the pure canvas so the card reads as a distinct panel.
- **Hairline** (`{colors.hairline}`#3d3a39): The 1px divider tone separating terminal columns and panel edges.
- **Neutral Warm** (`{colors.neutral-warm}`#4d4947): The most-frequent neutral — the unfilled track of the progress bar and warm-gray UI furniture.

### Text
- **Ink** (`{colors.ink}`#eeeeee): Headlines and primary text.
- **Body** (`{colors.body}`#8a8380): Default running-text / secondary terminal text — a warm mid-gray.
- **Muted** (`{colors.muted}`#908a86): Tertiary text, logo-cloud marks.
- **Muted Cool** (`{colors.muted-cool}`#858b97): A cooler gray used for timestamps / metadata in the progress log.
- **Slate** (`{colors.slate}`#62666d): A cool slate for the faintest log lines.
- **White / Off-white / Cream** (`{colors.white}`#ffffff, `{colors.off-white}`#fafafa, `{colors.cream}`#f0eee8): The brightest tones — used on solid buttons and the highest-contrast labels.

### Terminal Chrome
- **Terminal Red** (`{colors.terminal-red}`#ff5f57) and **Terminal Yellow** (`{colors.terminal-yellow}`#febc2e): The macOS window traffic-light dots in the terminal card's title bar. These are decorative window chrome, not semantic status colors.

## Typography

### Font Family
The system runs **Geist** for display headlines and **Geist Mono** for body, navigation, and all terminal chrome. Both are open-source typefaces (Vercel's Geist family), so they ship exactly as measured — no licensed-font substitution is required. The mono fallback stack walks `ui-monospace, monospace`; the sans stack falls back to `sans-serif`.

The split is unusually mono-heavy:
- Geist (display, weight 400, heavy negative tracking) — h1, h2
- Geist Mono (weight 400) — body text, nav links, install command, terminal log, metadata

### Hierarchy

| Token | Size | Weight | Line Height | Letter Spacing | Use |
|---|---|---|---|---|---|
| `{typography.display}` | 51.84px | 400 | 1.0 | -2.88px | Hero h1 ("Your software Factory powered by Droid") — Geist |
| `{typography.heading}` | 36px | 400 | 1.1 | -1.12px | Section heads — Geist |
| `{typography.mono-body}` | 12px | 400 | 1.0 | -0.24px | Body text, nav links, terminal log, metadata — Geist Mono |
| `{typography.button}` | 16px | 400 | 1.5 | normal | Button labels — Geist |

### Principles
Weight stays at 400 across every role — the system never bolds. Hierarchy is built from size and the aggressive negative letter-spacing on display sizes (-2.88px on h1, -1.12px on h2), which tightens the large Geist headlines into a dense, engineered block. Geist Mono at 12px is the workhorse — it carries nav, body, and the entire terminal interior, reinforcing the CLI identity.

### Note on Font Substitutes
None required — Geist and Geist Mono are open-source and ship directly. If unavailable, **Inter** (for Geist) and **JetBrains Mono** or **IBM Plex Mono** (for Geist Mono) are acceptable approximations that preserve the geometric-sans / clean-monospace pairing.

## Layout

### Spacing System
- **Base unit:** 4px.
- **Tokens:** `{spacing.xxs}` 4px · `{spacing.xs}` 8px · `{spacing.sm}` 12px · `{spacing.md}` 16px · `{spacing.lg}` 24px · `{spacing.xl}` 36px · `{spacing.xxl}` 48px · `{spacing.huge}` 64px · `{spacing.section}` 80px.
- **Dominant rhythm:** `{spacing.lg}` (24px) is overwhelmingly the most-measured value (frequency 75) — it governs card padding, terminal-column gutters, and most inter-element gaps.
- **Section padding:** `{spacing.section}` (80px) for the largest band separations; `{spacing.huge}` (64px) as a secondary large step.

### Grid & Container
- **Hero band:** Two-zone split — left zone carries the h1, install command, and the CTA row; right zone holds the wide `{component.terminal-card}` "Mission Control" panel.
- **Terminal interior:** itself a two-column grid — left column "Active Feature" detail (preconditions, expected behavior, description), right column "Features" checklist + "Progress Log."
- **Logo cloud:** a single horizontal row of grayscale partner logos below the hero.

### Whitespace Philosophy
The hero is deliberately top-heavy and asymmetric: the headline sits low-left while the terminal dominates the right. The dark canvas does most of the spatial work — generous negative space around a single dense product artifact. Inside the terminal, by contrast, density is the point: tightly packed monospace rows mimic a real CLI session.

## Elevation & Depth

| Level | Treatment | Use |
|---|---|---|
| Flat | No shadow, no border, on `{colors.canvas}` | Hero text, nav, logo cloud |
| Panel | `{colors.surface}` / `{colors.surface-deep}` fill, no shadow | Install command box, content cards |
| Glow | `rgba(0,0,0,0.8) 0px 0px 80px -20px` | The terminal "Mission Control" card — a single soft dark glow that lifts it off the canvas |
| Active row | `{colors.surface-elevated}` fill | Selected feature row inside the terminal checklist |

The only measured shadow is a wide, soft, dark glow (`0px 0px 80px -20px` at 0.8 alpha) applied to the marquee terminal card. Everything else relies on near-black-on-near-black surface stepping (`{colors.canvas}``{colors.surface-deep}``{colors.surface}``{colors.surface-elevated}`) rather than shadow to express depth.

### Decorative Depth
- The terminal card carries its own internal chrome — traffic-light dots, a title bar in `{colors.surface}`, and column dividers in `{colors.hairline}` — which read as product depth rather than system elevation.
- The orange progress bar provides the single moment of saturated color against the otherwise grayscale depth stack.

## Shapes

### Border Radius Scale

| Token | Value | Use |
|---|---|---|
| `{rounded.none}` | 0px | Buttons — squared CLI-tool silhouette |
| `{rounded.xs}` | 3px | Most-common small radius — install command box, inline chips (frequency 8) |
| `{rounded.sm}` | 6px | The terminal card and content cards |
| `{rounded.md}` | 8px | Occasional larger panel |
| `{rounded.lg}` | 10px | Rare larger container |
| `{rounded.xl}` | 12px | Largest measured radius — rare |

The radius language is tight: buttons are fully squared (0px), small UI furniture uses 3px, and cards use 6px. Nothing approaches a pill or fully-rounded form. The squared geometry reinforces the terminal/tooling identity.

### Photography Geometry
The captured pages carry no photography — the only imagery is the synthetic terminal UI and grayscale partner logos. The terminal card uses a 6px-radius rectangular frame.

## Components

### Navigation

**`top-nav`** — Transparent over the `{colors.canvas}` hero. Left holds the `{component.logo-wordmark}` (snowflake glyph + "FACTORY"). Center holds mono nav links (PRODUCT, ENTERPRISE, PRICING, NEWS, COMPANY, CAREERS, DOCS) in `{typography.mono-body}`, `{colors.ink}`. Right holds a "LOG IN" `{component.button-solid}` and a "CONTACT SALES" `{component.button-outline}`.

**`logo-wordmark`** — The snowflake mark plus "FACTORY" in uppercase mono, `{colors.ink}`.

**`nav-link`** — Transparent background, `{colors.ink}` text, `{typography.mono-body}`. Several carry a small "›" disclosure chevron.

### Buttons

**`button-primary`** — Measured directly: transparent background, `{colors.ink}` text, `{typography.button}` (Geist 16px / 400), `{rounded.none}` (0px), padding 24px × 0px. The vertical-only padding measurement reflects a full-width / wrapper-driven layout.

**`button-solid`** — The white CTA seen on "LOG IN" and "DOWNLOAD FOR WINDOWS." Background `{colors.white}`, text `{colors.canvas}` (derived — the dark text color on the white fill was read from the screenshot, not from the measured `color` property). `{rounded.none}`, `{typography.button}`.

**`button-outline`** — The "REQUEST A DEMO" / "CONTACT SALES" treatment. Transparent background with a hairline border, `{colors.ink}` text, `{rounded.none}`, `{typography.button}`.

### Hero & Terminal

**`hero-band`**`{colors.canvas}` background, `{typography.display}` headline in `{colors.ink}`, section padding `{spacing.section}` (80px). Asymmetric two-zone layout with headline + CTAs left, terminal right.

**`install-command`** — The `$ curl -fsSL https://app.factory.ai/cli | sh` box. Background `{colors.surface}`, mono text in `{colors.ink}`, `{rounded.xs}` (3px), padding `{spacing.md}` (16px), with a copy icon at the right edge.

**`terminal-card`** — The marquee "Mission Control" panel. Background `{colors.surface-deep}` (#0a0908), `{typography.mono-body}` interior, `{rounded.sm}` (6px), padding `{spacing.lg}` (24px), and the single glow shadow. Contains a two-column body: "Active Feature" detail on the left, "Features" checklist + "Progress Log" on the right.

**`terminal-titlebar`** — The window chrome strip at the top of the terminal card. Background `{colors.surface}`, label text in `{colors.muted}` ("droid— Mission Control— 140x46"), with `{colors.terminal-red}` / `{colors.terminal-yellow}` / green traffic-light dots at the left.

**`progress-bar`** — The "RUNNING 3/13" bar. Track in `{colors.neutral-warm}` (#4d4947), fill in `{colors.accent}` (#ef6f2e), `{rounded.none}`. The single most saturated element on the page.

### Cards & Sections

**`card`** — Generic content card. Background `{colors.surface}`, `{rounded.sm}` (6px), no shadow, padding `{spacing.lg}` (24px), text `{colors.ink}`.

**`logo-cloud`** — The "Trusted by leading engineering teams" row. Background `{colors.canvas}`, partner logos rendered in low-contrast `{colors.muted}`, label in `{typography.mono-body}`, padding `{spacing.xl}` (36px).

## Do's and Don'ts

### Do
- Keep the canvas near-black (`{colors.canvas}`#020202) and text light (`{colors.ink}`#eeeeee). The whole system is dark.
- Reserve `{colors.accent}` (orange) for status and progress — the running bar, the live dot. It is the only saturated color and it must stay scarce.
- Use Geist Mono for nav, body, and all terminal chrome. The mono-everywhere choice is the brand identity.
- Apply heavy negative letter-spacing on display headlines (-2.88px on h1) — the tight Geist block is the headline voice.
- Keep buttons squared (`{rounded.none}`). The zero-radius silhouette signals CLI tooling.
- Show the actual product as a live terminal card rather than illustrating it. The `{component.terminal-card}` is the hero, not decoration.
- Build depth from surface stepping (`{colors.surface-deep}``{colors.surface}``{colors.surface-elevated}`) rather than shadows.

### Don't
- Don't introduce a second saturated accent on CTAs — the blue (`{colors.accent-blue}`) belongs inside terminal syntax, not on buttons.
- Don't bold type — every role is weight 400. Build hierarchy from size and tracking.
- Don't round buttons. Pills read as consumer SaaS and break the tooling identity.
- Don't add shadows to ordinary cards — only the marquee terminal card carries the glow.
- Don't lighten the canvas toward charcoal; the true near-black (#020202) is part of the voltage.
- Don't add hover-state documentation here — default and active/pressed only.

## Responsive Behavior

The full-page mobile screenshot shows the same dark hero scaled down: the wordmark + condensed nav stay at top, the headline ("Your software Factory powered by Droid") sits left, the `{component.terminal-card}` shrinks but retains its full interior, and the grayscale logo cloud sits below. Beyond this, no breakpoint system, container max-width, or column-collapse rules were measured.

### Touch Targets
- Button padding is measured at 24px vertical — generous enough to clear comfortable tap heights — but horizontal padding and exact button dimensions were not captured.
- Nav-link tap areas were not measured.

### Collapsing Strategy
- The terminal card scales proportionally rather than restructuring; its dense mono interior remains legible-as-artifact even when shrunk on mobile.
- The hero's two-zone layout appears to stack (text above, terminal below) on narrow viewports, though exact breakpoints are not in the measured data.

## Iteration Guide

1. Focus on ONE component at a time. Reference its YAML key directly (`{component.terminal-card}`, `{component.button-solid}`).
2. Variants of an existing component live as separate entries in `components:`.
3. Use `{token.refs}` everywhere — never inline hex.
4. Never document hover. Default and Active/Pressed states only.
5. Keep type at weight 400 with size + tracking driving hierarchy. The Geist / Geist Mono split does not blur.
6. Orange is scarce and load-bearing — reach for surface stepping before reaching for color.
7. When adding surfaces, step through the measured grayscale ladder rather than inventing new grays.

## Known Gaps

- Only the landing hero was richly captured; the `pricing` and `product-desktop` pages were listed but yielded no distinct measured tokens — pricing tables, feature grids, and footer are undocumented.
- `button-solid` text color (`{colors.canvas}` on white) is **derived** from the screenshot; the measured `color` property on `button-primary` was `#eeeeee`, indicating the captured selector was the dark/light-text button variant, not the white CTA.
- Button horizontal padding, exact heights, and nav-bar height were not measured.
- No footer was captured in the analysis data despite a long-scroll mobile screenshot.
- The green traffic-light dot in the terminal title bar is visible in screenshots but was not captured as a hex value in the palette.
- Animation and transition timings (the streaming progress log, the advancing orange progress bar) are out of scope.
- Responsive breakpoints, container max-widths, and grid column counts were not measured — responsive notes are inferred from the two screenshots only.
- Form/input states, focus rings, and validation styling were not captured.

<!-- Documented by duply · real-world design systems as ready-to-use DESIGN.md for AI coding agents · https://duply.ai/factory/design-md -->

Color Palette

Accent

Neutrals

Typography

display51.84px · 400 · 1
The quick brown fox jumps
heading36px · 400 · 1.1
The quick brown fox jumps
mono-body12px · 400 · 1
The quick brown fox jumps
button16px · 400 · 1.5
The quick brown fox jumps

Spacing & Shape

Spacing

NameValuePreview
xxs4px
xs8px
sm12px
md16px
lg24px
xl36px
xxl48px
huge64px
section80px

Border Radius

NameValuePreview
none0px
xs3px
sm6px
md8px
lg10px
xl12px

More like this

Build in any
design language

Free to browse. Real design systems, documented as DESIGN.md. New designs land weekly.

Browse the libraryHow it works