Commit Graph
152 Commits
Author SHA1 Message Date
Youssef 272a55062a Tier A harness: gen-cli.mjs drives the real Claude Code binary
Runs 'claude -p "/hallmark <brief>"' with the skill copied into a scratch
project, parses the stream-json transcript for conformance (skill loaded via
stamp, files written, reference-read count + load-order, cost), writes into
runs/<brief>/<arm>-cli/. Skills do not auto-trigger headless (measured), so
it invokes by name: a conformance harness, not an auto-trigger test. Claude
arm uses the subscription (no key); GLM/Kimi arms Anthropic-shaped and
disabled until their auth tokens exist. Plumbing validated against the real
binary here (spawn, stream-json parse both event shapes, run.json); a real
run needs a logged-in terminal.
2026-07-24 14:42:13 +01:00
Youssef 50ed78f69b Spec files for the 4 new themes (Grid, Field, Ledger, Arcade)
Lean specs (131-150 lines) grounded in each new [data-theme] block and its
mockup: signature moves, anti-patterns, voice fixtures, and honest
neighbour-differentiation (Ledger vs Cobalt/Midnight; Arcade vs
Terminal/Hum). Arcade spec states the gate-47 carve-out inline (scanlines,
starfield, pixel type, cursor are the sanctioned retro signal; fake OS
chrome stays banned) and keeps body copy in the readable sans. Catalog
token names throughout; page-decorative tokens noted as page-added.
2026-07-24 14:36:11 +01:00
Youssef f760298ca9 Image hook (Together) + canonical examples for the 4 new themes
- scripts/imagegen.mjs: opt-in generated-still hook via Together's images
  endpoint (FLUX.1.1-pro default, gemini-3-pro-image optional), cache by
  prompt hash, provenance sidecar. No key -> graceful exit 3, falls back
  to CSS-art / placeholder (verified). Wired into tier-e-generated.md +
  SKILL Step 4 as opt-in, never auto-fires.
- site/examples/{grid,field,ledger,arcade}-01: canonical builds from the
  proposal mockups, all sloplint 0-FAIL, referenced by each theme spec.
2026-07-24 14:33:25 +01:00
Youssef 5426348836 Wire 4 new themes into the catalog: Grid, Field, Ledger, Arcade (20 -> 24)
- tokens.css: 4 [data-theme] blocks (full token set; Grid neutrals tinted
  to pass gate 22; Ledger/Arcade color-scheme dark; Arcade second accent)
- main.js: THEMES / ARCHETYPES / THEME_GENRES / COPY entries for all 4
- theme-axes.md: 4 rotation rows; SKILL.md Step 2.6 cluster list; genre
  files (Grid->editorial, Ledger->modern-minimal, Field+Arcade->playful)
- count strings bumped 20 -> 24 across skill, site, README; stale 57->58
  gate counts fixed in marketing copy
- Arcade gate-47 carve-out in slop-test + anti-patterns (pixel/scanline
  allowed; fake OS chrome still banned)
- site loads the 4 new themes' fonts; all 24 render in the live picker
2026-07-24 14:29:47 +01:00
Youssef 123599dd1c Theme specs for the 16 spec-less catalog themes
Lean specs (126-145 lines each, from the cobalt.md template) for specimen,
midnight, brutal, garden, atelier, newsprint, terminal, manifesto, almanac,
sport, studio, riso, bloom, coral, aurora, editorial. Each grounded in its
real [data-theme] tokens block and theme-axes row: signature moves,
anti-patterns, voice fixtures, macrostructure affinity, and honest
neighbour-differentiation. Loaded eagerly by Step 3 only when that theme is
picked, so zero cost to any build that picks a different theme. Also cleaned
em/en dashes from the 4 pre-existing specs.
2026-07-24 14:19:28 +01:00
Youssef 087dc859fd Edit-time lint hook: sloplint on write via PostToolUse, advisory only
- scripts/lint-hook.mjs: reads the PostToolUse payload, lints .html/.css
  Hallmark artifacts on write, feeds FAILs back via additionalContext,
  never blocks (exit 0 always), no-ops on non-artifacts
- scripts/install-hook.mjs: idempotent settings merge (--global/--print/
  --remove), preserves other hooks and permissions
- SKILL.md Step 7 note + README section; Claude-Code-only, degrades to
  the Step 7 sweep everywhere else
2026-07-24 14:06:27 +01:00
Youssef 75bafe3188 Strip em/en dashes from theme demo files 2026-07-24 10:38:05 +01:00
Youssef 054a860224 Seven full-page theme mockups: Plate, Grid, Bench, Maison, Field, Ledger, Arcade
Each is a complete self-contained landing page for a fictional brand in
the candidate theme's tokens, grounded in the reference sites (Aesop,
Vitra, Teenage Engineering, The Row, Notion, Mercury, Panic). All seven
pass sloplint clean (0 FAIL, 0 WARN). Linked from the theme cards via the
Open-full-page overlay.
2026-07-24 10:37:32 +01:00
Youssef 3e6fe26e73 Proposal pages: clickable full-page views + generated-page browser
- five-themes cards open a complete full-page mockup per theme
- before/after cards open the actual generated pages (before from
  hallmark-lab, after from the eval runs), copied into _proposals/pages
- eval judge defaults to operator mode: no Anthropic key spend, the
  Claude Code operator scores from the screenshots; --provider together
  or anthropic for an automated pass
2026-07-24 10:17:20 +01:00
Youssef 01386239f3 Eval run 2026-07-23: findings, judge fallback chain, output-ceiling fix
Full-pack matrix on Claude, GLM (Together), and the Kimi stand-in:
zero mechanical FAILs everywhere after at most one repair round; the
floor-only pack collapses on open models (96 FAILs on GLM), so the full
skill is load-bearing, not bloat. No-vision probe: every model declined
cleanly. Zero invented metrics. Rotation held per arm.

judge.py: Together vision fallback chain + User-Agent fix; vision judge
itself pending API credit or an OpenRouter key. gen-direct: 64K output
ceiling (Claude needed 37K on one brief).
2026-07-23 14:41:11 +01:00
Youssef 49b2724b7d Ignore eval caches and run artifacts 2026-07-23 13:28:33 +01:00
Youssef 6d52d29c50 Coherence pass: fix every contradiction the five-walkthrough review surfaced
- one canonical top-of-file order: stamp, critique line, direction contract
- theme-axes.md: the 20-row Rotation lookup now ships inside the skill
- tier taxonomies unified by name; craft tiers keep construction letters
- S1 reworked to stacked-numbered (the old side-column head was gate 54's
  own auto-fail); carnival + lumen examples brought up to gates 54/55/24;
  sloplint: mask/filter exemption on gate 22, precision fix + FAIL grade
  on gate 54, 15-line stamp window
- variants playbook matches the scripts byte for byte (request ids, riff
  shape, fallback wording, flow order); draft-sweep exceptions written
  into slop-test, custom-theme, and SKILL
- study.md: italic roles diagnosed as-is, built roman; preview-examples
  regenerated for v1.2
2026-07-23 13:28:26 +01:00
Youssef 71e88046f8 Docs for 1.2: five verbs, Variants and Open models sections, roadmap refresh 2026-07-23 13:08:45 +01:00
Youssef faf7d56233 Eval harness: direct-API bench matrix, screenshots, sloplint + vision-judge scoring, compare gallery
Arms: Anthropic baseline, GLM on Together, Kimi on OpenRouter (DeepSeek
and Qwen staged, disabled). Six briefs incl. metric-temptation,
component-scope, and vision-probe probes. Floor-only vs full skill packs
to measure prompt bloat. run-matrix orchestrates gen, shots, score,
judge, report; the repair loop feeds sloplint FAILs back to the model.
2026-07-23 13:08:45 +01:00
Youssef 04a9873633 The variants verb: three live directions, a local picker, pick-and-continue
- scripts/variants/{core,serve,start,await}.mjs: zero-dep picker server
  (loopback only, port walk-up, polling, atomic request queue, idle
  self-shutdown), scaled-iframe grid + single view + keyboard flow,
  chip.js overlay for generated routes, static compare fallback
- references/verbs/variants.md: context detection, per-framework route
  recipes, shared ceremony + direction-plan table, divergence rules,
  the poll ladder, pick-and-continue, riff
2026-07-23 13:08:45 +01:00
Youssef 75c577fd1d Custom art-direction ritual: the slate, the draw, postures, the direction contract
- custom-theme.md: reflex check at two altitudes, spent defaults, a
  seven-entry slate, the deterministic draw with wildcards, the scene
  sentence, four colour postures, a five-block direction contract with
  a promise-by-promise finish review; loosened triggers; reworked
  worked examples
- scripts/seed.mjs: reproducible draw (FNV-1a over brief + date + reroll)
- references/direction-atlas.json: 41 design-history lineages dealt as
  wildcards
2026-07-23 13:08:45 +01:00
Youssef b901563ac3 Open-model hardening: sloplint mechanical checker, gate classes, models.md, no-vision study path
- scripts/sloplint.mjs: zero-dep checker for the M-class gates, optional
  render tier, fixtures; calibrated to 0 FAIL on shipped examples
- slop-test.md: every gate tagged M / M-R / R-J / J, numeric fallbacks
  for gates 35 and 44, posture clause on gate 23
- SKILL.md: critical floor, flow skeleton, script-first Step 7,
  harness-neutral phrasing, models.md dispatch, v1.2.0
- references/models.md: per-family quirks, loaded only off-Claude
- study.md: capability check before image mode, fetch-tool neutral wording
- color.md: Colour postures; responsive.md: mechanical-equivalent pointers
2026-07-23 13:08:45 +01:00
Youssef 80701e3cc5 Speed pass: consolidate SKILL.md, slim anti-patterns, split enrichment and craft into index-then-pick files
- SKILL.md 559 to 331 lines: critical floor, flow skeleton, one Rotation
  block, one Picks block, fast mode, per-step Do lines
- anti-patterns.md becomes a 120-line pre-emit list; audit reporting
  moves to verbs/audit.md
- hero-enrichment.md and custom-craft.md become slim indexes over new
  references/enrichment/ and references/craft/ per-pick files
- Core-15 sweep named in slop-test.md for component scope
- pointer cleanup in macrostructures.md and component-cookbook.md;
  tokens.css header count fixed
2026-07-23 12:40:42 +01:00
Youssef 0c4f5ef8d3 Theme research: proposal page with five candidates and two alternates 2026-07-23 12:40:42 +01:00
Hassan El MghariandGitHub aeb42fb354 Merge pull request #18 from Nutlope/fix/existing-stylesheet-merge
Append to an existing global stylesheet instead of overwriting it
2026-06-04 16:42:42 -04:00
Hassan El MghariandGitHub 2cd53ce4d3 Merge pull request #17 from Nutlope/fix-v1.1-count-consistency
fix: reconcile slop-test gate count (58) and stale N1 nav refs
2026-06-04 16:42:02 -04:00
Youssef 58517f0f18 Append to an existing global stylesheet instead of overwriting it
When Hallmark builds into a project that already has an entry stylesheet
(e.g. app/globals.css, src/index.css), treat it as append-only: keep the
existing @tailwind / @import "tailwindcss" directives and the project's own
tokens, add the Hallmark layer below them, and keep any new @import at the
top. Overwriting it was silently dropping the framework's CSS entry
directives and the user's tokens, which left the whole app unstyled.
2026-06-04 15:35:14 +01:00
Youssef df5498f7f6 README: show Mend Assembly in the Custom section, move Ferns & Fathom to the gallery 2026-06-03 19:06:34 +01:00
Youssef cb300693ed README Custom section: two hero shots side by side, shorter copy
Swapped the single full-page custom-04 screenshot for two hero-only shots side
by side, the Cascadia Nightjar sleeper ticket and the Ferns and Fathom
periodic-table tea menu, so the section shows the range without dumping a whole
page. Trimmed the Custom blurb down to the essentials.
2026-06-03 18:54:02 +01:00
Hassan El MghariandClaude Opus 4.8 627f5d2d51 fix: reconcile slop-test gate count (58) and stale N1 nav refs
Fast-follow to v1.1 (#16). Three consistency fixes:

- Gate count: the slop test has 58 numbered gates (1–57 plus 38a, the
  italic-headers gate added in v1.1), but the header, pre-emit note, load
  guidance, and every "57 / 57" preview stamp still said 57. Counting 38a
  as the 58th gate avoids cascade-renumbering 39–57 and all their
  cross-references. Updated SKILL.md, slop-test.md, preview-examples.md,
  and redesign.md. Genuine gate number 57 and the 50–57 ranges untouched.
- Gate 42 (Nav fingerprint) still referenced the pre-rename "N1" and an
  outdated rotation set; updated to N1a and the current N1b–N13 catalogue.
- editorial.md "Acceptable also" N1 → N1a.
- .gitignore comment listed the tracked featured Hum build as hum-02; the
  tracked build is hum-07 (hum-02 is ignored).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 13:27:03 -04:00
Hassan El MghariandGitHub ca507aae2a Merge pull request #16 from Nutlope/v1.1-themes-and-custom
v1.1: four new themes, the Custom route, and a copy pass
2026-06-03 13:24:25 -04:00
Youssef 02a3a1dfad New OG image and a refreshed README example gallery
Swapped in the new Open Graph image (2400x1260), keeping the OG-hallmark.png
filename so the meta tags, the README banner, and the deployed URL all stay
valid; updated the height meta to match.

Refreshed the "Different briefs, different shapes" gallery to the worked
examples we actually ship now: the four new themes (Bubble, Distil, Cold Snap,
Cinder), the Custom and newly generated pages (Mend Assembly, Hollowback Apiary,
Off-Register, Press Quaternary), and four originals (Tally, Wayfare, NAJM,
Hyperlane). Dropped the retired examples, reworded the intro, and added eight
new hero shots.
2026-06-03 17:02:02 +01:00
Youssef ae2f83e55d Lead with Hum, fix theme-picker number contrast, reorder worked examples
Theme picker: Hum is now theme 01, with the rest renumbered 02-20. The ordinal
reads off the registry index, so switching, cycling, and the "NN / 20" readout
all stay correct.

Theme numbers: each picker swatch now carries an explicit number colour that
contrasts with its own background, instead of inheriting the active theme's ink.
Dark swatches (Midnight, Terminal, Manifesto, Aurora, Lumen) get a light number
rather than a near-invisible dark one. All twenty clear AA (min 10:1).

Worked Examples: moved the first three carousel cards (Cobalt, Carnival, Lumen)
to the end so the page leads with Hum.

Bumped the asset cache-bust.
2026-06-03 16:19:09 +01:00
Youssef 7a890a365d Carnival rework, sharper anti-slop guards, and three new worked examples
Carnival: fixed the three palette drops whose second accent failed contrast,
tightened the display tracking, and added section-rhythm, alignment, and
drop-selection guidance so the theme lands well-aligned and readable by
default. Lightened and tightened the Carnival headers on the landing.

Anti-slop guards (skill references): heading-to-body alignment coherence as a
principle rather than a rigid rule; centered overlays and command palettes must
center via their container; and a hero headline is never only a number, a lead
figure always pairs with words.

Worked Examples: added three generated pages to the landing carousel, a
small-batch honey farm, a risograph print fair, and an experimental type
studio, after fixing their nav centering and section alignment.

Media: removed the Soroe example card along with the unused scroll-videos,
poster stills, and orphaned thumbnails it left behind, and bumped the asset
cache-bust so the restyled CSS reloads.
2026-06-03 15:27:32 +01:00
Youssef 72f3dc052e Worked examples: full-page image hover-scroll on every card; bump to v1.1
Replace the carousel's inconsistent scroll-videos with one CSS image hover-scroll
across all twelve cards. Each thumb is a tall full-page screenshot that pans top
to bottom on hover, with a per-card duration scaled to page height so they all
move at the same brisk, readable pace; captured Retina-sharp at 1400px wide.
Touch and reduced-motion get a static crop. Drop the Slow Pour card.

Bump the version to v1.1 on the landing (banner + footer), package.json, SKILL.md,
and the preview-block examples.
2026-06-02 20:20:23 +01:00
Youssef 7d870f70ec Worked examples: scroll-on-hover for the new cards, plus README + link polish
Give the five image cards (the four new themes and the Mend Assembly) a
hover-scroll: each thumb is now a tall full-page screenshot, and CSS pans
object-position top to bottom on hover so the page scrolls itself. No video,
no JS, GPU-light; touch and reduced-motion get a static top crop. Cache-bust
the regenerated thumbs.

Trim the README Custom section to the single Mend Assembly feature (matching
the landing) and de-dash the whole README. Fix three pre-existing dead doc
links in the component cookbook (floating-nav, custom-craft, hero-enrichment
were linked without the ../ that reaches the references root).
2026-06-02 19:16:07 +01:00
Youssef 455c2654bd Worked examples: feature Bubble for Hum and trim the custom showcase
Swap the Hum carousel card from Sprout (hum-02) to Bubble (hum-07), the
guided sourdough Narrative Workflow build. Keep only one custom example in
the showcase, the Mend Assembly repair-cafe poster; the other bespoke pages
stay in the repo but off the landing. Untrack hum-02 so only featured builds
ship, refresh the scroll-demos manifest, and bump the cache version.
2026-06-02 18:54:33 +01:00
Youssef a5593bbca1 Slop test · consolidate 70 gates → 57 (merge redundant) and resync every reference
Merge the clear duplicates (gradient text into the gradient gate, macrostructure-
repeat into the structural-fingerprint gate, the overflow-x:clip mandate into the
horizontal-scroll gate, emoji-icon into the icon-libraries gate), collapse the five
contrast gates to two, the five input-state gates to one, and the four hero gates to
two. No coverage lost. Renumber 1–57 and update every gate-number and gate-total
reference across SKILL.md, the reference docs, the landing copy, and the example builds.
2026-06-02 18:34:47 +01:00
Youssef 31f58c56df Hum · lead the default hero with "Make your AI agent a designer." 2026-06-02 18:08:44 +01:00
Youssef bd9e9ab859 v1.1 — four new themes, the Custom route, and a full copy pass
Adds Carnival, Lumen, Hum, and Cobalt to the catalogue (now 20 themes),
each with its own tokens block, hero archetype, landing copy, and spec doc.

Introduces Custom as a first-class route: when a brief carries real
creative intent, Hallmark designs the whole page from first principles —
palette, type, and structure — rather than recolouring a catalogue theme.
Ships five worked custom examples and a README section.

Rewrites the per-theme landing copy and reconciles every catalogue count
across the site and the skill (20 themes · 21 macrostructures · 50
component archetypes · 70 slop-test gates). Drops the last competitor
references from the CSS comments, fixes the genre rosters, and ignores
the local example explorations so only the featured builds ship.
2026-06-02 17:50:31 +01:00
Hassan El MghariandGitHub 39fe438bf9 Merge pull request #11 from Nutlope/fix-install-bloat 2026-05-26 09:33:45 -04:00
Youssef 3ec0173896 Install · scope the skill to skills/hallmark/ (fixes #9)
The skills CLI copies everything under the directory containing SKILL.md.
With SKILL.md at the repo root, installs were pulling in docs/, site/,
package.json, README, ROADMAP, vercel.json, LICENSE. Moving the skill
into skills/hallmark/ scopes the install to just SKILL.md + references/.

The CLI's priority search hits skills/ first, so `npx skills add
nutlope/hallmark` is unchanged. Updated README install paths,
package.json (entry/references/files), and the internal links that
crossed the new boundary.
2026-05-26 12:07:51 +01:00
Riccardo Giorato 9aba10e518 feat: enhance remote URL safety checks and documentation 2026-05-20 21:58:53 +02:00
Hassan El MghariandGitHub 2fec50f4dd Merge pull request #7 from Nutlope/trim-readme-roadmap
Docs · shorten README and ROADMAP
2026-05-20 11:45:15 -04:00
Youssef 9fc2369e09 OG · swap to new readme/social card art
New 2400×1356 artwork replaces the previous 4800×2520 image.
Meta width/height tags updated to match.
2026-05-20 16:26:02 +01:00
Youssef a0a02cae7f Study · drop the refuse-competitor-pages clause
Remove the "refuses competitor pages" policy from the study verb.
Touches the verb summary in README and SKILL.md, both refusal tables
in study.md, the URL refuse list, the schema's refusal enum, the
emission-attestation parenthetical, and the worked examples plus the
test fixtures.

Paid-template refusal and the signature-work soft-refusal stay —
those carry real copyright weight.
2026-05-20 14:40:52 +01:00
Youssef a569532759 Roadmap · refine Next items
Add a brand-first flow as the lead Next item — from a short product
description, Hallmark generates a complete brand (palette, type, voice,
Nanobanana imagery) into a design.md, then builds the whole site
against it.

Rewrite the data-viz item as "Charts reference for analytics pages" —
names the actual AI tells (rainbow palettes, 3D donuts, dual-axis
spaghetti) and what the new reference file would do.

Fold the proposed hallmark extract verb into study as a third input
mode (codebase path, alongside screenshot and URL). Same verb, same
design.md output, no new surface area.

Drop the Won't-do section.
2026-05-20 13:56:29 +01:00
Youssef bb2411fae3 Docs · shorten README and ROADMAP
README: 147 → 81 lines. Drop the comparison table, the long
"What's distinct" bullet list, the references/ inventory, the
v1.0.0 release-note blockquote, and the duplicate Update section.
Keep the verb table, the example grid, and install paths.

ROADMAP: 201 → 50 lines. Fold the Status/Build/Why-it-matters
tri-headers into one or two sentences per item. Drop the stale
"What's already shipped" list, the "Measurement" section, and
the duplicate Deferred entry. Keep the Won't-do list — that's
where the discipline lives.
2026-05-20 13:43:04 +01:00
Hassan El MghariandGitHub dcd6ac64b4 Merge pull request #6 from Nutlope/fix-aggresive-redesign
Fix redesign that was too aggressive & build some guardrails in there
2026-05-19 18:13:45 -04:00
Hassan El Mghari 8eed815bd9 wip 2026-05-19 18:12:33 -04:00
YoussefandGitHub c494f3998e Merge pull request #5 from Nutlope/update-skill-description
Refine and condense SKILL.md description
2026-05-19 23:09:28 +01:00
Youssef 3c343632b5 Refine and condense SKILL.md description 2026-05-19 23:08:34 +01:00
Hassan El MghariandGitHub 6d42491c6a Merge pull request #2 from JaySmith502/fix/skill-md-yaml-frontmatter
Fix: quote SKILL.md description so YAML frontmatter parses (npx skills add fails)
2026-05-19 17:42:27 -04:00
JaySmith502andWOZCODE 75b5bfa752 Fix · quote SKILL.md description so YAML frontmatter parses
The description was an unquoted YAML plain scalar containing multiple
colon-space sequences ("Four verbs: ", "Fires when ANY: ", "Does NOT
fire on: ", "Decisive signal: "). YAML reads ': ' inside a plain
scalar as a nested mapping, so strict parsers abort with 'mapping
values are not allowed here'. The skills CLI parses this frontmatter
during 'npx skills add', so install failed.

Wrapped the value in double quotes (no internal " or backslash, so
this is lossless and stays one line). Frontmatter now parses; name,
description, and version keys intact.

Co-Authored-By: WOZCODE <contact@withwoz.com>
2026-05-19 15:23:26 -04:00
Youssef fc38eb7a80 Site · add Plausible analytics snippet to head 2026-05-19 19:49:36 +01:00