emin@budak ~/blog % cat easybrandkit-brand-kit-for-coding-agents.md
easybrandkit: A Brand Kit for Coding Agents
easybrandkit is a small tool for a familiar failure mode: ask an agent for a landing page, deck, or launch film and it starts inventing the brand. The blue is almost right. The logo becomes text in a default font. The result looks plausible until it is put beside the real product.
I shipped easybrandkit to replace those guesses with a repeatable capture. It is an MIT-licensed command line tool and Agent Skill that reads a website as Chrome draws it, then writes a folder a person or coding agent can use.
What easybrandkit captures
The output is deliberately concrete. It includes logos cut out on the background they sit on, a first-screen capture without cookie bars or chat bubbles, colors used by buttons, headings, links, header, footer, large surfaces, and the logo itself. It also records font families, the page title and description, headings, button labels, and a single card image that makes the kit easy to scan.
When a site points to an App Store or Google Play listing, easybrandkit also saves the app icon and store screenshots. The same facts appear in brand.json for scripts and BRAND.md for people and agents. The public easybrandkit repository shows the full output layout.

How easybrandkit avoids the usual false positives
easybrandkit opens the home page in headless Chrome on a 1600 by 900 desktop screen. It scrolls down and back before taking one DOM snapshot with layout and computed styles. That matters because lazy sections and footer logos often do not exist in the initial render.
A candidate is not a logo merely because it is an image. It must sit in the header or footer, live inside a link home, or carry a brand-like name. Partner strips, customer marks, and payment badges are excluded. For every retained logo, the tool brings it into view, waits for its fade-in to finish, hides whatever paints over it, and captures it with margin from its own background.
The testing failures that changed the tool
The first useful test was an e-commerce site that returned a bot-check page. The early version happily wrote a kit called Human Verification in the check provider’s orange. That is worse than a failed run because it looks usable. Now a detected bot check stops the run, explains why, and leaves no folder behind.
Airbnb exposed a different flaw. Its pink, #ff385c, appeared in the logo and a small round search button, but none of the page rules selected it. Reading the rendered logo cut fixed that. Logo color now joins the collected colors when it is absent from the larger page roles.
App Store links created a third failure. Reading the store page as a site made a kit named Today for iPhone in Apple’s colors. A store URL is now treated as a listing. easybrandkit takes the icon and screenshots from the listing, then reads the website named by the listing for the brand. For Things 3, that means the Things page on Cultured Code’s site.
That led to a less obvious bug. The Things page kept pictures in one product-named folder, so press marks from Apple and Wirecutter looked like Things logos. The brand name now has to appear in an image’s own name or label, not merely in a parent folder. One more problem came from a cookie bar pinned over a footer logo when the page had scrolled. The fix was simple: bring every logo into view before cutting it out.

What I tested
I tried stripe.com, linear.app, vercel.com, notion.com, duolingo.com, figma.com, airbnb.com, and shopify.com. On a Mac, the run took about 31 seconds per site. The project has 15 automated tests, including two in real Chrome, and they run on every push.
How to try easybrandkit
Use the command:
npx easybrandkit linear.app
For an agent installation, use:
npx skills add EminBudak/easybrandkit
easybrandkit has no npm dependencies. It needs Node 22 or newer plus Chrome, Chromium, Edge, or Brave. It drives the browser already on the machine through the Chrome DevTools Protocol.
Limits are part of the contract
A site behind a bot check or login wall produces no kit. Instagram, Facebook, and TikTok are not read. A logo rendered inside canvas, WebGL, or a 3D scene is not found. Colors are limited to what the home page shows, so a primary color used only on another route cannot be inferred. That is a narrower result than a brand system, but it is a result grounded in the page rather than a confident approximation.



