{
  "name": "Sonarly",
  "slug": "sonarly",
  "domain": "https://sonarly.com",
  "sources": [
    "yc"
  ],
  "branding": {
    "colorScheme": "light",
    "fonts": [
      {
        "family": "IBM Plex Sans",
        "role": "body"
      },
      {
        "family": "Plus Jakarta Sans",
        "role": "heading"
      }
    ],
    "colors": {
      "primary": "#6B7280",
      "secondary": "#111827",
      "accent": "#000000",
      "background": "#FCFCFC",
      "textPrimary": "#000000",
      "link": "#9CA3AF"
    },
    "typography": {
      "fontFamilies": {
        "primary": "IBM Plex Sans",
        "heading": "Plus Jakarta Sans"
      },
      "fontStacks": {
        "heading": [
          "Plus Jakarta Sans",
          "sans-serif"
        ],
        "body": [
          "ui-sans-serif",
          "system-ui",
          "sans-serif",
          "Apple Color Emoji",
          "Segoe UI Emoji",
          "Segoe UI Symbol",
          "Noto Color Emoji"
        ],
        "paragraph": [
          "IBM Plex Sans",
          "sans-serif"
        ]
      },
      "fontSizes": {
        "h1": "72px",
        "h2": "32px",
        "body": "17px"
      }
    },
    "spacing": {
      "baseUnit": 4,
      "borderRadius": "6px"
    },
    "components": {
      "buttonPrimary": {
        "background": "#000000",
        "textColor": "#FFFFFF",
        "borderRadius": "24px",
        "borderRadiusCorners": {
          "topLeft": "24px",
          "topRight": "24px",
          "bottomRight": "24px",
          "bottomLeft": "24px"
        },
        "shadow": "rgba(255, 255, 255, 0.15) 2px 2px 2px 0px inset"
      },
      "buttonSecondary": {
        "background": "#FFFFFF",
        "textColor": "#000000",
        "borderColor": "#E7E7E7",
        "borderRadius": "24px",
        "borderRadiusCorners": {
          "topLeft": "24px",
          "topRight": "24px",
          "bottomRight": "24px",
          "bottomLeft": "24px"
        },
        "shadow": "rgba(255, 255, 255, 0.15) 2px 2px 2px 0px inset"
      }
    },
    "images": {
      "logo": "data:image/png;base64,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",
      "favicon": "https://sonarly.com/favicon.png?v=2",
      "ogImage": "https://sonarly.com/logo_sonarly.png",
      "logoHref": "/",
      "logoAlt": "Sonarly"
    },
    "__llm_logo_reasoning": {
      "selectedIndex": 0,
      "reasoning": "Selected #0 because it is visible, located in the header, and links to the homepage, matching the brand name 'Sonarly'.",
      "confidence": 0.95,
      "source": "llm"
    },
    "__llm_button_reasoning": {
      "primary": {
        "index": 0,
        "text": "Get started free",
        "reasoning": "Button #0 'Get started free' is likely the primary CTA due to its action-oriented text and dark background color, which stands out as a strong call-to-action."
      },
      "secondary": {
        "index": 3,
        "text": "Try for free",
        "reasoning": "Button #3 'Try for free' is a suitable secondary CTA with a light background color, providing a contrast to the primary button."
      },
      "confidence": 0.9
    },
    "personality": {
      "tone": "modern",
      "energy": "medium",
      "targetAudience": "tech-savvy professionals"
    },
    "designSystem": {
      "framework": "custom",
      "componentLibrary": ""
    },
    "confidence": {
      "buttons": 0.9,
      "colors": 0.9,
      "overall": 0.9
    },
    "__llm_metadata": {
      "logoSelection": {
        "llmCalled": true,
        "llmSucceeded": true,
        "finalSource": "llm",
        "rawLogoSelection": {
          "selectedLogoIndex": 0,
          "selectedLogoReasoning": "Selected #0 because it is visible, located in the header, and links to the homepage, matching the brand name 'Sonarly'.",
          "confidence": 0.95
        }
      },
      "buttonClassification": {
        "llmCalled": true,
        "llmSucceeded": true
      }
    }
  },
  "images": [
    {
      "file": "https://e4p9rs3sldnmtboz.public.blob.vercel-storage.com/sonarly/643b95f9b9.webp",
      "alt": "Sonarly - Your software fixes itself",
      "source_url": "https://sonarly.com/",
      "image_url": "https://sonarly.com/assets/slack-4-feat-DPc4k2-O.png",
      "width": 2012,
      "height": 744,
      "bytes": 58086,
      "query": "site:sonarly.com",
      "query_suffix": "site:sonarly.com"
    },
    {
      "file": "https://e4p9rs3sldnmtboz.public.blob.vercel-storage.com/sonarly/4a13768dbf.webp",
      "alt": "Sonarly - Your software fixes itself",
      "source_url": "https://sonarly.com/",
      "image_url": "https://sonarly.com/assets/context-4-features-43tQViBW.png",
      "width": 2024,
      "height": 704,
      "bytes": 74284,
      "query": "site:sonarly.com",
      "query_suffix": "site:sonarly.com"
    },
    {
      "file": "https://e4p9rs3sldnmtboz.public.blob.vercel-storage.com/sonarly/a06236b237.webp",
      "alt": "Sonarly - Your software fixes itself",
      "source_url": "https://sonarly.com/",
      "image_url": "https://sonarly.com/assets/RCA-image-N0JMPuvS.png",
      "width": 2012,
      "height": 744,
      "bytes": 68354,
      "query": "site:sonarly.com",
      "query_suffix": "site:sonarly.com"
    },
    {
      "file": "https://e4p9rs3sldnmtboz.public.blob.vercel-storage.com/sonarly/c888605783.webp",
      "alt": "Sonarly - Your software fixes itself",
      "source_url": "https://sonarly.com/",
      "image_url": "https://sonarly.com/assets/noise-l2kcDq9Q.png",
      "width": 2012,
      "height": 476,
      "bytes": 68185,
      "query": "site:sonarly.com",
      "query_suffix": "site:sonarly.com"
    },
    {
      "file": "https://e4p9rs3sldnmtboz.public.blob.vercel-storage.com/sonarly/a8e847eace.webp",
      "alt": "Beautiful React UI Components Library",
      "source_url": "https://monet.design/",
      "image_url": "https://www.monet.design/_next/image?url=https%3A%2F%2Fregistry.monet.design%2Fregistry%2Fpreview%2Fpages%2Fsonarly-dev-landing.png&w=3840&q=75",
      "width": 1440,
      "height": 1080,
      "bytes": 48668,
      "query": "\"Sonarly\" landing page",
      "query_suffix": "\"Sonarly\" landing page"
    }
  ],
  "font_resources": [
    {
      "family": "IBM Plex Sans",
      "google_fonts_url": "https://fonts.google.com/specimen/IBM+Plex+Sans"
    },
    {
      "family": "Plus Jakarta Sans",
      "google_fonts_url": "https://fonts.google.com/specimen/Plus+Jakarta+Sans"
    }
  ],
  "google_fonts_css": "https://fonts.googleapis.com/css2?family=IBM+Plex+Sans&family=Plus+Jakarta+Sans&display=swap",
  "font_download_note": "Not found on Google Fonts? Agent Instructions that you can follow if you have permission to use the fonts:\n\nCharacterQuilt.com suggests this flow that can help:\n\n1. Open the company's homepage in a browser with DevTools open.\n2. In the Network tab, filter by \"Font\" (or by extension: woff2, woff, ttf, otf).\n3. Hard-reload the page and click around (pricing, blog, careers) — some weights only load on specific routes.\n4. For each captured font URL: right-click → Save As to download the file locally.\n5. 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.\n\nProgrammatic 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.\n\nOnly do this if you have permission to use the brand assets — most proprietary fonts are licensed and may not be redistributable.",
  "page_url": "https://characterquilt.com/branding/sonarly",
  "agent_instructions": "You are designing or implementing in Sonarly's brand identity.\n\n# Brand profile\n- Company: Sonarly\n- Source: https://sonarly.com\n- Color scheme: light\n\n# Colors\n- primary: #6B7280\n- secondary: #111827\n- accent: #000000\n- background: #FCFCFC\n- textPrimary: #000000\n- link: #9CA3AF\n\n# Typography\n- primary: IBM Plex Sans — https://fonts.google.com/specimen/IBM+Plex+Sans\n- heading: Plus Jakarta Sans — https://fonts.google.com/specimen/Plus+Jakarta+Sans\n\nLoad all fonts at once: <link rel=\"stylesheet\" href=\"https://fonts.googleapis.com/css2?family=IBM+Plex+Sans&family=Plus+Jakarta+Sans&display=swap\">\n\n# UI Components\n- buttonPrimary: background=#000000, textColor=#FFFFFF, borderRadius=24px, shadow=rgba(255, 255, 255, 0.15) 2px 2px 2px 0px inset\n- buttonSecondary: background=#FFFFFF, textColor=#000000, borderColor=#E7E7E7, borderRadius=24px, shadow=rgba(255, 255, 255, 0.15) 2px 2px 2px 0px inset\n\n# Brand voice\n- Tone: modern\n- Energy: medium\n- Audience: tech-savvy professionals\n\n# Working with these fonts\nNot found on Google Fonts? Agent Instructions that you can follow if you have permission to use the fonts:\n\nCharacterQuilt.com suggests this flow that can help:\n\n1. Open the company's homepage in a browser with DevTools open.\n2. In the Network tab, filter by \"Font\" (or by extension: woff2, woff, ttf, otf).\n3. Hard-reload the page and click around (pricing, blog, careers) — some weights only load on specific routes.\n4. For each captured font URL: right-click → Save As to download the file locally.\n5. 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.\n\nProgrammatic 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.\n\nOnly do this if you have permission to use the brand assets — most proprietary fonts are licensed and may not be redistributable.\n\n# Full machine-readable profile\nhttps://characterquilt.com/branding/sonarly.json",
  "page_markdown": "# Sonarly Brand Identity\n\nA complete profile of **Sonarly**'s visual system — colors, typography, components, and personality — extracted from https://sonarly.com. Built for designers, agents, and AI tools.\n\n- Page: https://characterquilt.com/branding/sonarly\n- Machine-readable JSON: https://characterquilt.com/branding/sonarly.json\n- Per-page llms.txt: https://characterquilt.com/branding/sonarly/llms.txt\n\n## Quick Facts\n\n| Field | Value |\n|---|---|\n| Primary | #6B7280 |\n| Accent | #000000 |\n| Body Font | IBM Plex Sans |\n| Heading Font | Plus Jakarta Sans |\n\n## Color Palette\n\n- primary: #6B7280\n- secondary: #111827\n- accent: #000000\n- background: #FCFCFC\n- textPrimary: #000000\n- link: #9CA3AF\n\n## Typography\n\n- primary: IBM Plex Sans — https://fonts.google.com/specimen/IBM+Plex+Sans\n- heading: Plus Jakarta Sans — https://fonts.google.com/specimen/Plus+Jakarta+Sans\n\n## Visual Assets\n\n- Logo: data:image/png;base64,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\n- Favicon: https://sonarly.com/favicon.png?v=2\n- Social card (og:image): https://sonarly.com/logo_sonarly.png\n\n## UI Components\n\n- buttonPrimary: background=#000000, textColor=#FFFFFF, borderRadius=24px, shadow=rgba(255, 255, 255, 0.15) 2px 2px 2px 0px inset\n- buttonSecondary: background=#FFFFFF, textColor=#000000, borderColor=#E7E7E7, borderRadius=24px, shadow=rgba(255, 255, 255, 0.15) 2px 2px 2px 0px inset\n\n## Brand Personality\n\nTone: modern · Energy: medium · Audience: tech-savvy professionals\n\n## Sonarly Brand in the Wild\n\nReal-world brand assets — ads, campaigns, marketing materials.\n\n- **Sonarly - Your software fixes itself**\n  - Image: https://sonarly.com/assets/slack-4-feat-DPc4k2-O.png\n  - Source: https://sonarly.com/\n- **Sonarly - Your software fixes itself**\n  - Image: https://sonarly.com/assets/context-4-features-43tQViBW.png\n  - Source: https://sonarly.com/\n- **Sonarly - Your software fixes itself**\n  - Image: https://sonarly.com/assets/RCA-image-N0JMPuvS.png\n  - Source: https://sonarly.com/\n- **Sonarly - Your software fixes itself**\n  - Image: https://sonarly.com/assets/noise-l2kcDq9Q.png\n  - Source: https://sonarly.com/\n- **Beautiful React UI Components Library**\n  - Image: https://www.monet.design/_next/image?url=https%3A%2F%2Fregistry.monet.design%2Fregistry%2Fpreview%2Fpages%2Fsonarly-dev-landing.png&w=3840&q=75\n  - Source: https://monet.design/\n\n## Working with these fonts\n\nNot found on Google Fonts? Agent Instructions that you can follow if you have permission to use the fonts:\n\nCharacterQuilt.com suggests this flow that can help:\n\n1. Open the company's homepage in a browser with DevTools open.\n2. In the Network tab, filter by \"Font\" (or by extension: woff2, woff, ttf, otf).\n3. Hard-reload the page and click around (pricing, blog, careers) — some weights only load on specific routes.\n4. For each captured font URL: right-click → Save As to download the file locally.\n5. 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.\n\nProgrammatic 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.\n\nOnly do this if you have permission to use the brand assets — most proprietary fonts are licensed and may not be redistributable.\n\n## Machine-Readable Profile\n\n```json\n{\n  \"colorScheme\": \"light\",\n  \"fonts\": [\n    {\n      \"family\": \"IBM Plex Sans\",\n      \"role\": \"body\"\n    },\n    {\n      \"family\": \"Plus Jakarta Sans\",\n      \"role\": \"heading\"\n    }\n  ],\n  \"colors\": {\n    \"primary\": \"#6B7280\",\n    \"secondary\": \"#111827\",\n    \"accent\": \"#000000\",\n    \"background\": \"#FCFCFC\",\n    \"textPrimary\": \"#000000\",\n    \"link\": \"#9CA3AF\"\n  },\n  \"typography\": {\n    \"fontFamilies\": {\n      \"primary\": \"IBM Plex Sans\",\n      \"heading\": \"Plus Jakarta Sans\"\n    },\n    \"fontStacks\": {\n      \"heading\": [\n        \"Plus Jakarta Sans\",\n        \"sans-serif\"\n      ],\n      \"body\": [\n        \"ui-sans-serif\",\n        \"system-ui\",\n        \"sans-serif\",\n        \"Apple Color Emoji\",\n        \"Segoe UI Emoji\",\n        \"Segoe UI Symbol\",\n        \"Noto Color Emoji\"\n      ],\n      \"paragraph\": [\n        \"IBM Plex Sans\",\n        \"sans-serif\"\n      ]\n    },\n    \"fontSizes\": {\n      \"h1\": \"72px\",\n      \"h2\": \"32px\",\n      \"body\": \"17px\"\n    }\n  },\n  \"spacing\": {\n    \"baseUnit\": 4,\n    \"borderRadius\": \"6px\"\n  },\n  \"components\": {\n    \"buttonPrimary\": {\n      \"background\": \"#000000\",\n      \"textColor\": \"#FFFFFF\",\n      \"borderRadius\": \"24px\",\n      \"borderRadiusCorners\": {\n        \"topLeft\": \"24px\",\n        \"topRight\": \"24px\",\n        \"bottomRight\": \"24px\",\n        \"bottomLeft\": \"24px\"\n      },\n      \"shadow\": \"rgba(255, 255, 255, 0.15) 2px 2px 2px 0px inset\"\n    },\n    \"buttonSecondary\": {\n      \"background\": \"#FFFFFF\",\n      \"textColor\": \"#000000\",\n      \"borderColor\": \"#E7E7E7\",\n      \"borderRadius\": \"24px\",\n      \"borderRadiusCorners\": {\n        \"topLeft\": \"24px\",\n        \"topRight\": \"24px\",\n        \"bottomRight\": \"24px\",\n        \"bottomLeft\": \"24px\"\n      },\n      \"shadow\": \"rgba(255, 255, 255, 0.15) 2px 2px 2px 0px inset\"\n    }\n  },\n  \"images\": {\n    \"logo\": \"data:image/png;base64,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\",\n    \"favicon\": \"https://sonarly.com/favicon.png?v=2\",\n    \"ogImage\": \"https://sonarly.com/logo_sonarly.png\",\n    \"logoHref\": \"/\",\n    \"logoAlt\": \"Sonarly\"\n  },\n  \"__llm_logo_reasoning\": {\n    \"selectedIndex\": 0,\n    \"reasoning\": \"Selected #0 because it is visible, located in the header, and links to the homepage, matching the brand name 'Sonarly'.\",\n    \"confidence\": 0.95,\n    \"source\": \"llm\"\n  },\n  \"__llm_button_reasoning\": {\n    \"primary\": {\n      \"index\": 0,\n      \"text\": \"Get started free\",\n      \"reasoning\": \"Button #0 'Get started free' is likely the primary CTA due to its action-oriented text and dark background color, which stands out as a strong call-to-action.\"\n    },\n    \"secondary\": {\n      \"index\": 3,\n      \"text\": \"Try for free\",\n      \"reasoning\": \"Button #3 'Try for free' is a suitable secondary CTA with a light background color, providing a contrast to the primary button.\"\n    },\n    \"confidence\": 0.9\n  },\n  \"personality\": {\n    \"tone\": \"modern\",\n    \"energy\": \"medium\",\n    \"targetAudience\": \"tech-savvy professionals\"\n  },\n  \"designSystem\": {\n    \"framework\": \"custom\",\n    \"componentLibrary\": \"\"\n  },\n  \"confidence\": {\n    \"buttons\": 0.9,\n    \"colors\": 0.9,\n    \"overall\": 0.9\n  },\n  \"__llm_metadata\": {\n    \"logoSelection\": {\n      \"llmCalled\": true,\n      \"llmSucceeded\": true,\n      \"finalSource\": \"llm\",\n      \"rawLogoSelection\": {\n        \"selectedLogoIndex\": 0,\n        \"selectedLogoReasoning\": \"Selected #0 because it is visible, located in the header, and links to the homepage, matching the brand name 'Sonarly'.\",\n        \"confidence\": 0.95\n      }\n    },\n    \"buttonClassification\": {\n      \"llmCalled\": true,\n      \"llmSucceeded\": true\n    }\n  }\n}\n```\n"
}