gholtzap/lintapple

★ 452⑂ 7

It should be impossible for AI to make a bad UI.

About gholtzap/lintapple

gholtzap/lintapple is an open-source project on GitHub, mainly written in JavaScript. It should be impossible for AI to make a bad UI. It currently holds 452 stars and 7 forks with 0 open issues, and was last pushed on an unknown date (repository created unknown).

Project Overview

AI Homed tracks it on the Today's Trending board.

GitHub Repository Details

Repository gholtzap/lintapple · default branch - · size 0 KB · watchers 0 · source: GitHub REST API and repository README

README

https://github.com/gholtzap/lintapple/blob/HEAD/lintapple logo

lintapple

It should be impossible for AI to make a bad UI.

npm · Demo

Install

Requires Node.js 22 or later. Run in your app’s project directory:

npm install -D lintapple && npx lintapple init

This creates ui-policy.json and a lint:ui script. Existing settings are kept. Set the fonts and text sizes in ui-policy.json to match your app. Set the app URL in the lint:ui script; the default is http://localhost:3000.

Use

Start your app, then run:

npm run lint:ui

Each finding includes the rule, element, measured value, and suggested fix. Exit codes: 0 passed, 1 findings, 2 check did not finish.

To check another URL or save a JSON report:

npx lintapple http://localhost:3000 --json

For a page that loads asynchronously, add --ready '[data-app-ready]' with a selector that is visible when the page is ready.

Use in Playwright

Add this to an existing test after the page is ready:

import { expectUI } from 'lintapple/playwright';

await expectUI(page, testInfo);

Findings fail the test and attach a JSON report. The helper reads your ui-policy.json. See the example tests.

Mark layout elements

Font, contrast, control size, and screen bounds checks work without extra markup. Add these attributes for checks that need layout information:

| Attribute | Use on | | --- | --- | | data-ui-stack | A group whose child spacing must be checked. | | data-ui-actions | A button group whose gaps must be checked. | | data-ui-container | A surface whose button insets must be checked. | | data-ui-number | A changing number that needs equal digit widths. | | data-ui-content | A container whose text must stay inside its edges. | | data-ui-align="start" | A group whose marked elements must align. Use center or end for other alignments. | | data-ui-align-item | Each element to compare in an alignment group. | | data-ui-radius | An outer surface with equal corner radii and insets. | | data-ui-radius-inner | Its direct inner surface. Its radius must equal the outer radius minus the inset. |

You can also use controlContainers in the policy to select existing button containers. See example styles.

License

MIT. See LICENSE.

GitHub Stars & Activity

452Stars
7Forks
0Open issues
JavaScriptLanguage

GitHub Popularity

GitHub stars452
Forks7
Open issues0
Primary languageJavaScript
License-
Stars gained today0
Created-
Last pushed-

Trending History

Weekly boardrank #83 · ▲ 0 stars

Related AI Projects

1

affaan-m / ECC

JavaScript★ 277,767⑂ 41,422▲ 774 stars
→
2

DietrichGebert / ponytail

JavaScript★ 161,786⑂ 0
→
3

Snailclimb / JavaGuide

JavaScript★ 158,967⑂ 0
→
4

poloclub / transformer-explainer

JavaScript★ 8,927⑂ 1,016▲ 23 stars
→
5

Javis603 / token-monitor

JavaScript★ 2,960⑂ 279▲ 156 stars
→
6

juliobsz / skills

JavaScript★ 156⑂ 2
→
7

openclaw / openclaw

TypeScript★ 391,781⑂ 82,377▲ 182 stars
→
8

obra / superpowers

Shell★ 298,130⑂ 26,642▲ 643 stars
→

More AI Rankings