The published install command in the README — npx skills add nutlope/hallmark — was failing for users because the skills CLI looks for SKILL.md at the repo root, not at skill/SKILL.md where Hallmark kept it. The clone succeeded but the CLI reported "No skills found." Manual cp was the only working install path. Flattened the layout: - skill/SKILL.md → SKILL.md - skill/references/ → references/ - (skill/ directory removed; was empty after moves) git mv preserved rename history for all 76+ files (SKILL.md + 28 reference files + 21 macrostructures + 46 components + 7 verb/genre subfolders). Updated every cross-reference (36 occurrences across 9 files): - README.md — 4 links (SKILL.md + references/ + the install snippet still reads the same) - ROADMAP.md — 4 links to reference files - package.json — "files" field + "skill" entry/references paths - site/js/main.js — 3 source comments - references/design-md.md — one broken link (was pointing skill/references/export-formats.md from inside references/ — now just export-formats.md as a sibling) - site/_tests/verbs/study/notes.md, diagnosis.md and verbs/audit/audit-report.md, custom/README.md — test-artifact relative paths shortened by one segment (e.g. ../../../skill/SKILL.md → ../../../SKILL.md) No skill content changes. After this lands, 'npx skills add nutlope/hallmark' should clone + install correctly without any manual cp fallback.
Custom worked examples
Three landing pages produced by the custom theme route — the new opt-in branch added to Hallmark in v0.6.x. Custom is the route for one-off custom palettes + font pairings tuned to a single brand. Catalog (the 16 named themes) is the default; custom fires only when the brief signals creative or unique intent.
These three pages are the worked examples written into references/custom-theme.md § G — rendered as actual HTML so the palette + pairing can be inspected visually.
| # | Brand | Vibe | Anchor | Macrostructure | Axes |
|---|---|---|---|---|---|
| 01 | Coffeebox — small-batch coffee subscription | "archival warmth, hand-set, no varnish" | terracotta | Long Document | light / italic-serif / chromatic-terracotta |
| 02 | Loop — payment-rail observability for fintechs | "industrial precision, cool, technical" | sea-blue | Workbench | dark / mono / cool |
| 03 | Mossroot — herbal apothecary in Porto | "moss, lichen, soft pink, herbal" | (skipped — derived) | Catalogue | light / roman-serif / chromatic-other (dusty-pink) |
Each folder holds:
index.html— the rendered pagestyle.css— custom palette + pairing as inline:roottokens, with the custom stamp at the top
What custom unlocks
The 16 named themes can't carry every brand. Coffeebox is closest to Atelier but warmer + more terracotta-led; Loop is closest to Midnight but mono-everywhere and sea-blue not phosphor-cyan; Mossroot has no catalog match (moss-tinted paper with dusty-pink accent isn't in the catalogue). Without custom, all three pages would compromise on the brand voice. With custom, the palette + pairing are tuned to the specific vibe — and every existing rule (OKLCH bands, accent footprint, font ban list, slop test) carries forward unchanged. The freedom is the combination, not the rules.
What guards prevent over-invention
- The opt-in is opt-in. Custom fires only when the user signals creative/unique intent in their prompt (named brand colour, multi-attribute aesthetic that doesn't match a catalog theme name, explicit "make it custom"). Default route is catalog — no behavioural change for vanilla briefs.
- One question only. The skill asks vibe (4–8 words) + optional anchor colour. Anything more is over-asking.
- Every existing rule applies. color.md OKLCH bands, typography.md pairing catalogue, anti-patterns.md ban list, the 38 slop-test gates — same gates fire as on catalog themes.
- The Step 5 preview surfaces the palette + pairing. Before any code is emitted, the user sees the OKLCH values and the chosen fonts in plain text. They can redirect early.
- Diversification is theme-route-blind. Each custom run records its three axis values (paper-band / display-style / accent-hue) in
.hallmark/log.json. The next run rotates against them the same way it does against catalog themes.
See references/custom-theme.md for the full protocol.