# 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 `gstack-design-craft`'s content-realism and ship-floor check under the same contract. Phase 1 (this document) is the tool alone; /design-html and /design-review call it in Phase 2. ## 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 `