Docs

How Taste Skill works.

Install design-taste-frontend, then see what it does on every build: the six steps, the checks, the library it deals from and the pictures it finds. This page describes version 2.1.5.

Install

The repo holds one skill, design-taste-frontend. Install it with the skills CLI, as a plugin for Claude Code or Codex, or link it from a clone. Every method installs the same folder.

Skills CLI

For any agent that reads SKILL.md files: Claude Code, Codex, Cursor, OpenCode, Gemini CLI and others.

The long form from the README installs the same skill:

Claude Code plugin

Run both inside Claude Code. The skill is namespaced under taste-skill:, so it does not collide with your other skills.

Codex plugin

Start a new Codex session afterwards so the skill is loaded.

From a clone

install.sh links the skill instead of copying it, so a git pull updates it in place. ./install.sh --uninstall removes the links again.

Terminal
git clone https://github.com/Leonxlnx/taste-skill
cd taste-skill
./install.sh                # links the skill into Claude Code
./install.sh --codex        # into Codex instead
./install.sh --all-agents   # into both

Requirements

  • Node 22 or newer and an installed Chrome, Edge or Chromium. The inspector drives the browser over the DevTools protocol and installs nothing. Set CHROME_PATH if the browser is somewhere unusual.
  • draw.mjs, lint.mjs and assets.mjs run on Node 18 too. Only the inspector and scenes.mjs need 22.
  • No API keys. Finding pictures needs network access.
  • Working files go to .taste-skill/ in your project. The draw history lives in ~/.taste-skill/history.json, which TASTE_SKILL_HISTORY moves.

Updating

Run the install command again; the install name has not changed. For the Claude Code plugin, /plugin update upgrades it. A linked clone updates with git pull. Release notes are in the changelog.

How a build runs

The skill is built from a study of 247 curated sites from One Page Love and Awwwards Sites of the Day. It is a folder, not a single file: SKILL.md with the run and the house rules, eleven reference files, a library and zero-dependency scripts. A build runs in six steps.

  1. Inventory

    The agent reads the brief and the project and lists eight to twelve things only this client has: the name and what it means, the street, the numbers, the one constraint, the materials, the hours. It then writes the page as claims with proof, one line per section, so the sections come from the argument and not from a template.

  2. Draw

    draw.mjs deals three of 20 researched directions. The agent picks the one that can carry something from the inventory, and the script deals the rest of the sheet: hero and section compositions, a type system of free fonts, a palette, photographs, a motion and studied reference sites.

  3. The idea

    One sentence: on this page, something that belongs to the subject becomes the device the direction calls for. It has to fail for the nearest competitor. The agent also plans one live thing the visitor can do, and writes the full copy before any markup.

  4. Build

    The page is built from the sheet with its full content. With no photographs of its own, assets.mjs finds real pictures of the subject's world in open collections, downloads them and records their credits. Only what no honest picture exists of is drawn in code.

  5. Gate

    lint.mjs scans the source for banned patterns and stock phrases. inspect.mjs opens the page in a real browser at 1440, 768 and 390 pixels, measures it and saves screenshots. Every FAIL is fixed.

  6. Look and fix

    The agent reads its own screenshots, scores them with an Awwwards-weighted rubric (design 40%, usability 30%, creativity 20%, content 10%), fixes the top three problems and inspects again. Three rounds at most.

SKILL.md writes the same run out in ten steps. After the look rounds it adds a motion layer (the inspector fails a page where fewer than eight elements move), and it ends with a report. The agent does not report until the inspector shows no FAIL at 1440, 768 and 390 on the final page.

The report tells you:

  • the direction it dealt, with its seed, and every redraw with the reason;
  • the idea sentence and the live thing;
  • the scores from its last critique round and what still falls short;
  • every found picture and clip with its title, creator, licence and source, and where its credit sits;
  • which photographs and drawings stand in for your own, and which sample content to replace.

Pages and app screens

The skill first decides which kind of work it is doing. A page is read and scrolled: a landing page, a product site, a portfolio, an event, a restaurant. An app screen is worked in: a dashboard, an admin or analytics view, settings, billing, an inbox or queue, a wallet, an editor.

App screens arrived in 2.1 and take their own route, written in app-screens.md:

  • Inventory the data and the jobs: the objects and their fields, realistic sizes, who opens the screen and what they do next. The data goes in a file, with totals computed from the rows.
  • Name the screen's one question and its one finding. The largest block answers the question.
  • draw.mjs --app deals one of seven styles distilled from 23 real product screens: achromatic ledger, framed sheet, accent ladder, editorial greeting, pastel consumer, true-black flat and data terminal.
  • Build the shell, the data and every state (empty, zero, loading, error) with assets/app.css and assets/charts.js.
  • Check with inspect.mjs --app, which judges the screen by app rules instead of page rules.

Product pages that show their app

A software product's landing page is a page, but every interface fragment it shows (the hero's live screen, a feature crop, a chart) is built as a real piece of the app, with real data and the page's colours and type kept. The agent deals the app's style once, in its own folder:

Terminal
node <skill>/scripts/draw.mjs --app --kind <kind> --brief "<the product>" \
  --keep palette,type --out .taste-skill/app

Redesigning a page

Redesigns, restyles and reviews of an existing page or app screen are part of the main skill since 2.1.1. The route:

  1. Record the before. Inspect the running page into .taste-skill/before (with --app for an app screen), lint its source, and read the code for what must survive: routes, forms, data, behaviour and the brand's own assets.
  2. A review stops here, with a critique of the before screenshots, the inspector's measurements and the three changes that would move the page most.
  3. Keep the stack, the content and what works. No framework or styling migration. A restyle keeps the layout and takes type, colour and components from a dealt direction. A redesign deals a full direction and rebuilds the sections inside the existing components.
  4. Work in order of effect: type, colour, the frame, states, then stock components such as icon cards, pill badges and card grids.
  5. Prove it. Inspect again into .taste-skill/after, compare every width, click through every link, form and menu that worked before, and report the measurements side by side.
Terminal
node <skill>/scripts/inspect.mjs http://localhost:3000 --out .taste-skill/before
node <skill>/scripts/lint.mjs src

What the inspector checks

inspect.mjs opens the page at 1440, 768 and 390 pixels, measures what a visitor would see and saves screenshots to .taste-skill/inspect/. Each finding is a FAIL or a WARN. A FAIL is a banned tell or a broken page, and the page is not done while one remains. A WARN is usually wrong and stays only with a reason the agent can say to a designer.

The title and the headlines

Every headline holds to two lines at every width, and the first screen carries a clear title in one h1, readable 1.2 seconds after load.

  • headline-lines
  • hero-words
  • no-title
  • name-only-title
  • small-title
  • many-h1
  • late-title

The frame

Equal outer margins, no section pushed to one side, no blank stretch taller than about half a screen, a heading on every section, nothing against the screen edge.

  • off-centre
  • lopsided
  • empty-middle
  • blank-gap
  • empty-screens
  • untitled-section
  • edge-text
  • ragged-edges
  • overflow

House style

No eyebrow labels, monospace outside code, 01/02/03 numbering, thin rules, gradients, resting shadows, glass, icon cards, emoji or the assistant palettes.

  • eyebrow
  • mono
  • numbering
  • micro-label
  • hairline
  • outlined-box
  • gradient
  • shadow
  • glass
  • icon-cards
  • emoji
  • palette-claude
  • palette-purple

Type and reading

Readable sizes, enough contrast, running text in full ink, at most two typefaces, and the faces the sheet dealt actually loaded.

  • small-text
  • body-size
  • contrast
  • grey-body
  • measure
  • font-count
  • font-not-dealt

Pictures and motion

At least four real pictures, a poster on every clip, at least eight elements that move, and no text hidden under reduced motion or covered by something else.

  • few-pictures
  • no-real-pictures
  • no-footage
  • no-poster
  • broken-image
  • still-page
  • reduced-hidden
  • covered-text
  • clipped-text

App screens, with --app

Repeated panels, quiet borders and table lines are fine on an app screen. Decoration, invented data and a desktop layout squeezed onto a phone are not.

  • sidebar-phone
  • placeholder-data
  • rainbow-chart
  • heavy-shadow
  • icon-tiles
  • tiny-text
  • kpi-size
  • numeric-align
  • colour-sprawl
  • unused-canvas

Two tools sit beside it. lint.mjs scans the source before a render, for what a browser cannot see, such as copy habits and motion values. scenes.mjs photographs every scroll scene from 0 to 100 percent of its hold, on desktop, on a phone and with reduced motion.

Run the last check on the production build: bundlers change the CSS a visitor receives, and the inspector warns (dev-server) when it is looking at a Vite, webpack or Next dev server. The full list of checks is in rules.mjs.

The library

The draw deals from library/, distilled from the 247-site study and an October 2026 study of the latest 100 Awwwards Sites of the Day. The agent does not read it whole; the script deals from it and remembers recent draws, so consecutive projects do not look alike.

  • 20directions
  • 58hero compositions
  • 185section compositions
  • 44type systems of free fonts
  • 56palettes
  • 420atmosphere photographs
  • 18signature motions
  • 202studied reference sites

A direction is a way of composing, such as “The name as a monument”, “Colour chapters”, “The page is the object” or “The quiet instrument”. Under every dealt blueprint the sheet lists where it disagrees with the house rules. For app screens, library/app.json holds seven styles, five shells and 25 screen patterns for 13 kinds of product.

The agent adopts the sheet. It redraws one slot (--redraw hero, type, palette, photos, scenes, section:<role> or direction) only for a reason it can state: the slot contradicts a brand constraint, needs an asset that does not exist, or cannot hold the real content. Every redraw goes in the report.

The library photographs are atmosphere placeholders served by Lorem Picsum from Unsplash, under the Unsplash licence. They are meant to be replaced by the project's own pictures.

Pictures and credits

Agents with no photographs used to draw everything in SVG. The skill takes imagery in this order:

  1. the project's own;
  2. generated, when the agent has an image tool;
  3. real pictures of the subject's world from open collections;
  4. drawn in code, for what no honest picture exists of;
  5. the dealt atmosphere photographs, where a generic picture honestly fits;
  6. type and colour alone.

assets.mjs searches Openverse, Wikimedia Commons, the Art Institute of Chicago and The Metropolitan Museum of Art without API keys, and with --video it finds footage on Wikimedia Commons, the Internet Archive and NASA. It searches the inventory, not the category: the street in old postcards, an old map, the material up close, the trade in engravings. The floor is four real pictures per page, usually six to twelve.

Terminal
node <skill>/scripts/assets.mjs "ghent postcard"
node <skill>/scripts/assets.mjs --get commons:36649959,met:707892
node <skill>/scripts/assets.mjs --credits

Licences

  • By default it offers only licences that allow commercial use: CC0, public domain, CC BY and CC BY-SA. Non-commercial and no-derivatives licences are left out.
  • --get downloads a picture into the project's assets/ folder and records its title, creator, licence and source in assets/credits.json. Nothing is hotlinked.
  • --credits prints the credit line for the footer and the list for the report. CC BY and CC BY-SA need the title, the creator, a link to the source and a link to the licence.
  • A found picture shows the world around the client. It is never presented as the client's own product, room, dish, person or team.
  • Fonts load from Google Fonts and Fontshare. Check each face's licence for your use.

The pictures in the example pages on this site are credited in CREDITS.md.

Moved skills

Since 2.1.3 this repo holds one skill. The others moved to repos of their own and kept their install names.

  • Leonxlnx/taste-skill-classics

    The classic styles and the earlier versions. They run only when called by name.

    • high-end-visual-design
    • minimalist-ui
    • industrial-brutalist-ui
    • gpt-taste
    • stitch-design-taste
    • design-taste-frontend-v1
    • design-taste-frontend-v2-experimental
  • Leonxlnx/imagegen-skills

    Image-generation skills: website comps, mobile screens, brand kits and image-to-code.

    • imagegen-frontend-web
    • imagegen-frontend-mobile
    • brandkit
    • image-to-code
  • Part of design-taste-frontend

    The main skill audits an existing page in a real browser before it changes anything.

    • redesign-existing-projects
  • Removed

    For the same problem, see Leonxlnx/unlazy.

    • full-output-enforcement

Install a moved skill from its new repo under the same name, for example:

The classic skills also have a Claude Code plugin of their own: /plugin marketplace add Leonxlnx/taste-skill-classics.

Questions

Does it work with React, Vue, Svelte or plain HTML?

Yes. The rules are about design, not a framework, and a redesign keeps the stack the project already has.

How long does a build take?

Roughly 30 to 45 minutes and a few hundred thousand tokens with the full look-and-fix loop. Most of it goes into finding or drawing pictures when a project has no photographs.

Can it keep my brand?

Yes. With --keep palette,type the draw deals only the composition and the agent maps your colours and typefaces onto its roles. A brand asset the house rules ban stays, and the report says so.

What if Chrome or Node 22 is missing?

The agent runs lint.mjs, which needs only Node 18, takes screenshots with whatever browser tool it has, critiques those, and says in the report that the inspector could not run.

What if there is no network?

assets.mjs cannot search the collections, so the agent draws the pictures and says in the report that it could not search.

Why are there ad-chrome folders in my temp folder?

They are the inspector's throwaway browser profiles. Since 2.1.4 leftovers from killed runs are removed safely; folders from earlier versions can be deleted by hand. TASTE_SKILL_TMP moves them.

Is v1 still available?

Yes, as design-taste-frontend-v1 in taste-skill-classics, next to the other earlier versions. It runs only when you call it by name.

How was it tested?

Five rounds of blind comparisons on six briefs against a no-skill baseline, and on three of them against another design skill, judged from anonymous screenshots. The record and its limits are in research.md.