howone 0.1.19 → 0.1.22
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/templates/vite/.howone/skills/hallmark/LICENSE +21 -0
- package/templates/vite/.howone/skills/hallmark/README.md +147 -0
- package/templates/vite/.howone/skills/hallmark/ROADMAP.md +201 -0
- package/templates/vite/.howone/skills/hallmark/SKILL.md +551 -0
- package/templates/vite/.howone/skills/hallmark/docs/recipes.md +186 -0
- package/templates/vite/.howone/skills/hallmark/docs/screenshots/hero-anya.jpg +0 -0
- package/templates/vite/.howone/skills/hallmark/docs/screenshots/hero-bananastudio.jpg +0 -0
- package/templates/vite/.howone/skills/hallmark/docs/screenshots/hero-hyperlane.jpg +0 -0
- package/templates/vite/.howone/skills/hallmark/docs/screenshots/hero-najm.jpg +0 -0
- package/templates/vite/.howone/skills/hallmark/docs/screenshots/hero-slow-pour.jpg +0 -0
- package/templates/vite/.howone/skills/hallmark/docs/screenshots/hero-soroe.jpg +0 -0
- package/templates/vite/.howone/skills/hallmark/docs/screenshots/hero-tally.jpg +0 -0
- package/templates/vite/.howone/skills/hallmark/docs/screenshots/hero-wayfare.jpg +0 -0
- package/templates/vite/.howone/skills/hallmark/docs/study-examples.md +176 -0
- package/templates/vite/.howone/skills/hallmark/docs/talk-slides.md +364 -0
- package/templates/vite/.howone/skills/hallmark/package.json +36 -0
- package/templates/vite/.howone/skills/hallmark/references/anti-patterns.md +412 -0
- package/templates/vite/.howone/skills/hallmark/references/assets.md +399 -0
- package/templates/vite/.howone/skills/hallmark/references/color.md +95 -0
- package/templates/vite/.howone/skills/hallmark/references/component-cookbook.md +256 -0
- package/templates/vite/.howone/skills/hallmark/references/components/c1-outlined-chip.md +12 -0
- package/templates/vite/.howone/skills/hallmark/references/components/c2-inline-form-as-cta.md +16 -0
- package/templates/vite/.howone/skills/hallmark/references/components/c3-typographic-link.md +8 -0
- package/templates/vite/.howone/skills/hallmark/references/components/c4-sticky-bottom-bar.md +16 -0
- package/templates/vite/.howone/skills/hallmark/references/components/f1-bento-grid.md +20 -0
- package/templates/vite/.howone/skills/hallmark/references/components/f2-sticky-scroll-stack.md +20 -0
- package/templates/vite/.howone/skills/hallmark/references/components/f3-tabular-spec-sheet.md +11 -0
- package/templates/vite/.howone/skills/hallmark/references/components/f4-step-sequence.md +11 -0
- package/templates/vite/.howone/skills/hallmark/references/components/f5-annotated-screenshot.md +11 -0
- package/templates/vite/.howone/skills/hallmark/references/components/f6-product-card-grid.md +41 -0
- package/templates/vite/.howone/skills/hallmark/references/components/ft1-mast-headed.md +13 -0
- package/templates/vite/.howone/skills/hallmark/references/components/ft2-inline-rule-single-line.md +10 -0
- package/templates/vite/.howone/skills/hallmark/references/components/ft3-index-style-category-list.md +12 -0
- package/templates/vite/.howone/skills/hallmark/references/components/ft4-dense-typographic.md +10 -0
- package/templates/vite/.howone/skills/hallmark/references/components/ft5-statement.md +21 -0
- package/templates/vite/.howone/skills/hallmark/references/components/ft6-letter-close.md +19 -0
- package/templates/vite/.howone/skills/hallmark/references/components/ft7-newsletter-first.md +27 -0
- package/templates/vite/.howone/skills/hallmark/references/components/ft8-marquee-scroll.md +25 -0
- package/templates/vite/.howone/skills/hallmark/references/components/h1-marquee.md +15 -0
- package/templates/vite/.howone/skills/hallmark/references/components/h2-split-diptych.md +15 -0
- package/templates/vite/.howone/skills/hallmark/references/components/h3-quote-led.md +11 -0
- package/templates/vite/.howone/skills/hallmark/references/components/h4-stat-led.md +14 -0
- package/templates/vite/.howone/skills/hallmark/references/components/h5-letter-hero.md +11 -0
- package/templates/vite/.howone/skills/hallmark/references/components/h6-photographic-fold.md +16 -0
- package/templates/vite/.howone/skills/hallmark/references/components/h7-demo-video-clipped-by-viewport-edge.md +27 -0
- package/templates/vite/.howone/skills/hallmark/references/components/h8-mockup-split-browser-framed.md +23 -0
- package/templates/vite/.howone/skills/hallmark/references/components/h9-custom-illustration-centerpiece.md +27 -0
- package/templates/vite/.howone/skills/hallmark/references/components/n1-wordmark-2-links.md +12 -0
- package/templates/vite/.howone/skills/hallmark/references/components/n10-floating-on-scroll-morph.md +19 -0
- package/templates/vite/.howone/skills/hallmark/references/components/n2-floating-chip.md +14 -0
- package/templates/vite/.howone/skills/hallmark/references/components/n3-side-rail.md +14 -0
- package/templates/vite/.howone/skills/hallmark/references/components/n4-hidden-behind-k.md +9 -0
- package/templates/vite/.howone/skills/hallmark/references/components/n5-floating-pill.md +28 -0
- package/templates/vite/.howone/skills/hallmark/references/components/n6-newspaper-masthead.md +24 -0
- package/templates/vite/.howone/skills/hallmark/references/components/n7-brutal-slab.md +22 -0
- package/templates/vite/.howone/skills/hallmark/references/components/n8-terminal-command.md +21 -0
- package/templates/vite/.howone/skills/hallmark/references/components/n9-edge-aligned-minimal.md +17 -0
- package/templates/vite/.howone/skills/hallmark/references/components/s1-left-margin-numbered.md +15 -0
- package/templates/vite/.howone/skills/hallmark/references/components/s2-hanging.md +13 -0
- package/templates/vite/.howone/skills/hallmark/references/components/s3-sticky-pinned.md +19 -0
- package/templates/vite/.howone/skills/hallmark/references/components/s4-inline-no-break.md +11 -0
- package/templates/vite/.howone/skills/hallmark/references/components/s5-bottom-anchored.md +13 -0
- package/templates/vite/.howone/skills/hallmark/references/components/t1-pull-quote-with-marginalia.md +12 -0
- package/templates/vite/.howone/skills/hallmark/references/components/t2-logo-wall-hairline.md +19 -0
- package/templates/vite/.howone/skills/hallmark/references/components/t3-single-huge-quote.md +11 -0
- package/templates/vite/.howone/skills/hallmark/references/components/t4-numbered-stat-strip.md +14 -0
- package/templates/vite/.howone/skills/hallmark/references/contract.md +24 -0
- package/templates/vite/.howone/skills/hallmark/references/copy.md +182 -0
- package/templates/vite/.howone/skills/hallmark/references/custom-craft.md +626 -0
- package/templates/vite/.howone/skills/hallmark/references/custom-theme.md +329 -0
- package/templates/vite/.howone/skills/hallmark/references/design-md.md +116 -0
- package/templates/vite/.howone/skills/hallmark/references/export-formats.md +328 -0
- package/templates/vite/.howone/skills/hallmark/references/floating-nav.md +89 -0
- package/templates/vite/.howone/skills/hallmark/references/genres/atmospheric.md +65 -0
- package/templates/vite/.howone/skills/hallmark/references/genres/editorial.md +70 -0
- package/templates/vite/.howone/skills/hallmark/references/genres/modern-minimal.md +67 -0
- package/templates/vite/.howone/skills/hallmark/references/genres/playful.md +65 -0
- package/templates/vite/.howone/skills/hallmark/references/hero-enrichment.md +474 -0
- package/templates/vite/.howone/skills/hallmark/references/imagery-kit.md +170 -0
- package/templates/vite/.howone/skills/hallmark/references/interaction-and-states.md +207 -0
- package/templates/vite/.howone/skills/hallmark/references/layout-and-space.md +111 -0
- package/templates/vite/.howone/skills/hallmark/references/macrostructures/01-bento-grid.md +35 -0
- package/templates/vite/.howone/skills/hallmark/references/macrostructures/02-long-document.md +34 -0
- package/templates/vite/.howone/skills/hallmark/references/macrostructures/03-marquee-hero.md +31 -0
- package/templates/vite/.howone/skills/hallmark/references/macrostructures/04-stat-led.md +32 -0
- package/templates/vite/.howone/skills/hallmark/references/macrostructures/05-workbench.md +32 -0
- package/templates/vite/.howone/skills/hallmark/references/macrostructures/06-conversational-faq.md +33 -0
- package/templates/vite/.howone/skills/hallmark/references/macrostructures/07-manifesto.md +32 -0
- package/templates/vite/.howone/skills/hallmark/references/macrostructures/08-photographic.md +34 -0
- package/templates/vite/.howone/skills/hallmark/references/macrostructures/09-quote-led.md +32 -0
- package/templates/vite/.howone/skills/hallmark/references/macrostructures/10-specimen.md +32 -0
- package/templates/vite/.howone/skills/hallmark/references/macrostructures/11-catalogue.md +23 -0
- package/templates/vite/.howone/skills/hallmark/references/macrostructures/12-letter.md +23 -0
- package/templates/vite/.howone/skills/hallmark/references/macrostructures/13-index-first.md +23 -0
- package/templates/vite/.howone/skills/hallmark/references/macrostructures/14-narrative-workflow.md +23 -0
- package/templates/vite/.howone/skills/hallmark/references/macrostructures/15-split-studio.md +23 -0
- package/templates/vite/.howone/skills/hallmark/references/macrostructures/16-feature-stack.md +23 -0
- package/templates/vite/.howone/skills/hallmark/references/macrostructures/17-type-specimen.md +23 -0
- package/templates/vite/.howone/skills/hallmark/references/macrostructures/18-portfolio-grid.md +23 -0
- package/templates/vite/.howone/skills/hallmark/references/macrostructures/19-map-diagram.md +23 -0
- package/templates/vite/.howone/skills/hallmark/references/macrostructures/20-ecosystem-index.md +23 -0
- package/templates/vite/.howone/skills/hallmark/references/macrostructures/21-component-playground.md +23 -0
- package/templates/vite/.howone/skills/hallmark/references/macrostructures.md +89 -0
- package/templates/vite/.howone/skills/hallmark/references/microinteractions.md +260 -0
- package/templates/vite/.howone/skills/hallmark/references/motion.md +109 -0
- package/templates/vite/.howone/skills/hallmark/references/preview-examples.md +49 -0
- package/templates/vite/.howone/skills/hallmark/references/responsive.md +138 -0
- package/templates/vite/.howone/skills/hallmark/references/slop-test.md +205 -0
- package/templates/vite/.howone/skills/hallmark/references/structure.md +164 -0
- package/templates/vite/.howone/skills/hallmark/references/study.md +486 -0
- package/templates/vite/.howone/skills/hallmark/references/typography.md +243 -0
- package/templates/vite/.howone/skills/hallmark/references/verbs/audit.md +25 -0
- package/templates/vite/.howone/skills/hallmark/references/verbs/redesign.md +269 -0
- package/templates/vite/.howone/skills/hallmark/site/OG-hallmark.png +0 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/01-tide-podcast/brief.md +71 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/01-tide-podcast/index.html +64 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/01-tide-podcast/style.css +240 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/02-streampipe-cli/brief.md +65 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/02-streampipe-cli/index.html +105 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/02-streampipe-cli/style.css +250 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/03-maple-bakery/brief.md +64 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/03-maple-bakery/index.html +131 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/03-maple-bakery/style.css +240 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/04-meridian-manifesto/brief.md +67 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/04-meridian-manifesto/index.html +86 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/04-meridian-manifesto/style.css +262 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/05-tracejam-saas/brief.md +63 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/05-tracejam-saas/index.html +167 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/05-tracejam-saas/style.css +457 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/06-anya-portfolio/brief.md +65 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/06-anya-portfolio/index.html +159 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/06-anya-portfolio/style.css +288 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/07-foundry-compliance/brief.md +64 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/07-foundry-compliance/index.html +146 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/07-foundry-compliance/style.css +484 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/08-cohort-courses/brief.md +64 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/08-cohort-courses/index.html +116 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/08-cohort-courses/style.css +354 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/09-slow-pour/index.html +638 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/10-owl-hours/index.html +515 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/11-soroe-ceramics/index.html +515 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/12-loafer/index.html +608 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/13-alma/index.html +587 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/README.md +157 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/BananaStudio-loop.mp4 +0 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/BananaStudio-still.jpg +0 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/Hyperlane-example.mp4 +0 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/Hyperlane-still.jpg +0 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/Najm-loop.mp4 +0 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/Najm-still.jpg +0 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/Podcast-loop.mp4 +0 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/SaaS-loop.mp4 +0 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/SaaS-still.jpg +0 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/Soroe-loop.mp4 +0 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/Soroe-still.jpg +0 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/after-quiet-hour.png +0 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/anya-loop.mp4 +0 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/anya-still.jpg +0 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/audit-example.png +0 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/before-quiet-hour.png +0 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/example-redesign-uractivation.png +0 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/slow-pour-loop.mp4 +0 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/slow-pour-still.jpg +0 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/study-example.png +0 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/uractivation-after-loop.mp4 +0 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/wayfare-loop.mp4 +0 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/wayfare-still.jpg +0 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/custom/01-coffeebox/index.html +77 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/custom/01-coffeebox/style.css +238 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/custom/02-loop/index.html +110 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/custom/02-loop/style.css +326 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/custom/03-mossroot/index.html +134 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/custom/03-mossroot/style.css +262 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/custom/README.md +30 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/verbs/README.md +17 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/verbs/audit/audit-report.md +56 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/verbs/audit/input.html +160 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/verbs/audit/notes.md +29 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/verbs/redesign/input.html +63 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/verbs/redesign/notes.md +72 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/verbs/redesign/output.html +374 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/verbs/study/diagnosis.md +52 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/verbs/study/input-description.md +29 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/verbs/study/notes.md +61 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/verbs/study/output.css +193 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/verbs/study/output.html +66 -0
- package/templates/vite/.howone/skills/hallmark/site/css/base.css +194 -0
- package/templates/vite/.howone/skills/hallmark/site/css/components.css +4886 -0
- package/templates/vite/.howone/skills/hallmark/site/css/sections.css +2072 -0
- package/templates/vite/.howone/skills/hallmark/site/css/tokens.css +1129 -0
- package/templates/vite/.howone/skills/hallmark/site/examples/bananastudio/index.html +475 -0
- package/templates/vite/.howone/skills/hallmark/site/examples/bananastudio/styles.css +1584 -0
- package/templates/vite/.howone/skills/hallmark/site/examples/bananastudio/tokens.css +96 -0
- package/templates/vite/.howone/skills/hallmark/site/examples/hyperlane/index.html +344 -0
- package/templates/vite/.howone/skills/hallmark/site/examples/hyperlane/script.js +103 -0
- package/templates/vite/.howone/skills/hallmark/site/examples/hyperlane/styles.css +1103 -0
- package/templates/vite/.howone/skills/hallmark/site/examples/hyperlane/tokens.css +83 -0
- package/templates/vite/.howone/skills/hallmark/site/examples/najm/index.html +368 -0
- package/templates/vite/.howone/skills/hallmark/site/examples/najm/script.js +133 -0
- package/templates/vite/.howone/skills/hallmark/site/examples/najm/styles.css +1062 -0
- package/templates/vite/.howone/skills/hallmark/site/examples/najm/tokens.css +97 -0
- package/templates/vite/.howone/skills/hallmark/site/examples/tally/app.js +84 -0
- package/templates/vite/.howone/skills/hallmark/site/examples/tally/index.html +446 -0
- package/templates/vite/.howone/skills/hallmark/site/examples/tally/styles.css +1087 -0
- package/templates/vite/.howone/skills/hallmark/site/examples/tally/tokens.css +101 -0
- package/templates/vite/.howone/skills/hallmark/site/examples/wayfare/index.html +359 -0
- package/templates/vite/.howone/skills/hallmark/site/examples/wayfare/style.css +1168 -0
- package/templates/vite/.howone/skills/hallmark/site/examples/wayfare/tokens.css +81 -0
- package/templates/vite/.howone/skills/hallmark/site/favicon-dark.svg +5 -0
- package/templates/vite/.howone/skills/hallmark/site/favicon-light.svg +5 -0
- package/templates/vite/.howone/skills/hallmark/site/index.html +1043 -0
- package/templates/vite/.howone/skills/hallmark/site/js/main.js +1175 -0
- package/templates/vite/.howone/skills/hallmark/vercel.json +6 -0
- package/templates/vite/.howone/skills/howone-sdk/01-architect/01-app-generation.md +101 -0
- package/templates/vite/.howone/skills/howone-sdk/02-database/01-schema-design.md +147 -0
- package/templates/vite/.howone/skills/howone-sdk/02-database/02-schema-operations.md +96 -0
- package/templates/vite/.howone/skills/howone-sdk/02-database/03-data-access-patterns.md +172 -0
- package/templates/vite/.howone/skills/howone-sdk/{references → 03-sdk}/01-client-setup.md +3 -3
- package/templates/vite/.howone/skills/howone-sdk/{references/04-auth.md → 03-sdk/03-auth.md} +120 -3
- package/templates/vite/.howone/skills/howone-sdk/04-ai/.gitkeep +1 -0
- package/templates/vite/.howone/skills/howone-sdk/SKILL.md +67 -93
- package/templates/vite/.howone/skills/howone-sdk/agents/openai.yaml +3 -3
- package/templates/vite/.howone/skills/impeccable/SKILL.md +168 -0
- package/templates/vite/.howone/skills/impeccable/agents/impeccable-asset-producer.md +101 -0
- package/templates/vite/.howone/skills/impeccable/reference/adapt.md +190 -0
- package/templates/vite/.howone/skills/impeccable/reference/animate.md +175 -0
- package/templates/vite/.howone/skills/impeccable/reference/audit.md +133 -0
- package/templates/vite/.howone/skills/impeccable/reference/bolder.md +113 -0
- package/templates/vite/.howone/skills/impeccable/reference/brand.md +118 -0
- package/templates/vite/.howone/skills/impeccable/reference/clarify.md +174 -0
- package/templates/vite/.howone/skills/impeccable/reference/codex.md +105 -0
- package/templates/vite/.howone/skills/impeccable/reference/cognitive-load.md +106 -0
- package/templates/vite/.howone/skills/impeccable/reference/color-and-contrast.md +105 -0
- package/templates/vite/.howone/skills/impeccable/reference/colorize.md +154 -0
- package/templates/vite/.howone/skills/impeccable/reference/craft.md +123 -0
- package/templates/vite/.howone/skills/impeccable/reference/critique.md +273 -0
- package/templates/vite/.howone/skills/impeccable/reference/delight.md +302 -0
- package/templates/vite/.howone/skills/impeccable/reference/distill.md +111 -0
- package/templates/vite/.howone/skills/impeccable/reference/document.md +427 -0
- package/templates/vite/.howone/skills/impeccable/reference/extract.md +69 -0
- package/templates/vite/.howone/skills/impeccable/reference/harden.md +347 -0
- package/templates/vite/.howone/skills/impeccable/reference/heuristics-scoring.md +234 -0
- package/templates/vite/.howone/skills/impeccable/reference/interaction-design.md +195 -0
- package/templates/vite/.howone/skills/impeccable/reference/layout.md +141 -0
- package/templates/vite/.howone/skills/impeccable/reference/live.md +622 -0
- package/templates/vite/.howone/skills/impeccable/reference/motion-design.md +109 -0
- package/templates/vite/.howone/skills/impeccable/reference/onboard.md +234 -0
- package/templates/vite/.howone/skills/impeccable/reference/optimize.md +258 -0
- package/templates/vite/.howone/skills/impeccable/reference/overdrive.md +130 -0
- package/templates/vite/.howone/skills/impeccable/reference/personas.md +179 -0
- package/templates/vite/.howone/skills/impeccable/reference/polish.md +242 -0
- package/templates/vite/.howone/skills/impeccable/reference/product.md +62 -0
- package/templates/vite/.howone/skills/impeccable/reference/quieter.md +99 -0
- package/templates/vite/.howone/skills/impeccable/reference/responsive-design.md +114 -0
- package/templates/vite/.howone/skills/impeccable/reference/shape.md +165 -0
- package/templates/vite/.howone/skills/impeccable/reference/spatial-design.md +100 -0
- package/templates/vite/.howone/skills/impeccable/reference/teach.md +156 -0
- package/templates/vite/.howone/skills/impeccable/reference/typeset.md +124 -0
- package/templates/vite/.howone/skills/impeccable/reference/typography.md +159 -0
- package/templates/vite/.howone/skills/impeccable/reference/ux-writing.md +107 -0
- package/templates/vite/.howone/skills/impeccable/scripts/cleanup-deprecated.mjs +284 -0
- package/templates/vite/.howone/skills/impeccable/scripts/command-metadata.json +94 -0
- package/templates/vite/.howone/skills/impeccable/scripts/critique-storage.mjs +242 -0
- package/templates/vite/.howone/skills/impeccable/scripts/design-parser.mjs +820 -0
- package/templates/vite/.howone/skills/impeccable/scripts/detect-csp.mjs +198 -0
- package/templates/vite/.howone/skills/impeccable/scripts/detect.mjs +21 -0
- package/templates/vite/.howone/skills/impeccable/scripts/impeccable-paths.mjs +110 -0
- package/templates/vite/.howone/skills/impeccable/scripts/is-generated.mjs +69 -0
- package/templates/vite/.howone/skills/impeccable/scripts/live-accept.mjs +595 -0
- package/templates/vite/.howone/skills/impeccable/scripts/live-browser-session.js +123 -0
- package/templates/vite/.howone/skills/impeccable/scripts/live-browser.js +4860 -0
- package/templates/vite/.howone/skills/impeccable/scripts/live-complete.mjs +75 -0
- package/templates/vite/.howone/skills/impeccable/scripts/live-completion.mjs +18 -0
- package/templates/vite/.howone/skills/impeccable/scripts/live-inject.mjs +446 -0
- package/templates/vite/.howone/skills/impeccable/scripts/live-poll.mjs +200 -0
- package/templates/vite/.howone/skills/impeccable/scripts/live-resume.mjs +48 -0
- package/templates/vite/.howone/skills/impeccable/scripts/live-server.mjs +838 -0
- package/templates/vite/.howone/skills/impeccable/scripts/live-session-store.mjs +254 -0
- package/templates/vite/.howone/skills/impeccable/scripts/live-status.mjs +47 -0
- package/templates/vite/.howone/skills/impeccable/scripts/live-wrap.mjs +632 -0
- package/templates/vite/.howone/skills/impeccable/scripts/live.mjs +247 -0
- package/templates/vite/.howone/skills/impeccable/scripts/load-context.mjs +141 -0
- package/templates/vite/.howone/skills/impeccable/scripts/modern-screenshot.umd.js +14 -0
- package/templates/vite/.howone/skills/impeccable/scripts/pin.mjs +214 -0
- package/templates/vite/AGENTS.md +2 -3
- package/templates/vite/package.json +1 -1
- /package/templates/vite/.howone/skills/howone-sdk/{references/08-manifest-codegen.md → 01-architect/02-manifest-codegen.md} +0 -0
- /package/templates/vite/.howone/skills/howone-sdk/{references → 03-sdk}/02-entity-operations.md +0 -0
- /package/templates/vite/.howone/skills/howone-sdk/{references/06-react-integration.md → 03-sdk/04-react-integration.md} +0 -0
- /package/templates/vite/.howone/skills/howone-sdk/{references → 03-sdk}/05-file-upload.md +0 -0
- /package/templates/vite/.howone/skills/howone-sdk/{references/07-raw-http.md → 03-sdk/06-raw-http.md} +0 -0
- /package/templates/vite/.howone/skills/howone-sdk/{references/03-ai-actions.md → 03-sdk/07-ai-action-calls.md} +0 -0
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
# Typography
|
|
2
|
+
|
|
3
|
+
Type carries the design. If the type is wrong, nothing else matters.
|
|
4
|
+
|
|
5
|
+
## Principles
|
|
6
|
+
|
|
7
|
+
- A page is a pairing, not a single font. Display face + body face, minimum. *Single-font pages are allowed only when the single font IS the design choice* — a true terminal aesthetic is monospace-everywhere on purpose; a Manifesto poster might be one display face on purpose. The default is a pairing.
|
|
8
|
+
- Commit to extremes. Weight 200 next to weight 800 reads as intentional. Weight 400 next to weight 600 reads as a default setting.
|
|
9
|
+
- Size steps should be ratios, not increments. Major third (1.25), perfect fourth (1.333), perfect fifth (1.5), or golden (1.618). Pick one and use it.
|
|
10
|
+
- Line-height changes with size. Tight for display (1.05–1.2), comfortable for body (1.5–1.65).
|
|
11
|
+
- Measure — line length — lives between 45 and 75 characters. Use `max-width: 65ch` as the default.
|
|
12
|
+
|
|
13
|
+
## The 2+1 rule — three faces is the ceiling
|
|
14
|
+
|
|
15
|
+
**A page may use at most three distinct font families.** One **display**, one **body**, and an optional **outlier** for a single typographic moment — wordmark, hero stat, pull quote, masthead — where the page wants exactly one note that doesn't sound like the rest. Four families is slop. Two is canonical. Three is the ceiling, used sparingly.
|
|
16
|
+
|
|
17
|
+
The pattern:
|
|
18
|
+
|
|
19
|
+
```css
|
|
20
|
+
:root {
|
|
21
|
+
--font-display: "Fraunces", ui-serif, Georgia, serif; /* headings, hero */
|
|
22
|
+
--font-body: "Geist", ui-sans-serif, system-ui, sans; /* prose, UI */
|
|
23
|
+
--font-outlier: "Geist Mono", ui-monospace, monospace; /* wordmark + hero stat ONLY */
|
|
24
|
+
}
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
The outlier is a *register*, not a third surface. Rules:
|
|
28
|
+
|
|
29
|
+
- **Outlier appears in ≤ 2 places** on the whole page. Wordmark + hero stat. Or pull quote + masthead. Two slots, not five. If you find yourself reaching for it a third time, you don't have an outlier — you have a third body font, which is slop.
|
|
30
|
+
- **The outlier carries one role.** It tags a specific kind of content (the brand, the headline figure, the manifesto line). Once you know what it tags, every instance of that role uses it. Don't apply it to one button label and not another.
|
|
31
|
+
- **Mono counts as a face.** A page with Fraunces display, Geist body, and Geist Mono in code blocks is using three families. That's fine — code is the outlier role. Don't sneak in a fourth.
|
|
32
|
+
- **Same family at different weights is one family**, not two. Geist 400 + Geist 700 is one font; pairing it with Fraunces is two. Adding Geist Mono on top is three.
|
|
33
|
+
|
|
34
|
+
Two families is still the right answer for most pages. Three is for SaaS / brand-heavy / editorial-rich pages where the wordmark needs a different register than the body.
|
|
35
|
+
|
|
36
|
+
## Banned defaults
|
|
37
|
+
|
|
38
|
+
These fonts are on-distribution for every LLM. Do not reach for them without a deliberate reason:
|
|
39
|
+
|
|
40
|
+
- **Sans-serif:** Inter, Roboto, Open Sans, Lato, Poppins, Source Sans, Nunito, Montserrat, Raleway, Work Sans, DM Sans, system-ui, Arial, Helvetica.
|
|
41
|
+
- **Serif:** Merriweather, Playfair Display (as body — banned as overused body serif; ok as display in moderation), Lora, Source Serif, Georgia-as-default.
|
|
42
|
+
- **Mono:** Courier New, Consolas-as-default, system mono.
|
|
43
|
+
|
|
44
|
+
If the user insists on one, do it. Otherwise pick from the allowlist below.
|
|
45
|
+
|
|
46
|
+
## The font catalog
|
|
47
|
+
|
|
48
|
+
Three sources, in priority order:
|
|
49
|
+
|
|
50
|
+
- **Google Fonts** — free, served via CDN, works everywhere. The default source.
|
|
51
|
+
- **Fontshare** (Indian Type Foundry) — free for commercial use, foundry-grade. The "you didn't know these were free" tier. Drop-in via `<link href="https://api.fontshare.com/v2/css?f=...">`.
|
|
52
|
+
- **Foundry-licensed** — Klim, Pangram Pangram, Production Type, Lineto, Colophon. Only when the user has confirmed they're licensed.
|
|
53
|
+
|
|
54
|
+
### Free display faces
|
|
55
|
+
|
|
56
|
+
| Family | Source | Voice | Best for |
|
|
57
|
+
| --- | --- | --- | --- |
|
|
58
|
+
| **Fraunces** | Google | Variable serif, deeply expressive italic, optical-size axis | Editorial, Salon, Atelier, brand-heavy |
|
|
59
|
+
| **Newsreader** | Google | Roman serif with optical-size + italic | Editorial, magazine, long-form |
|
|
60
|
+
| **Instrument Serif** | Google | Tight contrast, italic available, smart for short heads | Brand, atelier, intimate editorial |
|
|
61
|
+
| **Cormorant Garamond** | Google | Classical, high contrast, luxury register | Luxury, fashion, fine arts |
|
|
62
|
+
| **EB Garamond** | Google | Honest classical Garamond, body-grade | Editorial body, longform reading |
|
|
63
|
+
| **Cardo** | Google | Scholarly serif, generous x-height | Reference, academic, slow reading |
|
|
64
|
+
| **Source Serif 4** | Google | Modern transitional, big OT family | SaaS marketing with serif tone |
|
|
65
|
+
| **DM Serif Display** | Google | Bracketed serif, high-contrast display | Headlines that need to feel printed |
|
|
66
|
+
| **Bodoni Moda** | Google | Modern Bodoni revival, dramatic | Fashion, editorial, luxury display |
|
|
67
|
+
| **Playfair Display** | Google | Use only as display; banned as body | Marketing display moments — sparingly |
|
|
68
|
+
| **Geist** | Google | Modern grotesque, geometric, 7 weights | Modern minimal, SaaS, dev tools |
|
|
69
|
+
| **Inter Tight** | Google | Tighter Inter — allowed *only* as a body fallback in technical themes; never as display | UI body in restrained themes |
|
|
70
|
+
| **Bricolage Grotesque** | Google | Variable display sans, bold weights, condensable | Brutal, playful, riso-bold |
|
|
71
|
+
| **Space Grotesk** | Google | Geometric grotesque, slightly quirky | Brutalist, technical |
|
|
72
|
+
| **Anton** | Google | Heavy condensed grotesque | Posters, manifestos |
|
|
73
|
+
| **Big Shoulders Display** | Google | Industrial condensed | Sports, manifestos, declarative |
|
|
74
|
+
| **Tomorrow** | Google | Variable optical condensed | Tech, atmospheric, near-future |
|
|
75
|
+
| **Outfit** | Google | Modern geometric (banned as default; use only when *picked* deliberately) | Restrained tech — sparingly |
|
|
76
|
+
| **General Sans** | Fontshare | Modern grotesque, Geist-adjacent | Modern minimal alternative to Geist |
|
|
77
|
+
| **Switzer** | Fontshare | Neutral sans, broad weight range | SaaS body, restrained |
|
|
78
|
+
| **Cabinet Grotesk** | Fontshare | Display grotesque, 9 weights | Editorial display, magazine |
|
|
79
|
+
| **Clash Display** | Fontshare | Ultra-condensed display | Posters, brand moments |
|
|
80
|
+
| **Satoshi** | Fontshare | Playful geometric sans | Playful, consumer |
|
|
81
|
+
| **Sentient** | Fontshare | Variable serif, soft contrast | Soft editorial, atmospheric |
|
|
82
|
+
| **Erode** | Fontshare | Distressed serif, hand-set feel | Riso, tactile-rebellion, brand-y |
|
|
83
|
+
| **Tanker** | Fontshare | Heavy condensed grotesque, pure display | One-word posters, mastheads |
|
|
84
|
+
|
|
85
|
+
### Free body faces
|
|
86
|
+
|
|
87
|
+
| Family | Source | Voice | Best for |
|
|
88
|
+
| --- | --- | --- | --- |
|
|
89
|
+
| **Geist** | Google | The default modern body sans | Modern minimal, SaaS, atmospheric |
|
|
90
|
+
| **The Future** | (in repo) | Hallmark's own body workhorse | Default Hallmark tone |
|
|
91
|
+
| **Newsreader** | Google | Reading serif, optical-size aware | Editorial body, longform |
|
|
92
|
+
| **Source Serif 4** | Google | Body-grade serif | Editorial mid-weight |
|
|
93
|
+
| **EB Garamond** | Google | Classical body | Editorial slow reading |
|
|
94
|
+
| **Spectral** | Google | Slab-ish serif, screen-tuned | Long-form on screen |
|
|
95
|
+
| **Lora** | Google | Calligraphic serif, body-grade | Body — sparingly (over-used) |
|
|
96
|
+
| **Crimson Pro** | Google | Old-style body, generous | Editorial slow body |
|
|
97
|
+
| **IBM Plex Sans** | Google | Engineering sans, broad family | Technical body |
|
|
98
|
+
| **Switzer** | Fontshare | Neutral sans body | SaaS body, restrained |
|
|
99
|
+
| **General Sans** | Fontshare | Geist-adjacent body | Modern minimal body |
|
|
100
|
+
|
|
101
|
+
### Free mono / outlier faces
|
|
102
|
+
|
|
103
|
+
| Family | Source | Voice | Best for |
|
|
104
|
+
| --- | --- | --- | --- |
|
|
105
|
+
| **Geist Mono** | Google | Geist's mono companion | Default Hallmark mono, code, captions |
|
|
106
|
+
| **JetBrains Mono** | Google | Engineering mono, ligatures | Code, terminal, technical |
|
|
107
|
+
| **IBM Plex Mono** | Google | Engineering mono, broad family | Technical body-grade |
|
|
108
|
+
| **Commit Mono** | Google | Tighter mono, modern | Code, modern terminal |
|
|
109
|
+
| **Space Mono** | Google | Quirky, slightly retro | Playful tech, riso |
|
|
110
|
+
|
|
111
|
+
### Tone-based pairing patterns
|
|
112
|
+
|
|
113
|
+
Each tone gets two rows: a **free baseline** (Google Fonts / Fontshare; works out of the box) and a **paid upgrade** (foundry licences required; only when the user has confirmed the budget and the licence). The free row is the default. **Never name a paid font in code without confirming the user is licensed** — the demo will fall back to system-default and look broken to the user.
|
|
114
|
+
|
|
115
|
+
| Tone | Tier | Display | Body | Outlier |
|
|
116
|
+
| --- | --- | --- | --- | --- |
|
|
117
|
+
| **Editorial** | Free | Fraunces · Newsreader · EB Garamond · Instrument Serif · Cabinet Grotesk | IBM Plex Sans · Switzer · Source Serif 4 | JetBrains Mono · Geist Mono · Erode (display moment) |
|
|
118
|
+
| | *Paid* | *Tiempos Headline · Söhne Breit · Reckless Display · Migra · Tobias* | *Söhne · Haffer · Untitled Sans* | *Söhne Mono · GT America Mono* |
|
|
119
|
+
| **Technical** | Free | JetBrains Mono · Geist Mono · Geist (700) · Commit Mono | Geist · IBM Plex Sans · Switzer | Tomorrow · Cabinet Grotesk (wordmark) |
|
|
120
|
+
| | *Paid* | *Berkeley Mono · Söhne Mono · GT Pressura · ABC Diatype Mono* | *Söhne · Untitled Sans · ABC Diatype* | *Berkeley Mono · GT Pressura Mono* |
|
|
121
|
+
| **Brutalist** | Free | Bricolage Grotesque (800) · Anton · Tanker · Big Shoulders Display | Geist · Switzer | Space Grotesk (numerals) · Geist Mono |
|
|
122
|
+
| | *Paid* | *Druk · Monument Extended · NaN Jaune · Migra · ABC Pressura* | *Söhne Breit · GT America* | *GT America Mono* |
|
|
123
|
+
| **Soft** | Free | Geist · Bricolage Grotesque (500) · Sentient · Newsreader | Geist · Crimson Pro · Switzer | Geist Mono · Satoshi (label) |
|
|
124
|
+
| | *Paid* | *Söhne · GT Pressura · Pangaia · Tobias* | *Söhne · Halyard Text · Satoshi* | *Söhne Mono · GT Maru Mono* |
|
|
125
|
+
| **Luxury** | Free | Cormorant Garamond · Fraunces · Cardo · DM Serif Display · Bodoni Moda | EB Garamond · Crimson Pro · Source Serif 4 | (rare; small caps from display family) |
|
|
126
|
+
| | *Paid* | *Canela · Tiempos Headline · GT Super · Domaine Display · Migra* | *Tiempos Text · Suisse Int'l · Domaine Text* | *(rarely used at this tier)* |
|
|
127
|
+
| **Playful** | Free | Bricolage Grotesque · Fraunces (italic) · Satoshi · Newsreader (italic) · Sentient | Geist · Newsreader · Satoshi | Geist Mono · Space Mono |
|
|
128
|
+
| | *Paid* | *Clash Display · Cabinet Grotesk · Migra · Tobias · Pangaia* | *Satoshi · Plus Jakarta Sans · GT Maru* | *Space Mono · GT Maru Mono* |
|
|
129
|
+
| **Austere** | Free | system-ui · Inter Tight (regular) · Geist (400) · Switzer (regular) | system-ui · Geist · Switzer | system-ui mono · Geist Mono |
|
|
130
|
+
| | *Paid* | *ABC Diatype · ABC Monument Grotesk · Söhne (regular) · ABC Pressura* | *ABC Diatype · Söhne* | *ABC Diatype Mono · Söhne Mono* |
|
|
131
|
+
| **Atmospheric** | Free | Geist (600) · Sentient · Tomorrow · Bricolage Grotesque | Geist (400) · Switzer | Geist Mono · JetBrains Mono |
|
|
132
|
+
| | *Paid* | *Söhne · GT Pressura · ABC Diatype* | *Söhne · ABC Diatype* | *Berkeley Mono · Söhne Mono* |
|
|
133
|
+
| **Workshop** *(Hallmark's own theme)* | Free | The Future · Geist · Cabinet Grotesk | The Future · Switzer | The Future Mono · Geist Mono |
|
|
134
|
+
| | *Paid* | *Avenir Next · GT Walsheim* | *Söhne · GT Walsheim* | *Berkeley Mono* |
|
|
135
|
+
|
|
136
|
+
**The discipline.** Default to the free pairings. They're not consolation prizes; Fraunces, Geist, Bricolage Grotesque, Cabinet Grotesk, Sentient, and JetBrains Mono are first-rate faces in 2026. The paid upgrades exist for two cases: (a) the user has explicitly confirmed they're licensed, or (b) the user is asking for a specific named foundry voice (e.g., "make it look like Klim", "I want Söhne"). Reach for Tier 2 only then; otherwise the free row is the right answer. Treat the free row as canon, the paid row as a *cited* alternative.
|
|
137
|
+
|
|
138
|
+
## Wordmark / logo typography
|
|
139
|
+
|
|
140
|
+
The wordmark in the navbar and footer **may use a different display face than the body**. On tone-rich themes (Editorial, Salon, Atelier, Linen, Quiet) it **should** — collapsing the wordmark into the body family flattens the visual hierarchy and the page reads as un-branded.
|
|
141
|
+
|
|
142
|
+
```css
|
|
143
|
+
:root {
|
|
144
|
+
--display: "Geist", system-ui, sans-serif; /* body + display */
|
|
145
|
+
--font-wordmark: "Fraunces", Georgia, serif; /* logo only */
|
|
146
|
+
}
|
|
147
|
+
.wordmark {
|
|
148
|
+
font-family: var(--font-wordmark);
|
|
149
|
+
font-weight: 600;
|
|
150
|
+
letter-spacing: -0.015em;
|
|
151
|
+
}
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
Recommended pairings (free baseline first):
|
|
155
|
+
|
|
156
|
+
- **Geist body → Fraunces wordmark, IBM Plex Mono wordmark, or Bricolage Grotesque (heavy) wordmark**
|
|
157
|
+
- **Fraunces body → Geist Mono wordmark, Inter Tight wordmark**
|
|
158
|
+
- **System-ui body → JetBrains Mono wordmark, Newsreader wordmark**
|
|
159
|
+
- **Inter Tight body → Fraunces wordmark, EB Garamond wordmark**
|
|
160
|
+
|
|
161
|
+
When to use the same family for both:
|
|
162
|
+
|
|
163
|
+
- **Editorial · Letter · Manifesto · Long Document** can collapse to a single family because the body voice carries the brand. The wordmark in these contexts is small, grounded, and earns its weight by being typeset rather than decorated.
|
|
164
|
+
|
|
165
|
+
When to use a contrasting family:
|
|
166
|
+
|
|
167
|
+
- **Bento Grid · Stat-Led · Workbench · Marquee Hero** — these archetypes lean visually generic (geometric grids, big numbers, browser-frame mockups) and need the wordmark to do the typographic differentiation work the body can't.
|
|
168
|
+
|
|
169
|
+
**Avoid the same-family collapse on a SaaS page.** A Geist-only page where the wordmark is also Geist 600 reads as un-designed; the wordmark in Fraunces SemiBold over a Geist body costs nothing and adds the one typographic register that says *this is a brand*.
|
|
170
|
+
|
|
171
|
+
## Scale
|
|
172
|
+
|
|
173
|
+
Pick a ratio. The default for Hallmark work is **1.25** (major third). Build the scale from a 16px body, then clamp display sizes for responsive.
|
|
174
|
+
|
|
175
|
+
```css
|
|
176
|
+
:root {
|
|
177
|
+
--text-xs: 0.64rem; /* 10.24px */
|
|
178
|
+
--text-sm: 0.8rem; /* 12.8px */
|
|
179
|
+
--text-base: 1rem; /* 16px */
|
|
180
|
+
--text-md: 1.25rem; /* 20px */
|
|
181
|
+
--text-lg: 1.5625rem; /* 25px */
|
|
182
|
+
--text-xl: 1.9531rem; /* 31.25px */
|
|
183
|
+
--text-2xl: 2.4414rem;
|
|
184
|
+
--text-3xl: 3.0518rem;
|
|
185
|
+
--text-4xl: 3.8147rem;
|
|
186
|
+
--text-display: clamp(2.75rem, 5vw + 1rem, 5.25rem);
|
|
187
|
+
}
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
**Display max — keep it ≤ 5.5rem (88 px).** Above that, hero headlines crowd themselves on 1280–1440 px viewports and require multi-line wrapping that almost always reads as drama, not gravity. Even on Manifesto / Brutal display-heavy themes, cap at 6rem (96 px). The exception is a single-line, single-word display (e.g. a stat) that occupies ≤ 12 ch — it can grow to 7rem. **Default emit format is `clamp(2.75rem, 5vw + 1rem, 5.25rem)`.**
|
|
191
|
+
|
|
192
|
+
### Hero headline sizing — match size to copy length
|
|
193
|
+
|
|
194
|
+
Count characters in the rendered hero `h1`. Pick the cap by bucket — the rule applies on top of any per-theme `--text-display` clamp:
|
|
195
|
+
|
|
196
|
+
| Headline length | Size cap | Notes |
|
|
197
|
+
| --- | --- | --- |
|
|
198
|
+
| **≤ 20 chars** (e.g. *"Limitless"*, *"Made not generated"*) | full `--text-display`; single-word can grow to 7rem | Display-heavy themes only |
|
|
199
|
+
| **21–50 chars** (the default sweet spot) | `--text-display` | If it wraps past 2 lines at 414 px, step down to `--text-display-s` |
|
|
200
|
+
| **51–90 chars** | cap at `--text-display-s` | Strongly consider splitting into eyebrow + headline |
|
|
201
|
+
| **> 90 chars** | rewrite shorter, or cap at `--text-4xl` with tighter leading | A 100-char headline at display size is the single most reliable AI tell |
|
|
202
|
+
|
|
203
|
+
**Aggressive-display themes step down one rung when headline > 50 chars.** Brutal, Riso, and Manifesto clamp `--text-display` at 6.5–9rem — that ceiling is for ≤ 50-char statements only. Past 50 chars, route them to `--text-display-s` automatically. **When you write the headline yourself (no user-supplied copy), aim for ≤ 7 words and ≤ 50 chars from the start** — imperative or nominal phrase, never a gerund opener.
|
|
204
|
+
|
|
205
|
+
Use no more than five sizes on a single page. If you need more hierarchy, use weight and colour, not another size.
|
|
206
|
+
|
|
207
|
+
## Weights
|
|
208
|
+
|
|
209
|
+
- Body: one weight (typically 400 or 350). Bold for emphasis only.
|
|
210
|
+
- Headings: a weight that contrasts the body by at least 300 units. If body is 400, headings are 700 or 200 — not 500 or 600.
|
|
211
|
+
- Never synthesise. Load the weight you need; don't rely on `font-weight: bold` against a single-weight file.
|
|
212
|
+
|
|
213
|
+
## Required features
|
|
214
|
+
|
|
215
|
+
- `font-display: swap` on every web font.
|
|
216
|
+
- Match fallback metrics with `size-adjust`, `ascent-override`, `descent-override`, `line-gap-override` to prevent CLS.
|
|
217
|
+
- Tabular numbers on any data display: `font-variant-numeric: tabular-nums;`.
|
|
218
|
+
- Oldstyle figures for body copy where the face supports them: `font-variant-numeric: oldstyle-nums;`.
|
|
219
|
+
- Proper typographic punctuation: `" " — … ‘ ’`. Never straight quotes, never `--` or `...`.
|
|
220
|
+
|
|
221
|
+
## Body text rules
|
|
222
|
+
|
|
223
|
+
- Minimum 16px. Below 14px is accessibility-hostile.
|
|
224
|
+
- Line-height 1.5–1.65 on body copy, tighter (1.1–1.3) on display. **Floor for all-caps display heads (`text-transform: uppercase` on `.hero__display` / `.section__title` / `h1` / `h2`) is `1.0` — recommended `1.02–1.08`.** Below 1.0 the cap-tops of line N+1 collide with the baseline of line N (no descenders to cushion the gap); the comma + cap-D on a wrapped "PROMPT, / DIFFERENT" fuse into a single glyph blob. Condensed display faces (Anton, Inter Tight 900, Bebas Neue) make this worse. Gate 67 auto-fails the pattern.
|
|
225
|
+
- Measure 45–75 characters (`max-width: 65ch`).
|
|
226
|
+
- Never all-caps body copy. Never justified text without hyphenation. Never letter-spacing above 0.05em on body.
|
|
227
|
+
|
|
228
|
+
## Headings rules
|
|
229
|
+
|
|
230
|
+
- Tight tracking on display sizes (`letter-spacing: -0.02em` to `-0.04em` depending on the face).
|
|
231
|
+
- Loose tracking on small caps / labels (`letter-spacing: 0.08em` to `0.14em`, `text-transform: uppercase`, use small caps if the face has them: `font-variant-caps: all-small-caps;`).
|
|
232
|
+
- Skip no levels. `h1` → `h2` → `h3`. Style them visually how you like, but keep semantic order.
|
|
233
|
+
|
|
234
|
+
## Bans
|
|
235
|
+
|
|
236
|
+
- No Inter, no Roboto, no Open Sans. No system stack as the *only* stack.
|
|
237
|
+
- No gradient text on headings (`background-clip: text` with a gradient fill).
|
|
238
|
+
- No single-font pages.
|
|
239
|
+
- No all-caps paragraphs.
|
|
240
|
+
- No font-size below 14px for body copy, below 10px anywhere.
|
|
241
|
+
- No hard-synthesised bold or italic.
|
|
242
|
+
- **No more than three font families on a single page.** Display + body + one outlier is the ceiling. Four families = slop. Audit gate.
|
|
243
|
+
- No outlier face used in more than two slots. Wordmark + hero stat is the canonical pair; if you reach for a third slot, drop it back to the body face.
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# `hallmark audit`
|
|
2
|
+
|
|
3
|
+
Read the file(s) the user pointed at. For each finding, return:
|
|
4
|
+
|
|
5
|
+
- **Tell** — the named anti-pattern from [`anti-patterns.md`](../anti-patterns.md).
|
|
6
|
+
- **Where** — file path and line range.
|
|
7
|
+
- **Severity** — `critical` (ships as slop), `major` (looks AI-generated), `minor` (small taste issue).
|
|
8
|
+
- **Fix** — one-line concrete correction.
|
|
9
|
+
|
|
10
|
+
Group by severity. Do not edit. Do not redesign. End with a count: `N critical · M major · K minor`.
|
|
11
|
+
|
|
12
|
+
Audit *also* checks structural fingerprint: if the page uses the AI template (centered hero, 3 equal feature cards, CTA, footer, with no asymmetry or surprise), flag it as a critical structural finding even if the visual treatment is fine.
|
|
13
|
+
|
|
14
|
+
**Stamp-vs-page check.** If the audited file contains a `/* Hallmark · macrostructure: <name> · ... */` stamp, verify the page actually matches that name. If the stamp says **Bento Grid** but the page is a centered single-column hero with a CTA, flag it as a critical structural finding: `stamp lies` — the stamp must reflect what shipped or be removed. This catches drift where a previous Hallmark run stamped one thing and a later edit pulled the page back toward the AI template.
|
|
15
|
+
|
|
16
|
+
**Genre-aware audit.** If the audited file's stamp names a genre (e.g. `genre: atmospheric`), apply the genre-scoped overrides from [`slop-test.md`](../slop-test.md) when grading. A radial-gradient background is a critical tell for editorial — but allowed for atmospheric. A pure-white paper is a tell for editorial — but allowed for modern-minimal. The audit verb must respect the genre the page declared.
|
|
17
|
+
|
|
18
|
+
**`design.md` audit.** If the project root has a `design.md` (or `DESIGN.md`), read it before grading. Then check every audited page against the system:
|
|
19
|
+
|
|
20
|
+
- **Theme drift.** Page uses tokens / fonts / accent that don't match `design.md`'s declared system → flag as `critical: design-system drift`. Per-page theme picks are slop on a system-managed project even if each page is internally fine.
|
|
21
|
+
- **Macrostructure family violation.** `design.md` says marketing pages use Marquee Hero or Stat-Led — the audited page is a Letter format → flag as `major: outside design.md family`.
|
|
22
|
+
- **Stamp mismatch.** The page's CSS stamp says `designed-as-app` but reads `design-system: design.md` and the page actually drifts from `design.md` → flag as `critical: stamp lies`. The stamp claims compliance the code doesn't deliver.
|
|
23
|
+
- **No stamp at all on a system-managed project** → flag as `major: missing system reference`. Every page on a `design.md` project must stamp its allegiance to the system.
|
|
24
|
+
|
|
25
|
+
Inversely, on a project *without* `design.md`, the standard diversification rule applies — flag pages that share macrostructure / theme with a previous Hallmark output as `minor: variety drift`.
|
|
@@ -0,0 +1,269 @@
|
|
|
1
|
+
# `hallmark redesign`
|
|
2
|
+
|
|
3
|
+
The user wants a different page from the same content. They are not happy with the current visual structure — typically because it reads as templated, generic, or AI-shaped. Your job is to redesign the page's structure, rhythm, and component voice while respecting the existing implementation boundaries unless the user explicitly confirms a full rebuild.
|
|
4
|
+
|
|
5
|
+
## Non-destructive implementation rule
|
|
6
|
+
|
|
7
|
+
Hallmark redesigns visual and interaction layers. It does not delete production files by default.
|
|
8
|
+
|
|
9
|
+
- Never delete existing route files, component directories, page trees, or the old website unless the user explicitly asks for deletion or approves a file-level plan that lists the deletions.
|
|
10
|
+
- Default to in-place edits of the named page/component files, or additive new components/tokens wired through the existing route.
|
|
11
|
+
- If the redesign would require removing multiple components, replacing a route tree, or collapsing the app into a single new page, stop and ask for confirmation first.
|
|
12
|
+
- Treat PDFs, README files, `.md` briefs, docs, transcripts, and pitch decks as source material for understanding the product. They are not page copy by default. Summarize and adapt them unless the user explicitly says to use their wording verbatim.
|
|
13
|
+
- Before editing, state the files you expect to modify, create, and delete. Any deletion needs explicit confirmation.
|
|
14
|
+
|
|
15
|
+
## Step 0 · Detect scope first
|
|
16
|
+
|
|
17
|
+
Before anything else, decide whether the redesign is **single-page** or **multi-page**. The behaviour diverges hard.
|
|
18
|
+
|
|
19
|
+
**Multi-page signals (any one fires):**
|
|
20
|
+
- The target is a directory (e.g. `./app/`, `./pages/`, `./src/routes/`).
|
|
21
|
+
- The target is a glob (`**/*.tsx`, `app/*/page.tsx`).
|
|
22
|
+
- The user names more than one file in the brief (`./hero.tsx and ./pricing.tsx`).
|
|
23
|
+
- The user says "the whole site", "every page", "the app", "all the pages", "the marketing site".
|
|
24
|
+
- The codebase has multiple route files (`app/page.tsx`, `app/about/page.tsx`, `app/pricing/page.tsx`, etc.) and the user pointed at the project root.
|
|
25
|
+
|
|
26
|
+
If any of those fires → **multi-page redesign**. Go to § Multi-page flow.
|
|
27
|
+
If none fires → **single-page redesign**. Go to § Single-page flow.
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## § Multi-page flow — design.md first, then redesign
|
|
32
|
+
|
|
33
|
+
A web app needs a *design system*, not seventeen unrelated theme pickings. Hallmark's diversification rule is wrong here: across pages of the same product, **consistency is the goal, not variety**. If you redesign every page with a different macrostructure / theme / accent, you've shipped a slop split-personality app, even if each individual page is fine.
|
|
34
|
+
|
|
35
|
+
The flow is:
|
|
36
|
+
|
|
37
|
+
### 1. Read the project, then pause
|
|
38
|
+
|
|
39
|
+
Before redesigning a single file:
|
|
40
|
+
|
|
41
|
+
- Walk the target directory. List every page-level file you found, with a one-line description of what it does. (Hero / pricing / docs / dashboard / etc.)
|
|
42
|
+
- Note any existing design assets: a `tokens.css`, a tailwind config with brand values, a logo, brand colours mentioned in `README`, a marketing screenshot.
|
|
43
|
+
- Check for an existing `.hallmark/log.json` — if it has prior runs, read the most recent stamp; if all those entries are different macrostructures / themes, it confirms the user's complaint.
|
|
44
|
+
|
|
45
|
+
### 2. Produce `design.md` at the project root
|
|
46
|
+
|
|
47
|
+
Write a single file at the project root: `design.md` (or `DESIGN.md` — match the project's existing case convention). This file is the **one source of truth** every subsequent page redesign reads. Format:
|
|
48
|
+
|
|
49
|
+
````markdown
|
|
50
|
+
# Design — <Project name>
|
|
51
|
+
|
|
52
|
+
A locked design system for this app. Every page redesign reads this file before
|
|
53
|
+
emitting code. Do not regenerate per page — extend or amend this file when the
|
|
54
|
+
system needs to grow.
|
|
55
|
+
|
|
56
|
+
## Genre
|
|
57
|
+
<editorial · modern-minimal · atmospheric · playful>
|
|
58
|
+
|
|
59
|
+
## Macrostructure family
|
|
60
|
+
Pick one base macrostructure for marketing pages, one for app pages, one for
|
|
61
|
+
content pages (if applicable). Pages within a family share the family's shape;
|
|
62
|
+
they vary only in component archetypes.
|
|
63
|
+
|
|
64
|
+
- Marketing pages: <macrostructure name + the 1–2 archetypes that vary>
|
|
65
|
+
- App pages: <macrostructure name + variation knobs>
|
|
66
|
+
- Content pages: <macrostructure name + variation knobs>
|
|
67
|
+
|
|
68
|
+
## Theme
|
|
69
|
+
- `--color-paper` oklch(<L> <C> <H>)
|
|
70
|
+
- `--color-paper-2` oklch(<L> <C> <H>)
|
|
71
|
+
- `--color-ink` oklch(<L> <C> <H>)
|
|
72
|
+
- `--color-ink-2` oklch(<L> <C> <H>)
|
|
73
|
+
- `--color-rule` oklch(<L> <C> <H>)
|
|
74
|
+
- `--color-accent` oklch(<L> <C> <H>)
|
|
75
|
+
- `--color-focus` oklch(<L> <C> <H>)
|
|
76
|
+
|
|
77
|
+
## Typography
|
|
78
|
+
- Display: <face>, weight <N>, style <normal/italic>
|
|
79
|
+
- Body: <face>, weight <N>
|
|
80
|
+
- Mono: <face>, weight <N>
|
|
81
|
+
- Display tracking: <em>
|
|
82
|
+
- Type scale anchor: <text-display> = clamp(...)
|
|
83
|
+
|
|
84
|
+
## Spacing
|
|
85
|
+
4-point named scale. The values are in `tokens.css`. Pages must use named
|
|
86
|
+
tokens (`var(--space-md)`), never raw values.
|
|
87
|
+
|
|
88
|
+
## Motion
|
|
89
|
+
- Easings: cubic-bezier(<x>, <y>, <z>, <w>) named `--ease-out`, etc.
|
|
90
|
+
- Reveal pattern: <fade only / fade + slide / none>
|
|
91
|
+
- Reduced-motion fallback: opacity-only, ≤ 150 ms.
|
|
92
|
+
|
|
93
|
+
## Microinteractions stance
|
|
94
|
+
- <silent success / celebratory toasts: never>
|
|
95
|
+
- <hover delay 800 ms · focus delay 0 ms>
|
|
96
|
+
- <other named choices>
|
|
97
|
+
|
|
98
|
+
## CTA voice
|
|
99
|
+
- Primary CTA: <fill style, shape, copy pattern>
|
|
100
|
+
- Secondary CTA: <outline style, shape, copy pattern>
|
|
101
|
+
|
|
102
|
+
## Per-page allowances
|
|
103
|
+
- Marketing pages MAY use enrichment (Tier-A CSS art, Tier-B SVG, etc.).
|
|
104
|
+
- App pages MUST NOT use enrichment — function carries the page.
|
|
105
|
+
- Content pages: typography only.
|
|
106
|
+
|
|
107
|
+
## What pages MUST share
|
|
108
|
+
- The wordmark / logotype.
|
|
109
|
+
- The accent colour and its placement (≤ 5 % per viewport).
|
|
110
|
+
- The display + body fonts.
|
|
111
|
+
- The CTA voice (button shape, border-radius, padding rhythm).
|
|
112
|
+
- Section heading rhythm (numeral + label + display heading pattern).
|
|
113
|
+
|
|
114
|
+
## What pages MAY differ on
|
|
115
|
+
- Macrostructure within the page-type family (a marketing page can be Marquee
|
|
116
|
+
Hero on one route and Long Document on another — both still use the system's
|
|
117
|
+
type, colour, and CTA voice).
|
|
118
|
+
- Hero archetype (within the family's allowance).
|
|
119
|
+
- Enrichment — only on marketing pages, only Tier-A or Tier-B.
|
|
120
|
+
|
|
121
|
+
## Exports
|
|
122
|
+
|
|
123
|
+
Drop-in formats for re-using this design system in other projects.
|
|
124
|
+
See [`export-formats.md`](../export-formats.md) for the canonical mapping.
|
|
125
|
+
|
|
126
|
+
### tokens.css
|
|
127
|
+
```css
|
|
128
|
+
:root {
|
|
129
|
+
--color-paper: oklch(<L> <C> <H>);
|
|
130
|
+
--color-paper-2: oklch(<L> <C> <H>);
|
|
131
|
+
--color-ink: oklch(<L> <C> <H>);
|
|
132
|
+
--color-ink-2: oklch(<L> <C> <H>);
|
|
133
|
+
--color-rule: oklch(<L> <C> <H>);
|
|
134
|
+
--color-accent: oklch(<L> <C> <H>);
|
|
135
|
+
--color-accent-ink: oklch(<L> <C> <H>);
|
|
136
|
+
--color-focus: oklch(<L> <C> <H>);
|
|
137
|
+
|
|
138
|
+
--font-display: "<face>", ...;
|
|
139
|
+
--font-body: "<face>", ...;
|
|
140
|
+
--font-outlier: "<face>", ...;
|
|
141
|
+
|
|
142
|
+
--space-3xs: 0.25rem; --space-2xs: 0.5rem; --space-xs: 0.75rem;
|
|
143
|
+
--space-sm: 1rem; --space-md: 1.5rem; --space-lg: 2rem;
|
|
144
|
+
--space-xl: 3rem; --space-2xl: 4.5rem; --space-3xl: 7rem;
|
|
145
|
+
|
|
146
|
+
--text-xs: 0.75rem; --text-sm: 0.875rem; --text-md: 1.125rem;
|
|
147
|
+
--text-lg: 1.375rem; --text-xl: 1.75rem; --text-2xl: 2.25rem;
|
|
148
|
+
|
|
149
|
+
--ease-out: cubic-bezier(0.16, 1, 0.3, 1);
|
|
150
|
+
--dur-short: 220ms;
|
|
151
|
+
--radius-card: <px>; --radius-pill: <px>; --radius-input: <px>;
|
|
152
|
+
}
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
### Tailwind v4 `@theme`
|
|
156
|
+
```css
|
|
157
|
+
@theme {
|
|
158
|
+
--color-paper: oklch(<L> <C> <H>);
|
|
159
|
+
--color-ink: oklch(<L> <C> <H>);
|
|
160
|
+
--color-accent: oklch(<L> <C> <H>);
|
|
161
|
+
--font-display: "<face>", sans-serif;
|
|
162
|
+
--font-body: "<face>", sans-serif;
|
|
163
|
+
--spacing-md: 1.5rem;
|
|
164
|
+
--text-md: 1.125rem;
|
|
165
|
+
--ease-out: cubic-bezier(0.16, 1, 0.3, 1);
|
|
166
|
+
/* mirror the rest of tokens.css with `--spacing-*` for Tailwind's spacing utilities */
|
|
167
|
+
}
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
### DTCG `tokens.json`
|
|
171
|
+
```json
|
|
172
|
+
{
|
|
173
|
+
"color": {
|
|
174
|
+
"paper": { "$value": "oklch(<L> <C> <H>)", "$type": "color" },
|
|
175
|
+
"ink": { "$value": "oklch(<L> <C> <H>)", "$type": "color" },
|
|
176
|
+
"accent": { "$value": "oklch(<L> <C> <H>)", "$type": "color" }
|
|
177
|
+
},
|
|
178
|
+
"font": {
|
|
179
|
+
"display": { "$value": "<face>", "$type": "fontFamily" },
|
|
180
|
+
"body": { "$value": "<face>", "$type": "fontFamily" }
|
|
181
|
+
},
|
|
182
|
+
"space": {
|
|
183
|
+
"md": { "$value": "1.5rem", "$type": "dimension" }
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
### shadcn/ui CSS variables
|
|
189
|
+
```css
|
|
190
|
+
:root {
|
|
191
|
+
--background: <L> <C> <H>; /* paper */
|
|
192
|
+
--foreground: <L> <C> <H>; /* ink */
|
|
193
|
+
--primary: <L> <C> <H>; /* accent */
|
|
194
|
+
--primary-foreground: <L> <C> <H>; /* accent-ink */
|
|
195
|
+
--muted: <L> <C> <H>; /* rule */
|
|
196
|
+
--muted-foreground: <L> <C> <H>; /* muted */
|
|
197
|
+
--border: <L> <C> <H>; /* rule */
|
|
198
|
+
--input: <L> <C> <H>; /* rule */
|
|
199
|
+
--ring: <L> <C> <H>; /* focus */
|
|
200
|
+
--radius: <px>;
|
|
201
|
+
}
|
|
202
|
+
```
|
|
203
|
+
````
|
|
204
|
+
|
|
205
|
+
State the picks aloud in plain text BEFORE writing the file. *"Genre: modern-minimal. Theme: a custom OKLCH palette anchored on your brand teal. Display: Geist 600. Body: Geist 400. Three macrostructure families: Marquee Hero (marketing), Workbench (app), Long Document (content)."* Then ask: *"Want me to proceed with this system across every page, or amend any of it first?"*
|
|
206
|
+
|
|
207
|
+
Wait for confirmation. Only after the user confirms (or says "go ahead") do you write `design.md` and start redesigning pages.
|
|
208
|
+
|
|
209
|
+
### 3. Redesign each page reading from `design.md`
|
|
210
|
+
|
|
211
|
+
For each target page:
|
|
212
|
+
|
|
213
|
+
- **Read `design.md` first.** It is now the rule of the project; the per-build references in [`references/`](../) defer to it. Where `design.md` and the references conflict, `design.md` wins.
|
|
214
|
+
- Pick the macrostructure from the family declared in `design.md` for this page's type (marketing / app / content). Within the family, you may vary archetypes — but only those `design.md` allows.
|
|
215
|
+
- Apply the locked theme. Do **not** swap to a different theme to "add variety". The variety lives in macrostructure / archetype choice, not theme.
|
|
216
|
+
- Apply the locked typography, spacing, motion, microinteractions stance.
|
|
217
|
+
- Stamp every page's CSS with: `/* Hallmark · genre: <genre> · macrostructure: <name> · design-system: design.md · designed-as-app */`. The `designed-as-app` flag tells future Hallmark runs to read `design.md`, not invent a new system.
|
|
218
|
+
- Write a single combined `.hallmark/log.json` entry for the multi-page redesign, with `"scope": "app"` instead of one entry per page.
|
|
219
|
+
|
|
220
|
+
### 4. Diversification rule — INVERTED for multi-page
|
|
221
|
+
|
|
222
|
+
Across pages of the same app, the diversification rule is *inverted*: consecutive pages MUST share theme, accent, type pairing. They may differ on macrostructure within the family. The 55 slop-test gates that check "differs from previous Hallmark run" are skipped for `designed-as-app` outputs — the system overrides the catalog rotation here.
|
|
223
|
+
|
|
224
|
+
Pages that drift from `design.md` are slop. The audit verb flags `design.md` drift as a critical structural finding (`stamp-vs-design.md disagreement`).
|
|
225
|
+
|
|
226
|
+
### 5. When to amend `design.md` instead of overriding
|
|
227
|
+
|
|
228
|
+
If a page genuinely needs something `design.md` doesn't allow (e.g. a marketing landing for a new sub-product wants a different theme), the rule is **amend `design.md` first**, not override locally. Add an explicit per-page allowance or a `## Variants` section. The file evolves; per-page overrides do not.
|
|
229
|
+
|
|
230
|
+
---
|
|
231
|
+
|
|
232
|
+
## § Single-page flow
|
|
233
|
+
|
|
234
|
+
(The classic redesign behaviour — unchanged.)
|
|
235
|
+
|
|
236
|
+
**What to preserve:**
|
|
237
|
+
- The copy intent, factual claims, product names, and primary message. Preserve exact wording only when it already lives in the target UI or the user explicitly asks for verbatim copy.
|
|
238
|
+
- The information architecture (which sections exist, in roughly what order)
|
|
239
|
+
- The brand (colours and fonts they've named, if any)
|
|
240
|
+
- The primary action
|
|
241
|
+
- The existing route/component ownership boundaries, unless the user has approved a full rebuild
|
|
242
|
+
|
|
243
|
+
**What to replace:**
|
|
244
|
+
- The structural fingerprint — pick a **different** combination from [`structure.md`](../structure.md) than the source had.
|
|
245
|
+
- The component voice — different button style, different divider language, different image treatment.
|
|
246
|
+
- The reveal pattern — if the original faded everything in on scroll, the new one might have no reveals at all.
|
|
247
|
+
- The visual rhythm — different sections having different padding, different alignments, deliberate breaks.
|
|
248
|
+
|
|
249
|
+
**What not to replace without confirmation:**
|
|
250
|
+
- Route trees, production component directories, or the old website's file structure.
|
|
251
|
+
- Working app logic, data fetching, auth, forms, analytics, or integration code.
|
|
252
|
+
- Existing copy with pasted text from PDFs, docs, or markdown files unless the user requested verbatim copy.
|
|
253
|
+
|
|
254
|
+
**Optional `--mood <name>` argument:**
|
|
255
|
+
|
|
256
|
+
If the user specifies a mood (`hallmark redesign ./hero.tsx --mood luxury`), pick a tone aligned to that mood and let it drive the structural fingerprint. Mood names map to tones from [`typography.md`](../typography.md) and [`structure.md`](../structure.md). If no mood is given, ask the user what *feeling* they want — one word — and proceed.
|
|
257
|
+
|
|
258
|
+
**Genre escape hatch.** If the user explicitly asks for a *kind* of design that the current genre doesn't fit (e.g. "redesign this editorial page as a modern SaaS hero"), switch genre too. Load [`genres/<new-genre>.md`](../genres/) and apply its rule overlay. Stamp the new genre into the output so future runs respect it.
|
|
259
|
+
|
|
260
|
+
**Project-level check.** Before treating this as a true single-page redesign, look for `design.md` at the project root. If it exists, the project is being designed as an app and **the single-page rules don't apply** — read `design.md` and follow it instead. The diversification rule reverses (consistency wins). If you actually want to break from the locked system, *update `design.md` first*, then redesign.
|
|
261
|
+
|
|
262
|
+
**Output:**
|
|
263
|
+
|
|
264
|
+
Return the redesigned code, plus a short note explaining:
|
|
265
|
+
|
|
266
|
+
- The structural fingerprint you picked, axis by axis.
|
|
267
|
+
- Why this combination fits the brief better than the original.
|
|
268
|
+
- One thing you removed and why.
|
|
269
|
+
- (If genre changed) why the new genre fits the user's stated kind of design.
|
|
Binary file
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
# Test 01 v2 — Tide (indie podcast)
|
|
2
|
+
|
|
3
|
+
## The prompt (verbatim, same as v1)
|
|
4
|
+
|
|
5
|
+
> "build me a landing page for my indie podcast called Tide. just go ahead, you pick."
|
|
6
|
+
|
|
7
|
+
## Step 0 · Pre-flight
|
|
8
|
+
|
|
9
|
+
> *"No pre-flight signals — proceeding with full Hallmark stack."*
|
|
10
|
+
|
|
11
|
+
(Vanilla scratch directory; no `package.json`, no `tailwind.config.*`, no existing CSS — silent pre-flight.)
|
|
12
|
+
|
|
13
|
+
## Step 1 · Design-context gate — skipped
|
|
14
|
+
|
|
15
|
+
The user opted out. Skill states inferences in one sentence:
|
|
16
|
+
|
|
17
|
+
> *"Going with: audience = listeners who care about voice and atmosphere · use = listen + subscribe · tone = intimate, hand-set, voice-led. If any of those is wrong, redirect."*
|
|
18
|
+
|
|
19
|
+
## Step 2.5 · Project memory rotation
|
|
20
|
+
|
|
21
|
+
> *"This is the first Hallmark v0.6.0 run for this project. No `.hallmark/log.json` rotation needed."*
|
|
22
|
+
|
|
23
|
+
(But the v1 stamp at `_tests/01-tide-podcast/style.css` says **Quote-Led + Atelier**. The v2 brief is to re-run the same prompt with the new skill — picking a different macro/theme to demonstrate the diversification rule firing in a "second visit" frame.)
|
|
24
|
+
|
|
25
|
+
> *"Previous run on this brief picked Quote-Led + Atelier. Picking from {Letter, Index-First, Long Document} this time — Letter wins for an audio-domain brief because the medium is voice and a letter to the listener carries weight a pull-quote doesn't repeat."*
|
|
26
|
+
>
|
|
27
|
+
> *"Theme rotation: Atelier (light · italic-serif · warm) → Salon (light · mono-display · warm). Differs on display style. Passes."*
|
|
28
|
+
|
|
29
|
+
## Step 3 · Visual ruleset loaded
|
|
30
|
+
|
|
31
|
+
`macrostructures.md` (Letter), `component-cookbook.md` (H6 Letter Hero), `typography.md` (mono-display + roman-serif body — Salon's pairing), `color.md`, `microinteractions.md` (single primitive: caret blink only), `anti-patterns.md`.
|
|
32
|
+
|
|
33
|
+
## Step 4 · Hero enrichment
|
|
34
|
+
|
|
35
|
+
> *"Enrichment: none (typography only). Letter macro on Salon theme; the prose is the design. Adding a Lottie or a Midjourney microphone shot would dilute the voice — same anti-slop call as v1."*
|
|
36
|
+
|
|
37
|
+
## Step 5 · Preview
|
|
38
|
+
|
|
39
|
+
```markdown
|
|
40
|
+
**Hallmark · v0.6.0**
|
|
41
|
+
|
|
42
|
+
- **Macrostructure** · Letter
|
|
43
|
+
- **Theme** · Salon (warm-cream paper · IBM Plex Mono display · Cormorant Garamond serif body · warm-amber accent ~2%)
|
|
44
|
+
- **Enrichment** · none (typography only)
|
|
45
|
+
- **Sections** · Masthead · Salutation · Letter body (3 paragraphs) · Listen-where row · Colophon
|
|
46
|
+
- **Motion** · cursor caret blink only (1 primitive)
|
|
47
|
+
- **Slop test** · 38 / 38 ✓
|
|
48
|
+
- **Diversification** · differs from v1 (Quote-Led/Atelier) on macrostructure + display style
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
## Step 6 · Macrostructure stamp
|
|
52
|
+
|
|
53
|
+
```
|
|
54
|
+
/* Hallmark · macrostructure: Letter · H6 hero knobs: salutation=greeting, body=3 paragraphs, signoff=initials
|
|
55
|
+
* theme: Salon · accent: warm-amber ~2% · enrichment: none (typography only)
|
|
56
|
+
* studied: no · context: skipped, inferred (audio domain) · v0.6.0
|
|
57
|
+
*/
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
## What changed vs v1
|
|
61
|
+
|
|
62
|
+
- **Macro:** Quote-Led → Letter. The pull-quote frames a podcast as listened-to-by-others (third-party endorsement); Letter frames it as host-to-listener (first-person address). Both work; Letter is more intimate, which the rotation rule was steering toward.
|
|
63
|
+
- **Theme:** Atelier → Salon. Both warm-cream, both light. Atelier is italic-serif display; Salon is mono display + serif body. Display-style differs, so the diversification gate passes.
|
|
64
|
+
- **Voice:** the v1 page opens with a listener's quote; this opens with the host's salutation. Same word-count budget, different rhetorical posture.
|
|
65
|
+
- **Microinteraction:** v1 had no motion. v2 keeps it just as restrained — only a blinking caret on the salutation, optional.
|
|
66
|
+
|
|
67
|
+
## What stayed the same
|
|
68
|
+
|
|
69
|
+
- Enrichment tier: none on both. Voice carries the brand.
|
|
70
|
+
- Section count: ~5, both pages.
|
|
71
|
+
- Slop test: 38 / 38 ✓ on both.
|