diff --git a/README.md b/README.md index 4f8b55b..ea34c86 100644 --- a/README.md +++ b/README.md @@ -96,7 +96,7 @@ It stays a quiet branch; vanilla briefs never see it. The protocol lives in [`cu ## Variants NEW -`hallmark variants ` runs the ceremony once, then builds **three complete directions**: different macrostructure, different theme (one dark, one mid, one light paper, forced), different nav, different footer. A tiny zero-dependency picker server (`skills/hallmark/scripts/variants/`) shows all three as live frames; in an existing app each direction is a temporary route your own dev server renders, with a small chip in the corner to flip and pick. Choose one and Hallmark promotes it, archives the others under `.hallmark/variants/`, and logs the whole run. Say `riff` for a fourth direction. No Node available? The picker degrades to a static compare page, and a chat reply ("pick 2") always works. +`hallmark variants ` runs the ceremony once, then builds **three structurally distinct directions** (different macrostructure, theme, nav, footer) and serves a local picker to flip between them and choose. v2 makes it fast and smooth: the picker opens immediately and fills **progressively** (you evaluate direction 1 while 2 and 3 finish), directions generate **in parallel** at **sketch depth** by default (only the winner completes to full), the grid shows screenshot **thumbnails** (so it survives dev servers that block iframes), and the verdict can be **compositional** ("direction 2, but the pricing from 3" grafts that section in). After the pick you can **zoom** to riff a single section, every round is logged to `.hallmark/variants//decisions.md`, and in a Vite/Astro/SvelteKit app a dev-only overlay previews each direction in place. No Node? A static compare page and a chat reply ("pick 2") always work. --- diff --git a/ROADMAP.md b/ROADMAP.md index 4d39f67..a1338cc 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -1,28 +1,28 @@ # Roadmap -What's next. (v1.2 shipped: the `variants` verb + picker, the custom art-direction ritual with the draw and the direction atlas, the sloplint mechanical checker, open-model hardening + the eval harness, and the big token diet.) +What's next. (v1.3 shipped: the edit-time lint hook, four new themes with the image hook, spec files for all 24 themes, the Tier A conformance harness, and variants v2 with progressive reveal + grafts + thumbnails + scoped injection.) --- ## Now -**Land the new themes.** Five candidates + two alternates are proposed with visuals in `site/_proposals/five-themes.html` (Plate, Grid, Bench, Maison, Field; Ledger, Arcade). Waiting on the pick; each chosen theme gets tokens, axes comments, a spec file, and two example builds. +**Run the eval matrices on real endpoints.** Tier B (`gen-direct.py`) and Tier A (`gen-cli.mjs`) are built. Run the 6-brief matrix on GLM (Together) and Kimi (OpenRouter) for Tier B, and the Claude conformance pass for Tier A in a logged-in terminal; iterate the skill text until the acceptance criteria in `eval/README.md` hold. Add Z.ai + Moonshot tokens to unlock the Tier A open-model arms. -**Run the eval matrix on real endpoints.** `eval/` is built; run the 6-brief matrix against GLM (Together) and Kimi (OpenRouter), iterate the skill text until the acceptance criteria in `eval/README.md` hold, and publish the compare gallery. Re-run when Together lands Kimi K3. +**Measure the variants speedup.** `eval/variants-bench.md` documents the four-config protocol; run it on a real authenticated machine and publish the wall-clock + token table (parallel + sketch + progressive vs the v1 baseline). -**Nanobanana hook for image-heavy briefs.** Recommend-only today. First-class hook: write the prompt, invoke the API, ingest the image, wire it into the build (cache by prompt hash). Pairs with the Plate theme candidate. +**Second example builds for the four new themes.** Each shipped with a canonical `-01`; add a `-02` on a second brief, and marketing cards on the homepage gallery. --- ## Next -**sloplint as an edit-time hook.** The checker currently runs at Step 7. Wire it as a PostToolUse hook so mechanical slop is caught the moment a file is written, before the model moves on. +**sloplint as an edit-time hook, on by default.** The hook exists (`scripts/install-hook.mjs`) and is opt-in. Consider shipping a project `.claude/settings.json` with it pre-wired, or a one-line prompt in `init`. -**Theme spec files for the remaining 16 themes.** Only Carnival, Cobalt, Hum, and Lumen carry signature-move specs today. Cap each at ~150 lines; the tokens block cannot encode voice. +**Grow the direction atlas + rate the draw.** More lineages, usage-weighted dealing, a ratings pass so strong directions surface more often. -**Tier A harness runs.** `eval/gen-cli.mjs`: drive the real Claude Code binary headless per model (Z.ai / Moonshot Anthropic-shaped endpoints) to test skill triggering and load-order discipline, not just instruction-following. +**Variants v2.1.** Screenshot thumbnails in the picker are in; next: DOM-injection with write-back for non-file-router apps (the hard AST-codemod path deliberately deferred), and a live variants demo wired on usehallmark.com. -**Brand-first flow.** From a short product description, generate a complete brand (palette, type, voice, imagery) locked into a `design.md`; then every page builds against it. +**Brand-first flow.** From a short product description, generate a complete brand (palette, type, voice, imagery via the image hook) locked into a `design.md`; then every page builds against it. **Theme-aware motion tokens.** Per-theme `--dur-micro` / `--dur-short` / `--dur-long`; Atelier should feel slower than Brutal. @@ -30,18 +30,15 @@ What's next. (v1.2 shipped: the `variants` verb + picker, the custom art-directi **`study` reads your own codebase.** Third input mode: a path. Walk the files, extract the tokens + fingerprint in use, emit the same `design.md`. -**Structural cookbook.** Twelve to twenty worked fingerprints with short HTML/CSS sketches; patterns are easier to reach for than principles. - **Charts reference.** A `data-viz.md`: small multiples over dense singles, one accent + neutrals, the worst chart types banned outright. --- ## Later -- **Grow the direction atlas.** More lineages, usage-weighted dealing, a ratings pass so strong directions surface more often. - **Per-harness prebuilt bundles.** Compiled copies for Gemini CLI, Copilot, OpenCode and friends, with placeholder substitution per harness. - **`hallmark explain`** - narrate the choices axis by axis; the skill teaches. - **Negative-capability rules** - for each anti-pattern, the perceptual reason it fails. -- **Emotion-first prompting** - *nostalgic · optimistic · sceptical* instead of tone adjectives. +- **Emotion-first prompting** - *nostalgic, optimistic, sceptical* instead of tone adjectives. - **Sound + haptic policy** - when web sound is acceptable without kitsch. -- **Live preview as an MCP server** - watch, render, screenshot, feed back into the gate sweep (the `--render` tier is the seed of this). +- **Live preview as an MCP server** - watch, render, screenshot, feed back into the gate sweep (the `--render` tier and `gen-cli.mjs` are the seeds of this). diff --git a/package.json b/package.json index 642c7a6..777b466 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "hallmark", - "version": "1.2.0", + "version": "1.3.0", "description": "A design skill for AI coding assistants. Makes the UIs they generate look made, not generated. Powered by Together AI.", "keywords": [ "claude", diff --git a/skills/hallmark/SKILL.md b/skills/hallmark/SKILL.md index 21874db..fbe802d 100644 --- a/skills/hallmark/SKILL.md +++ b/skills/hallmark/SKILL.md @@ -1,7 +1,7 @@ --- name: hallmark description: "Anti-AI-slop design skill for greenfield pages, audits, redesigns, design extraction from URLs or screenshots, and side-by-side design variations. Use when the user asks to build a new app or landing page, wants to redesign something, wants multiple design directions to pick from, invokes Hallmark by name, or uses audit/redesign/study/variants." -version: 1.2.0 +version: 1.3.0 --- # Hallmark @@ -251,7 +251,7 @@ Then run the image-need table at [`references/hero-enrichment.md` § Image-need **Do:** emit the preview block, then stop for a beat before writing code. This is the user's five-second redirect window. ```markdown -**Hallmark · v1.2.0** +**Hallmark · v1.3.0** - **Macrostructure** · Stat-Led - **Theme** · Coral (near-white paper · quiet neutrals · coral accent) diff --git a/skills/hallmark/references/preview-examples.md b/skills/hallmark/references/preview-examples.md index 4af0453..2eb54f9 100644 --- a/skills/hallmark/references/preview-examples.md +++ b/skills/hallmark/references/preview-examples.md @@ -5,7 +5,7 @@ Four sample Step 5 preview blocks for the model to imitate, varied across macros --- *Long Document (editorial, motion-cut):* -> **Hallmark · v1.2.0** +> **Hallmark · v1.3.0** > > - **Macrostructure** · Long Document > - **Theme** · Newsprint (cool slate paper · steel-blue accent · geometric sans) @@ -16,7 +16,7 @@ Four sample Step 5 preview blocks for the model to imitate, varied across macros > - **Diversification** · first run for this project *Bento Grid (SaaS, motion-on):* -> **Hallmark · v1.2.0** +> **Hallmark · v1.3.0** > > - **Macrostructure** · Bento Grid > - **Theme** · Newsprint (cool slate paper · steel-blue accent · geometric sans) @@ -27,18 +27,18 @@ Four sample Step 5 preview blocks for the model to imitate, varied across macros > - **Diversification** · differs from Coral on paper hue (light-cool vs pure-white) + accent (indigo vs ink-blue) *Manifesto (declarative, no enrichment):* -> **Hallmark · v1.2.0** +> **Hallmark · v1.3.0** > > - **Macrostructure** · Manifesto > - **Theme** · Manifesto (dark · Inter Tight 900 · single red bleed) -> - **Enrichment** · none (typography only — voice carries the brand) +> - **Enrichment** · none (typography only - voice carries the brand) > - **Sections** · Masthead · Title · Five Declarations · Bleed Band · What We Refuse · Working Rules · Practice · Reading · Colophon -> - **Motion** · none — typography only +> - **Motion** · none - typography only > - **Slop test** · 58 / 58 ✓ (run after Build) > - **Diversification** · differs from Newsprint on paper band (dark vs light) + display style (display-heavy vs geometric-sans) *Custom (Coffeebox archival café):* -> **Hallmark · v1.2.0** +> **Hallmark · v1.3.0** > > - **Macrostructure** · Long Document > - **Direction** · the postal frank (draw 6/7, wildcard no) @@ -48,4 +48,4 @@ Four sample Step 5 preview blocks for the model to imitate, varied across macros > - **Sections** · Masthead · Letter · Three Notes · Visit · Colophon > - **Motion** · breathing-loop on bean (with reduced-motion fallback) > - **Slop test** · 58 / 58 ✓ (run after Build) -> - **Diversification** · custom axes: light / geometric-sans / warm — differs from previous catalog Newsprint on display style +> - **Diversification** · custom axes: light / geometric-sans / warm - differs from previous catalog Newsprint on display style