All skills
nutlope avatar

/hallmark

@f5f4a2c official
by Hassan El Mgharinutlope/hallmark29k stars
1,510

Anti-AI-slop design skill for greenfield pages, audits, redesigns, and design extraction from URLs or screenshots. Use when the user asks to build a new app or landing page, wants to redesign something, invokes Hallmark by name, or uses audit/redesign/study.

Use this Skill: https://skilld.dev/gh/nutlope/hallmark/hallmark

This session only. Nothing lands on disk.

referencesimagery-kit.md

≈2.1k tokens on demand. Your agent reads this file only when SKILL.md points to it.

Imagery kit — curated abstract assets, hosted, ready

A small set of pre-generated abstract / decorative imagery that any Hallmark output can pull from when a brief allows non-photographic imagery. The kit lives at:

https://www.usehallmark.com/imagery/<category>/<file>

The skill doesn't ship the binaries — it ships the manifest. References are absolute URLs. If the asset is missing (404), the skill falls back to source canon #2 in assets.md § Placeholder strategy (hand-built SVG) without erroring.

Why this exists. The v0.9.0 watercolor sprinkle was generated per-emit and was inconsistent. The kit recovers that aesthetic but as discrete, swappable, deliberately-composed assets. Compose with them like a senior frontend engineer: layered transparent PNG behind text, biased off-centre, intentionally large, mix-blend-mode where it earns its place. Not "abstract gradient on top of headline" — that's the AI default.


Categories

Category What Format Example uses
watercolor Full-bleed soft-edge painterly fields. Warm + cool variants per palette family. WebP Section background accent; hero-half flood; behind-quote wash.
transparent Organic blob / brushstroke / stylized mark on transparent background. PNG Layered hero composition (large, off-centre, behind text). The masterclass move.
ornament Small hand-drawn stamps, plates, roman numerals, decorative flourishes. SVG Beside a quote; in the section-label gutter; closing a letter.
texture Subtle paper, weave, riso-dot, cross-hatch fields. Tile-able. WebP Body grain via mix-blend-mode: multiply; section-divider banding.
silhouette Abstract bottle / box / device / book / mug / card shapes. PNG Empty product slots before user uploads photos; comparison rows.
pattern Repeating motifs that read as fabric / paper / printed material. WebP Section-band texture; full-bleed fills behind decorative text.

Naming: <category>-<palette-family>-<variant>.<ext> — e.g. watercolor-warm-01.webp, transparent-brush-cool-03.png, ornament-stamp-01.svg, texture-grain-paper-02.webp. Palette families: warm · cool · neutral · chromatic.


Manifest (placeholder until generation pass ships)

When images land in site/public/imagery/<category>/, list them here as a key/value catalogue:

watercolor-warm-01.webp     1600×900   warm orange · cream paper      hero half-flood, atmospheric
watercolor-cool-01.webp     1600×900   cool blue · greyscale          quote-behind wash
transparent-brush-warm-01   1200×1200  burnt orange brushstroke       layered hero, off-centre
transparent-blob-cool-01    1200×1200  cobalt organic shape           layered hero, behind headline
ornament-stamp-01.svg       inline     ink-only stamp w/ numeral      label-gutter, letter close
texture-grain-paper-01      512×512    cream paper grain (tileable)   body grain, blend-multiply
silhouette-bottle-01.png    600×900    abstract bottle, transparent   empty product slot
silhouette-card-01.png      900×600    abstract product card          comparison row
pattern-cross-warm-01       400×400    cross-hatch warm (tileable)    section-band texture

The skill picks an asset by matching the active theme's palette family + the brief's tone, then references it by absolute URL. Picking logic lives in Step 4 of SKILL.md — eyeball the manifest, choose the closest match, fall back if the file 404s.


Usage patterns — how a senior engineer would compose these

Layered hero composition (the masterclass move)

A transparent abstract object behind hero text. The image is bigger than you think it should be — that's what makes it feel intentional, not decorative.

.hero { position: relative; isolation: isolate; }

.hero__art {
  position: absolute;
  top: 50%;
  right: -10%;
  transform: translateY(-50%);
  width: clamp(60%, 80vh, 1400px);
  height: auto;
  z-index: 0;
  pointer-events: none;
  /* Optional warmth: */
  mix-blend-mode: multiply;
  opacity: 0.85;
}

.hero__art--bias-left  { right: auto; left: -10%; }

.hero > * { position: relative; z-index: 1; }

Bias to one side (left or right, never centred). The text sits at z-index: 1, the art at z-index: 0. Test mobile: art may need to scale down or shift to avoid the headline at 320 px.

Section background wash

A watercolor file as a full-bleed section accent. One section per page, never global.

.section--wash { position: relative; isolation: isolate; }
.section--wash::before {
  content: "";
  position: absolute;
  inset: 0;
  background: url("https://www.usehallmark.com/imagery/watercolor/watercolor-warm-01.webp") center / cover no-repeat;
  opacity: 0.6;
  z-index: -1;
  pointer-events: none;
}

Decoration

Inline ornament beside a quote or in the section-label gutter. Small. No border, no shadow, no animation.

<p class="section-label">
  <span class="num">02</span>
  <img class="section-label__ornament" src="…/imagery/ornament/ornament-stamp-01.svg" alt="" aria-hidden="true" />
  <span>Examples</span>
</p>
.section-label__ornament { width: 1.5em; height: auto; vertical-align: middle; }

Texture overlay

Grain over a solid colour. Always opacity-capped at 0.15.

.texture-grain {
  background-image: url("…/imagery/texture/texture-grain-paper-01.webp"), var(--paper-fill);
  background-size: 256px 256px, cover;
  background-blend-mode: multiply;
  opacity: 1; /* the grain texture is at 0.15 in the source asset */
}

Empty state

Generic silhouette in unfilled data slots, greyscale-tinted, with a "Replace with real photo" hint visible to the developer (HTML comment).

<!-- TODO: Replace with real product photo, target size: 600×900 -->
<picture class="product-card__photo product-card__photo--empty">
  <img src="…/imagery/silhouette/silhouette-bottle-01.png" alt="Hand-poured ceramic vessel, studio lighting" />
</picture>

Anti-patterns

  • Don't use kit imagery as the literal subject. An abstract bottle is not a stand-in for an actual coffee-shop hero — those need photographic placeholders (Picsum / Unsplash). The kit is for atmosphere / composition / decoration, not subject replacement.
  • Don't layer 3+ kit pieces on one page. Restraint. One transparent object in the hero + one wash in a later section is the cap.
  • Don't apply the same watercolor wash to multiple sections. It's a section accent, not a global treatment.
  • Don't use kit imagery in modern-minimal genre (Stripe / Linear / ElevenLabs school). That genre's whole point is the absence of decorative imagery.
  • Don't centre the layered hero art. Centred behind text is the AI-default move. Bias to one side, off-axis.
  • Don't use mix-blend-mode without testing on the active paper. multiply over a dark canvas inverts; screen over light paper washes out. Eyeball the result per theme.

Generation pipeline (out-of-band, one-time)

The kit is generated once per palette family, post-processed, and committed to the marketing site's public folder:

site/public/imagery/
  ├── watercolor/        ~6 files × 4 palette families = 24 WebPs
  ├── transparent/       ~6 files × 4 palette families = 24 PNGs
  ├── ornament/          ~8 SVGs (palette-agnostic, use currentColor)
  ├── texture/           ~6 tile-able WebPs
  ├── silhouette/        ~6 PNGs (palette-agnostic, transparent)
  └── pattern/           ~6 tile-able WebPs

Tooling. Nanobanana 2 / Recraft V4 with reference images. Prompt seed-list per category lives at the top of each file's directory in a prompts.md (one-line prompts, results pinned by seed for reproducibility).

Post-processing. Trim, transparent-background where applicable, colour-balance against Hallmark's OKLCH palette tokens, save as WebP for size + PNG where alpha matters. Ornaments as inline SVG so they inherit currentColor.

Total target weight. ≤ 5 MB across all categories. Each individual file ≤ 200 KB. Lossy WebP at q=80 unless the image needs lossless (ornaments → SVG; transparents → PNG with pngquant).

Re-generation. Treat the kit as a refreshable batch, not a one-off. When the palette catalogue changes (new theme, new accent hue), re-generate the relevant palette family. Manifest above is the spec; assets are the deliverable.

Source: SKILL.md on GitHub

1 warning16d3 checks · Risk SAFE
  • Gen Agent Trust Hub16d

    The hallmark skill is a design-focused extension for AI agents that facilitates the creation of professional user interfaces by preventing 'slop' patterns. It provides tools for auditing, redesigning, and studying design elements from screenshots or live URLs. The skill demonstrates robust security awareness, including a comprehensive remote URL safety check and explicit instructions to handle external data as inert to prevent indirect prompt injection. No malicious patterns, such as credential theft, persistence mechanisms, or unauthorized code execution, were identified during the analysis.

  • Socket16d

    No alerts

  • Snyk16d

    Risk: MEDIUM · 1 issue

Signed by skilld at f5f4a2c. This ties the file your Agent reads to that commit on GitHub. It does not review the instructions.

Last checked against GitHub 2 months ago.

Steadyupdated 2 months ago
version
1.1.0

README badge

README badge for nutlope/hallmark