# design-lint: the free, deterministic design check `bin/gstack-design-lint` reads a page (or a directory of pages, stylesheets and components) and prints every machine-checkable design tell it finds, with a file and line, in under a second. With `--render` it also measures the page in gstack's own browser: the fold, the word budget per screen, contrast against the painted pixels, focus rings by tabbing, crowded headings, text painted under other elements, the share of the page that is photographs. Nothing is installed and nothing is paid for: the static tier is TypeScript over the files, and the render tier drives the same engine `gstack-render` picks (Aside when it is running, otherwise the browse daemon `./setup` built). The rules are ported from [Nutlope/hallmark](https://github.com/Nutlope/hallmark)'s `sloplint` (MIT; see NOTICE.md and licenses/MIT-hallmark.txt), rewritten in gstack's voice and mapped onto gstack's severity words. The copy tier is the content-realism and ship-floor check adapted from Elaya's design skills (MIT; see NOTICE.md), each tell at its line. /design-html runs the lint on every finalized page and /design-review on each audited page. ## Usage ``` gstack-design-lint [--render] [--url ] [--scope page|component] [--job ] [--json] [--rules] ``` - Reads `.html`, `.css`, `.jsx`, `.tsx`, `.vue`, `.svelte` and `.astro`. Tailwind class strings in components are read too, including `cn()`, `clsx()`, `cva()` and their kin. `node_modules`, dot folders and build output below the top level are skipped; a symlink is followed once and lint roots and the working directory are read through their real paths; a file over 2 MB is a bundle, not a page, and is skipped with a warning on stderr. A page or stylesheet the lint skipped (over the cap, unreadable, unparseable; a linked sheet or an inline `