formal.json
Formal Brand Identity
A complete profile of Formal's visual system — colors, typography, components, and personality — extracted from https://joinformal.com. Built for designers, agents, and AI tools.
- Page: https://characterquilt.com/branding/formal
- Machine-readable JSON: https://characterquilt.com/branding/formal.json
- Per-page llms.txt: https://characterquilt.com/branding/formal/llms.txt
Quick Facts
| Field | Value |
|---|---|
| Primary | #44445C |
| Accent | #254BB0 |
| Body Font | JetBrains Mono |
| Heading Font | JetBrains Mono |
Color Palette
- primary: #44445C
- secondary: #1A1A2E
- accent: #254BB0
- background: #FFFFFF
- textPrimary: #254BB0
- link: #254BB0
Typography
- primary: JetBrains Mono — https://fonts.google.com/specimen/JetBrains+Mono
- heading: JetBrains Mono — https://fonts.google.com/specimen/JetBrains+Mono
Visual Assets
- Favicon: https://formal.ai/favicon.png
- Social card (og:image): https://www.formal.ai/og-image.png
UI Components
- buttonPrimary: background=#254BB0, textColor=#FFFFFF, borderColor=#254BB0, borderRadius=0px, shadow=none
- buttonSecondary: background=#FFFFFF, textColor=#44445C, borderColor=#D4D4DE, borderRadius=0px, shadow=none
Brand Personality
Tone: professional · Energy: medium · Audience: businesses seeking data security solutions
Formal Brand in the Wild
Real-world brand assets — ads, campaigns, marketing materials.
- The Permission Pitfall: Securing MCP Servers Without Limiting Value - Formal
- The Permission Pitfall: Securing MCP Servers Without Limiting Value - Formal
- The Permission Pitfall: Securing MCP Servers Without Limiting Value - Formal
- The Permission Pitfall: Securing MCP Servers Without Limiting Value - Formal
- Allowlisting Some Bash Commands is Often the Same as Allowlisting All with Claude Code - Formal
- The Permission Pitfall: Securing MCP Servers Without Limiting Value - Formal
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:
- Open the company's homepage in a browser with DevTools open.
- In the Network tab, filter by "Font" (or by extension: woff2, woff, ttf, otf).
- Hard-reload the page and click around (pricing, blog, careers) — some weights only load on specific routes.
- For each captured font URL: right-click → Save As to download the file locally.
- 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
{
"colorScheme": "light",
"fonts": [
{
"family": "JetBrains Mono",
"role": "monospace"
}
],
"colors": {
"primary": "#44445C",
"secondary": "#1A1A2E",
"accent": "#254BB0",
"background": "#FFFFFF",
"textPrimary": "#254BB0",
"link": "#254BB0"
},
"typography": {
"fontFamilies": {
"primary": "JetBrains Mono",
"heading": "JetBrains Mono"
},
"fontStacks": {
"heading": [
"JetBrains Mono",
"Berkeley Mono",
"SF Mono",
"Cascadia Code",
"Fira Code",
"monospace"
],
"body": [
"JetBrains Mono",
"Berkeley Mono",
"SF Mono",
"Cascadia Code",
"Fira Code",
"monospace"
],
"paragraph": [
"JetBrains Mono",
"Berkeley Mono",
"SF Mono",
"Cascadia Code",
"Fira Code",
"monospace"
]
},
"fontSizes": {
"h1": "30px",
"h2": "24px",
"body": "15px"
}
},
"spacing": {
"baseUnit": 4,
"borderRadius": "0px"
},
"components": {
"buttonPrimary": {
"background": "#254BB0",
"textColor": "#FFFFFF",
"borderColor": "#254BB0",
"borderRadius": "0px",
"borderRadiusCorners": {
"topLeft": "0px",
"topRight": "0px",
"bottomRight": "0px",
"bottomLeft": "0px"
},
"shadow": "none"
},
"buttonSecondary": {
"background": "#FFFFFF",
"textColor": "#44445C",
"borderColor": "#D4D4DE",
"borderRadius": "0px",
"borderRadiusCorners": {
"topLeft": "0px",
"topRight": "0px",
"bottomRight": "0px",
"bottomLeft": "0px"
},
"shadow": "none"
}
},
"images": {
"favicon": "https://formal.ai/favicon.png",
"ogImage": "https://www.formal.ai/og-image.png"
},
"__llm_logo_reasoning": {
"selectedIndex": -1,
"reasoning": "None of the logo candidates match the brand 'Formal' as inferred from the page title and URL. All candidates appear to be client logos rather than the main brand logo.",
"confidence": 0.2,
"rejected": true,
"source": "llm"
},
"__llm_button_reasoning": {
"primary": {
"index": 0,
"text": "Get a demo →",
"reasoning": "Button #0 has a vibrant blue background (#254BB0) which matches the brand's accent color and features action-oriented text 'Get a demo →', making it the primary CTA."
},
"secondary": {
"index": 3,
"text": "Read the docs",
"reasoning": "Button #3 has a different background color (#FFFFFF) and serves a supportive role with the text 'Read the docs', making it a suitable secondary CTA."
},
"confidence": 0.95
},
"personality": {
"tone": "professional",
"energy": "medium",
"targetAudience": "businesses seeking data security solutions"
},
"designSystem": {
"framework": "custom",
"componentLibrary": ""
},
"confidence": {
"buttons": 0.95,
"colors": 0.9,
"overall": 0.925
},
"__llm_metadata": {
"logoSelection": {
"llmCalled": true,
"llmSucceeded": true,
"finalSource": "llm",
"rawLogoSelection": {
"selectedLogoIndex": -1,
"selectedLogoReasoning": "None of the logo candidates match the brand 'Formal' as inferred from the page title and URL. All candidates appear to be client logos rather than the main brand logo.",
"confidence": 0.2
}
},
"buttonClassification": {
"llmCalled": true,
"llmSucceeded": true
}
}
}