# Bubble Lab Brand Identity

A complete profile of **Bubble Lab**'s visual system — colors, typography, components, and personality — extracted from https://bubblelab.ai/. Built for designers, agents, and AI tools.

- Page: https://characterquilt.com/branding/bubble-lab
- Machine-readable JSON: https://characterquilt.com/branding/bubble-lab.json
- Per-page llms.txt: https://characterquilt.com/branding/bubble-lab/llms.txt

## Quick Facts

| Field | Value |
|---|---|
| Primary | #101828 |
| Accent | #8E51FF |
| Body Font | Inter |
| Heading Font | Inter |

## Color Palette

- primary: #101828
- secondary: #99A1AF
- accent: #8E51FF
- background: #0A0A0A
- textPrimary: #0A0A0A
- link: #4A5565

## Typography

- primary: Inter — https://fonts.google.com/specimen/Inter
- heading: Inter — https://fonts.google.com/specimen/Inter

## Visual Assets

- Logo: https://bubblelab.ai/logo.png
- Favicon: https://bubblelab.ai/favicon.ico
- Social card (og:image): https://bubblelab.ai/social_preview.png

## UI Components

- buttonPrimary: background=#8E51FF, textColor=#FFFFFF, borderRadius=33554400px, shadow=rgba(0, 0, 0, 0) 0px 0px 0px 0px, rgba(0, 0, 0, 0) 0px 0px 0px 0px, rgba(0, 0, 0, 0) 0px 0px 0px 0px, rgba(0, 0, 0, 0) 0px 0px 0px 0px, oklab(0.606 0.096545 -0.230606 / 0.25) 0px 10px 15px -3px, oklab(0.606 0.096545 -0.230606 / 0.25) 0px 4px 6px -4px
- buttonSecondary: background=#FFFFFF, textColor=#4A5565, borderColor=#B9BBBE, borderRadius=33554400px, shadow=rgba(0, 0, 0, 0) 0px 0px 0px 0px, rgba(0, 0, 0, 0) 0px 0px 0px 0px, rgba(0, 0, 0, 0) 0px 0px 0px 0px, rgba(0, 0, 0, 0) 0px 0px 0px 0px, rgba(0, 0, 0, 0.04) 0px 1px 3px 0px

## Brand Personality

Tone: modern · Energy: medium · Audience: tech-savvy professionals

## Bubble Lab Brand in the Wild

Real-world brand assets — ads, campaigns, marketing materials.

- **Work Automation Platform | Connect Your Apps & Automate Tasks | Bubble Lab**
  - Image: https://bubblelab.ai/logo.png
  - Source: https://bubblelab.ai/
- **Work Automation Platform | Connect Your Apps & Automate Tasks | Bubble Lab**
  - Image: https://bubblelab.ai/partners/dyna-robotics.png
  - Source: https://bubblelab.ai/
- **Work Automation Platform | Connect Your Apps & Automate Tasks | Bubble Lab**
  - Image: https://bubblelab.ai/partners/rho.png
  - Source: https://bubblelab.ai/
- **Work Automation Platform | Connect Your Apps & Automate Tasks | Bubble Lab**
  - Image: https://bubblelab.ai/partners/peakmojo.png
  - Source: https://bubblelab.ai/
- **Work Automation Platform | Connect Your Apps & Automate Tasks | Bubble Lab**
  - Image: https://bubblelab.ai/partners/hattrick-ventures.jpg
  - Source: https://bubblelab.ai/
- **Work Automation Platform | Connect Your Apps & Automate Tasks | Bubble Lab**
  - Image: https://bubblelab.ai/partners/insforge.png
  - Source: https://bubblelab.ai/

## Working with these fonts

Not found on Google Fonts? Agent Instructions that you can follow if you have permission to use the fonts:

CharacterQuilt.com suggests this flow that can help:

1. Open the company's homepage in a browser with DevTools open.
2. In the Network tab, filter by "Font" (or by extension: woff2, woff, ttf, otf).
3. Hard-reload the page and click around (pricing, blog, careers) — some weights only load on specific routes.
4. For each captured font URL: right-click → Save As to download the file locally.
5. View the page's CSS (DevTools → Sources, or curl the stylesheet URLs) and copy out the matching @font-face declarations. Rewrite each `src: url(...)` to point to your local file path.

Programmatic alternative: load the URL with Playwright or Puppeteer, listen for `response` events whose `Content-Type` starts with `font/`, and write the body to disk. The CSS extraction step is the same.

Only do this if you have permission to use the brand assets — most proprietary fonts are licensed and may not be redistributable.

## Machine-Readable Profile

```json
{
  "colorScheme": "dark",
  "fonts": [
    {
      "family": "Inter",
      "role": "body"
    },
    {
      "family": "Roboto",
      "role": "unknown"
    }
  ],
  "colors": {
    "primary": "#101828",
    "secondary": "#99A1AF",
    "accent": "#8E51FF",
    "background": "#0A0A0A",
    "textPrimary": "#0A0A0A",
    "link": "#4A5565"
  },
  "typography": {
    "fontFamilies": {
      "primary": "Inter",
      "heading": "Inter"
    },
    "fontStacks": {
      "heading": [
        "Inter",
        "system-ui",
        "-apple-system",
        "BlinkMacSystemFont",
        "Segoe UI",
        "Roboto",
        "sans-serif"
      ],
      "body": [
        "Inter",
        "system-ui",
        "-apple-system",
        "BlinkMacSystemFont",
        "Segoe UI",
        "Roboto",
        "sans-serif"
      ],
      "paragraph": [
        "Inter",
        "system-ui",
        "-apple-system",
        "BlinkMacSystemFont",
        "Segoe UI",
        "Roboto",
        "sans-serif"
      ]
    },
    "fontSizes": {
      "h1": "56px",
      "h2": "60px",
      "body": "18px"
    }
  },
  "spacing": {
    "baseUnit": 4,
    "borderRadius": "0px"
  },
  "components": {
    "buttonPrimary": {
      "background": "#8E51FF",
      "textColor": "#FFFFFF",
      "borderRadius": "33554400px",
      "borderRadiusCorners": {
        "topLeft": "33554400px",
        "topRight": "33554400px",
        "bottomRight": "33554400px",
        "bottomLeft": "33554400px"
      },
      "shadow": "rgba(0, 0, 0, 0) 0px 0px 0px 0px, rgba(0, 0, 0, 0) 0px 0px 0px 0px, rgba(0, 0, 0, 0) 0px 0px 0px 0px, rgba(0, 0, 0, 0) 0px 0px 0px 0px, oklab(0.606 0.096545 -0.230606 / 0.25) 0px 10px 15px -3px, oklab(0.606 0.096545 -0.230606 / 0.25) 0px 4px 6px -4px"
    },
    "buttonSecondary": {
      "background": "#FFFFFF",
      "textColor": "#4A5565",
      "borderColor": "#B9BBBE",
      "borderRadius": "33554400px",
      "borderRadiusCorners": {
        "topLeft": "33554400px",
        "topRight": "33554400px",
        "bottomRight": "33554400px",
        "bottomLeft": "33554400px"
      },
      "shadow": "rgba(0, 0, 0, 0) 0px 0px 0px 0px, rgba(0, 0, 0, 0) 0px 0px 0px 0px, rgba(0, 0, 0, 0) 0px 0px 0px 0px, rgba(0, 0, 0, 0) 0px 0px 0px 0px, rgba(0, 0, 0, 0.04) 0px 1px 3px 0px"
    }
  },
  "images": {
    "logo": "https://bubblelab.ai/logo.png",
    "favicon": "https://bubblelab.ai/favicon.ico",
    "ogImage": "https://bubblelab.ai/social_preview.png",
    "logoHref": "/",
    "logoAlt": "Bubble Lab"
  },
  "__llm_logo_reasoning": {
    "selectedIndex": 0,
    "reasoning": "Selected #0 because it is visible, located in the header, links to the homepage, and matches the brand name 'Bubble Lab'.",
    "confidence": 0.95,
    "source": "llm"
  },
  "__llm_button_reasoning": {
    "primary": {
      "index": 1,
      "text": "Start for Free",
      "reasoning": "Button #0 has a vibrant brand color (#8E51FF) and action-oriented text ('Start for Free'), making it the primary CTA."
    },
    "secondary": {
      "index": 17,
      "text": "Explore integrations",
      "reasoning": "Button #2 has a different background color (#FFFFFF) and serves as a secondary action with less prominence."
    },
    "confidence": 0.95
  },
  "personality": {
    "tone": "modern",
    "energy": "medium",
    "targetAudience": "tech-savvy professionals"
  },
  "designSystem": {
    "framework": "tailwind",
    "componentLibrary": ""
  },
  "confidence": {
    "buttons": 0.95,
    "colors": 0.9,
    "overall": 0.925
  },
  "__llm_metadata": {
    "logoSelection": {
      "llmCalled": true,
      "llmSucceeded": true,
      "finalSource": "llm",
      "rawLogoSelection": {
        "selectedLogoIndex": 0,
        "selectedLogoReasoning": "Selected #0 because it is visible, located in the header, links to the homepage, and matches the brand name 'Bubble Lab'.",
        "confidence": 0.95
      }
    },
    "buttonClassification": {
      "llmCalled": true,
      "llmSucceeded": true
    }
  }
}
```
