designesy
Score a site

designesy.org/specsschema v1.015 top-level fields22 finding fieldsthe JSON Schema

Specs

One JSON format for design-verification findings, which any tool can fill in. Designesy, Google design.md, Lighthouse and jakubkrehel/skills all map into it.

Why one format

One shape to aggregate
Agents reading findings from several verifiers need one schema to combine, compare and act on them.
The union of the tools
Lighthouse, axe, Google design.md and designesy each emit their own JSON; this schema holds all of it.
Nothing lost
The raw field keeps each tool’s native output, for a lossless round trip where the canonical shape drops detail.
Routed by source
The tool field lets a consumer route: designesy for contract conformance, Lighthouse for performance, axe for accessibility.
One verdict for CI
The verdict field gives a gate one answer: pass, fail, block or needs-changes.
One severity vocabulary
Severity is normalised across tools, so an agent can triage everything with one scale.

Emission formats

POST /api/score with a format field

The canonical JSON is the source of truth; the other formats are projections of it that drop some detail.

The four emission formats of /api/score.
FormatContent typeWhat it is
designesyapplication/jsonThe native shape: score, grade, checks and categoryScores. The default.
canonicalapplication/jsonThis schema in full, every field. The source of truth the others project from.
reviewtext/markdownA report in the better-interface style: scope, a findings table, the verdict.
googleapplication/jsonThe DESIGN.md format's lint shape: findings, summary and designSystem.

Top-level fields

15 fields · 6 required · read from the schema itself

Top-level fields of the Design Review Findings schema.
FieldTypeRequiredWhat it holds
schemaVersion"1.0"requiredSchema version. Increment on breaking changes.
generatedAtstringISO 8601 timestamp when the report was generated.
toolobjectrequiredThe verification tool that produced this report.
subjectobjectrequiredThe artifact under review.
configobjectTool configuration (ruleset, thresholds, categories enabled). Opaque.
coveragearrayScope and coverage table (jakubkrehel pattern). One row per domain reviewed.
categoriesarrayCategory scores (designesy categoryScores, Lighthouse categories). Each category gets a 0-100 score.
findingsarrayrequiredIndividual check findings. Each finding is one check result from the verification engine.
consideredButRejectedarrayFindings considered during review but rejected (jakubkrehel pattern). Opaque for most tools.
verificationarrayVerification steps taken (jakubkrehel pattern). Commands run, interactions tested.
summaryobjectrequiredComposite score and counts.
verdictstringrequiredOverall verdict. pass = no FAIL/error findings; fail = at least one FAIL/error; block = any HIGH (jakubkrehel); needs-changes = only WARN remaining; approve = no actionable findings; not-scored = all SKIP and/or MANUAL. One of: pass, fail, block, needs-changes, approve, not-scored.
runtimeErrorobjectFatal error if the tool could not complete. If present, findings may be incomplete.
runWarningsarrayNon-fatal warnings during the run.
rawobjectNative tool output preserved verbatim for lossless round-trip. Consumers that need the original shape can read this.

The finding object

22 fields · 3 required · each tool fills the ones it has

Each entry in findings is one of these. A field a tool does not produce is left out, never set to null.

Fields of a finding object.
FieldTypeRequiredWhat it holds
idstringrequiredCheck identifier (a designesy check id such as v01 or x01, a Lighthouse audit id, or a Google rule name).
itemstringHuman-readable check name (designesy item field).
categorystringCheck category (designesy: cadence, accessibility, motion, tokens, etc.). Maps to Lighthouse categoryId and jakubkrehel domain.
severitystringrequiredNormalized severity. Designesy uses pass/fail/warn/skip. Google uses error/warning/info. jakubkrehel uses high/medium/low. Lighthouse uses informative/notApplicable/manual. One of: pass, fail, warn, skip, error, warning, info, high, medium, low, informative, notApplicable, manual.
severityRawstringThe native severity token verbatim (e.g. "PASS", "warning", "HIGH"). Preserved for lossless round-trip.
statusstringdesignesy-native status. MANUAL = requires browser/CDP (excluded from score, run the audit); SKIP = not applicable (excluded from score). One of: PASS, FAIL, WARN, SKIP, MANUAL.
messagestringrequiredHuman-readable finding detail. Designesy detail, Google message, Lighthouse explanation.
detailstringExtended detail string (designesy detail field). May overlap with message.
remediationstringHow to fix this finding (designesy remediation guidance).
pathstringDotted token path (the DESIGN.md format: "components.button-primary").
locationstringSource location (jakubkrehel: "src/Dialog.tsx:42").
locationsarrayMultiple locations for a systemic finding (jakubkrehel consolidation).
domainstringReview domain (jakubkrehel: accessibility, layout, writing, typography, colors, ui).
beforestringCurrent implementation (jakubkrehel before column).
afterstringActionable replacement (jakubkrehel after column).
whystringViolated principle + user impact (jakubkrehel why column).
scorenumber | nullNumeric score 0-1 (Lighthouse audit score). null if not scored.
numericValuenumberRaw metric value (Lighthouse: ms, bytes, count).
displayValuestringDisplay string for the metric (Lighthouse).
scoreDisplayModestringHow the score is displayed (Lighthouse). One of: binary, numeric, error, manual, notApplicable, informative.
weightnumberCheck weight in the category (designesy per-check weight, Lighthouse auditRef weight).
groupstringDisplay group (Lighthouse categoryGroups).

Severity, normalised

the native token is kept in severityRaw

Each tool's native severity and its canonical form.
ToolNativeCanonical
designesyPASSpass
designesyFAILerror
designesyWARNwarning
designesySKIPskip
Google design.mderrorerror
Google design.mdwarningwarning
Google design.mdinfoinfo
jakubkrehelHIGHhigh
jakubkrehelMEDIUMmedium
jakubkrehelLOWlow
Lighthousescore = 0, binaryfail
Lighthousescore = 1, binarypass
Lighthouseinformativeinformative
LighthousenotApplicablenotApplicable

Usage

POST /api/score · url, format

Send url and, optionally, format. The default is designesy; use canonical for the full schema, review for markdown, google for the design.md shape.

curl -X POST https://www.designesy.org/api/score \
  -H "Content-Type: application/json" \
  -d '{"url":"https://www.designesy.org/","format":"canonical"}'

Next