Skip to content

Commit 60104b4

Browse files
jedudenclaude
andauthored
feat(website): redesign homepage feature grid with native-surface artifacts (#479)
* feat(website): balance wide feature tiles with a right-hand media column The bento wide tiles (the hero and the void-fill stretches) carried their text in a left column and left the right side empty. Give every card a `.feature-media` column that CSS reveals only on the wide tiles: - By default it shows an oversized, faded copy of the feature's icon — zero new assets, scales to every feature. - A feature page that sets `image:` (a path under static/, e.g. `img/features/auto-fix.png`) shows that screenshot instead, framed as a dark terminal window matching the existing `.hero-demo` chrome, so dark-mode terminal captures sit naturally on the light cards. - The reveal is gated above the 880px breakpoint, so phones keep the single-column, text-only stack. The card text is wrapped in `.feature-card-body` so body and media can sit side by side on the wide tiles. No `.mdsmith.yml` change: nothing sets `image:` yet, so every tile renders the faded icon. Adding a real screenshot later needs an optional `image?` leaf on the `feature` kind plus the PNG under website/static/img/features/. Verified against the real compiled CSS on the count-3 and count-4 pillars, desktop and mobile, with both the faded icon and a framed screenshot. * feat(website): gradient icon-box on wide tiles; generalize void-fill to data-tail Addresses the Copilot review on #479: - Void-fill now keys on a derived `data-tail = (count-2) mod 3` (stamped for N>=4) instead of enumerated counts (1,3,4,6,7,9), so the last row fills cleanly at ANY group size — verified for counts 5,6,7,10,13. N=1 and N=3 stay special-cased via data-count. - The default media box is a soft forge-gradient panel carrying the feature's OWN icon, centered and fully visible — not a faint glyph bleeding off the edge. - A screenshot (when `image:` is set) renders in full (height auto, no crop) in a dark terminal frame that hugs the image. - Empty the static .gitkeep so Hugo no longer publishes contributor instructions at /img/features/.gitkeep; the how-to lives in the feature-grid.html template comment. Verified against the real compiled CSS and local lucide icons on all five real pillars (counts 3,4,4,3,4) plus a 5-13 generalization grid, desktop and mobile. * style(website): ease the wide-tile wash into a right-to-left fade The icon box read as a hard panel. Replace it with a forge wash that is strongest at the tile's right edge and eases out to the left toward the text — a multi-stop gradient approximating an ease curve (smooth, not a straight ramp), bled to the tile's top/right/bottom edges so the colour starts at the edge. Screenshot tiles keep their dark terminal frame. * fix(website): reserve screenshot aspect-ratio and unify hero accent on mobile Two review fixes on #479: - .feature-shot reserves a 16:10 box (aspect-ratio) with object-fit: contain, so a lazy-loaded screenshot no longer shifts the layout (CLS) and is never cropped — 16:10 captures fill it exactly, off-ratio ones letterbox on the dark frame. - At <=880px the stacked hero drops its desktop bottom accent and takes the same left accent as the other cards, so hover/focus is uniform. * style(website): light the wide-tile icon with a layered forge glow Replace the flat right->left wash with two layers for depth: a soft radial glow-orb behind the icon for luminosity, over a smoother eased right->left wash into the text. Keeps the single forge accent (brand discipline) while adding the dimensional, lit quality mise gets right. Screenshot tiles unchanged. * feat(website): redesign feature grid with native-surface artifacts Replace the bento feature tiles (faded-icon / gradient media panel) with a refined typographic "pillar" layout — numbered pillar headers with a hairline rule, white cards on canvas, and "Forged whole." with a serif-italic accent. Each pillar's LEAD card now shows the feature in the device frame it actually runs in, which proves "one engine, every surface": - Clean, consistent Markdown -> a terminal (check -> fix -> all passing) - One engine, every surface -> a VS Code editor (squiggle + Quick Fix) - A connected docs tree -> a dependency graph (broken anchor flagged) - Markdown as a single source -> a rendered file with a catalog regen diff - Built for your pipeline -> a CI checks panel with the release gate The grid stays data-driven from docs/features/*.md front matter; a group->artifact map keys each lead to a partial under layouts/partials/feature-artifacts/, with a graceful fallback (plain lead card) for any unmapped group. Diagnostic codes in the artifacts use the real rules: MDS001 (line length), MDS012 (bare URL), MDS006 (trailing spaces), MDS027 (cross-file anchor), MDS019 (catalog). The artifacts are website-only visuals; the README <?include?> is unaffected. Removes the old .feature-* CSS/markup wholesale (the new layout shares no classes with it). Verified by rendering the production app.css against the approved mockup at desktop and mobile, and by mdsmith check (413, 0 failures). Real pillar counts (3-4 cards) match the rendered layout. * chore(website): remove orphaned feature-screenshot placeholder The grid redesign replaced the per-feature image: screenshot slot with authored artifact partials, so website/static/img/features/.gitkeep is no longer referenced by any template or stylesheet. Removing it also drops the non-empty placeholder a reviewer flagged (Hugo publishes static/ verbatim, so it would expose internal contributor notes). * fix(website): address review — grid responsive query, hover, a11y - The count=4 grid used @media(min-width:881px) to force 2 columns, which overrode the base 3-column layout on every desktop and left it dead (3 support cards rendered as an awkward 2+1). Flip to @media(max-width:960px): desktops keep the clean 3-column row, tablets collapse to 2, and <=880px collapses to 1 as before. - .card is an <a>, so the global a:hover underline leaked onto cards; add text-decoration:none and color:inherit to .card:hover. - Restore aria-hidden on the decorative lucide icons (the .card-icon wrapper and the "Learn more" arrow) that the rewrite dropped. * fix(website): address review — heading outline and lead-card selectors - Restore the heading hierarchy: the pillar label is an <h3> again (H2 section -> H3 pillar -> H4 card) instead of a <span>; .pillar-name gets margin: 0 so the flex header stays tight. - Key the full-width lead span to .card--lead instead of positional .card:first-child (base count=3/4, the tablet query, and the mobile collapse), so an unmapped/fallback group's first card stays a normal grid card instead of spanning like a lead. * fix(website): address review — terminal title contrast, drop dead theme class - Override the terminal artifact's title colour to --term-fg-dim; the default steel-500 sat at ~3.5:1 on the near-black #070A0D bar. - Drop the unused card--lead-{dark,light} theme plumbing (no CSS was keyed off it; the artifact partials carry their own dark/light look). The artifact map is now simply group -> partial path. - Clarify the comment: an unmapped group renders its first card as a normal (non-lead) grid card, not a lead. * docs(website): refresh stale comments in the feature grid - Header comment: the lead card is conditional on a mapped artifact (not every group) and carries only `card--lead` (the theme class was dropped); an unmapped group's first card is a plain .card. - app.css: .rule-chip no longer relates to the removed .feature-card. * fix(website): make the feature grid robust for any card count Reviewer flagged that the grid only handled data-count 3/4: a pillar with any other count (the grid is data-driven) would fall back to an implicit single column with the lead card not spanning. Generalize: - .card-grid gets a default grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); the 3/4 column counts remain as tuned overrides. - .card--lead spans grid-column: 1 / -1 as a base rule (any count), replacing the per-count span rules and the redundant tablet repeat. - The mobile breakpoint collapses .card-grid generically (not just 3/4) and resets the lead's grid-column. Verified: the real 3/4 pillars render unchanged; a synthetic count-5 pillar lays out as a full-width lead + a clean support row (no single-column collapse); mdsmith check green. * fix(website): collapse 3/4-card pillars to one column on mobile The previous commit genericized the mobile rule to `.card-grid { 1fr }`, but the base `.card-grid[data-count="3"/"4"]` rules carry higher specificity and sit outside any media query, so they kept 3/4-card pillars multi-column at <=880px. List the data-count variants in the mobile override so they collapse. Verified at 414px: the real 3/4 pillars and synthetic 2/5-card pillars all stack to a single column. --------- Co-authored-by: Claude <noreply@anthropic.com>
1 parent 617df38 commit 60104b4

8 files changed

Lines changed: 1181 additions & 134 deletions

File tree

website/layouts/index.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
<section class="section">
55
<div class="container">
66
<div class="section-eyebrow">Why mdsmith</div>
7-
<h2 class="section-title">Forged whole.</h2>
7+
<h2 class="section-title">Forged <em>whole.</em></h2>
88
<p class="section-lead">Where other linters stop at per-file style, mdsmith forges the whole tree: it checks readability, ties files together with links, includes, and schemas, keeps generated sections in sync, and gates the result in CI — all from one engine that runs the same in your editor, your agent, and your pipeline. Each card opens a fuller write-up; the same copy backs the repository README.</p>
99
{{ partial "feature-grid.html" . }}
1010
</div>
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
{{- /* CI checks artifact — Pillar 5 "Built for your pipeline".
2+
Light GitHub Actions-style checks panel with release gate step.
3+
aria-hidden: purely decorative marketing visual. */ -}}
4+
<div class="card-media card-media--ci" aria-hidden="true">
5+
<div class="artifact-frame artifact-frame--ci">
6+
<div class="artifact-titlebar artifact-titlebar--ci">
7+
<div class="ci-traffic">
8+
<span class="ci-dot ci-dot-r"></span>
9+
<span class="ci-dot ci-dot-y"></span>
10+
<span class="ci-dot ci-dot-g"></span>
11+
</div>
12+
<span class="artifact-title artifact-title--ci">Actions — release-gate</span>
13+
</div>
14+
<div class="artifact-body artifact-body--ci">
15+
<div class="ci-checks-header">
16+
<span class="ci-workflow-name">release-gate</span>
17+
<span class="ci-all-pass">✓ All checks passed</span>
18+
</div>
19+
<div class="ci-check-list">
20+
<div class="ci-check ci-check--pass">
21+
<span class="ci-check-icon ci-icon-pass">
22+
<svg width="14" height="14" viewBox="0 0 24 24" fill="none"><circle cx="12" cy="12" r="11" fill="#2A8E5A"/><path d="M7 12.5l3.5 3.5L17 9" stroke="#fff" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg>
23+
</span>
24+
<span class="ci-check-name">mdsmith check</span>
25+
<span class="ci-check-time">4s</span>
26+
</div>
27+
<div class="ci-check ci-check--pass">
28+
<span class="ci-check-icon ci-icon-pass">
29+
<svg width="14" height="14" viewBox="0 0 24 24" fill="none"><circle cx="12" cy="12" r="11" fill="#2A8E5A"/><path d="M7 12.5l3.5 3.5L17 9" stroke="#fff" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg>
30+
</span>
31+
<span class="ci-check-name">coverage gate</span>
32+
<span class="ci-check-time">12s</span>
33+
</div>
34+
<div class="ci-check ci-check--pass">
35+
<span class="ci-check-icon ci-icon-pass">
36+
<svg width="14" height="14" viewBox="0 0 24 24" fill="none"><circle cx="12" cy="12" r="11" fill="#2A8E5A"/><path d="M7 12.5l3.5 3.5L17 9" stroke="#fff" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg>
37+
</span>
38+
<span class="ci-check-name">release gate</span>
39+
<span class="ci-check-time">3s</span>
40+
</div>
41+
</div>
42+
<div class="ci-gate-step">
43+
<div class="ci-step-header">
44+
<span class="ci-step-arrow"></span>
45+
<span class="ci-step-name">Run: release gate</span>
46+
</div>
47+
<div class="ci-step-body">
48+
<div class="ci-step-cmd"><span class="ci-dollar">$</span> mdsmith list query <span class="ci-arg">'status: "✅"'</span> plan/</div>
49+
<div class="ci-step-output"><span class="ci-pass-badge">PASS</span> <span class="ci-step-dim">16 / 16 plans complete</span></div>
50+
</div>
51+
</div>
52+
</div>
53+
</div>
54+
</div>
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
{{- /* Document / catalog artifact — Pillar 4 "Markdown as a single source of truth".
2+
Light editor showing a catalog directive regenerating its body on fix.
3+
Rule code: MDS019 (catalog directive).
4+
aria-hidden: purely decorative marketing visual. */ -}}
5+
<div class="card-media card-media--doc" aria-hidden="true">
6+
<div class="artifact-frame artifact-frame--doc">
7+
<div class="artifact-titlebar artifact-titlebar--doc">
8+
<div class="doc-traffic">
9+
<span class="doc-dot doc-dot-r"></span>
10+
<span class="doc-dot doc-dot-y"></span>
11+
<span class="doc-dot doc-dot-g"></span>
12+
</div>
13+
<span class="artifact-title artifact-title--doc">CLAUDE.md</span>
14+
</div>
15+
<div class="artifact-body artifact-body--doc">
16+
<div class="doc-file">
17+
<div class="doc-line">
18+
<span class="doc-gutter doc-gutter-dim">12</span>
19+
<span class="doc-code"><span class="doc-h2">## Development Reference</span></span>
20+
</div>
21+
<div class="doc-line">
22+
<span class="doc-gutter doc-gutter-dim">13</span>
23+
<span class="doc-code doc-blank">&nbsp;</span>
24+
</div>
25+
<div class="doc-line">
26+
<span class="doc-gutter doc-gutter-dim">14</span>
27+
<span class="doc-code"><span class="doc-directive">&lt;?catalog glob: "docs/**/*.md" sort: path ?&gt;</span></span>
28+
</div>
29+
<div class="doc-line doc-line--added">
30+
<span class="doc-gutter doc-gutter-add">+</span>
31+
<span class="doc-code"><span class="doc-list-item">- <span class="doc-link">[Architecture](docs/dev/architecture.md)</span></span></span>
32+
</div>
33+
<div class="doc-line doc-line--added">
34+
<span class="doc-gutter doc-gutter-add">+</span>
35+
<span class="doc-code"><span class="doc-list-item">- <span class="doc-link">[Coverage Gate](docs/dev/coverage.md)</span></span></span>
36+
</div>
37+
<div class="doc-line doc-line--added">
38+
<span class="doc-gutter doc-gutter-add">+</span>
39+
<span class="doc-code"><span class="doc-list-item">- <span class="doc-link">[Release Pipeline](docs/dev/release.md)</span></span></span>
40+
</div>
41+
<div class="doc-line">
42+
<span class="doc-gutter doc-gutter-dim">18</span>
43+
<span class="doc-code"><span class="doc-directive">&lt;?/catalog?&gt;</span></span>
44+
</div>
45+
<div class="doc-line">
46+
<span class="doc-gutter doc-gutter-dim">19</span>
47+
<span class="doc-code doc-blank">&nbsp;</span>
48+
</div>
49+
<div class="doc-line">
50+
<span class="doc-gutter doc-gutter-dim">20</span>
51+
<span class="doc-code"><span class="doc-h3">### Build &amp; Test</span></span>
52+
</div>
53+
<div class="doc-annotation">
54+
<span class="doc-annotation-icon"></span> catalog regenerated 3 entries on <code>mdsmith fix</code>
55+
</div>
56+
</div>
57+
</div>
58+
</div>
59+
</div>
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
{{- /* VS Code editor artifact — Pillar 2 "One engine, every surface".
2+
Light editor frame with LSP hover popup for a bare-URL diagnostic.
3+
Rule code corrected: MDS012 (bare URL — wrap in angle brackets).
4+
aria-hidden: purely decorative marketing visual. */ -}}
5+
<div class="card-media card-media--editor" aria-hidden="true">
6+
<div class="artifact-frame artifact-frame--editor">
7+
<div class="artifact-titlebar artifact-titlebar--editor">
8+
<div class="vscode-traffic">
9+
<span class="vscode-dot vscode-dot-r"></span>
10+
<span class="vscode-dot vscode-dot-y"></span>
11+
<span class="vscode-dot vscode-dot-g"></span>
12+
</div>
13+
<span class="artifact-title artifact-title--editor">README.md — mdsmith</span>
14+
</div>
15+
<div class="vscode-body">
16+
<div class="vscode-activity-bar">
17+
<div class="vscode-ab-icon vscode-ab-active" title="Explorer">
18+
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8"><path d="M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z"/></svg>
19+
</div>
20+
<div class="vscode-ab-icon" title="Search">
21+
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8"><circle cx="11" cy="11" r="8"/><line x1="21" y1="21" x2="16.65" y2="16.65"/></svg>
22+
</div>
23+
<div class="vscode-ab-icon" title="Extensions">
24+
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8"><rect x="14" y="2" width="8" height="8" rx="1"/><rect x="2" y="14" width="8" height="8" rx="1"/><path d="M2 2h8v8H2z"/><path d="M14 14h8v8h-8z"/></svg>
25+
</div>
26+
</div>
27+
<div class="vscode-main">
28+
<div class="vscode-tabs">
29+
<div class="vscode-tab vscode-tab--active">README.md</div>
30+
<div class="vscode-tab">install.md</div>
31+
</div>
32+
<div class="vscode-editor-area">
33+
<div class="vscode-gutter">
34+
<span>45</span>
35+
<span>46</span>
36+
<span class="vscode-gutter-active">47</span>
37+
<span>48</span>
38+
<span>49</span>
39+
<span>50</span>
40+
</div>
41+
<div class="vscode-code-area">
42+
<div class="vscode-line">
43+
<span class="vc-text">Install via npm or use any package manager:</span>
44+
</div>
45+
<div class="vscode-line">&nbsp;</div>
46+
<div class="vscode-line vscode-line--error">
47+
<span class="vc-url vc-squiggle-red">https://github.com/jeduden/mdsmith/releases</span>
48+
</div>
49+
<div class="vscode-line">&nbsp;</div>
50+
<div class="vscode-line">
51+
<span class="vc-text">Or install with Homebrew:</span>
52+
</div>
53+
<div class="vscode-line">&nbsp;</div>
54+
</div>
55+
</div>
56+
<div class="vscode-hover-popup">
57+
<div class="vscode-hover-header">
58+
<span class="vscode-lightbulb">💡</span>
59+
<span class="vscode-hover-rule">MDS012</span>
60+
<span class="vscode-hover-msg">bare URL — wrap in angle brackets or add link text</span>
61+
</div>
62+
<div class="vscode-hover-actions">
63+
<span class="vscode-quickfix-label">Quick Fix…</span>
64+
<span class="vscode-quickfix-item">▶ Wrap in angle brackets</span>
65+
<span class="vscode-quickfix-item vscode-quickfix-dim"> Add named link text…</span>
66+
</div>
67+
</div>
68+
<div class="vscode-status-bar">
69+
<span class="vscode-status-problems">⚠ 1 problem</span>
70+
<span class="vscode-status-lang">Markdown</span>
71+
<span class="vscode-status-ext">mdsmith LSP</span>
72+
</div>
73+
</div>
74+
</div>
75+
</div>
76+
</div>
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
{{- /* Dependency graph artifact — Pillar 3 "A connected docs tree".
2+
Light SVG graph with a broken-anchor error callout.
3+
Rule code corrected: MDS027 (cross-file reference integrity /
4+
missing anchor).
5+
aria-hidden: purely decorative marketing visual. */ -}}
6+
<div class="card-media card-media--graph" aria-hidden="true">
7+
<div class="artifact-frame artifact-frame--graph">
8+
<div class="artifact-titlebar artifact-titlebar--graph">
9+
<div class="graph-traffic">
10+
<span class="graph-dot graph-dot-r"></span>
11+
<span class="graph-dot graph-dot-y"></span>
12+
<span class="graph-dot graph-dot-g"></span>
13+
</div>
14+
<span class="artifact-title artifact-title--graph">mdsmith deps — workspace</span>
15+
</div>
16+
<div class="artifact-body artifact-body--graph">
17+
<svg viewBox="0 0 340 230" xmlns="http://www.w3.org/2000/svg" class="graph-svg">
18+
<!-- Edges (normal) -->
19+
<line x1="100" y1="50" x2="240" y2="50" stroke="#D6DAE0" stroke-width="1.5"/>
20+
<line x1="100" y1="65" x2="65" y2="130" stroke="#D6DAE0" stroke-width="1.5"/>
21+
<line x1="100" y1="65" x2="168" y2="130" stroke="#D6DAE0" stroke-width="1.5"/>
22+
<!-- Broken edge: api.md → guide.md (highlighted in error) -->
23+
<line x1="240" y1="65" x2="270" y2="130" stroke="#E5484D" stroke-width="2" stroke-dasharray="5,3"/>
24+
<!-- Edge label marker (!) -->
25+
<circle cx="257" cy="100" r="8" fill="#FEF0F0" stroke="#E5484D" stroke-width="1.2"/>
26+
<text x="257" y="104" text-anchor="middle" font-family="monospace" font-size="9" font-weight="700" fill="#E5484D">!</text>
27+
28+
<!-- Node: index.md (root, center-left) -->
29+
<rect x="50" y="28" width="100" height="30" rx="6" fill="#FFFFFF" stroke="#D6DAE0" stroke-width="1.5"/>
30+
<text x="100" y="48" text-anchor="middle" font-family="monospace" font-size="10.5" fill="#0F1419">index.md</text>
31+
32+
<!-- Node: api.md -->
33+
<rect x="192" y="28" width="88" height="30" rx="6" fill="#FFFFFF" stroke="#D6DAE0" stroke-width="1.5"/>
34+
<text x="236" y="48" text-anchor="middle" font-family="monospace" font-size="10.5" fill="#0F1419">api.md</text>
35+
36+
<!-- Node: proto.md (forge tint — kind anchor) -->
37+
<rect x="14" y="118" width="88" height="30" rx="6" fill="#FDF3EA" stroke="#ECA152" stroke-width="1.5"/>
38+
<text x="58" y="138" text-anchor="middle" font-family="monospace" font-size="10.5" fill="#B84F12">proto.md</text>
39+
40+
<!-- Node: CLAUDE.md -->
41+
<rect x="120" y="118" width="92" height="30" rx="6" fill="#FFFFFF" stroke="#D6DAE0" stroke-width="1.5"/>
42+
<text x="166" y="138" text-anchor="middle" font-family="monospace" font-size="10.5" fill="#0F1419">CLAUDE.md</text>
43+
44+
<!-- Node: guide.md (broken target — error highlight) -->
45+
<rect x="228" y="118" width="88" height="30" rx="6" fill="#FEF0F0" stroke="#E5484D" stroke-width="2"/>
46+
<text x="272" y="138" text-anchor="middle" font-family="monospace" font-size="10.5" fill="#C3372C">guide.md</text>
47+
48+
<!-- Error callout below broken edge -->
49+
<rect x="188" y="163" width="148" height="38" rx="5" fill="#FEF0F0" stroke="#E5484D" stroke-width="1"/>
50+
<text x="197" y="178" font-family="monospace" font-size="9.5" font-weight="600" fill="#C3372C">MDS027 missing anchor</text>
51+
<text x="197" y="192" font-family="monospace" font-size="9" fill="#8A93A0">#setup not found in guide.md</text>
52+
</svg>
53+
</div>
54+
</div>
55+
</div>
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
{{- /* Terminal artifact — Pillar 1 "Clean, consistent Markdown".
2+
Dark macOS-style terminal showing mdsmith check → fix → check.
3+
Rule codes corrected: MDS001 (line too long, default limit 80),
4+
MDS012 (bare URL), MDS006 (trailing spaces).
5+
aria-hidden: purely decorative marketing visual. */ -}}
6+
<div class="card-media card-media--terminal" aria-hidden="true">
7+
<div class="artifact-frame artifact-frame--terminal">
8+
<div class="artifact-titlebar artifact-titlebar--terminal">
9+
<div class="term-dots">
10+
<span class="term-dot term-dot-r"></span>
11+
<span class="term-dot term-dot-y"></span>
12+
<span class="term-dot term-dot-g"></span>
13+
</div>
14+
<span class="artifact-title">mdsmith — docs/</span>
15+
</div>
16+
<div class="artifact-body artifact-body--terminal">
17+
<pre class="term-pre"><span class="t-prompt">$</span> <span class="t-cmd">mdsmith check</span> <span class="t-arg">docs/</span>
18+
19+
<span class="t-path">docs/guides/install.md</span><span class="t-dim">:23:81</span> <span class="t-rule">MDS001</span> <span class="t-err">line too long (84 &gt; 80)</span>
20+
<span class="t-path">docs/guides/install.md</span><span class="t-dim">:47:1</span> <span class="t-rule">MDS012</span> <span class="t-warn">bare URL — wrap in angle brackets</span>
21+
<span class="t-path">docs/features/auto-fix.md</span><span class="t-dim">:31:3</span> <span class="t-rule">MDS006</span> <span class="t-err">trailing spaces</span>
22+
23+
<span class="t-dim"> 3 issues in 2 files</span>
24+
25+
<span class="t-prompt">$</span> <span class="t-cmd">mdsmith fix</span> <span class="t-arg">docs/</span>
26+
27+
<span class="t-ok"></span> <span class="t-dim">fixed</span> <span class="t-path">docs/guides/install.md</span> <span class="t-dim">(2 rewrites, pass 1)</span>
28+
<span class="t-ok"></span> <span class="t-dim">fixed</span> <span class="t-path">docs/features/auto-fix.md</span> <span class="t-dim">(1 rewrite, pass 1)</span>
29+
30+
<span class="t-prompt">$</span> <span class="t-cmd">mdsmith check</span> <span class="t-arg">docs/</span>
31+
32+
<span class="t-ok"> ✓ all checks passing</span> <span class="t-dim">· 11 ms</span></pre>
33+
</div>
34+
</div>
35+
</div>

0 commit comments

Comments
 (0)