@phuc1403/musketeer 0.9.0 → 0.11.0
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/INSTALLATION.md +53 -52
- package/README.md +1 -1
- package/bin/musketeer.js +168 -168
- package/manifest.json +19 -2
- package/package.json +48 -48
- package/src/dotnet-scaffold-copier.js +79 -79
- package/src/provisioner/detect.js +93 -93
- package/src/self-update.js +77 -77
- package/template/.claude/agents/git-manager.md +18 -18
- package/template/.claude/agents/hallmark-auditor.md +78 -78
- package/template/.claude/agents/researcher.md +33 -33
- package/template/.claude/hooks/block-unsafe-adr-title.cjs +85 -85
- package/template/.claude/hooks/init-adr-dir.cjs +173 -173
- package/template/.claude/hooks/inject-adr-flags.cjs +94 -94
- package/template/.claude/hooks/lib/adr/command-scan.cjs +115 -115
- package/template/.claude/hooks/lib/characteristics/checker.cjs +357 -357
- package/template/.claude/hooks/lib/git-info-cache.cjs +191 -191
- package/template/.claude/hooks/sync-adr-toc.cjs +146 -146
- package/template/.claude/hooks/usage-quota-cache-refresh.cjs +166 -166
- package/template/.claude/hooks/validate-characteristics-hook.cjs +66 -66
- package/template/.claude/hooks/validate-cml-hook.js +146 -145
- package/template/.claude/skills/adr-writer/SKILL.md +48 -48
- package/template/.claude/skills/adr-writer/references/adr-example.md +35 -35
- package/template/.claude/skills/architecture-characteristic-writer/SKILL.md +215 -215
- package/template/.claude/skills/architecture-characteristic-writer/assets/worksheet-template.md +29 -29
- package/template/.claude/skills/architecture-characteristic-writer/references/characteristics-catalog.md +40 -40
- package/template/.claude/skills/architecture-characteristic-writer/scripts/ranking-table.cjs +171 -171
- package/template/.claude/skills/context-map/SKILL.md +80 -80
- package/template/.claude/skills/context-map/example.cml +106 -106
- package/template/.claude/skills/context-map/reference/Bounded Context/Bounded Context.md +40 -40
- package/template/.claude/skills/context-map/reference/Bounded Context/businessModel.md +5 -5
- package/template/.claude/skills/context-map/reference/Bounded Context/domainVisionStatement.md +2 -2
- package/template/.claude/skills/context-map/reference/Bounded Context/evolution.md +5 -5
- package/template/.claude/skills/context-map/reference/Bounded Context/implementationTechnology.md +1 -1
- package/template/.claude/skills/context-map/reference/Bounded Context/implements.md +1 -1
- package/template/.claude/skills/context-map/reference/Bounded Context/knowledgeLevel.md +4 -4
- package/template/.claude/skills/context-map/reference/Bounded Context/realizes.md +9 -9
- package/template/.claude/skills/context-map/reference/Bounded Context/refines.md +10 -10
- package/template/.claude/skills/context-map/reference/Bounded Context/responsibilities.md +26 -26
- package/template/.claude/skills/context-map/reference/Bounded Context/type.md +23 -23
- package/template/.claude/skills/context-map/reference/Bounded Context Relationship/Anticorruption Layer.md +5 -5
- package/template/.claude/skills/context-map/reference/Bounded Context Relationship/Bounded Context Relationship.md +12 -12
- package/template/.claude/skills/context-map/reference/Bounded Context Relationship/Conformist.md +5 -5
- package/template/.claude/skills/context-map/reference/Bounded Context Relationship/Customer-Supplier (C-S).md +22 -22
- package/template/.claude/skills/context-map/reference/Bounded Context Relationship/Open Host Service.md +4 -4
- package/template/.claude/skills/context-map/reference/Bounded Context Relationship/Partnership (P).md +13 -13
- package/template/.claude/skills/context-map/reference/Bounded Context Relationship/Published Language.md +4 -4
- package/template/.claude/skills/context-map/reference/Bounded Context Relationship/Shared Kernel (SK).md +12 -12
- package/template/.claude/skills/context-map/reference/Context Map.md +62 -62
- package/template/.claude/skills/context-map/reference/Domain/Domain.md +30 -30
- package/template/.claude/skills/context-map/reference/Domain/supports.md +33 -33
- package/template/.claude/skills/context-map/reference/Domain/type.md +3 -3
- package/template/.claude/skills/context-map/reference/Semantic Rules.md +32 -32
- package/template/.claude/skills/hallmark/SKILL.md +552 -552
- package/template/.claude/skills/hallmark/references/anti-patterns.md +412 -412
- package/template/.claude/skills/hallmark/references/assets.md +406 -406
- package/template/.claude/skills/hallmark/references/color.md +95 -95
- package/template/.claude/skills/hallmark/references/component-cookbook.md +256 -256
- package/template/.claude/skills/hallmark/references/components/c1-outlined-chip.md +12 -12
- package/template/.claude/skills/hallmark/references/components/c2-inline-form-as-cta.md +16 -16
- package/template/.claude/skills/hallmark/references/components/c3-typographic-link.md +8 -8
- package/template/.claude/skills/hallmark/references/components/c4-sticky-bottom-bar.md +16 -16
- package/template/.claude/skills/hallmark/references/components/f1-bento-grid.md +20 -20
- package/template/.claude/skills/hallmark/references/components/f2-sticky-scroll-stack.md +20 -20
- package/template/.claude/skills/hallmark/references/components/f3-tabular-spec-sheet.md +11 -11
- package/template/.claude/skills/hallmark/references/components/f4-step-sequence.md +11 -11
- package/template/.claude/skills/hallmark/references/components/f5-annotated-screenshot.md +11 -11
- package/template/.claude/skills/hallmark/references/components/f6-product-card-grid.md +41 -41
- package/template/.claude/skills/hallmark/references/components/ft1-mast-headed.md +13 -13
- package/template/.claude/skills/hallmark/references/components/ft2-inline-rule-single-line.md +10 -10
- package/template/.claude/skills/hallmark/references/components/ft3-index-style-category-list.md +12 -12
- package/template/.claude/skills/hallmark/references/components/ft4-dense-typographic.md +10 -10
- package/template/.claude/skills/hallmark/references/components/ft5-statement.md +21 -21
- package/template/.claude/skills/hallmark/references/components/ft6-letter-close.md +19 -19
- package/template/.claude/skills/hallmark/references/components/ft7-newsletter-first.md +27 -27
- package/template/.claude/skills/hallmark/references/components/ft8-marquee-scroll.md +25 -25
- package/template/.claude/skills/hallmark/references/components/h1-marquee.md +15 -15
- package/template/.claude/skills/hallmark/references/components/h2-split-diptych.md +15 -15
- package/template/.claude/skills/hallmark/references/components/h3-quote-led.md +11 -11
- package/template/.claude/skills/hallmark/references/components/h4-stat-led.md +14 -14
- package/template/.claude/skills/hallmark/references/components/h5-letter-hero.md +11 -11
- package/template/.claude/skills/hallmark/references/components/h6-photographic-fold.md +16 -16
- package/template/.claude/skills/hallmark/references/components/h7-demo-video-clipped-by-viewport-edge.md +27 -27
- package/template/.claude/skills/hallmark/references/components/h8-mockup-split-browser-framed.md +23 -23
- package/template/.claude/skills/hallmark/references/components/h9-custom-illustration-centerpiece.md +27 -27
- package/template/.claude/skills/hallmark/references/components/n1-wordmark-2-links.md +12 -12
- package/template/.claude/skills/hallmark/references/components/n10-floating-on-scroll-morph.md +19 -19
- package/template/.claude/skills/hallmark/references/components/n2-floating-chip.md +14 -14
- package/template/.claude/skills/hallmark/references/components/n3-side-rail.md +14 -14
- package/template/.claude/skills/hallmark/references/components/n4-hidden-behind-k.md +9 -9
- package/template/.claude/skills/hallmark/references/components/n5-floating-pill.md +28 -28
- package/template/.claude/skills/hallmark/references/components/n6-newspaper-masthead.md +24 -24
- package/template/.claude/skills/hallmark/references/components/n7-brutal-slab.md +22 -22
- package/template/.claude/skills/hallmark/references/components/n8-terminal-command.md +21 -21
- package/template/.claude/skills/hallmark/references/components/n9-edge-aligned-minimal.md +17 -17
- package/template/.claude/skills/hallmark/references/components/s1-left-margin-numbered.md +15 -15
- package/template/.claude/skills/hallmark/references/components/s2-hanging.md +13 -13
- package/template/.claude/skills/hallmark/references/components/s3-sticky-pinned.md +19 -19
- package/template/.claude/skills/hallmark/references/components/s4-inline-no-break.md +11 -11
- package/template/.claude/skills/hallmark/references/components/s5-bottom-anchored.md +13 -13
- package/template/.claude/skills/hallmark/references/components/t1-pull-quote-with-marginalia.md +12 -12
- package/template/.claude/skills/hallmark/references/components/t2-logo-wall-hairline.md +19 -19
- package/template/.claude/skills/hallmark/references/components/t3-single-huge-quote.md +11 -11
- package/template/.claude/skills/hallmark/references/components/t4-numbered-stat-strip.md +14 -14
- package/template/.claude/skills/hallmark/references/contract.md +24 -24
- package/template/.claude/skills/hallmark/references/copy.md +182 -182
- package/template/.claude/skills/hallmark/references/custom-craft.md +626 -626
- package/template/.claude/skills/hallmark/references/custom-theme.md +329 -329
- package/template/.claude/skills/hallmark/references/design-md.md +116 -116
- package/template/.claude/skills/hallmark/references/export-formats.md +328 -328
- package/template/.claude/skills/hallmark/references/floating-nav.md +89 -89
- package/template/.claude/skills/hallmark/references/genres/atmospheric.md +65 -65
- package/template/.claude/skills/hallmark/references/genres/editorial.md +70 -70
- package/template/.claude/skills/hallmark/references/genres/modern-minimal.md +67 -67
- package/template/.claude/skills/hallmark/references/genres/playful.md +65 -65
- package/template/.claude/skills/hallmark/references/hero-enrichment.md +474 -474
- package/template/.claude/skills/hallmark/references/imagery-kit.md +170 -170
- package/template/.claude/skills/hallmark/references/interaction-and-states.md +207 -207
- package/template/.claude/skills/hallmark/references/layout-and-space.md +111 -111
- package/template/.claude/skills/hallmark/references/macrostructures/01-bento-grid.md +35 -35
- package/template/.claude/skills/hallmark/references/macrostructures/02-long-document.md +34 -34
- package/template/.claude/skills/hallmark/references/macrostructures/03-marquee-hero.md +31 -31
- package/template/.claude/skills/hallmark/references/macrostructures/04-stat-led.md +32 -32
- package/template/.claude/skills/hallmark/references/macrostructures/05-workbench.md +32 -32
- package/template/.claude/skills/hallmark/references/macrostructures/06-conversational-faq.md +33 -33
- package/template/.claude/skills/hallmark/references/macrostructures/07-manifesto.md +32 -32
- package/template/.claude/skills/hallmark/references/macrostructures/08-photographic.md +34 -34
- package/template/.claude/skills/hallmark/references/macrostructures/09-quote-led.md +32 -32
- package/template/.claude/skills/hallmark/references/macrostructures/10-specimen.md +32 -32
- package/template/.claude/skills/hallmark/references/macrostructures/11-catalogue.md +23 -23
- package/template/.claude/skills/hallmark/references/macrostructures/12-letter.md +23 -23
- package/template/.claude/skills/hallmark/references/macrostructures/13-index-first.md +23 -23
- package/template/.claude/skills/hallmark/references/macrostructures/14-narrative-workflow.md +23 -23
- package/template/.claude/skills/hallmark/references/macrostructures/15-split-studio.md +23 -23
- package/template/.claude/skills/hallmark/references/macrostructures/16-feature-stack.md +23 -23
- package/template/.claude/skills/hallmark/references/macrostructures/17-type-specimen.md +23 -23
- package/template/.claude/skills/hallmark/references/macrostructures/18-portfolio-grid.md +23 -23
- package/template/.claude/skills/hallmark/references/macrostructures/19-map-diagram.md +23 -23
- package/template/.claude/skills/hallmark/references/macrostructures/20-ecosystem-index.md +23 -23
- package/template/.claude/skills/hallmark/references/macrostructures/21-component-playground.md +23 -23
- package/template/.claude/skills/hallmark/references/macrostructures.md +89 -89
- package/template/.claude/skills/hallmark/references/microinteractions.md +260 -260
- package/template/.claude/skills/hallmark/references/motion.md +109 -109
- package/template/.claude/skills/hallmark/references/preview-examples.md +49 -49
- package/template/.claude/skills/hallmark/references/responsive.md +138 -138
- package/template/.claude/skills/hallmark/references/slop-test.md +205 -205
- package/template/.claude/skills/hallmark/references/structure.md +164 -164
- package/template/.claude/skills/hallmark/references/study.md +511 -511
- package/template/.claude/skills/hallmark/references/typography.md +243 -243
- package/template/.claude/skills/hallmark/references/verbs/audit.md +25 -25
- package/template/.claude/skills/hallmark/references/verbs/redesign.md +269 -269
- package/template/.claude/skills/hallmark-loop/SKILL.md +105 -105
- package/template/.claude/skills/hallmark-loop/references/auditor-call.md +60 -60
- package/template/.claude/skills/hallmark-loop/references/capture.md +78 -78
- package/template/.claude/skills/hallmark-loop/references/loop-control.md +79 -79
- package/template/.claude/skills/handoff/SKILL.md +15 -15
- package/template/.claude/skills/knowledge-crunching/SKILL.md +94 -94
- package/template/.claude/skills/logical-components/.gitattributes +2 -0
- package/template/.claude/skills/logical-components/SKILL.md +102 -0
- package/template/.claude/skills/logical-components/references/component-classifier-prompt.md +53 -0
- package/template/.claude/skills/logical-components/references/responsibility-agent-prompt.md +67 -0
- package/template/.claude/skills/logical-components/references/responsibility-verifier-prompt.md +39 -0
- package/template/.claude/skills/logical-components/scripts/Directory.Build.props +7 -0
- package/template/.claude/skills/logical-components/scripts/Directory.Packages.props +8 -0
- package/template/.claude/skills/logical-components/scripts/LogicalComponents/BatchPlanning.cs +69 -0
- package/template/.claude/skills/logical-components/scripts/LogicalComponents/BatchesCommand.cs +39 -0
- package/template/.claude/skills/logical-components/scripts/LogicalComponents/CandidatesCommand.cs +70 -0
- package/template/.claude/skills/logical-components/scripts/LogicalComponents/CitableSource.cs +39 -0
- package/template/.claude/skills/logical-components/scripts/LogicalComponents/Citation.cs +37 -0
- package/template/.claude/skills/logical-components/scripts/LogicalComponents/ClassifyBatchesCommand.cs +65 -0
- package/template/.claude/skills/logical-components/scripts/LogicalComponents/ClassifyMergeCommand.cs +187 -0
- package/template/.claude/skills/logical-components/scripts/LogicalComponents/ComponentDiscovery.cs +166 -0
- package/template/.claude/skills/logical-components/scripts/LogicalComponents/ComponentRule.cs +87 -0
- package/template/.claude/skills/logical-components/scripts/LogicalComponents/ComponentsFile.cs +83 -0
- package/template/.claude/skills/logical-components/scripts/LogicalComponents/CouplingResolver.cs +196 -0
- package/template/.claude/skills/logical-components/scripts/LogicalComponents/DisplayName.cs +14 -0
- package/template/.claude/skills/logical-components/scripts/LogicalComponents/EdgeExtraction.cs +111 -0
- package/template/.claude/skills/logical-components/scripts/LogicalComponents/ExtractCommand.cs +72 -0
- package/template/.claude/skills/logical-components/scripts/LogicalComponents/ExtractConfig.cs +79 -0
- package/template/.claude/skills/logical-components/scripts/LogicalComponents/LogicalComponents.csproj +15 -0
- package/template/.claude/skills/logical-components/scripts/LogicalComponents/MarkdownRenderer.cs +73 -0
- package/template/.claude/skills/logical-components/scripts/LogicalComponents/MemberUseResolution.cs +203 -0
- package/template/.claude/skills/logical-components/scripts/LogicalComponents/MemberUses.cs +155 -0
- package/template/.claude/skills/logical-components/scripts/LogicalComponents/PortResolution.cs +75 -0
- package/template/.claude/skills/logical-components/scripts/LogicalComponents/Program.cs +27 -0
- package/template/.claude/skills/logical-components/scripts/LogicalComponents/ProjectFilters.cs +76 -0
- package/template/.claude/skills/logical-components/scripts/LogicalComponents/PruneCommand.cs +132 -0
- package/template/.claude/skills/logical-components/scripts/LogicalComponents/RenderCommand.cs +173 -0
- package/template/.claude/skills/logical-components/scripts/LogicalComponents/ResponsibilityBatches.cs +84 -0
- package/template/.claude/skills/logical-components/scripts/LogicalComponents/ResponsibilityValidation.cs +178 -0
- package/template/.claude/skills/logical-components/scripts/LogicalComponents/SeamDispatch.cs +59 -0
- package/template/.claude/skills/logical-components/scripts/LogicalComponents/SymbolNames.cs +53 -0
- package/template/.claude/skills/logical-components/scripts/LogicalComponents/TypeMap.cs +75 -0
- package/template/.claude/skills/logical-components/scripts/LogicalComponents/WalkRoots.cs +63 -0
- package/template/.claude/skills/logical-components/scripts/LogicalComponents/WorkspaceLoader.cs +227 -0
- package/template/.claude/skills/logical-components/scripts/LogicalComponents.Tests/AssignIdsTests.cs +41 -0
- package/template/.claude/skills/logical-components/scripts/LogicalComponents.Tests/BatchPlanningTests.cs +82 -0
- package/template/.claude/skills/logical-components/scripts/LogicalComponents.Tests/CandidatesCommandTests.cs +34 -0
- package/template/.claude/skills/logical-components/scripts/LogicalComponents.Tests/CitationTests.cs +42 -0
- package/template/.claude/skills/logical-components/scripts/LogicalComponents.Tests/ClassifyCommandsTests.cs +176 -0
- package/template/.claude/skills/logical-components/scripts/LogicalComponents.Tests/ComponentDiscoveryTests.cs +190 -0
- package/template/.claude/skills/logical-components/scripts/LogicalComponents.Tests/CouplingExtractionTests.cs +174 -0
- package/template/.claude/skills/logical-components/scripts/LogicalComponents.Tests/DisplayNameTests.cs +17 -0
- package/template/.claude/skills/logical-components/scripts/LogicalComponents.Tests/ExtractConfigTests.cs +72 -0
- package/template/.claude/skills/logical-components/scripts/LogicalComponents.Tests/FixturePaths.cs +32 -0
- package/template/.claude/skills/logical-components/scripts/LogicalComponents.Tests/LogicalComponents.Tests.csproj +23 -0
- package/template/.claude/skills/logical-components/scripts/LogicalComponents.Tests/MarkdownRendererTests.cs +50 -0
- package/template/.claude/skills/logical-components/scripts/LogicalComponents.Tests/ProjectFiltersTests.cs +65 -0
- package/template/.claude/skills/logical-components/scripts/LogicalComponents.Tests/PruneCommandTests.cs +119 -0
- package/template/.claude/skills/logical-components/scripts/LogicalComponents.Tests/RenderCommandTests.cs +162 -0
- package/template/.claude/skills/logical-components/scripts/LogicalComponents.Tests/RenderGoldenTests.cs +34 -0
- package/template/.claude/skills/logical-components/scripts/LogicalComponents.Tests/RenderTestData.cs +49 -0
- package/template/.claude/skills/logical-components/scripts/LogicalComponents.Tests/ResponsibilityValidationTests.cs +227 -0
- package/template/.claude/skills/logical-components/scripts/LogicalComponents.Tests/SampleAppWorkspace.cs +27 -0
- package/template/.claude/skills/logical-components/scripts/LogicalComponents.Tests/WorkspaceLoaderTests.cs +87 -0
- package/template/.claude/skills/logical-components/scripts/fixtures/BrokenApp/src/Broken.Application/Broken.Application.csproj +7 -0
- package/template/.claude/skills/logical-components/scripts/fixtures/BrokenApp/src/Broken.Application/Broken.cs +7 -0
- package/template/.claude/skills/logical-components/scripts/fixtures/MultiTargetApp/MultiTargetApp.slnx +6 -0
- package/template/.claude/skills/logical-components/scripts/fixtures/MultiTargetApp/src/Legacy.FSharp/Legacy.FSharp.fsproj +8 -0
- package/template/.claude/skills/logical-components/scripts/fixtures/MultiTargetApp/src/Legacy.FSharp/Library.fs +5 -0
- package/template/.claude/skills/logical-components/scripts/fixtures/MultiTargetApp/src/Multi.Application/Multi.Application.csproj +7 -0
- package/template/.claude/skills/logical-components/scripts/fixtures/MultiTargetApp/src/Multi.Application/Scheduling.cs +14 -0
- package/template/.claude/skills/logical-components/scripts/fixtures/NoSolutionApp/src/Solo.Application/Solo.Application.csproj +7 -0
- package/template/.claude/skills/logical-components/scripts/fixtures/NoSolutionApp/src/Solo.Application/SoloGreeting.cs +7 -0
- package/template/.claude/skills/logical-components/scripts/fixtures/NoSolutionApp/src/Solo.Application.Tests/FakeGreeting.cs +6 -0
- package/template/.claude/skills/logical-components/scripts/fixtures/NoSolutionApp/src/Solo.Application.Tests/Solo.Application.Tests.csproj +11 -0
- package/template/.claude/skills/logical-components/scripts/fixtures/RenderGolden/components.json +63 -0
- package/template/.claude/skills/logical-components/scripts/fixtures/RenderGolden/expected.md +28 -0
- package/template/.claude/skills/logical-components/scripts/fixtures/RenderGolden/repo/src/App/OrderAcceptance.cs +16 -0
- package/template/.claude/skills/logical-components/scripts/fixtures/RenderGolden/repo/src/Infra/OrderQueue.cs +10 -0
- package/template/.claude/skills/logical-components/scripts/fixtures/RenderGolden/resp/batch-01.json +18 -0
- package/template/.claude/skills/logical-components/scripts/fixtures/SampleApp/SampleApp.slnx +10 -0
- package/template/.claude/skills/logical-components/scripts/fixtures/SampleApp/logical-components.json +78 -0
- package/template/.claude/skills/logical-components/scripts/fixtures/SampleApp/src/Sample.Application/CandidateCases.cs +37 -0
- package/template/.claude/skills/logical-components/scripts/fixtures/SampleApp/src/Sample.Application/CouplingCases.cs +33 -0
- package/template/.claude/skills/logical-components/scripts/fixtures/SampleApp/src/Sample.Application/DependencyInjection.cs +18 -0
- package/template/.claude/skills/logical-components/scripts/fixtures/SampleApp/src/Sample.Application/EdgeCases.cs +63 -0
- package/template/.claude/skills/logical-components/scripts/fixtures/SampleApp/src/Sample.Application/LoudNotifying.Base.cs +5 -0
- package/template/.claude/skills/logical-components/scripts/fixtures/SampleApp/src/Sample.Application/LoudNotifying.cs +7 -0
- package/template/.claude/skills/logical-components/scripts/fixtures/SampleApp/src/Sample.Application/OrderAcceptance.cs +17 -0
- package/template/.claude/skills/logical-components/scripts/fixtures/SampleApp/src/Sample.Application/OrderOptions.cs +9 -0
- package/template/.claude/skills/logical-components/scripts/fixtures/SampleApp/src/Sample.Application/OrderRejectedException.cs +7 -0
- package/template/.claude/skills/logical-components/scripts/fixtures/SampleApp/src/Sample.Application/OrderRequest.cs +4 -0
- package/template/.claude/skills/logical-components/scripts/fixtures/SampleApp/src/Sample.Application/OrderRunning.cs +18 -0
- package/template/.claude/skills/logical-components/scripts/fixtures/SampleApp/src/Sample.Application/OrderValidation.cs +6 -0
- package/template/.claude/skills/logical-components/scripts/fixtures/SampleApp/src/Sample.Application/Ports.cs +19 -0
- package/template/.claude/skills/logical-components/scripts/fixtures/SampleApp/src/Sample.Application/PriceRules.cs +7 -0
- package/template/.claude/skills/logical-components/scripts/fixtures/SampleApp/src/Sample.Application/ReceiptPrinting.Totals.cs +6 -0
- package/template/.claude/skills/logical-components/scripts/fixtures/SampleApp/src/Sample.Application/ReceiptPrinting.cs +7 -0
- package/template/.claude/skills/logical-components/scripts/fixtures/SampleApp/src/Sample.Application/ReviewCases.cs +107 -0
- package/template/.claude/skills/logical-components/scripts/fixtures/SampleApp/src/Sample.Application/ReviewFixCases.cs +143 -0
- package/template/.claude/skills/logical-components/scripts/fixtures/SampleApp/src/Sample.Application/RunClock.cs +12 -0
- package/template/.claude/skills/logical-components/scripts/fixtures/SampleApp/src/Sample.Application/Sample.Application.csproj +10 -0
- package/template/.claude/skills/logical-components/scripts/fixtures/SampleApp/src/Sample.Application/SeeThroughCases.cs +89 -0
- package/template/.claude/skills/logical-components/scripts/fixtures/SampleApp/src/Sample.Billing.Application/OrderRunning.cs +7 -0
- package/template/.claude/skills/logical-components/scripts/fixtures/SampleApp/src/Sample.Billing.Application/Sample.Billing.Application.csproj +11 -0
- package/template/.claude/skills/logical-components/scripts/fixtures/SampleApp/src/Sample.Infrastructure/ForwardedNotifier.cs +8 -0
- package/template/.claude/skills/logical-components/scripts/fixtures/SampleApp/src/Sample.Infrastructure/InfrastructureDependencyInjection.cs +16 -0
- package/template/.claude/skills/logical-components/scripts/fixtures/SampleApp/src/Sample.Infrastructure/Mailer.cs +6 -0
- package/template/.claude/skills/logical-components/scripts/fixtures/SampleApp/src/Sample.Infrastructure/OrderQueue.cs +11 -0
- package/template/.claude/skills/logical-components/scripts/fixtures/SampleApp/src/Sample.Infrastructure/QueueEntry.cs +4 -0
- package/template/.claude/skills/logical-components/scripts/fixtures/SampleApp/src/Sample.Infrastructure/QueueStore.cs +8 -0
- package/template/.claude/skills/logical-components/scripts/fixtures/SampleApp/src/Sample.Infrastructure/ReviewCases.cs +35 -0
- package/template/.claude/skills/logical-components/scripts/fixtures/SampleApp/src/Sample.Infrastructure/ReviewFixCases.cs +13 -0
- package/template/.claude/skills/logical-components/scripts/fixtures/SampleApp/src/Sample.Infrastructure/Sample.Infrastructure.csproj +13 -0
- package/template/.claude/skills/logical-components/scripts/fixtures/SampleApp/src/Sample.Infrastructure/SeeThroughCases.cs +18 -0
- package/template/.claude/skills/logical-components/scripts/fixtures/SampleApp/src/Sample.Infrastructure/UnreachedPlumbing.cs +7 -0
- package/template/.claude/skills/logical-components/scripts/fixtures/SampleApp/tests/Sample.Tests/FakeOrderQueue.cs +11 -0
- package/template/.claude/skills/logical-components/scripts/fixtures/SampleApp/tests/Sample.Tests/Sample.Tests.csproj +11 -0
- package/template/.claude/skills/logical-components/scripts/fixtures/SharedOutsideRepo/SharedClock.cs +7 -0
- package/template/.claude/skills/logical-components/scripts/global.json +5 -0
- package/template/.claude/skills/logical-components/scripts/smoke-sample.sh +26 -0
- package/template/.claude/skills/research/SKILL.md +69 -69
- package/template/.claude/skills/tdd/SKILL.md +142 -142
- package/template/.claude/skills/tdd/deep-modules.md +15 -15
- package/template/.claude/skills/tdd/interface-design.md +31 -31
- package/template/.claude/skills/tdd/mocking.md +59 -59
- package/template/.claude/skills/tdd/refactoring.md +10 -10
- package/template/.claude/skills/tdd/tests.md +61 -61
- package/template/.claude/statusline.cjs +100 -37
|
@@ -1,111 +1,111 @@
|
|
|
1
|
-
# Layout and space
|
|
2
|
-
|
|
3
|
-
Layout is where "AI-generated" gets caught. Equal columns, everything centred, every card identical — these are the tells.
|
|
4
|
-
|
|
5
|
-
## Principles
|
|
6
|
-
|
|
7
|
-
- A layout has a **primary axis**. Left-biased, right-biased, top-heavy, or bottom-weighted. Centre-biased is a default, not a choice.
|
|
8
|
-
- **Asymmetry reads as intentional.** Symmetry reads as generated. When in doubt, shift.
|
|
9
|
-
- **Spacing is a scale, not a value.** Pick one scale. Use it everywhere. Don't type raw px.
|
|
10
|
-
- **Varied spacing.** If every gap is 24px, the page is a template. Mix small, medium, and large gaps within the same layout.
|
|
11
|
-
- **Break the grid on purpose.** A page with one element crossing the grid is stronger than a page that never does.
|
|
12
|
-
|
|
13
|
-
## The spacing scale
|
|
14
|
-
|
|
15
|
-
4pt base. Nine steps. Named by role, not size.
|
|
16
|
-
|
|
17
|
-
```css
|
|
18
|
-
:root {
|
|
19
|
-
--space-3xs: 0.125rem; /* 2px */
|
|
20
|
-
--space-2xs: 0.25rem; /* 4px */
|
|
21
|
-
--space-xs: 0.5rem; /* 8px */
|
|
22
|
-
--space-sm: 0.75rem; /* 12px */
|
|
23
|
-
--space-md: 1rem; /* 16px */
|
|
24
|
-
--space-lg: 1.5rem; /* 24px */
|
|
25
|
-
--space-xl: 2.5rem; /* 40px */
|
|
26
|
-
--space-2xl: 4rem; /* 64px */
|
|
27
|
-
--space-3xl: 6rem; /* 96px */
|
|
28
|
-
--space-4xl: 9rem; /* 144px */
|
|
29
|
-
}
|
|
30
|
-
```
|
|
31
|
-
|
|
32
|
-
- Use `gap` for sibling spacing. It's cleaner than stacked margins, it participates in flex/grid, and it collapses predictably.
|
|
33
|
-
- Use `margin` only for optical adjustments or breaking out of the flow. Never `margin` for a list of siblings.
|
|
34
|
-
|
|
35
|
-
## Grids
|
|
36
|
-
|
|
37
|
-
- **Prefer CSS Grid** for page layout, **Flexbox** for component internals.
|
|
38
|
-
- `grid-template-columns: repeat(auto-fit, minmax(280px, 1fr))` for fluid responsive grids without media queries.
|
|
39
|
-
- **Don't default to 3 columns of equal cards with icon-above-heading-above-copy.** This is *the* AI feature-grid. Break it: vary column widths with `grid-template-columns: 1.2fr 1fr 0.8fr`, or use a 12-column underlying grid and give each item a different span, or use 4-up with a 2-span hero, etc.
|
|
40
|
-
- Use **named grid areas** for complex layouts and rename them at breakpoints.
|
|
41
|
-
|
|
42
|
-
## Asymmetry techniques
|
|
43
|
-
|
|
44
|
-
- **Wide left margin.** Treat the left as a permanent negative space — narrow column of labels, wide column of content. **Labels must NOT be section eyebrows / numbers paired with the heading** — that's gate-66-banned. Reserve this technique for body-level micro-labels (caption, footnote, date) alongside body copy.
|
|
45
|
-
- **Hanging headers.** ⚠️ **Opt-in only.** Section labels sit in the left margin; content flows to the right. Permitted only when the user explicitly asks for an editorial / hanging-header layout AND no eyebrow / number / chapter tag sits in the left margin. The eyebrow-left / heading-right pattern is banned by slop-test gate 66 — it's the most reliable templated-editorial AI tell. Default to a stacked single-column section head.
|
|
46
|
-
- **Offset grids.** Odd columns wider than even. Or the other way.
|
|
47
|
-
- **Grid-breaks.** One element that deliberately extends past a column boundary: a pull-quote, a photograph, a rule, a number.
|
|
48
|
-
- **Generous top, tight bottom** (or vice-versa). Sections don't need to be evenly padded.
|
|
49
|
-
|
|
50
|
-
## Depth
|
|
51
|
-
|
|
52
|
-
- Depth is **weight and scale**, not shadow. A heavier weight, a larger size, a warmer hue — these create hierarchy better than drop shadows.
|
|
53
|
-
- If you use shadow, use one:
|
|
54
|
-
- **Whisper** — `0 1px 2px oklch(20% 0.01 <hue> / 0.05)` for hovering cards.
|
|
55
|
-
- **Hairline** — `0 0 0 1px oklch(30% 0.01 <hue> / 0.06)` as an alternative to a 1px border.
|
|
56
|
-
- Never stack multiple shadows. Never use a coloured glow on a light background.
|
|
57
|
-
- Z-index has **six levels, named.** Don't freestyle numbers.
|
|
58
|
-
|
|
59
|
-
```css
|
|
60
|
-
:root {
|
|
61
|
-
--z-base: 1;
|
|
62
|
-
--z-raised: 10;
|
|
63
|
-
--z-dropdown: 100;
|
|
64
|
-
--z-sticky: 200;
|
|
65
|
-
--z-modal: 400;
|
|
66
|
-
--z-toast: 500;
|
|
67
|
-
--z-tooltip: 600;
|
|
68
|
-
}
|
|
69
|
-
```
|
|
70
|
-
|
|
71
|
-
## Bans
|
|
72
|
-
|
|
73
|
-
- **Centre-aligned everything.** Headings + body + CTA all centred is the landing-page template every LLM emits.
|
|
74
|
-
- **`min-height: 100vh` hero with one centred sentence.** Stop.
|
|
75
|
-
- **Card-in-card.** A bordered container inside a bordered container. Pick one.
|
|
76
|
-
- **Identical feature grid.** Three columns, three icons, three two-line headings, three three-line bodies. Change *something*.
|
|
77
|
-
- **Equal padding on everything.** If the card padding equals the section padding equals the page padding, the rhythm is flat.
|
|
78
|
-
- **`z-index: 9999`** and other ad-hoc z values. Use the scale.
|
|
79
|
-
- **Shadow-on-dark accidental glow.** A drop shadow on a dark card creates a glow; that's wrong.
|
|
80
|
-
|
|
81
|
-
## Page-edge clipping
|
|
82
|
-
|
|
83
|
-
The clipped-edge enrichment archetype (E1) — and any other deliberately overflowing element (full-bleed marquee, oversized headline that exceeds the viewport on small screens, a tilted figure that pushes past a column) — needs a parent that *visually* shows the overflow without letting the document scroll horizontally.
|
|
84
|
-
|
|
85
|
-
The default is unsafe: a `width: calc(100% + 12vw)` figure inside a section with `overflow: visible` makes the document scroll horizontally on every viewport. The page feels broken on touch devices. Slop-test gate 36 fails on this.
|
|
86
|
-
|
|
87
|
-
**Always pair clipped-edge with a global clip.** At the top of the stylesheet:
|
|
88
|
-
|
|
89
|
-
```css
|
|
90
|
-
html { overflow-x: clip; }
|
|
91
|
-
body { overflow-x: clip; } /* fallback for older Safari */
|
|
92
|
-
```
|
|
93
|
-
|
|
94
|
-
Use `overflow-x: clip` rather than `overflow-x: hidden`:
|
|
95
|
-
|
|
96
|
-
- `clip` preserves `position: sticky` and `position: fixed` on descendants.
|
|
97
|
-
- `hidden` creates a new scroll container, which breaks sticky and can trap focus on overflowing inputs.
|
|
98
|
-
|
|
99
|
-
The clipped-edge mockup keeps its visual extension; the page no longer scrolls horizontally. Same pattern works for full-bleed marquees, oversized headlines, and any deliberately-decorative overflow.
|
|
100
|
-
|
|
101
|
-
The hero or section that *contains* the overflowing element keeps `overflow: visible` (so the figure renders past the parent edge); the global clip on `html` and `body` is the only safety net needed.
|
|
102
|
-
|
|
103
|
-
## When in doubt
|
|
104
|
-
|
|
105
|
-
If the layout looks fine but flat, do one of these before shipping:
|
|
106
|
-
|
|
107
|
-
1. Add one break-out element.
|
|
108
|
-
2. Unbalance a column width.
|
|
109
|
-
3. Move the primary CTA out of the centre.
|
|
110
|
-
4. Remove a card and replace it with negative space.
|
|
111
|
-
5. Change one section's padding so the rhythm is uneven.
|
|
1
|
+
# Layout and space
|
|
2
|
+
|
|
3
|
+
Layout is where "AI-generated" gets caught. Equal columns, everything centred, every card identical — these are the tells.
|
|
4
|
+
|
|
5
|
+
## Principles
|
|
6
|
+
|
|
7
|
+
- A layout has a **primary axis**. Left-biased, right-biased, top-heavy, or bottom-weighted. Centre-biased is a default, not a choice.
|
|
8
|
+
- **Asymmetry reads as intentional.** Symmetry reads as generated. When in doubt, shift.
|
|
9
|
+
- **Spacing is a scale, not a value.** Pick one scale. Use it everywhere. Don't type raw px.
|
|
10
|
+
- **Varied spacing.** If every gap is 24px, the page is a template. Mix small, medium, and large gaps within the same layout.
|
|
11
|
+
- **Break the grid on purpose.** A page with one element crossing the grid is stronger than a page that never does.
|
|
12
|
+
|
|
13
|
+
## The spacing scale
|
|
14
|
+
|
|
15
|
+
4pt base. Nine steps. Named by role, not size.
|
|
16
|
+
|
|
17
|
+
```css
|
|
18
|
+
:root {
|
|
19
|
+
--space-3xs: 0.125rem; /* 2px */
|
|
20
|
+
--space-2xs: 0.25rem; /* 4px */
|
|
21
|
+
--space-xs: 0.5rem; /* 8px */
|
|
22
|
+
--space-sm: 0.75rem; /* 12px */
|
|
23
|
+
--space-md: 1rem; /* 16px */
|
|
24
|
+
--space-lg: 1.5rem; /* 24px */
|
|
25
|
+
--space-xl: 2.5rem; /* 40px */
|
|
26
|
+
--space-2xl: 4rem; /* 64px */
|
|
27
|
+
--space-3xl: 6rem; /* 96px */
|
|
28
|
+
--space-4xl: 9rem; /* 144px */
|
|
29
|
+
}
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
- Use `gap` for sibling spacing. It's cleaner than stacked margins, it participates in flex/grid, and it collapses predictably.
|
|
33
|
+
- Use `margin` only for optical adjustments or breaking out of the flow. Never `margin` for a list of siblings.
|
|
34
|
+
|
|
35
|
+
## Grids
|
|
36
|
+
|
|
37
|
+
- **Prefer CSS Grid** for page layout, **Flexbox** for component internals.
|
|
38
|
+
- `grid-template-columns: repeat(auto-fit, minmax(280px, 1fr))` for fluid responsive grids without media queries.
|
|
39
|
+
- **Don't default to 3 columns of equal cards with icon-above-heading-above-copy.** This is *the* AI feature-grid. Break it: vary column widths with `grid-template-columns: 1.2fr 1fr 0.8fr`, or use a 12-column underlying grid and give each item a different span, or use 4-up with a 2-span hero, etc.
|
|
40
|
+
- Use **named grid areas** for complex layouts and rename them at breakpoints.
|
|
41
|
+
|
|
42
|
+
## Asymmetry techniques
|
|
43
|
+
|
|
44
|
+
- **Wide left margin.** Treat the left as a permanent negative space — narrow column of labels, wide column of content. **Labels must NOT be section eyebrows / numbers paired with the heading** — that's gate-66-banned. Reserve this technique for body-level micro-labels (caption, footnote, date) alongside body copy.
|
|
45
|
+
- **Hanging headers.** ⚠️ **Opt-in only.** Section labels sit in the left margin; content flows to the right. Permitted only when the user explicitly asks for an editorial / hanging-header layout AND no eyebrow / number / chapter tag sits in the left margin. The eyebrow-left / heading-right pattern is banned by slop-test gate 66 — it's the most reliable templated-editorial AI tell. Default to a stacked single-column section head.
|
|
46
|
+
- **Offset grids.** Odd columns wider than even. Or the other way.
|
|
47
|
+
- **Grid-breaks.** One element that deliberately extends past a column boundary: a pull-quote, a photograph, a rule, a number.
|
|
48
|
+
- **Generous top, tight bottom** (or vice-versa). Sections don't need to be evenly padded.
|
|
49
|
+
|
|
50
|
+
## Depth
|
|
51
|
+
|
|
52
|
+
- Depth is **weight and scale**, not shadow. A heavier weight, a larger size, a warmer hue — these create hierarchy better than drop shadows.
|
|
53
|
+
- If you use shadow, use one:
|
|
54
|
+
- **Whisper** — `0 1px 2px oklch(20% 0.01 <hue> / 0.05)` for hovering cards.
|
|
55
|
+
- **Hairline** — `0 0 0 1px oklch(30% 0.01 <hue> / 0.06)` as an alternative to a 1px border.
|
|
56
|
+
- Never stack multiple shadows. Never use a coloured glow on a light background.
|
|
57
|
+
- Z-index has **six levels, named.** Don't freestyle numbers.
|
|
58
|
+
|
|
59
|
+
```css
|
|
60
|
+
:root {
|
|
61
|
+
--z-base: 1;
|
|
62
|
+
--z-raised: 10;
|
|
63
|
+
--z-dropdown: 100;
|
|
64
|
+
--z-sticky: 200;
|
|
65
|
+
--z-modal: 400;
|
|
66
|
+
--z-toast: 500;
|
|
67
|
+
--z-tooltip: 600;
|
|
68
|
+
}
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
## Bans
|
|
72
|
+
|
|
73
|
+
- **Centre-aligned everything.** Headings + body + CTA all centred is the landing-page template every LLM emits.
|
|
74
|
+
- **`min-height: 100vh` hero with one centred sentence.** Stop.
|
|
75
|
+
- **Card-in-card.** A bordered container inside a bordered container. Pick one.
|
|
76
|
+
- **Identical feature grid.** Three columns, three icons, three two-line headings, three three-line bodies. Change *something*.
|
|
77
|
+
- **Equal padding on everything.** If the card padding equals the section padding equals the page padding, the rhythm is flat.
|
|
78
|
+
- **`z-index: 9999`** and other ad-hoc z values. Use the scale.
|
|
79
|
+
- **Shadow-on-dark accidental glow.** A drop shadow on a dark card creates a glow; that's wrong.
|
|
80
|
+
|
|
81
|
+
## Page-edge clipping
|
|
82
|
+
|
|
83
|
+
The clipped-edge enrichment archetype (E1) — and any other deliberately overflowing element (full-bleed marquee, oversized headline that exceeds the viewport on small screens, a tilted figure that pushes past a column) — needs a parent that *visually* shows the overflow without letting the document scroll horizontally.
|
|
84
|
+
|
|
85
|
+
The default is unsafe: a `width: calc(100% + 12vw)` figure inside a section with `overflow: visible` makes the document scroll horizontally on every viewport. The page feels broken on touch devices. Slop-test gate 36 fails on this.
|
|
86
|
+
|
|
87
|
+
**Always pair clipped-edge with a global clip.** At the top of the stylesheet:
|
|
88
|
+
|
|
89
|
+
```css
|
|
90
|
+
html { overflow-x: clip; }
|
|
91
|
+
body { overflow-x: clip; } /* fallback for older Safari */
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
Use `overflow-x: clip` rather than `overflow-x: hidden`:
|
|
95
|
+
|
|
96
|
+
- `clip` preserves `position: sticky` and `position: fixed` on descendants.
|
|
97
|
+
- `hidden` creates a new scroll container, which breaks sticky and can trap focus on overflowing inputs.
|
|
98
|
+
|
|
99
|
+
The clipped-edge mockup keeps its visual extension; the page no longer scrolls horizontally. Same pattern works for full-bleed marquees, oversized headlines, and any deliberately-decorative overflow.
|
|
100
|
+
|
|
101
|
+
The hero or section that *contains* the overflowing element keeps `overflow: visible` (so the figure renders past the parent edge); the global clip on `html` and `body` is the only safety net needed.
|
|
102
|
+
|
|
103
|
+
## When in doubt
|
|
104
|
+
|
|
105
|
+
If the layout looks fine but flat, do one of these before shipping:
|
|
106
|
+
|
|
107
|
+
1. Add one break-out element.
|
|
108
|
+
2. Unbalance a column width.
|
|
109
|
+
3. Move the primary CTA out of the centre.
|
|
110
|
+
4. Remove a card and replace it with negative space.
|
|
111
|
+
5. Change one section's padding so the rhythm is uneven.
|
|
@@ -1,35 +1,35 @@
|
|
|
1
|
-
## 01 · Bento Grid
|
|
2
|
-
|
|
3
|
-
Modular blocks of varying sizes laid out as an irregular grid. Each block is a feature, a quote, an image, a stat. Visual rhythm comes from size variation, not card uniformity.
|
|
4
|
-
|
|
5
|
-
- **Heading:** centered display in a fixed-height hero (not full viewport).
|
|
6
|
-
- **Body:** asymmetric grid — 8–15 blocks of mixed spans (1×1, 2×1, 1×2, 2×2).
|
|
7
|
-
- **Divider:** consistent 12–24 px gap; no rules; the grid itself is the rhythm.
|
|
8
|
-
- **Button:** outlined chip on the hero; tile-internal CTAs as typographic links.
|
|
9
|
-
- **Image:** tightly cropped inside individual blocks; never full-bleed.
|
|
10
|
-
- **Reveal:** none, or a subtle one-shot fade on grid-tile entry.
|
|
11
|
-
|
|
12
|
-
Reach for it when the brief is "many small things to show", a feature page, a SaaS landing, or anywhere users have multiple equally-valid entry points.
|
|
13
|
-
|
|
14
|
-
Avoid when the message is a single hero idea — Bento spreads attention; one-idea pages need Marquee or Stat-Led.
|
|
15
|
-
|
|
16
|
-
Reference: Apple in-page sections, Framer feature pages, Tailwind UI templates.
|
|
17
|
-
|
|
18
|
-
**Sample opening lines** (imitate the *specificity*, not the wording):
|
|
19
|
-
> *"Tracejam · v0.4 · for SREs. Distributed tracing that explains itself."* — paraphrased from real observability tools
|
|
20
|
-
> *"Resend is the email API for developers. Send transactional and marketing emails at scale."* — resend.com
|
|
21
|
-
> *"The product development system for teams and agents."* — linear.app
|
|
22
|
-
|
|
23
|
-
```html
|
|
24
|
-
<header class="hero-fixed">…</header>
|
|
25
|
-
<section class="bento">
|
|
26
|
-
<article class="cell span-2x2">…</article> <!-- hero feature -->
|
|
27
|
-
<article class="cell span-1x1">…</article>
|
|
28
|
-
<article class="cell span-2x1">…</article> <!-- wide stat -->
|
|
29
|
-
<article class="cell span-1x2">…</article> <!-- tall image -->
|
|
30
|
-
<article class="cell span-1x1">…</article>
|
|
31
|
-
<article class="cell span-1x1">…</article>
|
|
32
|
-
</section>
|
|
33
|
-
```
|
|
34
|
-
|
|
35
|
-
---
|
|
1
|
+
## 01 · Bento Grid
|
|
2
|
+
|
|
3
|
+
Modular blocks of varying sizes laid out as an irregular grid. Each block is a feature, a quote, an image, a stat. Visual rhythm comes from size variation, not card uniformity.
|
|
4
|
+
|
|
5
|
+
- **Heading:** centered display in a fixed-height hero (not full viewport).
|
|
6
|
+
- **Body:** asymmetric grid — 8–15 blocks of mixed spans (1×1, 2×1, 1×2, 2×2).
|
|
7
|
+
- **Divider:** consistent 12–24 px gap; no rules; the grid itself is the rhythm.
|
|
8
|
+
- **Button:** outlined chip on the hero; tile-internal CTAs as typographic links.
|
|
9
|
+
- **Image:** tightly cropped inside individual blocks; never full-bleed.
|
|
10
|
+
- **Reveal:** none, or a subtle one-shot fade on grid-tile entry.
|
|
11
|
+
|
|
12
|
+
Reach for it when the brief is "many small things to show", a feature page, a SaaS landing, or anywhere users have multiple equally-valid entry points.
|
|
13
|
+
|
|
14
|
+
Avoid when the message is a single hero idea — Bento spreads attention; one-idea pages need Marquee or Stat-Led.
|
|
15
|
+
|
|
16
|
+
Reference: Apple in-page sections, Framer feature pages, Tailwind UI templates.
|
|
17
|
+
|
|
18
|
+
**Sample opening lines** (imitate the *specificity*, not the wording):
|
|
19
|
+
> *"Tracejam · v0.4 · for SREs. Distributed tracing that explains itself."* — paraphrased from real observability tools
|
|
20
|
+
> *"Resend is the email API for developers. Send transactional and marketing emails at scale."* — resend.com
|
|
21
|
+
> *"The product development system for teams and agents."* — linear.app
|
|
22
|
+
|
|
23
|
+
```html
|
|
24
|
+
<header class="hero-fixed">…</header>
|
|
25
|
+
<section class="bento">
|
|
26
|
+
<article class="cell span-2x2">…</article> <!-- hero feature -->
|
|
27
|
+
<article class="cell span-1x1">…</article>
|
|
28
|
+
<article class="cell span-2x1">…</article> <!-- wide stat -->
|
|
29
|
+
<article class="cell span-1x2">…</article> <!-- tall image -->
|
|
30
|
+
<article class="cell span-1x1">…</article>
|
|
31
|
+
<article class="cell span-1x1">…</article>
|
|
32
|
+
</section>
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
---
|
|
@@ -1,34 +1,34 @@
|
|
|
1
|
-
## 02 · Long Document
|
|
2
|
-
|
|
3
|
-
Reads like a memo, a letter, or a journal entry. No marketing structure. Continuous prose with inline section heads. The page is *literature* about the product.
|
|
4
|
-
|
|
5
|
-
- **Heading:** inline with body — section heads emerge from the paragraph flow as small caps or bold short phrases.
|
|
6
|
-
- **Body:** single column, generous line-height (1.65+), measure 60–65ch.
|
|
7
|
-
- **Divider:** negative space; the gap is the divider; occasionally a centered ornament for emphasis.
|
|
8
|
-
- **Button:** typographic link inside a paragraph, not a separate block.
|
|
9
|
-
- **Image:** inline, sized to text measure; never full-bleed.
|
|
10
|
-
- **Reveal:** none. The page is just *there*.
|
|
11
|
-
|
|
12
|
-
Reach for it for case studies, founder posts, mission pages, products whose sale is *philosophical*. The brief is "tell a story", not "list features".
|
|
13
|
-
|
|
14
|
-
Avoid when there's a single decisive action to take — Long Document hides CTAs, which is wrong for transactional pages.
|
|
15
|
-
|
|
16
|
-
Reference: Frank Chimero's site, destroytoday.com, long-form Substack essays in product disguise.
|
|
17
|
-
|
|
18
|
-
**Sample opening lines** (imitate the *specificity*, not the wording):
|
|
19
|
-
> *"Saturday, 6:14 a.m. The dough went in at midnight."* — opens with a time-stamp; the brand introduces itself as a moment in the day
|
|
20
|
-
> *"A monthly art publication featuring contributions by some of the most engaged thinkers working today."* — e-flux.com/journal
|
|
21
|
-
> *"We design everything for everyone."* — pentagram.com — refusal of the verb, treats design as universal practice
|
|
22
|
-
|
|
23
|
-
```html
|
|
24
|
-
<article class="prose">
|
|
25
|
-
<p class="lede">…</p>
|
|
26
|
-
<p>…</p>
|
|
27
|
-
<h2 class="inline">A small heading.</h2>
|
|
28
|
-
<p>…</p>
|
|
29
|
-
<blockquote>…</blockquote>
|
|
30
|
-
<p>… <a href="">read more →</a> …</p>
|
|
31
|
-
</article>
|
|
32
|
-
```
|
|
33
|
-
|
|
34
|
-
---
|
|
1
|
+
## 02 · Long Document
|
|
2
|
+
|
|
3
|
+
Reads like a memo, a letter, or a journal entry. No marketing structure. Continuous prose with inline section heads. The page is *literature* about the product.
|
|
4
|
+
|
|
5
|
+
- **Heading:** inline with body — section heads emerge from the paragraph flow as small caps or bold short phrases.
|
|
6
|
+
- **Body:** single column, generous line-height (1.65+), measure 60–65ch.
|
|
7
|
+
- **Divider:** negative space; the gap is the divider; occasionally a centered ornament for emphasis.
|
|
8
|
+
- **Button:** typographic link inside a paragraph, not a separate block.
|
|
9
|
+
- **Image:** inline, sized to text measure; never full-bleed.
|
|
10
|
+
- **Reveal:** none. The page is just *there*.
|
|
11
|
+
|
|
12
|
+
Reach for it for case studies, founder posts, mission pages, products whose sale is *philosophical*. The brief is "tell a story", not "list features".
|
|
13
|
+
|
|
14
|
+
Avoid when there's a single decisive action to take — Long Document hides CTAs, which is wrong for transactional pages.
|
|
15
|
+
|
|
16
|
+
Reference: Frank Chimero's site, destroytoday.com, long-form Substack essays in product disguise.
|
|
17
|
+
|
|
18
|
+
**Sample opening lines** (imitate the *specificity*, not the wording):
|
|
19
|
+
> *"Saturday, 6:14 a.m. The dough went in at midnight."* — opens with a time-stamp; the brand introduces itself as a moment in the day
|
|
20
|
+
> *"A monthly art publication featuring contributions by some of the most engaged thinkers working today."* — e-flux.com/journal
|
|
21
|
+
> *"We design everything for everyone."* — pentagram.com — refusal of the verb, treats design as universal practice
|
|
22
|
+
|
|
23
|
+
```html
|
|
24
|
+
<article class="prose">
|
|
25
|
+
<p class="lede">…</p>
|
|
26
|
+
<p>…</p>
|
|
27
|
+
<h2 class="inline">A small heading.</h2>
|
|
28
|
+
<p>…</p>
|
|
29
|
+
<blockquote>…</blockquote>
|
|
30
|
+
<p>… <a href="">read more →</a> …</p>
|
|
31
|
+
</article>
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
---
|
|
@@ -1,31 +1,31 @@
|
|
|
1
|
-
## 03 · Marquee Hero
|
|
2
|
-
|
|
3
|
-
The hero IS the page above the fold. A single bold statement or visual fills the viewport. No subhead, no CTA in fold. Below the fold the page becomes something else (a list, a grid, prose).
|
|
4
|
-
|
|
5
|
-
- **Heading:** display fills the fold — 8–14 vw type, hugging the viewport edges.
|
|
6
|
-
- **Body:** below-fold becomes a list of work or a single content block; the hero doesn't continue.
|
|
7
|
-
- **Divider:** a thick rule between hero and below-fold, OR a hard colour change.
|
|
8
|
-
- **Button:** none in fold; first CTA arrives below.
|
|
9
|
-
- **Image:** none in fold (typography is the visual), OR a single full-bleed photograph as the fold *background*.
|
|
10
|
-
- **Reveal:** the fold is static; below-fold may sweep in horizontally.
|
|
11
|
-
|
|
12
|
-
Reach for it when the brand or person *is* the message — designer/director portfolios, indie products with a single declarative voice, any "this is who we are" page.
|
|
13
|
-
|
|
14
|
-
Avoid for products whose value requires explanation in seconds. Marquee makes the user scroll before they understand.
|
|
15
|
-
|
|
16
|
-
Reference: 14islands.com, destroytoday.com, many design studio homepages.
|
|
17
|
-
|
|
18
|
-
**Sample opening lines** (imitate the *specificity*, not the wording):
|
|
19
|
-
> *"Type, set with care."* — Hallmark Specimen — refusal of the verb, treats type as material
|
|
20
|
-
> *"A studio for what's next."* — italic editorial display, names the practice without explaining it
|
|
21
|
-
> *"Design like print: warm, off-register, intentional."* — Hallmark Riso — declarative, three modifiers, full stop
|
|
22
|
-
|
|
23
|
-
```html
|
|
24
|
-
<section class="marquee">
|
|
25
|
-
<h1 class="display-xxl">A statement.</h1>
|
|
26
|
-
</section>
|
|
27
|
-
<hr class="rule-thick" />
|
|
28
|
-
<section class="below-fold">…</section>
|
|
29
|
-
```
|
|
30
|
-
|
|
31
|
-
---
|
|
1
|
+
## 03 · Marquee Hero
|
|
2
|
+
|
|
3
|
+
The hero IS the page above the fold. A single bold statement or visual fills the viewport. No subhead, no CTA in fold. Below the fold the page becomes something else (a list, a grid, prose).
|
|
4
|
+
|
|
5
|
+
- **Heading:** display fills the fold — 8–14 vw type, hugging the viewport edges.
|
|
6
|
+
- **Body:** below-fold becomes a list of work or a single content block; the hero doesn't continue.
|
|
7
|
+
- **Divider:** a thick rule between hero and below-fold, OR a hard colour change.
|
|
8
|
+
- **Button:** none in fold; first CTA arrives below.
|
|
9
|
+
- **Image:** none in fold (typography is the visual), OR a single full-bleed photograph as the fold *background*.
|
|
10
|
+
- **Reveal:** the fold is static; below-fold may sweep in horizontally.
|
|
11
|
+
|
|
12
|
+
Reach for it when the brand or person *is* the message — designer/director portfolios, indie products with a single declarative voice, any "this is who we are" page.
|
|
13
|
+
|
|
14
|
+
Avoid for products whose value requires explanation in seconds. Marquee makes the user scroll before they understand.
|
|
15
|
+
|
|
16
|
+
Reference: 14islands.com, destroytoday.com, many design studio homepages.
|
|
17
|
+
|
|
18
|
+
**Sample opening lines** (imitate the *specificity*, not the wording):
|
|
19
|
+
> *"Type, set with care."* — Hallmark Specimen — refusal of the verb, treats type as material
|
|
20
|
+
> *"A studio for what's next."* — italic editorial display, names the practice without explaining it
|
|
21
|
+
> *"Design like print: warm, off-register, intentional."* — Hallmark Riso — declarative, three modifiers, full stop
|
|
22
|
+
|
|
23
|
+
```html
|
|
24
|
+
<section class="marquee">
|
|
25
|
+
<h1 class="display-xxl">A statement.</h1>
|
|
26
|
+
</section>
|
|
27
|
+
<hr class="rule-thick" />
|
|
28
|
+
<section class="below-fold">…</section>
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
---
|
|
@@ -1,32 +1,32 @@
|
|
|
1
|
-
## 04 · Stat-Led
|
|
2
|
-
|
|
3
|
-
The hero is a giant number — a metric, a count, a percentage. Everything that follows supports or qualifies it. Data is the narrative.
|
|
4
|
-
|
|
5
|
-
- **Heading:** numeric display (8–12 rem), tabular figures, small qualifier line below.
|
|
6
|
-
- **Body:** sections each anchored by a supporting stat or chart.
|
|
7
|
-
- **Divider:** hairline rules between stat blocks; tabular-nums everywhere.
|
|
8
|
-
- **Button:** outlined chip aligned beneath the qualifier.
|
|
9
|
-
- **Image:** charts and small data-viz; no photography.
|
|
10
|
-
- **Reveal:** number-tick on the hero figure — counter from 0 to target over ~500 ms.
|
|
11
|
-
|
|
12
|
-
Reach for it when the brief is "we have proof in numbers" — enterprise/B2B, fundraising platforms, climate or impact pages.
|
|
13
|
-
|
|
14
|
-
Avoid for products without a defensible single metric. A fake big number is worse than no number.
|
|
15
|
-
|
|
16
|
-
Reference: Ahrefs, Stripe Sessions stat blocks, climate-impact dashboards, venture firm portfolio pages.
|
|
17
|
-
|
|
18
|
-
**Sample opening lines** (imitate the *specificity*, not the wording — the number does the work):
|
|
19
|
-
> *"+47% · faster · decide late."* — italicised number, three-word qualifier
|
|
20
|
-
> *"4 seconds. From the alert link to the slow span."* — pairs the number with what it bought
|
|
21
|
-
> *"434 total posts. New CSS you feel like you could use today."* — adam argyle, nerdy.dev — the count grounds the page in real volume
|
|
22
|
-
|
|
23
|
-
```html
|
|
24
|
-
<section class="stat-hero">
|
|
25
|
-
<div class="figure tnum">99.97<span class="unit">%</span></div>
|
|
26
|
-
<p class="qualifier">uptime across 2026, measured externally.</p>
|
|
27
|
-
<a class="cta-outline">Read the report →</a>
|
|
28
|
-
</section>
|
|
29
|
-
<section class="supporting-stats">…</section>
|
|
30
|
-
```
|
|
31
|
-
|
|
32
|
-
---
|
|
1
|
+
## 04 · Stat-Led
|
|
2
|
+
|
|
3
|
+
The hero is a giant number — a metric, a count, a percentage. Everything that follows supports or qualifies it. Data is the narrative.
|
|
4
|
+
|
|
5
|
+
- **Heading:** numeric display (8–12 rem), tabular figures, small qualifier line below.
|
|
6
|
+
- **Body:** sections each anchored by a supporting stat or chart.
|
|
7
|
+
- **Divider:** hairline rules between stat blocks; tabular-nums everywhere.
|
|
8
|
+
- **Button:** outlined chip aligned beneath the qualifier.
|
|
9
|
+
- **Image:** charts and small data-viz; no photography.
|
|
10
|
+
- **Reveal:** number-tick on the hero figure — counter from 0 to target over ~500 ms.
|
|
11
|
+
|
|
12
|
+
Reach for it when the brief is "we have proof in numbers" — enterprise/B2B, fundraising platforms, climate or impact pages.
|
|
13
|
+
|
|
14
|
+
Avoid for products without a defensible single metric. A fake big number is worse than no number.
|
|
15
|
+
|
|
16
|
+
Reference: Ahrefs, Stripe Sessions stat blocks, climate-impact dashboards, venture firm portfolio pages.
|
|
17
|
+
|
|
18
|
+
**Sample opening lines** (imitate the *specificity*, not the wording — the number does the work):
|
|
19
|
+
> *"+47% · faster · decide late."* — italicised number, three-word qualifier
|
|
20
|
+
> *"4 seconds. From the alert link to the slow span."* — pairs the number with what it bought
|
|
21
|
+
> *"434 total posts. New CSS you feel like you could use today."* — adam argyle, nerdy.dev — the count grounds the page in real volume
|
|
22
|
+
|
|
23
|
+
```html
|
|
24
|
+
<section class="stat-hero">
|
|
25
|
+
<div class="figure tnum">99.97<span class="unit">%</span></div>
|
|
26
|
+
<p class="qualifier">uptime across 2026, measured externally.</p>
|
|
27
|
+
<a class="cta-outline">Read the report →</a>
|
|
28
|
+
</section>
|
|
29
|
+
<section class="supporting-stats">…</section>
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
---
|
|
@@ -1,32 +1,32 @@
|
|
|
1
|
-
## 05 · Workbench
|
|
2
|
-
|
|
3
|
-
Product screenshots in frames are the primary content. The page is a guided tour of the app in use. Less marketing copy, more "here's what you do with it."
|
|
4
|
-
|
|
5
|
-
- **Heading:** small, functional — workbench pages don't shout.
|
|
6
|
-
- **Body:** sequence of screenshot blocks, each with a short caption and an inline annotation arrow.
|
|
7
|
-
- **Divider:** the screenshot frame *is* the divider; sections separate by gap and frame.
|
|
8
|
-
- **Button:** sticky-bottom CTA bar after the third screenshot ("Try it →"), once context is built.
|
|
9
|
-
- **Image:** central — browser/device frames around real product captures, with annotation arrows.
|
|
10
|
-
- **Reveal:** type-unmask on captions; screenshots load instantly.
|
|
11
|
-
|
|
12
|
-
Reach for it for SaaS, developer tools, IDE extensions — anywhere seeing the product in motion is the sale.
|
|
13
|
-
|
|
14
|
-
Avoid when the product is conceptual or services-led. Workbench needs a UI to show.
|
|
15
|
-
|
|
16
|
-
Reference: Linear.app, Vercel, Raycast, Arc Browser.
|
|
17
|
-
|
|
18
|
-
**Sample opening lines** (imitate the *specificity*, not the wording — the page walks the user through):
|
|
19
|
-
> *"$ streampipe parse access.log --filter status=5xx | jq"* — open on a real command, not a marketing claim
|
|
20
|
-
> *"Read anything that emits lines. Files, pipes, sockets, kubectl logs."* — names the inputs, refuses abstraction
|
|
21
|
-
> *"Open the trace, find the span, fix the regression. No glossary required."* — three concrete verbs, then a refusal
|
|
22
|
-
|
|
23
|
-
```html
|
|
24
|
-
<header class="lite">…</header>
|
|
25
|
-
<section class="screenshot-frame">
|
|
26
|
-
<figure><img src="step-1.png" /><figcaption>Open a project.</figcaption></figure>
|
|
27
|
-
</section>
|
|
28
|
-
<section class="screenshot-frame">…</section>
|
|
29
|
-
<aside class="sticky-cta">Try it free →</aside>
|
|
30
|
-
```
|
|
31
|
-
|
|
32
|
-
---
|
|
1
|
+
## 05 · Workbench
|
|
2
|
+
|
|
3
|
+
Product screenshots in frames are the primary content. The page is a guided tour of the app in use. Less marketing copy, more "here's what you do with it."
|
|
4
|
+
|
|
5
|
+
- **Heading:** small, functional — workbench pages don't shout.
|
|
6
|
+
- **Body:** sequence of screenshot blocks, each with a short caption and an inline annotation arrow.
|
|
7
|
+
- **Divider:** the screenshot frame *is* the divider; sections separate by gap and frame.
|
|
8
|
+
- **Button:** sticky-bottom CTA bar after the third screenshot ("Try it →"), once context is built.
|
|
9
|
+
- **Image:** central — browser/device frames around real product captures, with annotation arrows.
|
|
10
|
+
- **Reveal:** type-unmask on captions; screenshots load instantly.
|
|
11
|
+
|
|
12
|
+
Reach for it for SaaS, developer tools, IDE extensions — anywhere seeing the product in motion is the sale.
|
|
13
|
+
|
|
14
|
+
Avoid when the product is conceptual or services-led. Workbench needs a UI to show.
|
|
15
|
+
|
|
16
|
+
Reference: Linear.app, Vercel, Raycast, Arc Browser.
|
|
17
|
+
|
|
18
|
+
**Sample opening lines** (imitate the *specificity*, not the wording — the page walks the user through):
|
|
19
|
+
> *"$ streampipe parse access.log --filter status=5xx | jq"* — open on a real command, not a marketing claim
|
|
20
|
+
> *"Read anything that emits lines. Files, pipes, sockets, kubectl logs."* — names the inputs, refuses abstraction
|
|
21
|
+
> *"Open the trace, find the span, fix the regression. No glossary required."* — three concrete verbs, then a refusal
|
|
22
|
+
|
|
23
|
+
```html
|
|
24
|
+
<header class="lite">…</header>
|
|
25
|
+
<section class="screenshot-frame">
|
|
26
|
+
<figure><img src="step-1.png" /><figcaption>Open a project.</figcaption></figure>
|
|
27
|
+
</section>
|
|
28
|
+
<section class="screenshot-frame">…</section>
|
|
29
|
+
<aside class="sticky-cta">Try it free →</aside>
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
---
|
package/template/.claude/skills/hallmark/references/macrostructures/06-conversational-faq.md
CHANGED
|
@@ -1,33 +1,33 @@
|
|
|
1
|
-
## 06 · Conversational FAQ
|
|
2
|
-
|
|
3
|
-
Bold questions, brief answers. The page reads like an honest interview with the product. Often each Q/A is a collapsible accordion.
|
|
4
|
-
|
|
5
|
-
- **Heading:** each section *is* a question — a short, direct phrase ending in `?`.
|
|
6
|
-
- **Body:** answer in 2–4 short paragraphs immediately below the question.
|
|
7
|
-
- **Divider:** thin rule between Q/A pairs, or zero rule and a paper-colour swap.
|
|
8
|
-
- **Button:** typographic link inside answers ("Read the full policy →"); one outlined CTA at the foot.
|
|
9
|
-
- **Image:** sparse — maybe one diagram per long answer; mostly text.
|
|
10
|
-
- **Reveal:** none on load; accordion expand uses 200 ms `--ease-out` on `grid-template-rows: 0fr → 1fr`.
|
|
11
|
-
|
|
12
|
-
Reach for it near pricing, for products that meet skepticism, for educational/regulated industries.
|
|
13
|
-
|
|
14
|
-
Avoid as the *primary* page. FAQ usually pairs with another macrostructure that opens the page.
|
|
15
|
-
|
|
16
|
-
Reference: many SaaS pricing pages, Casper, Substack help pages.
|
|
17
|
-
|
|
18
|
-
**Sample opening lines** (imitate the *specificity* — questions are real questions, answers are short and concrete):
|
|
19
|
-
> *"What is this for? — A single-binary CLI for parsing log streams from stdin."* — names the form factor, names the input
|
|
20
|
-
> *"How is this different from X? — It's about time."* — cron.com — answers obliquely, with a phrase that has weight
|
|
21
|
-
> *"Who built this? — Three of us, in Lisbon, since 2014."* — date + place + count, no marketing
|
|
22
|
-
|
|
23
|
-
```html
|
|
24
|
-
<section class="faq">
|
|
25
|
-
<details>
|
|
26
|
-
<summary><h2>How long does setup take?</h2></summary>
|
|
27
|
-
<div class="answer">…</div>
|
|
28
|
-
</details>
|
|
29
|
-
<details>…</details>
|
|
30
|
-
</section>
|
|
31
|
-
```
|
|
32
|
-
|
|
33
|
-
---
|
|
1
|
+
## 06 · Conversational FAQ
|
|
2
|
+
|
|
3
|
+
Bold questions, brief answers. The page reads like an honest interview with the product. Often each Q/A is a collapsible accordion.
|
|
4
|
+
|
|
5
|
+
- **Heading:** each section *is* a question — a short, direct phrase ending in `?`.
|
|
6
|
+
- **Body:** answer in 2–4 short paragraphs immediately below the question.
|
|
7
|
+
- **Divider:** thin rule between Q/A pairs, or zero rule and a paper-colour swap.
|
|
8
|
+
- **Button:** typographic link inside answers ("Read the full policy →"); one outlined CTA at the foot.
|
|
9
|
+
- **Image:** sparse — maybe one diagram per long answer; mostly text.
|
|
10
|
+
- **Reveal:** none on load; accordion expand uses 200 ms `--ease-out` on `grid-template-rows: 0fr → 1fr`.
|
|
11
|
+
|
|
12
|
+
Reach for it near pricing, for products that meet skepticism, for educational/regulated industries.
|
|
13
|
+
|
|
14
|
+
Avoid as the *primary* page. FAQ usually pairs with another macrostructure that opens the page.
|
|
15
|
+
|
|
16
|
+
Reference: many SaaS pricing pages, Casper, Substack help pages.
|
|
17
|
+
|
|
18
|
+
**Sample opening lines** (imitate the *specificity* — questions are real questions, answers are short and concrete):
|
|
19
|
+
> *"What is this for? — A single-binary CLI for parsing log streams from stdin."* — names the form factor, names the input
|
|
20
|
+
> *"How is this different from X? — It's about time."* — cron.com — answers obliquely, with a phrase that has weight
|
|
21
|
+
> *"Who built this? — Three of us, in Lisbon, since 2014."* — date + place + count, no marketing
|
|
22
|
+
|
|
23
|
+
```html
|
|
24
|
+
<section class="faq">
|
|
25
|
+
<details>
|
|
26
|
+
<summary><h2>How long does setup take?</h2></summary>
|
|
27
|
+
<div class="answer">…</div>
|
|
28
|
+
</details>
|
|
29
|
+
<details>…</details>
|
|
30
|
+
</section>
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
---
|