Redesign an existing website to make it better. Built on top of impeccable.
71
89%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Low
Low-risk findings worth noting
audit.json schema + the report.html craft briefTwo artifacts per audit, both under stardust/audit/<domain-slug>/:
audit.json — the machine-readable truth. Every number, finding,
and classification lives here first.report.html — the designed, human-facing rendering of that truth.
Rendered by $impeccable craft (never hand-templated); every number it
shows traces back to a field in audit.json.<domain-slug> = hostname of the audited URL, lowercased, leading www.
stripped, dots replaced with dashes: https://www.example.com/ →
example-com.
audit.json schema_provenance is the first top-level key, per
../../stardust/reference/artifact-map.md § Provenance shapes (JSON).
{
"_provenance": {
"writtenBy": "stardust:audit",
"writtenAt": "<ISO-8601>",
"againstInput": "<audited URL>",
"readArtifacts": [
"stardust/current/_brand-extraction.json",
"stardust/current/brand-review.html",
"stardust/current/pages/<slug>.json"
],
"synthesizedInputs": [],
"stardustVersion": "<plugin version>"
},
"site": {
"url": "https://example.com",
"domainSlug": "example-com",
"pagesAudited": ["home", "pricing", "about"], // slugs from extract
"extraction": {
"reused": false, // true when a <7-day extraction was reused
"extractedAt": "<ISO-8601>",
"pageCount": 8
}
},
// Non-interactive contract: every assumption the audit made instead of
// asking a question. Rendered verbatim in the report's executive summary.
"assumptions": [
"Primary conversion action assumed to be 'Request a demo' (most prominent repeated CTA)."
],
"scorecard": {
"overall": 62, // integer; formula in scoring.md
"scoredWeight": 100, // < 100 when a dimension was not measured
"dimensions": {
"brand-expression": {
"score": 55, // integer 0–100, or null when not measured
"weight": 10,
"evidence": ["measurements.brandColorShare", "F-004", "T-tokens-unused"],
"notMeasured": [] // reasons; non-empty only when score is null
}
// … one entry per dimension id in scoring.md
}
},
// Every quantitative claim in the audit. A measurement is one of:
// status "measured" — taken with the stated method
// status "estimated" — reasoned estimate; method + basis mandatory
// status "not-measured" — could not be taken; reason mandatory
// A bare number with no method is a schema violation.
"measurements": {
"brandColorShare": {
"value": 0.06, "unit": "share-of-painted-pixels",
"status": "measured", "method": "pixel-sample",
"detail": { "screenshot": "assets/screenshots/home.png", "grid": "every 8th px", "paintedPixels": 41230, "brandPixels": 2478 }
},
"ctaFragmentation": {
"value": 4, "unit": "distinct-labels-per-bucket",
"status": "measured", "method": "pages-json-aggregation",
"detail": { "bucket": "get-started", "labels": { "Get started": 6, "Start now": 2, "Try free": 2, "Begin": 1 } }
},
"typeScale": {
"value": "ad-hoc", "unit": "scale-kind",
"status": "measured", "method": "brand-extraction",
"detail": { "headingSizes": [48, 40, 34, 28, 22, 18], "ratio": null }
},
"radiusSprawl": {
"value": 4, "unit": "distinct-radii",
"status": "measured", "method": "brand-extraction",
"detail": { "occurrences": { "4px": 31, "6px": 12, "8px": 22, "12px": 5 } }
},
"contrast": {
"status": "measured", "method": "wcag-computed",
"detail": { "pairs": [ { "fg": "#6b7280", "bg": "#ffffff", "ratio": 4.39, "role": "body-secondary", "passesAA": false } ] }
},
"altCoverage": {
"value": 0.71, "unit": "share-of-images-with-meaningful-alt",
"status": "measured", "method": "pages-json-aggregation",
"detail": { "images": 62, "emptyAlt": 14, "genericAlt": 4 }
},
"cwv": {
"status": "measured", "method": "playwright-lab", // or "psi-api"
"detail": {
"mobile": { "lcp": { "value": 4.8, "unit": "s", "class": "poor" },
"cls": { "value": 0.02, "unit": "score", "class": "good" },
"tbt": { "value": 340, "unit": "ms", "class": "needs-improvement" } },
"desktop": { "lcp": { "value": 1.9, "unit": "s", "class": "good" },
"cls": { "value": 0.01, "unit": "score", "class": "good" },
"tbt": { "value": 90, "unit": "ms", "class": "good" } },
"note": "Lab TBT is a proxy for INP; field data unavailable (PSI unreachable)."
}
}
// … plus any check-derived measurement Phases 3–4 record
// (sitemapValid, jsonldTypes, llmsTxt, headingQuestionCoverage,
// extractableProseWords, ogCompleteness, redirectChain, …)
},
"findings": [
{
"id": "F-001", // stable within this audit: F-###
"severity": "P1", // P1 | P2 | P3
"dimension": "technical-seo", // a dimension id from scoring.md
"title": "Three pages share the same <title>",
"evidence": {
"type": "check", // measurement | tension | screenshot | check | benchmark
"ref": "check:duplicate-title", // measurement key, T-* id, screenshot path + region, check id, or benchmark URL
"observed": "\"Example — Home\" on /, /pricing, /about"
},
"businessImpact": "Search results cannot differentiate the pages; the pricing page competes with the home page for its own query.",
"fix": "Unique intent-bearing titles per page: lead with the page's value term, append the brand.",
"guides": ["mwg:seo-titles-04"], // modern-web-guidance ids when retrieved; [] otherwise
"ledgerId": "f-3ba9c01d2e" // rollout findings-ledger id, or null when no rollout project exists
}
],
"benchmarks": {
"status": "run", // run | skipped
"reason": null, // when skipped: "refero MCP unreachable"
"references": [
{ "title": "Linear — pricing", "url": "https://linear.app/pricing",
"note": "Single CTA voice held across every section; brand color reserved to the one ask." }
]
},
"upliftDirections": [
{ "id": "A", "pitch": "Tomorrow's version of the site you have today.",
"summary": "Same IA, the P1/P2 findings fixed: one CTA voice, modular scale, AA contrast.",
"addressesFindings": ["F-001", "F-003", "F-005"] },
{ "id": "B", "pitch": "What if we amplified <captured trait>?",
"summary": "The captured photography foregrounded as the compositional spine.",
"addressesFindings": ["F-004"] },
{ "id": "C", "pitch": "What if motion was part of the identity?",
"register": "arrival",
"summary": "Same IA as A; the brand's third dimension rendered kinetic.",
"addressesFindings": [] }
],
// The graceful-degradation record: every optional capability probed in
// Phase 0 and what happened. Rendered in the report's methodology appendix.
"degradations": [
{ "capability": "refero-mcp", "status": "available", "effect": null },
{ "capability": "marketing-skills", "status": "absent", "effect": "SEO/LLM checks run directly" },
{ "capability": "modern-web-guidance", "status": "absent", "effect": "generic remediation text" },
{ "capability": "pagespeed-insights", "status": "unreachable", "effect": "Playwright-only lab metrics" },
{ "capability": "rollout-ledger", "status": "absent", "effect": "no findings.mjs recording" }
]
}Schema rules:
measurements
with a status and method. Findings and the scorecard reference
measurements; they do not carry independent numbers.estimated is loud. An estimated measurement states its basis in
detail and the report renders it with an "estimated" qualifier. A
measurement that could not be taken is not-measured with a reason —
never a silent guess.F-001…); ledgerId links to the
cross-audit rollout ledger when one exists.scoring.md; severity is
exactly P1|P2|P3.report.html craft briefreport.html is a designed artifact. The audit skill does not
hand-template it; it delegates rendering to $impeccable craft via the
Skill tool (the same delegation mechanic as
../../prototype/SKILL.md § Invoking impeccable), passing:
audit.json (the single source of every number),stardust/current/assets/screenshots/,stardust/current/_brand-extraction.json,An editorial consulting report — confident, data-forward, print-quality. The typographic ambition of a well-set annual report or a serious agency teardown, not a SaaS dashboard. Long-form reading rhythm: generous measure, real hierarchy, numbers set large only where they are the point.
The report visualizes the audited site's brand; it does not adopt it. The subject's palette appears as swatches, its type as specimens, its pages as screenshot figures — all clearly framed as exhibits. The report's own chrome stays neutral: near-black ink on paper-white, one restrained accent for severity/classification chips, a disciplined type system of the report's own. A reader must never wonder whether a color belongs to the report or to the subject.
audit.json#assumptions.benchmarks.status === "run") — 2–3
reference cards: title, URL, one line on what best-in-class does
better.audit.json#upliftDirections), each naming the findings it resolves,
closing with the next step: run stardust:uplift <url>.data: URIs, no external JavaScript, no runtime font fetches
(system stack or embedded). The file must open correctly offline.audit.json (measurements, scorecard, or a finding's observed).
No derived statistics invented at render time.not-measured and estimated statuses render
visibly with their reasons. Never fill a gap with a plausible value.<head>, HTML-comment
shape per ../../stardust/reference/artifact-map.md.Generic dashboard slop — gradient stat cards, drop-shadowed KPI tiles, donut charts for three values, icon-font decoration, skeleton-loader aesthetics. Emoji anywhere. Invented data, placeholder lorem, or "representative" numbers. Adopting the subject's brand as the report's chrome.
The bar to beat is <https:///audit/-analysis.html> (a prior published audit) — match its content ambition, and beat it substantially on typography, hierarchy, and evidence presentation (figures captioned and cited, not pasted; numbers set in context, not floated in cards).
audit.json counterpart.audit.json#findings.<head>.src=/href= to http(s) other than
cited links in copy).file:// URL.If validation fails, re-invoke craft with the specific violation; never hand-patch numbers into the rendered file.
.tessl-plugin
skills
audit
reference
deploy
diff
direct
extract
migrate
prepare-migration
prototype
replica
reskin
rollout
stardust
uplift
reference