<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Automated Linting on Producthunt daily</title>
        <link>https://producthunt.programnotes.cn/en/tags/automated-linting/</link>
        <description>Recent content in Automated Linting on Producthunt daily</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>en</language>
        <lastBuildDate>Sun, 25 Oct 2026 20:38:51 +0800</lastBuildDate><atom:link href="https://producthunt.programnotes.cn/en/tags/automated-linting/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>hallmark</title>
        <link>https://producthunt.programnotes.cn/en/p/hallmark/</link>
        <pubDate>Sun, 25 Oct 2026 20:38:51 +0800</pubDate>
        
        <guid>https://producthunt.programnotes.cn/en/p/hallmark/</guid>
        <description>&lt;img src="https://images.unsplash.com/photo-1670782559267-d4c1ef138060?ixid=M3w0NjAwMjJ8MHwxfHJhbmRvbXx8fHx8fHx8fDE3OTI5MzE4ODd8&amp;ixlib=rb-4.1.0" alt="Featured image of post hallmark" /&gt;&lt;h1 id=&#34;nutlopehallmark&#34;&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/Nutlope/hallmark&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Nutlope/hallmark&lt;/a&gt;
&lt;/h1&gt;&lt;h1 id=&#34;hallmark&#34;&gt;Hallmark
&lt;/h1&gt;&lt;p&gt;&lt;strong&gt;A design skill for Claude Code, Codex, Cursor and OpenCode that refuses to look AI-generated.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.usehallmark.com&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;usehallmark.com&lt;/a&gt;  ·  forty-eight themes  ·  custom on request  ·  redesign and audit by name&lt;/p&gt;
&lt;p&gt;Made by Together AI.&lt;/p&gt;
&lt;p align=&#34;center&#34;&gt;
  &lt;img src=&#34;site/OG-hallmark.png&#34; alt=&#34;Hallmark, the design skill that ends AI slop&#34; /&gt;
&lt;/p&gt;
&lt;p&gt;Hallmark holds a hard floor and then gets out of the way. It deals three themes from a catalog of forty-eight materials, builds the page around what the visitor came to do, and lints the result in a real browser against the tells that read as machine-made: the eyebrow above every heading, tracked-capital labels, one coloured word in a headline, a page of empty frames or nothing but photographs, a hero that misses its screen, an email sign-up at the end of every page, a form that says thanks without sending anything. A fresh-context reviewer gets the last word.&lt;/p&gt;
&lt;p&gt;The gates come in tiers. The &lt;strong&gt;Floor&lt;/strong&gt; never ships (contrast, focus, reduced motion, invented facts, a broken phone layout). &lt;strong&gt;Reflex&lt;/strong&gt; gates are the defaults a model falls into; a build with a reason may overrule one on the record. &lt;strong&gt;Finish&lt;/strong&gt; checks are craft detail that never blocks a ship.&lt;/p&gt;
&lt;h2 id=&#34;new-in-v2&#34;&gt;New in v2
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Forty-eight themes.&lt;/strong&gt; Each is a material (paper, type, colour, surfaces, its own components and texture) with a picture of a finished page, and the build lays out its own page in it.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Built from the job.&lt;/strong&gt; A booking page books, a shop sells, a newsletter subscribes: the action sits where the category puts it, and the page ends on it.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Custom.&lt;/strong&gt; Ask for a custom page and Hallmark designs from your prompt alone, under the same rules and checks.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Your real product.&lt;/strong&gt; Point it at a URL, a dev server or an app and it captures the screenshots itself.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Real photographs.&lt;/strong&gt; 755 openly licensed photos, picked per subject and credited on the page.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Redesign and audit.&lt;/strong&gt; &lt;code&gt;/hallmark redesign &amp;lt;path&amp;gt;&lt;/code&gt; rebuilds a page and keeps its content and wiring; &lt;code&gt;/hallmark audit &amp;lt;path&amp;gt;&lt;/code&gt; only reports.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;themes&#34;&gt;Themes
&lt;/h2&gt;&lt;table&gt;
  &lt;tr&gt;
    &lt;td width=&#34;20%&#34;&gt;&lt;a href=&#34;https://www.usehallmark.com/themes/dusk/&#34;&gt;&lt;img src=&#34;docs/screenshots/dusk.jpg&#34; alt=&#34;Dusk theme: Closewise, bank reconciliation&#34; /&gt;&lt;/a&gt;&lt;/td&gt;
    &lt;td width=&#34;20%&#34;&gt;&lt;a href=&#34;https://www.usehallmark.com/themes/cobalt/&#34;&gt;&lt;img src=&#34;docs/screenshots/cobalt.jpg&#34; alt=&#34;Cobalt theme: Relay, a webhook API&#34; /&gt;&lt;/a&gt;&lt;/td&gt;
    &lt;td width=&#34;20%&#34;&gt;&lt;a href=&#34;https://www.usehallmark.com/themes/studio/&#34;&gt;&lt;img src=&#34;docs/screenshots/studio.jpg&#34; alt=&#34;Studio theme: Field Office, an identity studio&#34; /&gt;&lt;/a&gt;&lt;/td&gt;
    &lt;td width=&#34;20%&#34;&gt;&lt;a href=&#34;https://www.usehallmark.com/themes/atelier/&#34;&gt;&lt;img src=&#34;docs/screenshots/atelier.jpg&#34; alt=&#34;Atelier theme: Maison Orla, a fragrance atelier&#34; /&gt;&lt;/a&gt;&lt;/td&gt;
    &lt;td width=&#34;20%&#34;&gt;&lt;a href=&#34;https://www.usehallmark.com/themes/ribbon/&#34;&gt;&lt;img src=&#34;docs/screenshots/ribbon.jpg&#34; alt=&#34;Ribbon theme: Lull, a sleep sounds app&#34; /&gt;&lt;/a&gt;&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;&lt;b&gt;Dusk&lt;/b&gt;&lt;br/&gt;&lt;sub&gt;Closewise, bank reconciliation&lt;/sub&gt;&lt;/td&gt;
    &lt;td&gt;&lt;b&gt;Cobalt&lt;/b&gt;&lt;br/&gt;&lt;sub&gt;Relay, a webhook API&lt;/sub&gt;&lt;/td&gt;
    &lt;td&gt;&lt;b&gt;Studio&lt;/b&gt;&lt;br/&gt;&lt;sub&gt;Field Office, an identity studio&lt;/sub&gt;&lt;/td&gt;
    &lt;td&gt;&lt;b&gt;Atelier&lt;/b&gt;&lt;br/&gt;&lt;sub&gt;Maison Orla, a fragrance atelier&lt;/sub&gt;&lt;/td&gt;
    &lt;td&gt;&lt;b&gt;Ribbon&lt;/b&gt;&lt;br/&gt;&lt;sub&gt;Lull, a sleep sounds app&lt;/sub&gt;&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td width=&#34;20%&#34;&gt;&lt;a href=&#34;https://www.usehallmark.com/themes/furrow/&#34;&gt;&lt;img src=&#34;docs/screenshots/furrow.jpg&#34; alt=&#34;Furrow theme: Fieldbook, farm records&#34; /&gt;&lt;/a&gt;&lt;/td&gt;
    &lt;td width=&#34;20%&#34;&gt;&lt;a href=&#34;https://www.usehallmark.com/themes/dose/&#34;&gt;&lt;img src=&#34;docs/screenshots/dose.jpg&#34; alt=&#34;Dose theme: Tandem, a family medication app&#34; /&gt;&lt;/a&gt;&lt;/td&gt;
    &lt;td width=&#34;20%&#34;&gt;&lt;a href=&#34;https://www.usehallmark.com/themes/hum/&#34;&gt;&lt;img src=&#34;docs/screenshots/hum.jpg&#34; alt=&#34;Hum theme: Sprout, a reading game for kids&#34; /&gt;&lt;/a&gt;&lt;/td&gt;
    &lt;td width=&#34;20%&#34;&gt;&lt;a href=&#34;https://www.usehallmark.com/themes/terminal/&#34;&gt;&lt;img src=&#34;docs/screenshots/terminal.jpg&#34; alt=&#34;Terminal theme: burrow, a dotfiles CLI&#34; /&gt;&lt;/a&gt;&lt;/td&gt;
    &lt;td width=&#34;20%&#34;&gt;&lt;a href=&#34;https://www.usehallmark.com/themes/hedgerow/&#34;&gt;&lt;img src=&#34;docs/screenshots/hedgerow.jpg&#34; alt=&#34;Hedgerow theme: Five Mile Gin, a distillery&#34; /&gt;&lt;/a&gt;&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;&lt;b&gt;Furrow&lt;/b&gt;&lt;br/&gt;&lt;sub&gt;Fieldbook, farm records&lt;/sub&gt;&lt;/td&gt;
    &lt;td&gt;&lt;b&gt;Dose&lt;/b&gt;&lt;br/&gt;&lt;sub&gt;Tandem, a family medication app&lt;/sub&gt;&lt;/td&gt;
    &lt;td&gt;&lt;b&gt;Hum&lt;/b&gt;&lt;br/&gt;&lt;sub&gt;Sprout, a reading game for kids&lt;/sub&gt;&lt;/td&gt;
    &lt;td&gt;&lt;b&gt;Terminal&lt;/b&gt;&lt;br/&gt;&lt;sub&gt;burrow, a dotfiles CLI&lt;/sub&gt;&lt;/td&gt;
    &lt;td&gt;&lt;b&gt;Hedgerow&lt;/b&gt;&lt;br/&gt;&lt;sub&gt;Five Mile Gin, a distillery&lt;/sub&gt;&lt;/td&gt;
  &lt;/tr&gt;
&lt;/table&gt;
&lt;p&gt;Ten of the forty-eight. A theme is a material, not a plan: it never says what a page contains or in what order, so two prompts in one theme make two different pages. Each is one file of at most 8 KB in &lt;a class=&#34;link&#34; href=&#34;skills/hallmark/references/themes/&#34; &gt;&lt;code&gt;references/themes/&lt;/code&gt;&lt;/a&gt; with a picture beside it; a build reads exactly one. See them all at &lt;a class=&#34;link&#34; href=&#34;https://www.usehallmark.com&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;usehallmark.com&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;custom&#34;&gt;Custom
&lt;/h2&gt;&lt;p&gt;Say &lt;strong&gt;custom&lt;/strong&gt; and Hallmark drops the themes: no plan, no components, no palette recipe, only the floor, the gates and a short direction in &lt;a class=&#34;link&#34; href=&#34;skills/hallmark/references/direction.md&#34; &gt;&lt;code&gt;direction.md&lt;/code&gt;&lt;/a&gt; to find one idea that only this client has and let it run the page.&lt;/p&gt;
&lt;h2 id=&#34;how-a-build-runs&#34;&gt;How a build runs
&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;Pre-flight reads the project (fonts, palette, framework, a locked &lt;code&gt;design.md&lt;/code&gt;) and asks once for the material: photos, screenshots, real numbers. Nothing is invented.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;scripts/theme.mjs deal&lt;/code&gt; offers three themes that fit the prompt and clear the log; &lt;code&gt;draw&lt;/code&gt; deals the page&amp;rsquo;s anatomy from its job.&lt;/li&gt;
&lt;li&gt;The hero is built alone, rendered and reviewed cold before the rest of the page exists.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;scripts/sloplint.mjs --render&lt;/code&gt; checks the page at eight widths, then a subagent reviews it with fresh eyes.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Each page is self-contained HTML and CSS, stamped in its first CSS comment with the decisions it took.&lt;/p&gt;
&lt;h2 id=&#34;redesign&#34;&gt;Redesign
&lt;/h2&gt;&lt;p&gt;Hallmark never starts on a design that already exists unless you name it:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/hallmark redesign ./src/app
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/hallmark audit ./index.html
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;A full redesign keeps the content and the wiring and changes the system and the layout; say &lt;em&gt;keep the layout&lt;/em&gt; for a restyle or &lt;em&gt;polish&lt;/em&gt; for only the tells. &lt;code&gt;sloplint --before&lt;/code&gt; records every link, field, handler and heading first, &lt;code&gt;sloplint --kept&lt;/code&gt; fails the redesign if one went missing, and the handoff is a side-by-side before and after.&lt;/p&gt;
&lt;h2 id=&#34;install&#34;&gt;Install
&lt;/h2&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;npx skills add nutlope/hallmark -g
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;code&gt;-g&lt;/code&gt; installs for every project; leave it off to install into the current one. Needs Node 18 or later. The browser checks (&lt;code&gt;sloplint --render&lt;/code&gt;, screenshots) also need &lt;code&gt;npm i -g puppeteer-core&lt;/code&gt; and Chrome; without them the static checks still run.&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Harness&lt;/th&gt;
					&lt;th&gt;Lands in&lt;/th&gt;
					&lt;th&gt;Invoke&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;Claude Code&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;~/.claude/skills/hallmark&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;/hallmark &amp;lt;prompt&amp;gt;&lt;/code&gt; or describe a new build&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Codex CLI&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;~/.agents/skills/hallmark&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;$hallmark &amp;lt;prompt&amp;gt;&lt;/code&gt; or describe a new build&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Cursor&lt;/td&gt;
					&lt;td&gt;finds the copies above&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;/hallmark &amp;lt;prompt&amp;gt;&lt;/code&gt; or describe a new build&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;OpenCode&lt;/td&gt;
					&lt;td&gt;finds the copies above&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;/hallmark &amp;lt;prompt&amp;gt;&lt;/code&gt; or describe a new build&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;One harness only:&lt;/strong&gt; &lt;code&gt;npx skills add nutlope/hallmark -g --agent claude-code&lt;/code&gt; (or &lt;code&gt;codex&lt;/code&gt;, &lt;code&gt;opencode&lt;/code&gt;, &lt;code&gt;cursor&lt;/code&gt;, &lt;code&gt;github-copilot&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;As a Claude Code plugin:&lt;/strong&gt; &lt;code&gt;/plugin marketplace add nutlope/hallmark&lt;/code&gt;, then &lt;code&gt;/plugin install hallmark@hallmark&lt;/code&gt; (invoked as &lt;code&gt;/hallmark:hallmark&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;From a clone:&lt;/strong&gt; &lt;code&gt;node skills/hallmark/scripts/install.mjs&lt;/code&gt; validates every theme and reference before it copies; &lt;code&gt;install-hook.mjs&lt;/code&gt; adds an edit-time Floor check to Claude Code.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Lint any page:&lt;/strong&gt; &lt;code&gt;node skills/hallmark/scripts/sloplint.mjs &amp;lt;file-or-dir&amp;gt; --render&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;If it does not fire on its own,&lt;/strong&gt; name it: &lt;em&gt;use hallmark to build &amp;hellip;&lt;/em&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;licence&#34;&gt;Licence
&lt;/h2&gt;&lt;p&gt;MIT. Use it, fork it, ship it.&lt;/p&gt;
&lt;p&gt;The photo library (&lt;code&gt;skills/hallmark/scripts/photos.json&lt;/code&gt;) lists photographs hosted on Wikimedia Commons and holds no image files. Each keeps its own licence (CC0, public domain, CC BY or CC BY-SA), and Hallmark credits every one it uses on the page. It does not use stock sites (Unsplash, Pexels, Pixabay), whose terms bar AI tools from picking their images.&lt;/p&gt;
</description>
        </item>
        
    </channel>
</rss>
