tastelint: a linter that fails the build when your coding agent ships the purple-gradient landing page again
Description and use
tastelint is a linter that scores design habits, assigns a taste score, and fails the CI if the page looks generic.
Problem
Coding agents frequently generate generic landing pages with a purple‑to‑blue gradient, generic copy, and repetitive design patterns that pass type checks and tests but look unoriginal.
Outcome
The linter forces a design decision by failing the CI when the taste score is below the threshold, ensuring that agent‑generated pages are not generic.
Workflow
- Ask agent to generate landing page
- Run
tastelint scan src --fail-under 90 - Review findings and hints
- Edit code according to hints
- Re‑run scan to confirm 0 findings
Evidence
Ask any coding agent for a landing page and you can draw the result before it finishes: a purple-to-blue gradient, Inter, a centered hero, "✨ Supercharge your workflow", a Get Started button, and three identical glass cards with an emoji on top and lorem ipsum underneath.
tastelint scan walks HTML, CSS, SCSS, JSX/TSX, Vue, Svelte, MDX and Tailwind class strings with a deterministic rule engine. No browser, no network, no model.
The score: high findings cost 12, medium 5, low 2, each rule is capped at 12, and the result is 100 minus the sum (floor 0). --fail-under 90 means one high finding fails the gate.
Run the scanner with a gate: $ tastelint scan src --fail-under 90 tastelint 0.1.0 src · 1 file · 24 findings (3 high, 20 medium, 1 low) · taste score 9/100 src/Landing.tsx:3 high gradient-wash Cool purple-to-blue gradient.
That is the part an agent can act on. The fix isn't "make it prettier", it's "this button has no object", "this card is inside a card", "this sentence works for a bank and a bakery".
After following the hints: one chosen serif, one pigment, copy that only fits this product, left-aligned, no card grid: ... tastelint scan src --fail-under 90 tastelint 0.1.0 src · 1 file · 0 findings (0 high, 0 medium, 0 low) · taste score 100/100 gate: 90 · pass exit 0
- Record date: 2026-10-25T03:11:27.473Z